ืงืึทื ืึทืจื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืื™ืŸ Kubernetes #1: Gitlab CI

ืžื™ืจ ื•ื•ืขืœืŸ ื ื•ืฆืŸ Gitlab CI ืื•ืŸ ืžืึทื ื•ืึทืœ GitOps ืฆื• ื™ื ืกื˜ืจื•ืžืขื ื˜ ืื•ืŸ ื ื•ืฆืŸ ืงืึทื ืึทืจื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืื™ืŸ Kubernetes

ืงืึทื ืึทืจื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืื™ืŸ Kubernetes #1: Gitlab CI

ืืจื˜ื™ืงืœืขืŸ ืคื•ืŸ ื“ืขืจ ืกืขืจื™ืข:

ืžื™ืจ ื•ื•ืขืœืŸ ื“ื•ืจื›ืคื™ืจืŸ ื“ื™ ืงืึทื ืึทืจื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืžืึทื ื™ื•ืึทืœื™ ื“ื•ืจืš GitOps ืื•ืŸ ืงืจื™ื™ื™ื˜ื™ื ื’ / ืžืึธื“ื™ืคื™ืฆื™ืจืŸ ื“ื™ ื”ื•ื™ืคึผื˜ Kubernetes ืจืขืกื•ืจืกืŸ. ื“ืขืจ ืึทืจื˜ื™ืงืœ ืื™ื– ื‘ื“ืขื” ื‘ืคึฟืจื˜ ืคึฟืึทืจ ื”ืงื“ืžื” ืžื™ื˜ ื•ื•ื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืึทืจื‘ืขื˜ ืื™ืŸ Kubernetes Canary, ื–ื™ื ื˜ ืขืก ื–ืขื ืขืŸ ืžืขืจ ืขืคืขืงื˜ื™ื•ื• ืžืขื˜ื”ืึธื“ืก ืคื•ืŸ ืึธื˜ืึทืžื™ื™ืฉืึทืŸ, ื•ื•ืึธืก ืžื™ืจ ื•ื•ืขืœืŸ ื‘ืึทื˜ืจืึทื›ื˜ืŸ ืื™ืŸ ื“ื™ ืคืืœื’ืขื ื“ืข ืึทืจื˜ื™ืงืœืขืŸ.


ืงืึทื ืึทืจื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืื™ืŸ Kubernetes #1: Gitlab CI

https://www.norberteder.com/canary-deployment/

ืงืึทื ืึทืจื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜

ืžื™ื˜ ื“ื™ ืงืึทื ืึทืจื™ ืกื˜ืจืึทื˜ืขื’ื™ืข, ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงื•ื ื’ืขืŸ ื–ืขื ืขืŸ ืขืจืฉื˜ืขืจ ื’ืขื•ื•ืขื ื“ื˜ ืฆื• ื‘ืœื•ื™ื– ืึท ืกืึทื‘ืกืขื˜ ืคื•ืŸ ื™ื•ื–ืขืจื–. ื“ื•ืจืš ืžืึธื ื™ื˜ืึธืจื™ื ื’, ืงืœืึธืฅ ื“ืึทื˜ืŸ, ืžืึทื ื•ืึทืœ ื˜ืขืกื˜ื™ื ื’ ืึธื“ืขืจ ืื ื“ืขืจืข ื‘ืึทืžืขืจืงื•ื ื’ืขืŸ ื˜ืฉืึทื ืึทืœื–, ื“ื™ ืžืขืœื“ื•ื ื’ ืื™ื– ื˜ืขืกื˜ืขื“ ืื™ื™ื“ืขืจ ืขืก ืื™ื– ื‘ืืคืจื™ื™ื˜ ืฆื• ืึทืœืข ื™ื•ื–ืขืจื–.

Kubernetes ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ (ืจืึธื•ืœื™ื ื’ ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงืŸ)

ื“ื™ ืคืขืœื™ืงื™ื™ึทื˜ ืกื˜ืจืึทื˜ืขื’ื™ืข ืคึฟืึทืจ Kubernetes ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืื™ื– ืจืึธื•ืœื™ื ื’-ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงืŸ, ื•ื•ื• ืึท ื–ื™ื›ืขืจ ื ื•ืžืขืจ ืคื•ืŸ ืคึผืึธื“ืก ื–ืขื ืขืŸ ืœืึธื ื˜ืฉื˜ ืžื™ื˜ ื ื™ื™ึทืข ื•ื•ืขืจืกื™ืขืก ืคื•ืŸ ื“ื™ ื‘ื™ืœื“ืขืจ. ืื•ื™ื‘ ื–ื™ื™ ื–ืขื ืขืŸ ื‘ืืฉืืคืŸ ืึธืŸ ืคืจืื‘ืœืขืžืขืŸ, ืคึผืึธื“ืก ืžื™ื˜ ืึทืœื˜ ื•ื•ืขืจืกื™ืขืก ืคื•ืŸ ื‘ื™ืœื“ืขืจ ื–ืขื ืขืŸ ื˜ืขืจืžืึทื ื™ื™ื˜ื™ื“, ืื•ืŸ ื ื™ื™ึท ืคึผืึธื“ืก ื–ืขื ืขืŸ ื‘ืืฉืืคืŸ ืื™ืŸ ืคึผืึทืจืึทืœืขืœ.

GitOps

ืžื™ืจ ื ื•ืฆืŸ GitOps ืื™ืŸ ื“ืขื ื‘ื™ื™ึทืฉืคึผื™ืœ ื•ื•ื™ื™ึทืœ ืžื™ืจ:

  • ื ื™ืฆืŸ Git ื•ื•ื™ ืึท ืื™ื™ืŸ ืžืงื•ืจ ืคื•ืŸ ืืžืช
  • ืžื™ืจ ื ื•ืฆืŸ Git Operations ืคึฟืึทืจ ื‘ื•ื™ืขืŸ ืื•ืŸ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ (ืงื™ื™ืŸ ืงืึทืžืึทื ื“ื– ืื ื“ืขืจืข ื•ื•ื™ Git Tag / Merge ื–ืขื ืขืŸ ื“ืืจืฃ)

ื‘ื™ื™ึทืฉืคึผื™ืœ

ืœืึธืžื™ืจ ื ืขืžืขืŸ ืึท ื’ื•ื˜ืข ืคื™ืจ - ืฆื• ื”ืึธื‘ืŸ ืื™ื™ืŸ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ ืคึฟืึทืจ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืงืึธื“ ืื•ืŸ ืื™ื™ื ืขืจ ืคึฟืึทืจ ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ.

ืึทืคึผืคึผืœื™ืงืึทื˜ื™ืึธืŸ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™

ื“ืึธืก ืื™ื– ืึท ื–ื™ื™ืขืจ ืคึผืฉื•ื˜ Python + Flask API ื•ื•ืึธืก ืงืขืจื˜ ืึท ืขื ื˜ืคืขืจ ื•ื•ื™ JSON. ืžื™ืจ ื•ื•ืขืœืŸ ื‘ื•ื™ืขืŸ ื“ืขื ืคึผืขืงืœ ื“ื•ืจืš GitlabCI ืื•ืŸ ืฉื˜ื•ืคึผืŸ ื“ื™ ืจืขื–ื•ืœื˜ืึทื˜ ืฆื• ื“ื™ Gitlab ืจืขื’ื™ืกื˜ืจื™. ืื™ืŸ ื“ื™ ืจืขื’ื™ืกื˜ืจื™ ืžื™ืจ ื”ืึธื‘ืŸ ืฆื•ื•ื™ื™ ืคืึทืจืฉื™ื“ืขื ืข ืžืขืœื“ื•ื ื’ ื•ื•ืขืจืกื™ืขืก:

  • wuestkamp/k8s-deployment-example-app:v1
  • wuestkamp/k8s-deployment-example-app:v2

ื“ืขืจ ื‘ืœื•ื™ื– ื—ื™ืœื•ืง ืฆื•ื•ื™ืฉืŸ ื–ื™ื™ ืื™ื– ื“ื™ ืขื ื“ืขืจื•ื ื’ ืื™ืŸ ื“ื™ ืื•ืžื’ืขืงืขืจื˜ JSON ื˜ืขืงืข. ืžื™ืจ ื ื•ืฆืŸ ื“ืขื ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืฆื• ื•ื•ื™ื–ืฉื•ื•ืึทืœื™ื™ื– ื•ื•ื™ ืœื™ื™ื›ื˜ ื•ื•ื™ ืžืขื’ืœืขืš ืžื™ื˜ ื•ื•ืึธืก ื•ื•ืขืจืกื™ืข ืžื™ืจ ื™ื‘ืขืจื’ืขื‘ืŸ.

ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™

ืื™ืŸ ื“ืขื ื‘ืจื•ืงื•ื•ืข ืžื™ืจ ื•ื•ืขืœืŸ ืฆืขื•ื•ื™ืงืœืขืŸ ื“ื•ืจืš GitlabCI ืฆื• Kubernetes, .gitlab-ci.yml ื–ืขื˜ ืื•ื™ืก ืื–ื•ื™:

image: traherom/kustomize-docker

before_script:
   - printenv
   - kubectl version

stages:
 - deploy

deploy test:
   stage: deploy
   before_script:
     - echo $KUBECONFIG
   script:
     - kubectl get all
     - kubectl apply -f i/k8s

   only:
     - master

ืฆื• ืœื•ื™ืคืŸ ืขืก ื–ื™ืš ืื™ืจ ื“ืึทืจืคึฟืŸ ืึท ืงื ื•ื™ืœ, ืื™ืจ ืงืขื ืขืŸ ื ื•ืฆืŸ Gcloud:

gcloud container clusters create canary --num-nodes 3 --zone europe-west3-b

gcloud compute firewall-rules create incoming-80 --allow tcp:80

ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื’ืึธืคึผืœ https://gitlab.com/wuestkamp/k8s-deployment-example-canary-infrastructure ืื•ืŸ ืฉืึทืคึฟืŸ ืึท ื‘ื™ื™ึทื˜ืขื•ื•ื“ื™ืง KUBECONFIG ืื™ืŸ GitlabCI, ื•ื•ืึธืก ื•ื•ืขื˜ ืึทื ื˜ื”ืึทืœื˜ืŸ ื“ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืคึฟืึทืจ ืึทืงืกืขืก kubectl ืฆื• ื“ื™ื™ืŸ ืงื ื•ื™ืœ.

ืื™ืจ ืงืขื ื˜ ืœื™ื™ืขื ืขืŸ ื•ื•ืขื’ืŸ ื•ื•ื™ ืฆื• ื‘ืึทืงื•ืžืขืŸ ืงืจืึทื“ืขื ื˜ืฉืึทืœื– ืคึฟืึทืจ ืึท ืงื ื•ื™ืœ (Gcloud) ื“ืึธ.

ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ ื™ืžืœ

ืื™ืŸ ื“ื™ ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ ืžื™ืจ ื”ืึธื‘ืŸ ืกืขืจื•ื•ื™ืก:

apiVersion: v1
kind: Service
metadata:
 labels:
   id: app
 name: app
spec:
 ports:
 - port: 80
   protocol: TCP
   targetPort: 5000
 selector:
   id: app
 type: LoadBalancer

ืื•ืŸ ืคืึทืจืฉืคึผืจื™ื™ื˜ื•ื ื’ ืื™ืŸ deploy.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
 name: app
spec:
 replicas: 10
 selector:
   matchLabels:
     id: app
     type: main
 template:
   metadata:
     labels:
       id: app
       type: main
   spec:
     containers:
     - image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v1
       name: app
       resources:
         limits:
           cpu: 100m
           memory: 100Mi

ืื•ืŸ ืืŸ ืื ื“ืขืจ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืื™ืŸ deploy-canary.yaml:

kind: Deployment
metadata:
 name: app-canary
spec:
 replicas: 0
 selector:
   matchLabels:
     id: app
     type: canary
 template:
   metadata:
     labels:
       id: app
       type: canary
   spec:
     containers:
     - image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v2
       name: app
       resources:
         limits:
           cpu: 100m
           memory: 100Mi

ื‘ืึทืžืขืจืงื•ื ื’ ืึทื– ืึทืคึผ-ื“ื™ืคึผืœื™ื™ึท ื”ืื˜ ื ื™ืฉื˜ ื”ืึธื‘ืŸ ืงื™ื™ืŸ ืจืขืคึผืœืึทืงืึทื– ื“ื™ืคื™ื™ื ื“ ื ืึธืš.

ืคึผืขืจืคืึธืจืžื™ื ื’ ืขืจืฉื˜ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜

ืฆื• ืึธื ื”ื™ื™ื‘ืŸ ื“ื™ ืขืจืฉื˜ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜, ืื™ืจ ืงืขื ืขืŸ ืึธื ื”ื™ื™ื‘ืŸ ื“ื™ GitlabCI ืจืขืจื  - ืœื™ื ื™ืข ืžืึทื ื™ื•ืึทืœื™ ืื•ื™ืฃ ื“ื™ ื‘ืขืœ ืฆื•ื•ื™ื™ึทื’. ื ืืš ื“ืขื kubectl ื–ืึธืœ ืึทืจื•ื™ืกืคื™ืจืŸ ื“ื™ ืคืืœื’ืขื ื“ืข:

ืงืึทื ืึทืจื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืื™ืŸ Kubernetes #1: Gitlab CI

ืžื™ืจ ื–ืขื”ืŸ app ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืžื™ื˜ 10 ืจืขืคึผืœืึทืงืึทื– ืื•ืŸ ืึทืคึผ-ืงืึทื ืึทืจื™ ืžื™ื˜ 0. ืขืก ืื™ื– ืื•ื™ืš ืึท ืœืึธืึทื“ื‘ืึทืœืึทื ืกืขืจ ืคึฟื•ืŸ ื•ื•ืึธืก ืžื™ืจ ืงืขื ืขืŸ ืึทืงืกืขืก ื“ื•ืจืš curl ื“ื•ืจืš ืคื•ื ื“ืจื•ื™ืกื ื“ื™ืง IP:

while true; do curl -s 35.198.149.232 | grep label; sleep 0.1; done

ืงืึทื ืึทืจื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืื™ืŸ Kubernetes #1: Gitlab CI

ืžื™ืจ ื–ืขืŸ ืึทื– ืื•ื ื“ื–ืขืจ ืคึผืจืึธื‘ืข ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืงืขืจื˜ ื‘ืœื•ื™ื– "v1".

ืขืงืกืึทืงื™ื•ื˜ื™ื ื’ ืงืึทื ืึทืจื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜

ืฉืจื™ื˜ 1: ืžืขืœื“ื•ื ื’ ืึท ื ื™ื™ึทืข ื•ื•ืขืจืกื™ืข ืคึฟืึทืจ ืขื˜ืœืขื›ืข ื™ื•ื–ืขืจื–

ืžื™ืจ ืฉื˜ืขืœืŸ ื“ื™ ื ื•ืžืขืจ ืคื•ืŸ ืจืขืคึผืœืึทืงืึทื– ืฆื• 1 ืื™ืŸ ื“ื™ Deploy-canary.yaml ื˜ืขืงืข ืื•ืŸ ื“ื™ ื ื™ื™ึทืข ื•ื•ืขืจืกื™ืข ื‘ื™ืœื“:

kind: Deployment
metadata:
 name: app-canary
spec:
 replicas: 1
 selector:
   matchLabels:
     id: app
     type: canary
 template:
   metadata:
     labels:
       id: app
       type: canary
   spec:
     containers:
     - image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v2
       name: app
       resources:
         limits:
           cpu: 100m
           memory: 100Mi

ืื™ืŸ ื˜ืขืงืข deploy.yaml ืžื™ืจ ืคืืจืขื ื“ืขืจื˜ ื“ื™ ื ื•ืžืขืจ ืคื•ืŸ ืจืขืคึผืœืึทืงืึทื– ืฆื• 9:

kind: Deployment
metadata:
 name: app
spec:
 replicas: 9
 selector:
   matchLabels:
     id: app
...

ืžื™ืจ ืฉื˜ื•ืคึผืŸ ื“ื™ ืขื ื“ืขืจื•ื ื’ืขืŸ ืฆื• ื“ื™ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ ืคึฟื•ืŸ ื•ื•ืึธืก ื“ื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ื•ื•ืขื˜ ืึธื ื”ื™ื™ื‘ืŸ (ื“ื•ืจืš GitlabCI) ืื•ืŸ ื–ืขืŸ ื•ื•ื™ ืึท ืจืขื–ื•ืœื˜ืึทื˜:

ืงืึทื ืึทืจื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืื™ืŸ Kubernetes #1: Gitlab CI

ืื•ื ื“ื–ืขืจ ืกืขืจื•ื•ื™ืก ื•ื•ืขื˜ ืคื•ื ื˜ ืฆื• ื‘ื™ื™ื“ืข ื“ื™ืคึผืœื•ื™ืžืึทื ืฅ, ื•ื•ื™ื™ึทืœ ื‘ื™ื™ื“ืข ื”ืึธื‘ืŸ ื“ื™ ืึทืคึผ ืกืขืœืขืงื˜ืึธืจ. ืจืขื›ื˜ ืฆื• ื“ื™ ืคืขืœื™ืงื™ื™ึทื˜ ืจืึทื ื“ืึทืžื™ื–ื™ื™ืฉืึทืŸ ืคื•ืŸ Kubernetes, ืžื™ืจ ื–ืึธืœ ื–ืขืŸ ืคืึทืจืฉื™ื“ืขื ืข ืจืขืกืคึผืึธื ืกืขืก ืคึฟืึทืจ ~ 10% ืคื•ืŸ ืจื™ืงื•ื•ืขืก:

ืงืึทื ืึทืจื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืื™ืŸ Kubernetes #1: Gitlab CI

ื“ื™ ืงืจืึทื ื˜ ืฉื˜ืึทื˜ ืคื•ืŸ ืื•ื ื“ื–ืขืจ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ (GitOps, ื’ืขื ื•ืžืขืŸ ืคึฟื•ืŸ Git ื•ื•ื™ ืึท ืื™ื™ืŸ ืžืงื•ืจ ืคื•ืŸ ืืžืช) ืื™ื– ื“ื™ ื‘ื™ื™ึทื–ื™ื™ึทืŸ ืคื•ืŸ ืฆื•ื•ื™ื™ ื“ื™ืคึผืœื•ื™ืžืึทื ืฅ ืžื™ื˜ ืึทืงื˜ื™ื•ื• ืจืขืคึผืœืึทืงืึทื–, ืื™ื™ื ืขืจ ืคึฟืึทืจ ื™ืขื“ืขืจ ื•ื•ืขืจืกื™ืข.

~ 10% ืคื•ืŸ ื™ื•ื–ืขืจื– ื•ื•ืขืจืŸ ื‘ืึทืงืึทื ื˜ ืžื™ื˜ ืึท ื ื™ื™ึทืข ื•ื•ืขืจืกื™ืข ืื•ืŸ ืึทื ื™ื ื˜ืขื ืฉืึทื ืึทืœื™ ืคึผืจื•ื‘ื™ืจืŸ ืขืก. ืื™ืฆื˜ ืื™ื– ื“ื™ ืฆื™ื™ื˜ ืฆื• ืงืึธื ื˜ืจืึธืœื™ืจืŸ ืคึฟืึทืจ ืขืจืจืึธืจืก ืื™ืŸ ื“ื™ ืœืึธื’ืก ืื•ืŸ ืžืึธื ื™ื˜ืึธืจื™ื ื’ ื“ืึทื˜ืŸ ืฆื• ื’ืขืคึฟื™ื ืขืŸ ืคึผืจืึธื‘ืœืขืžืก.

ืฉืจื™ื˜ 2: ืžืขืœื“ื•ื ื’ ื“ื™ ื ื™ื™ึทืข ื•ื•ืขืจืกื™ืข ืฆื• ืึทืœืข ื™ื•ื–ืขืจื–

ืžื™ืจ ื‘ืึทืฉืœืึธืกืŸ ืึทื– ืึทืœืฅ ืื™ื– ื’ืขื•ื•ืขืŸ ื’ื•ื˜ ืื•ืŸ ืื™ืฆื˜ ืžื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืจืึธื•ืœื“ ื“ื™ ื ื™ื™ึทืข ื•ื•ืขืจืกื™ืข ืฆื• ืึทืœืข ื™ื•ื–ืขืจื–. ืฆื• ื˜ืึธืŸ ื“ืึธืก, ืžื™ืจ ื ืึธืจ ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงืŸ deploy.yaml ื™ื ืกื˜ืึธืœื™ื ื’ ืึท ื ื™ื™ึท ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹ื“ื™ ื‘ื™ืœื“ ืื•ืŸ ื“ื™ ื ื•ืžืขืจ ืคื•ืŸ ืจืขืคึผืœืึทืงืึทื– ื’ืœื™ื™ึทืš ืฆื• 10. ืื™ืŸ deploy-canary.yaml ืžื™ืจ ืฉื˜ืขืœืŸ ื“ื™ ื ื•ืžืขืจ ืคื•ืŸ ืจืขืคึผืœืึทืงืึทื– ืฆื•ืจื™ืง ืฆื• 0. ื ืึธืš ื“ื™ืคึผืœื•ื™ืžืึทื ื˜, ื“ืขืจ ืจืขื–ื•ืœื˜ืึทื˜ ื•ื•ืขื˜ ื–ื™ื™ืŸ ื•ื•ื™ ื’ื™ื™ื˜:

ืงืึทื ืึทืจื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืื™ืŸ Kubernetes #1: Gitlab CI

ืกื•ืžืžื™ื ื’ ืึทืจื•ื™ืฃ

ืคึฟืึทืจ ืžื™ืจ, ืคืœื™ืกื ื“ื™ืง ื“ื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืžืึทื ื™ื•ืึทืœื™ ื“ืขื ื•ื•ืขื’ ื”ืขืœืคึผืก ืฆื• ืคึฟืึทืจืฉื˜ื™ื™ืŸ ื•ื•ื™ ืœื™ื™ื›ื˜ ืขืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ืงืึทื ืคื™ื’ื™ืขืจื“ ืžื™ื˜ ืง8ืก. ื–ื™ื ื˜ Kubernetes ืึทืœืึทื•ื– ืื™ืจ ืฆื• ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงืŸ ืึทืœืฅ ื“ื•ืจืš ืึทืŸ ืึทืคึผื™, ื“ื™ ืกื˜ืขืคึผืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ืึธื˜ืึทืžื™ื™ื˜ื™ื“ ื“ื•ืจืš ืกืงืจื™ืคึผืก.

ืืŸ ืื ื“ืขืจ ื–ืึทืš ื•ื•ืึธืก ื“ืึทืจืฃ ื–ื™ื™ืŸ ื™ืžืคึผืœืึทืžืขื ืึทื“ ืื™ื– ืึท ื˜ืขืกื˜ืขืจ ืคึผืึธื–ื™ืฆื™ืข ืคื•ื ื˜ (LoadBalancer ืึธื“ืขืจ ื“ื•ืจืš Ingress) ื“ื•ืจืš ื•ื•ืึธืก ื‘ืœื•ื™ื– ื“ื™ ื ื™ื™ึทืข ื•ื•ืขืจืกื™ืข ืงืขื ืขืŸ ื–ื™ื™ืŸ ืึทืงืกืขืกื˜. ืขืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขื•ื•ื™ื™ื ื˜ ืคึฟืึทืจ ืžืึทื ื•ืึทืœ ื‘ืจืึทื•ื–ื™ื ื’.

ืื™ืŸ ืฆื•ืงื•ื ืคึฟื˜ ืึทืจื˜ื™ืงืœืขืŸ, ืžื™ืจ ื•ื•ืขืœืŸ ืงืึธื ื˜ืจืึธืœื™ืจืŸ ืื ื“ืขืจืข ืึธื˜ืึทืžื™ื™ื˜ื™ื“ ืกืึทืœื•ืฉืึทื ื– ื•ื•ืึธืก ื™ื ืกื˜ืจื•ืžืขื ื˜ ืจื•ื‘ึฟ ืคื•ืŸ ื•ื•ืึธืก ืžื™ืจ ื”ืึธื‘ืŸ ื’ืขื˜ืืŸ.

ืœื™ื™ืขื ืขืŸ ืื•ื™ืš ืื ื“ืขืจืข ืึทืจื˜ื™ืงืœืขืŸ ืื•ื™ืฃ ืื•ื ื“ื–ืขืจ ื‘ืœืึธื’:

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’