Kubernetes自体を使用してKubernetesクラスターを構築する

私は頭がおかしいと思いますか?Kubernetesを使用してKubernetesクラスターをデプロイすることを最初に提案したとき、私はすでにこの反応を経験しました。





しかし、クラウドインフラストラクチャを自動化するための効果的なツールは、Kubernetes自体ほどではないと確信しています。1つの中央K8sクラスターを使用して、他の何百もの制御されたK8sクラスターを作成できます。この記事では、これを行う方法を紹介します。





. 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.





:





K8sクラスターは本番環境に対応しています。 Argoワークフローで構築
K8s, . Argo Workflows

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コントロールプレーンとノードグループ
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. , .








All Articles