Бірлік 5 / 11

Кубернетес: манифест, руль және AI күші бар оркестр

Табыстар:

  • Негізгі объектілерді (Pod, Deployment, Service, ConfigMap, Secret, Namespace) және Кубернетестің декларативті философиясын түсіну және жасанды интеллект үшін сенімді манифесттерді шығару мүмкіндігі
  • Манифесттерді өндіруге дайын және ресурс шектеулерімен, денсаулық тексерулерімен (зондтармен), бекітілген кескін тегтерімен және тар RBAC арқылы қорғау мүмкіндігі
  • Орындау алдында дұрыс контекстті тексеру және құрғақ жүгіру/дифф арқылы құрғақ жұмыс тәртібін қолдану мүмкіндігі

Бір контейнерді іске қосу оңай. Бірақ жүздеген контейнерлерді ондаған серверлерге тарататын, олардың біреуі бұзылған кезде автоматты түрде қайта іске қосылатын, жүктеме ұлғайған кезде оны қайталайтын және оны нөлдік үзіліспен жаңартатын жүйені құру керек пе? Бұл оркестрлеу және салалық стандартты құрал - Kubernetes (қысқаша K8s) — кластер бойынша контейнерлерді автоматты түрде орналастыратын, масштабтайтын және басқаратын платформа. Kubernetes is powerful but complex: everything is defined by long, indentation-sensitive YAML files — called manifests. Бұл жерде AI таза ауаны береді; With the right context, it quickly produces these manifests and decodes their mysterious errors.

But in Kubernetes, a wrong manifest means failing to stand up an entire service, scaling incorrectly, or leaving a vulnerability. It is your responsibility to understand and verify each manifest the AI ​​produces — especially before kubectl apply.

Kubernetes негізгі нысандары

To audit Kubernetes, you should know the main concepts:

  • Pod: Ең кіші жұмыс құрылғысы; Ол бір немесе бірнеше контейнерден тұрады. Generally, the Pod is not used directly, but the parent objects that manage it are used.
  • Deployment: Defines how many copies of an application will run, which image it will use, and how it will be updated. If a Pod crashes it will automatically recreate it.
  • Service: Provides a fixed network address and load balancing to the pods; Even though pods come and go, the access address does not change.
  • ConfigMap and Secret: Keeps configuration values ​​and secret information separate from Pods. ConfigMap is for explicit settings, Secret is for sensitive values.
  • Namespace: The area that logically divides and isolates resources (e.g. dev, prod).
  • Ingress: The rule set that directs HTTP traffic from the outside world to services in the cluster.

Helm - Kubernetes-тің «пакет менеджері»: ол қайталанатын манифесттерді (диаграммаларды) шаблон жасауға және оларды бір пәрмен арқылы әртүрлі орталарда әртүрлі мәндермен орнатуға мүмкіндік береді. AI produces both raw manifest and Helm chart.

Неліктен нысандар сонша көп? Кубернетестің негізгі философиясы декларативті болғандықтан: сіз «жүйенің түптеп келгенде қалай көрінетінін» анықтайсыз (мысалы, «әрқашан осы қолданбаның 3 данасы жұмыс істейді»), ал Кубернетес ағымдағы күйді сол қалаған күйге үнемі жақындатады. If a Pod dies, it creates a new one; if a node goes down, it moves the workload to another node. That's why manifests are not "do" commands, but "let it be like this" recipes. Бұл айырмашылықты түсіну AI шығаратын манифесттерді оқу кезінде өте маңызды: әрбір домен жүйенің қалаған күйінің бір бөлігін сипаттайды. A wrong domain means Kubernetes is working towards a wrong goal — and that goal is silently, persistently enforced.

Кеңес: Kubernetes-те ең маңызды қауіпсіз тестілеу құралы kubectl apply --dry-run=server -f file.yaml болып табылады: ол сервердің қабылдайтын-қабылдамайтынын және манифестті қолданбай не істеу керектігін көрсетеді. Be sure to run dry-run and kubectl diff before applying a manifest to prod.

Step by step: Creating manifests with AI

  1. Describe the application and need. Image name, port, how many replicas, resource limits (CPU/memory).
  2. Орналастыру + Қызметті сұрау. Әдетте екеуі бірге қажет.
  3. Бөлек конфигурация және құпия. ConfigMap параметрлері, құпия мәндер құпия.
  4. Денсаулықты тексеруді қосыңыз. livenessProbe (ол тірі ме) және readinessProbe (ол трафикке дайын ба) маңызды.
  5. Ресурс шегін орнатыңыз. Сұраныссыз/шектеусіз Pod бүкіл түйінді тұтына алады.
  6. `--dry-run` және `diff` арқылы растаңыз, содан кейін қолданыңыз. Сынақ аттар кеңістігінде бірінші.

Қауіпсіздік: Кубернетеске тән тәуекелдер

  1. Құпия шын мәнінде құпия емес — бұл жай ғана base64. Kubernetes Secret нысаны base64 мәндерді кодтайды; Бұл шифрлау емес, ол оңай шешіледі. Шынайы құпиялылық үшін, т.б. шифрлау және сыртқы қойма (Vault, бұлттық құпия менеджер) қажет. Ешқашан құпия манифесттерді тікелей Git-ке бермеңіз (бұл үшін мөрленген құпиялар/сыртқы құпиялар сияқты шешімдер бар).
  2. Ресурс шегін орнатыңыз. Шектеусіз Pod жадтың ағып кетуімен бүкіл түйінді бұзуы мүмкін.
  3. Минималды өкілеттік (RBAC). Рөлге негізделген қатынасты басқару мүмкіндігімен әрбір қызмет/пайдаланушы тек өзіне қажет рұқсаттарға ие. AI кейде үлкен кластер-әкімші береді; мұны қысқартыңыз.
  4. «Соңғы» кескін тегін пайдаланбаңыз. Сіз қай нұсқа жұмыс істеп тұрғанын білмейсіз және оны кері айналдыра алмайсыз.
Абайлаңыз: kubectl жою немесе қате қолдану тірі орналастыруды бұзуы мүмкін. Пәрмендерді іске қоспас бұрын, қай аттар кеңістігінде екеніңізді (kubectl config current-context) тексеріңіз; Кездейсоқ жұмыс өндіріс жағдайында жиі кездесетін апат болып табылады.

Шикі манифест пен руль кестесі

критерий

Шикі YAML манифесті

Руль диаграммасы

Орнату

kubectl қолданылады -f

руль орнату

Мультимедиа (әзірлеуші/өнім)

Көшіру-қою, қатеге бейім

Бір диаграмма, әртүрлі мәндер.yaml

Нұсқа/қайтару

қолмен

рульді кері айналдыру арқылы оңай

Оқу қисығы

төмен

орташа

қашан

Шағын, жалғыз орта

Мультимедиа, қайталанатын қызмет

үш шағын іс

1-жағдай — бұзылған қызметтің құпиясы. Pod үнемі қайта жүктелді (CrashLoopBackOff). Команда АИ-ге журналдар мен манифест берді; AI Pod ешқашан «дайын» ​​деп саналмайтынын көрсетті, өйткені ReadinessProbe дұрыс емес портқа қарады. They fixed the port, the service became stable in 10 minutes. Establishing this relationship manually could take hours.

2-жағдай - шектеулерді белгілемеу түйінді бұзды. Орналастыруда шектеулер болған жоқ; Жадтың ағып кетуі Pod-ды толтырып, бүкіл түйінді бұзып, көрші қызметтерді де бұзды. After the incident, they made AI say "add reasonable CPU/memory requests and limits to all Deployments" and made it standard. Бір жетіспейтін желі сағаттық тоқтап қалуды талап етеді.

3-жағдай — үлкен RBAC түсірілді. Тергеу барысында AI арқылы жасалған ServiceAccount манифесті кластер-әкімші рөліне байланысты екені анықталды, яғни бұл қызмет бүкіл кластерді басқара алады. Команда аттар кеңістігінде тек Pods оқуға рұқсатты тарылтты. The principle of least privilege closed a security vulnerability.

Көшірілетін төрт үлгі

1) Орналастыру + Қызметті өндіру:

Write a Deployment and Service manifest for Kubernetes. Application: [AD], image: [image: fixed-version], port: [X], replica: [N]. Ережелер:- CPU/жад сұрауларын және шектеулерін қосыңыз.- LivenessProbe және ReadinessProbe анықтаңыз.- ConfigMap-тен конфигурацияны оқыңыз, құпия нысаннан құпияны; Do not embed values ​​in the manifest, use placeholders. - ":latest" кескін тегін ҚОЛДАНБАҢЫЗ. Сипаттамамен беріңіз.

2) Манифест қатесін шешу:

The current Pod is in [CrashLoopBackOff / Pending / ImagePullBackOff] state. Келесі манифестке және "kubectl describe" шығысына сәйкес ықтималдық ретімен ықтимал түбірлік себептерді тізіп, әрқайсысы үшін тексеру пәрменін беріңіз. Манифест: [YAML] Сипаттама: [OUTPUT]

3) Қауіпсіздік/тұтастығын тексеру:

Осы Kubernetes манифестін тексеріңіз: ресурс шектеуі жоқ па, мәселе жоқ па, :соңғы тег бар ма, тым кең RBAC/рұқсат бар ма, манифестке құпия енгізілген бе? Write the findings in order of importance and with correction. Манифест: [YAML]

4) Шеңбер диаграммасына түрлендіру:

Convert the following raw manifests into a reusable Helm chart: which values should go out to values.yaml (image, replica, source, environment)? Show chart structure and sample values.yaml.Manifests: [YAML]

Әлсіз шақыру / Күшті шақыру

Weak: "Write Kubernetes YAML for my application."

Result: a no-probe, no-limit Deployment with :latest tag, embedding the secret plain; Өнімде сенімсіз және нәзік.

Күшті: "Kubernetes Deployment + Service жазыңыз. Кескін қолданбасы: 1.4.2, 3 реплика, 8080 порт. CPU 100м-500м, жад 128Mi-512Mi сұрауларды/шектерді қосады. /healthz үшін жандылық зондын қойыңыз, Құпия объектіден /дайындықты оқыңыз'. сипаттаумен бірге беріңіз».

Difference: second prompt version gives scale, resource limits, health checks and secret rule; Шығарылатын өнім өндіріске жақын және қауіпсіз.

Жалпы қателер

  • Ресурс шектеулерін орнатпау. Бір Pod бүкіл түйінді тұтына алады.
  • Денсаулықты тексеру (зонд) қосылмады. Kubernetes cannot detect a crashed/not ready Pod.
  • `:соңғы` тегі. It becomes unclear which version is running, it cannot be rolled back.
  • Құпияны тікелей Git-ке беру. Base64 шифрлау емес; оны бәрі шешеді.
  • Қате контексте/аттар кеңістігінде пәрмендерді іске қосу. Өнімде бұзылудың ең көп тараған жолы.
  • `--құрғақ жұмыс`/`айырма` өткізіп жіберу. Іске асыру алдында не болатынын көрмеу.

Қысқаша айтқанда

Kubernetes – кластер бойынша контейнерлерді автоматты түрде орналастыратын, масштабтайтын және оңтайландыратын қуатты, бірақ күрделі оркестр; Барлығы Helm үлгілендіретін манифест YAMLs арқылы анықталады. AI жылдам орналастыру/қызмет манифесттерін және Helm диаграммаларын жасайды, жұмбақ қателерді шешеді — бірақ сіз ресурс шегін, денсаулықты тексеруді, өзгермейтін сурет тегін, тар RBAC және құпия қауіпсіздік ережелерін нақты сұрауыңыз керек. --dry-run, diff және дұрыс мәтінмәнді тексеру - өнімнің бұзылуын болдырмайтын әдеттер.

Қолданбалы тапсырма

AI-ға "Орналастыру + Қызметті құру" үлгісі бар үлгі қолданба үшін манифест жасауды қамтамасыз етіңіз. Содан кейін: (1) «Қауіпсіздік/санитартты тексеру» үлгісімен ресурс шегін, тексеруді, :соңғыны және құпияны тексеріңіз; (2) мүмкіндігінше сынақ кластерінде/minikube жүйесінде kubectl apply --dry-run=server іске қосыңыз және нәтижені оқыңыз; (3) сіз жетіспейтін ең маңызды екі қауіпсіздік/беріктік элементін ескеріңіз.

бақылау парағы

  • [ ] Мен сұрауыма сурет нұсқасын, көшірмелер санын, порт пен ресурс шектеулерін қостым.
  • [ ] Мен манифестке жандылық пен дайындық зонды қостым.
  • [ ] Кескін тегі бекітілді; Мен пайдаланбадым: соңғы.
  • [ ] Құпия манифестке ендірілмеген; Мен құпия нысанды/сыртқы қойманы қолдандым.
  • [ ] Мен RBAC/рұқсаттарды минималды рұқсаттарға дейін тарылттым.
  • [ ] Өтініш берер алдында мен дұрыс контекстте екенімді және --dry-run/diff нәтижелерін растадым.