Бид Kubernetes-д Canary байршуулалтыг ажиллуулахын тулд k8s-ийн төрөлх Argo Rollouts байршуулалтын хянагч болон GitlabCI-г ашиглана.
Энэ цувралын нийтлэлүүд
Kubernetes дахь Канарын байршуулалт №1: Gitlab CI - (Энэ нийтлэл)
- Istio ашиглан Canary Deployment
- Jenkins-X Istio Flagger ашиглан Canary Deployment
Канарын байршуулалт
Таныг уншина гэж найдаж байна
Argo Rollouts
Argo Rollouts бол Kubernetes-ийн уугуул байршуулалтын хянагч юм. Энэ нь Kubernetes-д зориулсан CRD (Захиалгат нөөцийн тодорхойлолт) өгдөг. Үүний ачаар бид шинэ аж ахуйн нэгжийг ашиглаж болно: Rollout
, янз бүрийн тохиргооны сонголт бүхий хөх-ногоон болон канарын байршуулалтыг удирддаг.
Тусгай нөөцийн ашигладаг Argo Rollouts хянагч
Rollout,
Kubernetes-д зориулсан хөх-ногоон, канар зэрэг нэмэлт байршуулах стратегийг зөвшөөрдөг. НөөцRollout
ижил төстэй функцээр хангадагDeployment
, зөвхөн нэмэлт байршуулах стратегитай.
нөөцDeployments
байршуулах хоёр стратегитай:RollingUpdate
иRecreate
. Хэдийгээр эдгээр стратеги нь ихэнх тохиолдолд тохиромжтой байдаг ч серверт маш том хэмжээгээр байршуулахын тулд Хөх ногоон эсвэл канар зэрэг нэмэлт стратеги ашигладаг бөгөөд үүнийг Байршуулах хянагч дээр ашиглах боломжгүй. Kubernetes-д эдгээр стратегийг ашиглахын тулд хэрэглэгчид өөрсдийн байршуулалт дээрээ скрипт бичих шаардлагатай болсон. Argo Rollouts Controller нь эдгээр стратегиудыг энгийн, тунхагласан, тохируулах боломжтой параметрүүд гэж харуулдаг.
https://argoproj.github.io/argo-rollouts
Rollouts-д ашиглахад тохиромжтой вэб интерфэйсийг хангадаг Argo CI бас байдаг бөгөөд бид дараагийн өгүүллээр үүнийг авч үзэх болно.
Argo Rollouts суулгаж байна
Сервер тал
kubectl create namespace argo-rolloutskubectl apply -n argo-rollouts -f https://raw.githubusercontent.com/argoproj/argo-rollouts/stable/manifests/install.yaml
Манай дэд бүтцийн манжинд (доороос харна уу) бид install.yaml-г i/k8s/argo-rollouts/install.yaml болгон нэмсэн. Ингэснээр GitlabCI үүнийг кластерт суулгах болно.
Үйлчлүүлэгч тал (kubectl залгаас)
Хэрэглээний жишээ
Хэрэглээний код болон дэд бүтцэд зориулсан тусдаа хадгалах газартай байх нь сайн туршлага юм.
Програмын хадгалах газар
Kim Wuestkamp/k8s-deployment-example-apple
Энэ бол хариултыг JSON хэлбэрээр буцаадаг маш энгийн Python+Flask API юм. Бид GitlabCI ашиглан багцыг бүтээж, үр дүнг Gitlab Бүртгэл рүү түлхэх болно. Бүртгэлд бид хоёр өөр хувилбартай байна:
- wuestkamp/k8s-deployment-example-app:v1
- wuestkamp/k8s-deployment-example-app:v2
Тэдний хоорондох цорын ганц ялгаа нь буцаасан JSON файл юм. Бид аль хувилбартай харилцаж байгаагаа дүрслэн харуулахын тулд энэ програмыг ашигладаг.
Дэд бүтцийн агуулах
Энэ агуулахад бид GitlabCI-г Kubernetes-д байршуулахад ашиглах болно, .gitlab-ci.yml дараах байдалтай байна:
image: traherom/kustomize-dockerbefore_script:
- printenv
- kubectl versionstages:
- deploydeploy 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
Та салаалах хэрэгтэй KUBECONFIG
хандалтын тохиргоог агуулсан GitlabCI дээр kubectl
таны кластер руу.
Дэд бүтэц Yaml
Дэд бүтцийн агуулах дотор бид дараах үйлчилгээтэй.
apiVersion: v1
kind: Service
metadata:
labels:
id: rollout-canary
name: app
spec:
ports:
- port: 80
protocol: TCP
targetPort: 5000
selector:
id: app
type: LoadBalancer
болон rollout.yaml:
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: rollout-canary
spec:
replicas: 10
revisionHistoryLimit: 2
selector:
matchLabels:
id: rollout-canary
template:
metadata:
labels:
id: rollout-canary
spec:
containers:
- name: rollouts-demo
image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v1
imagePullPolicy: Always
strategy:
canary:
steps:
- setWeight: 10
# Rollouts can be manually resumed by running `kubectl argo rollouts promote ROLLOUT`
- pause: {}
- setWeight: 50
- pause: { duration: 120 } # two minutes
Rollout
нь Deployment-тай адил ажилладаг. Хэрэв бид шинэчлэх стратеги (энд канар шиг) тохируулахгүй бол энэ нь анхдагч шинэчлэлтийн Deployment шиг ажиллах болно.
Канарыг байрлуулахын тулд бид ямл дахь хоёр алхамыг тодорхойлдог.
- Канар руу чиглэсэн хөдөлгөөний 10% (гараар OK болтол хүлээнэ үү)
- Канар руу 50% замын хөдөлгөөн (2 минут хүлээгээд 100% хүртэл үргэлжлүүлээрэй)
Эхний байршуулалтыг хийж байна
Анхны суулгацын дараа манай нөөц дараах байдлаар харагдах болно.
Бид зөвхөн програмын эхний хувилбараас л хариу авдаг.
Canary Deployment хийж байна
Алхам 1: Замын хөдөлгөөний 10%
Канарын суулгацыг эхлүүлэхийн тулд бид ихэвчлэн байршуулалттай адил зургийн хувилбарыг өөрчлөх хэрэгтэй:
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: rollout-canary
spec:
...
template:
metadata:
labels:
id: rollout-canary
spec:
containers:
- name: rollouts-demo
image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v2
...
Мөн бид өөрчлөлтүүдийг түлхэж байгаа тул Gitlab CI-г байрлуулж, өөрчлөлтүүдийг харж байна:
Одоо бид үйлчилгээнд хандвал:
Агуу их! Бид канарын байршуулалтынхаа дунд байна. Бид гүйлтээр ахиц дэвшлийг харж болно:
kubectl argo rollouts get rollout rollout-canary
Алхам 2: Замын хөдөлгөөний 50%:
Одоо дараагийн алхам руу шилжье: замын хөдөлгөөний 50% -ийг дахин чиглүүлэх. Бид энэ алхмыг гараар ажиллуулахаар тохируулсан:
kubectl argo rollouts promote rollout-canary # continue to step 2
Манай програм шинэ хувилбаруудын хариултын 50% -ийг буцаасан:
Мөн нэвтрүүлэх тойм:
Гайхалтай.
Алхам 3: Замын хөдөлгөөний 100%:
Бид үүнийг 2 минутын дараа 50% алхам автоматаар дуусч, 100% алхам эхлэхээр тохируулсан.
Мөн програмын гаралт:
Мөн нэвтрүүлэх тойм:
Канарын байршуулалт дууссан.
Argo Rollouts-ийн бусад жишээнүүд
Канар дээр суурилсан орчныг урьдчилан харах, харьцуулах зэрэг олон жишээ энд байна.
Argo Rollouts болон Argo CI-ийн тухай видео
Би энэ видеог үнэхээр санал болгож байна, энэ нь Argo Rollouts болон Argo CI хэрхэн хамтран ажилладагийг харуулж байна:
Үр дүн
Нэмэлт төрлийн байршуулалт эсвэл хуулбар үүсгэх, урсгалыг дахин чиглүүлэх гэх мэтийг удирддаг CRD ашиглах санаа надад үнэхээр таалагдаж байна. Тэдэнтэй ажиллах нь саадгүй явагддаг. Дараа нь би Argo CI-тэй нэгтгэхийг туршиж үзэхийг хүсч байна.
Гэсэн хэдий ч Argo CI болон Flux CI-ийн томоохон нэгдэл гарч байгаа тул шинэ хувилбар гарах хүртэл хүлээж магадгүй юм.
Та Argo Rollouts эсвэл Argo CI-тэй холбоотой туршлага байсан уу?
Мөн манай блог дээрх бусад нийтлэлүүдийг уншина уу:
Nginx вэб сервертэй хаврын програмуудыг цэнхэр ногооноор байршуулах Кубернетес: системийн нөөцийн менежментийг бий болгох нь яагаад тийм чухал вэ? Hashicorp Консулын Кубернетес зөвшөөрлийн танилцуулга Tekton Pipeline - Kubernetes-ийн уугуул дамжуулах хоолой Nginx-д зориулсан динамик модулиудыг бий болгох Redmine-д зориулсан Telegram бот. Өөрийнхөө болон бусдын амьдралыг хэрхэн хялбарчлах вэ
Эх сурвалж: www.habr.com