แƒ™แƒแƒœแƒแƒ แƒ˜แƒก แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒ Kubernetes #1-แƒจแƒ˜: Gitlab CI

แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ— Gitlab CI-แƒก แƒ“แƒ แƒกแƒแƒฎแƒ”แƒšแƒ›แƒซแƒฆแƒ•แƒแƒœแƒ”แƒšแƒแƒก GitOps-แƒก, แƒ แƒแƒ—แƒ แƒ’แƒแƒœแƒ•แƒแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒแƒ— แƒ“แƒ แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒแƒ— Canary-แƒ˜แƒก แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒ Kubernetes-แƒจแƒ˜

แƒ™แƒแƒœแƒแƒ แƒ˜แƒก แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒ Kubernetes #1-แƒจแƒ˜: Gitlab CI

แƒกแƒขแƒแƒขแƒ˜แƒ”แƒ‘แƒ˜ แƒแƒ› แƒกแƒ”แƒ แƒ˜แƒ˜แƒ“แƒแƒœ:

แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ•แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ— Canary แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒแƒก แƒฎแƒ”แƒšแƒ˜แƒ— GitOps-แƒ˜แƒก แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ˜แƒ— แƒ“แƒ แƒจแƒ”แƒ•แƒฅแƒ›แƒœแƒ˜แƒ—/แƒจแƒ”แƒชแƒ•แƒšแƒ˜แƒ— Kubernetes-แƒ˜แƒก แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“ แƒ แƒ”แƒกแƒฃแƒ แƒกแƒ”แƒ‘แƒก. แƒ”แƒก แƒกแƒขแƒแƒขแƒ˜แƒ แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒแƒ“ แƒ’แƒแƒชแƒœแƒแƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒกแƒแƒ แƒ’แƒแƒœแƒ™แƒฃแƒ—แƒ•แƒœแƒ˜แƒšแƒ˜ แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒ Kubernetes Canary-แƒจแƒ˜, แƒ แƒแƒ“แƒ’แƒแƒœ แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒฃแƒคแƒ แƒ แƒ”แƒคแƒ”แƒฅแƒขแƒฃแƒ แƒ˜ แƒ›แƒ”แƒ—แƒแƒ“แƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒกแƒแƒช แƒ’แƒแƒœแƒ•แƒ˜แƒฎแƒ˜แƒšแƒแƒ•แƒ— แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒกแƒขแƒแƒขแƒ˜แƒ”แƒ‘แƒจแƒ˜.


แƒ™แƒแƒœแƒแƒ แƒ˜แƒก แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒ Kubernetes #1-แƒจแƒ˜: Gitlab CI

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

แƒ™แƒแƒœแƒแƒ แƒ˜แƒก แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒ

แƒ™แƒแƒœแƒแƒ แƒ˜แƒก แƒกแƒขแƒ แƒแƒขแƒ”แƒ’แƒ˜แƒ˜แƒ—, แƒ’แƒแƒœแƒแƒฎแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒแƒ“ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ—แƒ แƒฅแƒ•แƒ”แƒฏแƒ’แƒฃแƒคแƒ–แƒ”. แƒ›แƒแƒœแƒ˜แƒขแƒแƒ แƒ˜แƒœแƒ’แƒ˜แƒก, แƒŸแƒฃแƒ แƒœแƒแƒšแƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก, แƒ›แƒ”แƒฅแƒแƒœแƒ˜แƒ™แƒฃแƒ แƒ˜ แƒขแƒ”แƒกแƒขแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒแƒœ แƒกแƒฎแƒ•แƒ แƒ’แƒแƒ›แƒแƒฎแƒ›แƒแƒฃแƒ แƒ”แƒ‘แƒ˜แƒก แƒแƒ แƒฎแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ˜แƒ—, แƒ’แƒแƒ›แƒแƒจแƒ•แƒ”แƒ‘แƒ แƒขแƒ”แƒกแƒขแƒ˜แƒ แƒ”แƒ‘แƒแƒ›แƒ“แƒ” แƒฎแƒ“แƒ”แƒ‘แƒ แƒงแƒ•แƒ”แƒšแƒ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ’แƒแƒ›แƒแƒฅแƒ•แƒ”แƒงแƒœแƒ”แƒ‘แƒแƒ›แƒ“แƒ”.

Kubernetes Deployment (แƒ›แƒแƒซแƒ แƒแƒ•แƒ˜ แƒ’แƒแƒœแƒแƒฎแƒšแƒ”แƒ‘แƒ)

Kubernetes Deployment-แƒ˜แƒก แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒ˜ แƒกแƒขแƒ แƒแƒขแƒ”แƒ’แƒ˜แƒ แƒแƒ แƒ˜แƒก แƒ›แƒแƒซแƒ แƒแƒ•แƒ˜-แƒ’แƒแƒœแƒแƒฎแƒšแƒ”แƒ‘แƒ, แƒกแƒแƒ“แƒแƒช แƒ’แƒแƒ›แƒแƒกแƒแƒฎแƒฃแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒแƒฎแƒแƒšแƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ”แƒ‘แƒ˜แƒ— แƒ˜แƒฎแƒกแƒœแƒ”แƒ‘แƒ แƒžแƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒ˜ แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ. แƒ—แƒฃ แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒจแƒ”แƒ˜แƒฅแƒ›แƒœแƒ แƒฃแƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒแƒ“, แƒกแƒฃแƒ แƒแƒ—แƒ”แƒ‘แƒ˜แƒก แƒซแƒ•แƒ”แƒšแƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ›แƒฅแƒแƒœแƒ” แƒžแƒแƒ“แƒœแƒ”แƒ‘แƒ˜ แƒฌแƒงแƒ“แƒ”แƒ‘แƒ แƒ“แƒ แƒžแƒแƒ แƒแƒšแƒ”แƒšแƒฃแƒ แƒแƒ“ แƒ˜แƒฅแƒ›แƒœแƒ”แƒ‘แƒ แƒแƒฎแƒแƒšแƒ˜ แƒ แƒ’แƒแƒšแƒ”แƒ‘แƒ˜.

GitOps

แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ— GitOps แƒแƒ› แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒจแƒ˜, แƒ แƒแƒ“แƒ’แƒแƒœ แƒฉแƒ•แƒ”แƒœ:

  • Git-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ, แƒ แƒแƒ’แƒแƒ แƒช แƒญแƒ”แƒจแƒ›แƒแƒ แƒ˜แƒขแƒ”แƒ‘แƒ˜แƒก แƒ”แƒ แƒ—แƒ˜ แƒฌแƒงแƒแƒ แƒ
  • แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ— Git แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ”แƒ‘แƒก แƒแƒ’แƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก (แƒแƒ  แƒแƒ แƒ˜แƒก แƒกแƒแƒญแƒ˜แƒ แƒ แƒกแƒฎแƒ•แƒ แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜, แƒ’แƒแƒ แƒ“แƒ git tag / แƒจแƒ”แƒ แƒฌแƒงแƒ›แƒ)

แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜

แƒแƒ•แƒ˜แƒฆแƒแƒ— แƒ™แƒแƒ แƒ’แƒ˜ แƒžแƒ แƒแƒฅแƒขแƒ˜แƒ™แƒ - แƒ’แƒฅแƒแƒœแƒ“แƒ”แƒ— แƒ”แƒ แƒ—แƒ˜ แƒกแƒแƒชแƒแƒ•แƒ˜ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒ™แƒแƒ“แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒ แƒ”แƒ แƒ—แƒ˜ แƒ˜แƒœแƒคแƒ แƒแƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.

แƒ’แƒแƒœแƒแƒชแƒฎแƒแƒ“แƒ˜แƒก แƒกแƒแƒชแƒแƒ•แƒ˜

แƒ”แƒก แƒแƒ แƒ˜แƒก แƒซแƒแƒšแƒ˜แƒแƒœ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ 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 แƒ แƒ”แƒžแƒšแƒ˜แƒ™แƒ˜แƒ— แƒ“แƒ app-canary 0-แƒ˜แƒ—. แƒแƒกแƒ”แƒ•แƒ” แƒแƒ แƒ˜แƒก LoadBalancer, แƒกแƒแƒ˜แƒ“แƒแƒœแƒแƒช แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒฌแƒ•แƒ“แƒแƒ›แƒ. 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. In deploy-canary.yaml แƒฉแƒ•แƒ”แƒœ แƒ“แƒแƒ•แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ— แƒแƒกแƒšแƒ”แƒ‘แƒ˜แƒก แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ 0-แƒ–แƒ”. แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜:

แƒ™แƒแƒœแƒแƒ แƒ˜แƒก แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒ Kubernetes #1-แƒจแƒ˜: Gitlab CI

แƒจแƒ”แƒฏแƒแƒ›แƒ”แƒ‘แƒ

แƒฉแƒ”แƒ›แƒ—แƒ•แƒ˜แƒก, แƒแƒ› แƒ’แƒ–แƒ˜แƒ— แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒ˜แƒก แƒฎแƒ”แƒšแƒ˜แƒ— แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ แƒ›แƒ”แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ แƒ˜แƒ›แƒ˜แƒก แƒ’แƒแƒ’แƒ”แƒ‘แƒแƒจแƒ˜, แƒ—แƒฃ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒแƒ“ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒแƒ“ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ›แƒ˜แƒกแƒ˜ แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ k8s-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—. แƒ•แƒ˜แƒœแƒแƒ˜แƒ“แƒแƒœ Kubernetes แƒ’แƒแƒซแƒšแƒ”แƒ•แƒ— แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ’แƒแƒœแƒแƒแƒฎแƒšแƒแƒ— แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ API-แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ—, แƒแƒ› แƒœแƒแƒ‘แƒ˜แƒฏแƒ”แƒ‘แƒ˜แƒก แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒ˜แƒ–แƒแƒชแƒ˜แƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ—.

แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ”แƒ แƒ—แƒ˜ แƒ แƒแƒ›, แƒ แƒแƒช แƒฃแƒœแƒ“แƒ แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ“แƒ”แƒก, แƒแƒ แƒ˜แƒก แƒขแƒ”แƒกแƒขแƒ”แƒ แƒ˜แƒก แƒจแƒ”แƒกแƒ•แƒšแƒ˜แƒก แƒฌแƒ”แƒ แƒขแƒ˜แƒšแƒ˜ (LoadBalancer แƒแƒœ Via Ingress), แƒ แƒแƒ›แƒšแƒ˜แƒก แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ˜แƒ—แƒแƒช แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒแƒฎแƒแƒšแƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ˜แƒก แƒฌแƒ•แƒ“แƒแƒ›แƒ. แƒ›แƒ˜แƒกแƒ˜ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒฎแƒ”แƒšแƒ˜แƒ— แƒ“แƒแƒ—แƒ•แƒแƒšแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.

แƒ›แƒแƒ›แƒแƒ•แƒแƒš แƒกแƒขแƒแƒขแƒ˜แƒ”แƒ‘แƒจแƒ˜ แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒœแƒ•แƒ˜แƒฎแƒ˜แƒšแƒแƒ•แƒ— แƒกแƒฎแƒ•แƒ แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒ˜แƒ–แƒ˜แƒ แƒ”แƒ‘แƒฃแƒš แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ”แƒขแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒก, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒ”แƒœ แƒฉแƒ•แƒ”แƒœแƒ˜ แƒ’แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒฃแƒšแƒ˜แƒก แƒฃแƒ›แƒ”แƒขแƒ”แƒกแƒแƒ‘แƒแƒก.

แƒแƒกแƒ”แƒ•แƒ” แƒฌแƒแƒ˜แƒ™แƒ˜แƒ—แƒฎแƒ”แƒ— แƒกแƒฎแƒ•แƒ แƒกแƒขแƒแƒขแƒ˜แƒ”แƒ‘แƒ˜ แƒฉแƒ•แƒ”แƒœแƒก แƒ‘แƒšแƒแƒ’แƒ–แƒ”:

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ