Добивки:
- Способност за разбирање на основните објекти (Pod, Deployment, Service, ConfigMap, Secret, Namespace) и декларативната филозофија на Kubernetes и производство на цврсти манифестации за вештачка интелигенција
- Способност да се направат манифестати подготвени за производство и безбедни со ограничувања на ресурси, здравствени проверки (сонди), фиксирани ознаки за слики и тесен RBAC
- Способност да се потврди правилниот контекст пред извршувањето и да се примени дисциплина за суво трчање со суво трчање/разлика
Лесно е да се води еден контејнер. Но, воспоставувањето систем што шири стотици контејнери низ десетици сервери, автоматски се рестартира кога еден од нив ќе се сруши, го реплицира кога се зголемува оптоварувањето и го ажурира со нула прекини? Тоа е оркестрација, а индустриската стандардна алатка е Kubernetes (кратко K8s) - платформата што автоматски се распоредува, скалира и управува со контејнери низ кластерот. Kubernetes е моќен, но сложен: сè е дефинирано со долги, чувствителни на вдлабнатини YAML-датотеки - наречени манифестации. Ова е местото каде што вештачката интелигенција дава здив на свеж воздух; Со вистинскиот контекст, брзо ги произведува овие манифестации и ги декодира нивните мистериозни грешки.
Но, во Кубернетес, погрешен манифест значи неуспех да се подигне цела услуга, неправилно скалирање или оставање ранливост. Ваша одговорност е да го разберете и потврдите секој манифест што го произведува вештачката интелигенција - особено пред да се примени kubectl.
Основни објекти на Кубернет
За да извршите ревизија на Kubernetes, треба да ги знаете главните концепти:
- Под: Најмалата работна единица; Содржи еден или неколку контејнери. Општо земено, Pod не се користи директно, но се користат матичните објекти што управуваат со него.
- Распоредување: Дефинира колку копии од апликацијата ќе се извршуваат, која слика ќе ја користи и како ќе се ажурира. Ако Pod падне, тој автоматски ќе го пресоздаде.
- Услуга: Обезбедува фиксна мрежна адреса и балансирање на оптоварување на подлогите; Иако мешунките доаѓаат и си одат, адресата за пристап не се менува.
- ConfigMap и Secret: Ги чува конфигурациските вредности и тајните информации одвоени од Pods. ConfigMap е за експлицитни поставки, Secret е за чувствителни вредности.
- Простор за имиња: Областа што логично ги дели и изолира ресурсите (на пр. dev, prod).
- Влез: Збир на правила што го насочува сообраќајот на HTTP од надворешниот свет кон услугите во кластерот.
Helm е „менаџер на пакети“ на Kubernetes: ви овозможува да образувате повторливи манифестации (табели) и да ги инсталирате со различни вредности во различни средини со една команда. Вештачката интелигенција произведува и суров манифест и дијаграм на кормилото.
Зошто има толку многу предмети? Бидејќи основната филозофија на Kubernetes е декларативна: вие дефинирате „како сакате системот на крајот да изгледа“ (на пр. „секогаш да има 3 копии од оваа апликација вклучени“), додека Kubernetes постојано ја придвижува моменталната состојба поблиску до посакуваната состојба. Ако Pod умре, тој создава нов; ако некој јазол се спушти, тој го преместува обемот на работа во друг јазол. Затоа манифестите не се команди „направи“, туку рецепти „нека биде вака“. Сфаќањето на оваа разлика е критично кога се читаат манифестациите што ги произведува вештачката интелигенција: секој домен опишува дел од посакуваната состојба на системот. Погрешен домен значи дека Kubernetes работи кон погрешна цел - и таа цел тивко, упорно се спроведува.
Совет: во Kubernetes, најважната безбедносна алатка за тестирање е kubectl apply --dry-run=server -f file.yaml: покажува дали серверот ќе прифати и што да прави без всушност да го примени манифестот. Погрижете се да извршите dry-run и kubectl diff пред да примените манифест на прод.
Чекор по чекор: Креирање манифестации со вештачка интелигенција
- Опишете ја апликацијата и потребата. Име на сликата, порта, колку реплики, ограничувања на ресурси (процесор/меморија).
- Побарајте распоредување + услуга. Обично и двете се бараат заедно.
- Одделете ја конфигурацијата и тајната. Поставки на ConfigMap, чувствителни вредности на Secret.
- Додадете здравствени проверки. livenessProbe (дали е во живо) и ReadinessProbe (дали е подготвен за сообраќај) се критични.
- Поставете ограничување на ресурсите. Без барања/ограничувања, Pod може да го потроши целиот јазол.
- Потврдете со „--dry-run“ и „diff“, а потоа применете. Прво во именскиот простор за тестирање.
Безбедност: ризици специфични за Kubernetes
- Тајната не е навистина тајна - таа е само base64. Тајниот објект на Kubernetes base64 кодира вредности; Ова не е шифрирање, лесно се дешифрира. За вистинска приватност, потребни се енкрипција итн. Никогаш не давајте тајни манифестации директно на Git (има решенија за ова како што се Запечатени тајни/Надворешни тајни).
- Поставете ограничување на ресурсите. Pod без ограничувања може да го урне целиот јазол со истекување на меморијата.
- Минимален авторитет (RBAC). Со контрола на пристап заснована на улоги, секоја услуга/корисник ги има само дозволите што му се потребни. AI понекогаш дава голем кластер-администратор; стеснете го ова.
- Не користете ја ознаката „најновата“ слика. Не знаете која верзија работи и не можете да ја вратите назад.
Внимание: бришењето на kubectl или неправилната примена може да уништи директно распоредување. Погрижете се да потврдите во кој именски простор се наоѓате (тековен контекст на конфигурација на kubectl) пред да ги извршите командите; Случајната работа е честа катастрофа во производниот контекст.
Суров манифест наспроти табела на кормилото
критериум
Манифест на суровини YAML
Табела на кормилото
Инсталација
kubectl применуваат -f
инсталирање на кормилото
Мултимедија (dev/prod)
Copy-paste, склони кон грешки
Единечна табела, различни вредности.yaml
Верзија/враќање
со рака
лесно со враќање на кормилото
Крива на учење
низок
средно
кога
Мала, единствена средина
Мултимедијална, повторлива услуга
три мини футроли
Случај 1 - тајната на урнатиот сервис. Под постојано се рестартираше (CrashLoopBackOff). Тимот ги даде дневниците и манифестот на вештачката интелигенција; Вештачката интелигенција покажа дека Pod никогаш не се сметаше за „подготвен“ бидејќи подготвеноста сонда гледаше на погрешна порта. Го поправија пристаништето, услугата стана стабилна за 10 минути. Рачно воспоставување на оваа врска може да трае со часови.
Случај 2 - непоставувањето граници го прекина јазолот. Немаше ограничувања во распоредувањето; Протекување на меморијата го надуе Pod и го урна целиот јазол, рушејќи ги и соседните сервиси. По инцидентот, тие ја натераа вештачката интелигенција да каже „додајте разумни барања за процесор/меморија и ограничувања на сите распоредувања“ и ја направија стандардна. Една линија што недостасува чинеше неколку часа застој.
Случај 3 - фатен голем RBAC. За време на истрагата, беше откриено дека манифестот на ServiceAccount генериран од вештачката интелигенција е поврзан со улогата на кластер-администратор - што значи дека услугата може да управува со целиот кластер. Тимот ја намали дозволата само за читање Pods во нивниот именски простор. Принципот на најмала привилегија затвори безбедносна ранливост.
Четири шаблони за копирање
1) Распоредување + производство на услуги:
Напишете манифест за распоредување и услуги за Kubernetes. Апликација: [АД], слика: [слика: фиксна верзија], порта: [X], реплика: [N]. Правила:- Додадете барања и ограничувања на процесорот/меморијата.- Дефинирајте livenessProbe и readinessProbe.- Читајте ја конфигурацијата од ConfigMap, тајна од Secret објект; Не вметнувајте вредности во манифестот, користете месечари. - НЕ користете ознака за слика „:latest“. Дајте со опис.
2) Решавање на манифестна грешка:
Тековниот Pod е во состојба [CrashLoopBackOff / Во очекување / ImagePullBackOff]. Според следниот манифест и излезот „kubectl describe“, наведете ги можните основни причини по редослед на веројатност и издадете ја командата за проверка за секоја од нив. Манифест: [YAML] Опишете: [ИЗЛЕЗ]
3) Проверка на безбедност/интегритет:
Проверете го овој манифест на Кубернетес: дали недостасува ограничувањето на ресурсите, дали недостасува проб, дали има ознака :latest, дали има премногу широк RBAC/дозвола, дали тајната е вградена во манифестот? Напиши ги наодите по важност и со исправка. Манифест: [YAML]
4) Табела за конверзија во Хем:
Претворете ги следните необработени манифестации во табела на Helm за повеќекратна употреба: кои вредности треба да излезат на values.yaml (слика, реплика, извор, средина)? Прикажи структура на графиконот и вредности на примероци.yaml.Манифести: [YAML]
Слаб промпт / Силен промпт
Слаб: „Напиши Kubernetes YAML за мојата апликација“.
Резултат: распоредување без сонда, без ограничување со ознака :last, вградување на тајната обична; Несигурни и кревки во прод.
Силно: "Напишете Kubernetes Deployment + Service. Image myapp:1.4.2, 3 реплики, 8080 порти. CPU 100m-500m, меморија 128Mi-512Mi add requests/limits. Дај со опис“.
Разлика: втората брза верзија дава размери, ограничувања на ресурси, здравствени проверки и тајно правило; Излезот е блиску до производството и безбеден.
Вообичаени грешки
- Непоставување ограничувања на ресурсите. Еден Pod може да го потроши целиот јазол.
- Недодавање здравствен преглед (сонда). Kubernetes не може да открие срушен/неподготвен Pod.
- ознака `: најнов`. Станува нејасно која верзија работи, не може да се врати назад.
- Посветување на тајната директно на Git. Base64 не е шифрирање; секој го решава.
- Извршување на команди во погрешен контекст/имен простор. Најчестиот начин за паѓање во прод.
- прескокнување на `--dry-run`/`diff`. Не гледајќи што ќе се случи пред имплементацијата.
Сумирано
Kubernetes е моќен, но комплексен оркестратор кој автоматски ги распоредува, скалира и оптимизира контејнерите низ кластерот; Сè е дефинирано со манифестните YAML, кои Helm ги шаблонизира. Вештачката интелигенција брзо произведува манифестации за распоредување/услуга и табели на кормилото, решава мистериозни грешки - но треба експлицитно да побарате ограничување на ресурсите, здравствена проверка, непроменлива ознака на сликата, тесен RBAC и тајни безбедносни правила. --Dry-run, diff и правилна проверка на контекстот се навики кои спречуваат падови на производи.
Задача за апликација
Вештачката интелигенција нека генерира манифест за примерок од апликација со шаблонот „Разменување + генерирање услуги“. Потоа: (1) Проверете дали има ограничување на ресурси, сонда, :лајст и тајна со шаблонот „Проверка на безбедност/разумност“; (2) изврши kubectl применува --dry-run=сервер на тест кластер/minikube ако е можно и прочитај го излезот; (3) забележете ги двата најкритични ставки за безбедност/робустност што ги сметате за исчезнати.
листа за проверка
- [ ] На моето барање ги додадов верзијата на сликата, бројот на реплики, портата и ограничувањата на ресурсите.
- [ ] На манифестот додадов истрага за живост и подготвеност.
- [ ] Поправена е ознаката на сликата; Не користев :last.
- [ ] Тајната не е вградена во манифестот; Користев Таен објект/надворешен свод.
- [ ] Ги намалив RBAC/дозволите на минимални дозволи.
- [ ] Пред да аплицирам, потврдив дека сум во правилен контекст и дека излези --dry-run/diff.