Jenkins-X Istio Flagger көмегімен Canary Deployment
Біз Canary орналастыруын GitOps арқылы қолмен орындаймыз және негізгі Kubernetes ресурстарын жасаймыз/өзгертеміз. Бұл мақала негізінен кіріспеге арналған Kubernetes Canary жүйесінде орналастыру қалай жұмыс істейтіні туралы, өйткені автоматтандырудың тиімді әдістері бар, біз оларды келесі мақалаларда қарастырамыз.
Canary стратегиясымен жаңартулар алдымен пайдаланушылардың ішкі жиынына ғана қолданылады. Бақылау, журнал деректері, қолмен тестілеу немесе басқа кері байланыс арналары арқылы шығарылым барлық пайдаланушыларға шығарылмас бұрын тексеріледі.
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 төмендегідей:
Біз бұл өзгерістерді орналастыру басталатын репозиторийге жібереміз (GitlabCI арқылы) және нәтиже ретінде көреміз:
Біздің қызметіміз екі орналастыруға да нұсқайды, өйткені екеуінде де қолданба селекторы бар. Кубернетес әдепкі рандомизациясына байланысты сұраулардың ~10% үшін әртүрлі жауаптарды көруіміз керек:
Қолданбамыздың ағымдағы күйі (GitOps, Git-тен жалғыз ақиқат көзі ретінде алынған) әр нұсқа үшін бір белсенді көшірмелері бар екі орналастырудың болуы болып табылады.
~ Пайдаланушылардың 10% жаңа нұсқамен танысып, оны байқаусызда тексереді. Енді проблемаларды табу үшін журналдар мен бақылау деректеріндегі қателерді тексеру уақыты келді.
2-қадам: Жаңа нұсқаны барлық пайдаланушыларға шығарыңыз
Біз бәрі жақсы болды деп шештік, енді жаңа нұсқаны барлық пайдаланушыларға тарату керек. Мұны істеу үшін біз жай ғана жаңартамыз deploy.yaml суреттің жаңа нұсқасын орнату және көшірмелердің саны 10-ға тең. В deploy-canary.yaml біз көшірмелердің санын 0-ге орнатамыз. Орналастырудан кейін нәтиже келесідей болады:
қорытындылай келе
Мен үшін орналастыруды осылайша қолмен іске қосу оны k8s көмегімен қаншалықты оңай конфигурациялауға болатынын түсінуге көмектеседі. Kubernetes барлығын API арқылы жаңартуға мүмкіндік беретіндіктен, бұл қадамдарды сценарийлер арқылы автоматтандыруға болады.
Іске асыруды қажет ететін тағы бір нәрсе - тек жаңа нұсқаға қол жеткізуге болатын сынаушының кіру нүктесі (LoadBalancer немесе Ingress арқылы). Оны қолмен шолу үшін пайдалануға болады.
Болашақ мақалаларда біз жасаған істеріміздің көпшілігін жүзеге асыратын басқа автоматтандырылған шешімдерді қарастырамыз.
Сондай-ақ біздің блогтағы басқа мақалаларды оқыңыз: