apiVersion : kro.run/v1alpha1
kind : ResourceGraphDefinition
metadata :
name : networkingstack.kro.run
spec :
schema :
apiVersion : v1alpha1
kind : NetworkingStack
spec :
name : string
status :
networkingInfo :
vpcID : $ { vpc.status.vpcID }
subnetAZA : $ { subnetAZA.status.subnetID }
subnetAZB : $ { subnetAZB.status.subnetID }
subnetAZC : $ { subnetAZC.status.subnetID }
securityGroup : $ { securityGroup.status.id }
resources :
- id : vpc
template :
apiVersion : ec2.services.k8s.aws/v1alpha1
kind : VPC
metadata :
name : vpc - $ { schema.spec.name }
spec :
cidrBlocks :
- 192.168.0.0/16
enableDNSHostnames : false
enableDNSSupport : true
- id : subnetAZA
template :
apiVersion : ec2.services.k8s.aws/v1alpha1
kind : Subnet
metadata :
name : subnet - a - $ { schema.spec.name }
spec :
availabilityZone : us - west - 2a
cidrBlock : 192.168.0.0/18
vpcID : $ { vpc.status.vpcID }
- id : subnetAZB
template :
apiVersion : ec2.services.k8s.aws/v1alpha1
kind : Subnet
metadata :
name : subnet - b - $ { schema.spec.name }
spec :
availabilityZone : us - west - 2b
cidrBlock : 192.168.64.0/18
vpcID : $ { vpc.status.vpcID }
- id : subnetAZC
template :
apiVersion : ec2.services.k8s.aws/v1alpha1
kind : Subnet
metadata :
name : subnet - c - $ { schema.spec.name }
spec :
availabilityZone : us - west - 2c
cidrBlock : 192.168.128.0/18
vpcID : $ { vpc.status.vpcID }
- id : securityGroup
template :
apiVersion : ec2.services.k8s.aws/v1alpha1
kind : SecurityGroup
metadata :
name : cluster - security - group - $ { schema.spec.name }
spec :
vpcID : $ { vpc.status.vpcID }
name : my - sg - $ { schema.spec.name }
description : Security group for networking stack # Aplicar o RGD
kubectl apply -f networking-stack.yaml
# Criar uma instância
cat << EOF | kubectl apply -f -
apiVersion: v1alpha1
kind: NetworkingStack
metadata:
name: my-app
spec:
name: my-app
EOF
# Verificar status
kubectl get networkingstack my-app -o yaml
ResourceGraphDefinition : Define uma nova API customizada
Schema interpolation : ${vpc.status.vpcID} referência outputs de outros recursos
Dependency management : kro gerencia automaticamente a ordem de criação
Status propagation : Informações dos recursos AWS são expostas no status