Канарияны жайгаштырууну GitOps аркылуу кол менен аткарабыз жана негизги Kubernetes ресурстарын түзөбүз/өзгөрөбүз. Бул макала биринчи кезекте киришүү үчүн арналган Кубернетес Канарияда жайылтуу кантип иштейт, анткени автоматташтыруунун натыйжалуу ыкмалары бар, аларды биз кийинки макалаларда карап чыгабыз.
Канария стратегиясы менен жаңыртуулар адегенде колдонуучулардын бир бөлүгүнө гана колдонулат. Мониторинг, журнал маалыматтары, кол менен тестирлөө же башка пикир каналдары аркылуу релиз бардык колдонуучуларга чыгарылганга чейин текшерилет.
Kubernetes Deployment (толук жаңыртуу)
Kubernetes Deployment үчүн демейки стратегия - жаңыртуу, мында сүрөттөрдүн жаңы версиялары менен белгилүү бир сандагы поддондор ишке киргизилет. Эгер алар көйгөйсүз түзүлсө, сүрөттөрдүн эски версиялары бар подколор токтотулуп, жаңы подкектер параллелдүү түзүлөт.
GitOps
Бул мисалда биз GitOps колдонобуз, анткени биз:
чындыктын бир булагы катары Git колдонуу
куруу жана жайылтуу үчүн биз Git операцияларын колдонобуз (git теги/бириктирүүдөн башка эч кандай буйрук талап кылынбайт)
мисал
Келгиле, жакшы тажрыйбаны карап көрөлү - колдонмо коду үчүн бир репозиторийге жана инфраструктурага бир репозиторийге ээ болуу.
Колдонмо репозиторий
Бул JSON катары жооп кайтарган абдан жөнөкөй Python+Flask API. Биз GitlabCI аркылуу пакетти курабыз жана натыйжаны Gitlab реестрине түртөбүз. Реестрде бизде эки башка чыгаруу версиясы бар:
wuestkamp/k8s-deployment-example-app:v1
wuestkamp/k8s-deployment-example-app:v2
Алардын ортосундагы бир гана айырма - кайтарылган JSON файлынын өзгөрүшү. Биз бул тиркемени кайсы версия менен байланышып жатканыбызды мүмкүн болушунча оңой элестетүү үчүн колдонобуз.
Инфраструктуралык репозиторий
Бул шалканда биз GitlabCI аркылуу Kubernetesке жайгаштырабыз, .gitlab-ci.yml Ал төмөнкүчө чагылдырууга болот:
App-deploy азырынча эч кандай репликаларга ээ эмес экенин эске алыңыз.
Баштапкы жайылтуу аткарылууда
Баштапкы жайылтууну баштоо үчүн, сиз GitlabCI түтүгүн кол менен мастер бутагынан баштасаңыз болот. Андан кийин kubectl төмөнкүлөрдү чыгаруу керек:
Көрөбүз app 10 репликасы жана 0 менен колдонмо-канариясы менен жайгаштыруу. Ошондой эле LoadBalancer бар, ал аркылуу биз кире алабыз. curl тышкы IP аркылуу:
while true; do curl -s 35.198.149.232 | grep label; sleep 0.1; done
Биздин сыноо колдонмосу "v1" гана кайтарып жатканын көрүп жатабыз.
Canary жайгаштырууну ишке ашыруу
1-кадам: кээ бир колдонуучулар үчүн жаңы версиясын чыгарыңыз
Биз deploy-canary.yaml файлында жана жаңы версия сүрөтүндө репликалардын санын 1ге койдук:
Биз бул өзгөртүүлөрдү жайгаштыруу баштала турган репозиторийге түртөбүз (GitlabCI аркылуу) жана натыйжада:
Биздин Кызмат эки жайгаштырууну көрсөтөт, анткени экөө тең колдонмону тандагычка ээ. Kubernetes'тин демейки рандомизациясынан улам, биз сурамдардын ~10% үчүн ар кандай жоопторду көрүшүбүз керек:
Биздин тиркеменин учурдагы абалы (GitOps, Gitтен чындыктын бирдиктүү булагы катары алынган) - бул ар бир версия үчүн бирден, активдүү репликалары бар эки жайгаштыруунун болушу.
~10% колдонуучулар жаңы версия менен таанышып, аны байкабай сынап көрүшөт. Азыр көйгөйлөрдү табуу үчүн журналдардагы жана мониторинг маалыматтарындагы каталарды текшерүүгө убакыт келди.
2-кадам: Жаңы версияны бардык колдонуучуларга чыгарыңыз
Биз баары ойдогудай болду деп чечтик жана эми жаңы версияны бардык колдонуучуларга жайылтышыбыз керек. Бул үчүн биз жөн гана жаңыртабыз deploy.yaml сүрөттүн жаңы версиясын орнотуу жана репликалардын саны 10. В deploy-canary.yaml биз репликалардын санын 0гө кайра койдук. Жайгаштыргандан кийин, натыйжа төмөнкүдөй болот:
жыйынтыктап жатып
Мен үчүн, жайгаштырууну ушундай жол менен иштетүү k8s аркылуу канчалык оңой конфигурацияланарын түшүнүүгө жардам берет. Kubernetes бардыгын API аркылуу жаңыртууга мүмкүндүк бергендиктен, бул кадамдарды скрипттер аркылуу автоматташтырууга болот.
Ишке ашырылышы керек болгон дагы бир нерсе - жаңы версияга гана кире турган сыноочу кирүү чекити (LoadBalancer же Ingress аркылуу). Аны кол менен серептөө үчүн колдонсо болот.
Келечектеги макалаларда биз жасаган иштердин көбүн ишке ашырган башка автоматташтырылган чечимдерди карап чыгабыз.