
Pensez-vous que je suis fou? J'ai déjà vécu cette réaction lorsque j'ai suggéré pour la premiÚre fois de déployer des clusters Kubernetes à l'aide de Kubernetes.
Mais je suis convaincu qu'il n'y a pas d'outil plus efficace pour automatiser l'infrastructure cloud que Kubernetes lui-mĂȘme. Avec un cluster K8s central, nous pouvons crĂ©er des centaines d'autres clusters K8s contrĂŽlĂ©s. Dans cet article, je vais vous montrer comment faire cela.
. SAP Concur AWS EKS, Google GKE, Azure AKS Kubernetes .
Kubernetes . , AWS EKS :
$ eksctl create cluster
, Kubernetes, â «production-ready» «production-ready» -, SAP Concur Kubernetes, .
. AWS, . , IP- , AWS, SSM .
EKS . AWS EKS .
. . :) , Istio, Logging Integration, Autoscaler .
. ( EKS ) . , . (, !)
( ). , , , - , , .
Argo, Argo Events Argo Workflows. Kubernetes CRD YAML, Kubernetes.
:

Argo Workflows
Argo Workflows â , Kubernetes. Argo Workflows Kubernetes CRD.
. K8s YAML, , .
, Argo Workflows.
1.

BATS. BATS :
#!/usr/bin/env bats
@test âMore than 100 available IP addresses in subnet MySubnetâ {
AvailableIpAddressCount=$(aws ec2 describe-subnets --subnet-ids MySubnet | jq -r â.Subnets[0].AvailableIpAddressCountâ)
[ â${AvailableIpAddressCount}â -gt 100 ]
}
BATS (avail-ip-addresses.bats
) BATS Argo Workflows :
â name: preflight-tests templateRef: name: argo-templates template: generic-template arguments: parameters: â name: command value: â{{item}}â withItems: â bats /tests/preflight/accnt-name-export.batsâ â bats /tests/preflight/avail-ip-addresses.batsâ â bats /tests/preflight/dhcp.batsâ â bats /tests/preflight/subnet-export.batsâ
2. EKS

EKS . , eksctl
, CloudFormation Terraform. EKS Argo Workflows CloudFormation (eks-controlplane.yaml
eks-nodegroup.yaml
) .
â name: eks-controlplane dependencies: [âpreflight-testsâ] templateRef: name: argo-templates template: generic-template arguments: parameters: â name: command value: | aws cloudformation deploy \ --stack-name {{workflow.parameters.CLUSTER_NAME}} \ --template-file /eks-core/eks-controlplane.yaml \ --capabilities CAPABILITY_IAM - name: eks-nodegroup dependencies: [âeks-controlplaneâ] templateRef: name: argo-templates template: generic-template arguments: parameters: â name: command value: | aws cloudformation deploy \ --stack-name {{workflow.parameters.CLUSTER_NAME}}-nodegroup \ --template-file /eks-core/eks-nodegroup.yaml \ --capabilities CAPABILITY_IAM
3.

kubectl
, helm
, kustomize
. , metrics-server
helm
kubectl
, metrics-server
, Argo Workflows .
â name: metrics-server
dependencies: [âeks-nodegroupâ]
templateRef:
name: argo-templates
template: generic-template
when: ââ{{workflow.parameters.METRICS-SERVER}}â != noneâ
arguments:
parameters:
â name: command
value: |
helm template /addons/{{workflow.parameters.METRICS-SERVER}}/ \
--name âmetrics-serverâ \
--namespace âkube-systemâ \
--set global.registry={{workflow.parameters.CONTAINER_HUB}} | \
kubectl apply -f -
4.

BATS- DETIK, K8s.
#!/usr/bin/env bats
load âlib/utilsâ
load âlib/detikâ
DETIK_CLIENT_NAME=âkubectlâ
DETIK_CLIENT_NAMESPACE="kube-system"
@test âverify the deployment metrics-serverâ {
run verify âthere are 2 pods named âmetrics-serverââ
[ â$statusâ -eq 0 ]
run verify âthere is 1 service named âmetrics-serverââ
[ â$statusâ -eq 0 ]
run try âat most 5 times every 30s to find 2 pods named âmetrics-serverâ with âstatusâ being ârunningââ
[ â$statusâ -eq 0 ]
run try âat most 5 times every 30s to get pods named âmetrics-serverâ and verify that âstatusâ is ârunningââ
[ â$statusâ -eq 0 ]
}
BATS DETIK (metrics-server.bats
), metrics-server
, Argo Workflows :
â name: test-metrics-server
dependencies: [âmetrics-serverâ]
templateRef:
name: worker-containers
template: addons-tests-template
when: ââ{{workflow.parameters.METRICS-SERVER}}â != noneâ
arguments:
parameters:
â name: command
value: |
bats /addons/test/metrics-server.bats
, . Sonobuoy, Popeye Fairwinds Polaris? Argo Workflows!
, AWS EKS metrics-server
. , . !
â .
Argo Workflows (WorkflowTemplates). . , , . ( ) . Argo Events.
Argo Events
Argo Events â - Kubernetes, K8s, Argo Workflows, , -, S3, , , Google Cloud Pub/Sub, SNS, SQS .
API- (Argo Events) JSON. , (WorkflowTemplates) API. Kubernetes ( ) :
, ? API .
«» EKS? API eks-core (control-plane nodegroup).
EKS? API .
? API .
Argo
Argo Events Argo Workflows « », .
:
-
-
(. : , Argo )
-
S3
. , Argo Events Workflows. â . .
« Kubernetes». - «, k8s». 8. , .