Apakah Anda pikir saya keluar dari pikiran saya? Saya sudah mengalami reaksi ini ketika saya pertama kali menyarankan untuk menggunakan cluster Kubernetes menggunakan Kubernetes.
Tetapi saya yakin bahwa tidak ada alat yang lebih efektif untuk mengotomatisasi infrastruktur cloud selain Kubernetes itu sendiri. Dengan satu kluster K8 pusat, kita dapat membuat ratusan kluster K8 terkontrol lainnya. Pada artikel ini, saya akan menunjukkan cara melakukannya.
. 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. , .