Menerapkan cluster Kubernetes menggunakan Kubernetes

Sebagai bagian dari kursus Alat dan Praktik DevOps, kami telah menyiapkan terjemahan artikel yang berguna untuk Anda.



Kami juga mengundang Anda ke webinar terbuka tentang
"Prometheus: Mulai Cepat" . Di webinar, peserta, bersama dengan seorang ahli, akan meninjau arsitektur Prometheus dan cara kerjanya dengan metrik; akan mencari cara untuk menghasilkan peringatan dan peristiwa di sistem.






Tunggu ... apa, apa? Ya, saya pernah mendengar reaksi serupa terhadap saran saya untuk menggunakan Kubernetes untuk membangun cluster Kubernetes.





Tetapi untuk otomatisasi infrastruktur cloud, tidak ada yang lebih baik di benak saya selain Kubernetes itu sendiri . Dengan menggunakan satu cluster K8s pusat, kami membuat dan mengelola ratusan cluster K8 lainnya. Dalam 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), . « » , SAP Concur Kubernetes.





  • . AWS, . : IP- , AWS exports, SSM .





  • EKS control plane nodegroup. AWS EKS .





  • . , :-) Istio, logging integration, autoscaler .. .





  • . ( EKS ) . , . ( !)





, . , , , - , , .





Argo. , Argo Events Argo Workflows. Kubernetes CRD YAML, Kubernetes.





: (Imperative Orchestration), (Declarative Automation).





Cluster K8 siap produksi yang dibangun dengan Argo Workflows
K8s, Argo Workflows

Argo Workflows

Argo Workflows — container-native workflow engine Kubernetes. Argo Workflows Kubernetes CRD.





: K8s YAML, , .





, Argo Workflows.





1.

Pra-pengujian dijalankan secara paralel, dengan percobaan ulang jika terjadi kegagalan
,

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



) Argo Workflow :





— 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 control plane nodegroup

Bidang kontrol EKS dan nodegroup dengan dependensi
EKS control plane nodegroup

EKS . eksctl



, CloudFormation Terraform. EKS , CloudFormation (eks-controlplane.yaml



eks-nodegroup.yaml



), Argo Workflow .





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

Menginstal add-on dengan dependensi secara paralel

, kubectl



, helm, kustomize . , metrics-server



helm template



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.

Validasi cluster serentak dengan percobaan ulang kesalahan.
.

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 conformance tests, Popeye — A Kubernetes Cluster Sanitizer Fairwinds’ Polaris. Argo Workflows!





, , AWS EKS , , , metrics-server



. !





, .





WorkflowTemplate

Argo Workflows (WorkflowTemplate), workflow. — . , , . «» workflow, ( ), . Argo Events. 





Argo Events

Argo Events — Kubernetes (workflow automation framework), K8s, Argo Workflow, . , webhook, s3, , , gcp pubsub, sns, sqs ..





API (Argo Events) JSON. , (WorkflowTemplate) API. , Kubernetes, :





  • ? API .





  • EKS-? eks-core (control-plane nodegroup) API.





  • EKS-? addons API.





  • - ? test API.





Argo

Argo Events, Argo Workflows , .





, :













  • — . Argo .









  • S3





  • (WorkflowTemplate)





  • Events Sensor





, , . Argo Events, Argo Workflows . .






«DevOps ».





«Prometheus: ».








All Articles