Ислоҳи сӯрохиҳо дар кластери Kubernetes. Ҳисобот ва транскрипт аз DevOpsConf

Павел Селиванов, меъмори ҳалли Southbridge ва муаллими Slurm, дар DevOpsConf 2019 презентатсия кард. Ин сӯҳбат қисми яке аз мавзӯъҳои курси амиқи Kubernetes "Slurm Mega" мебошад.

Slurm Basic: Муқаддима ба Кубернетес 18—20 ноябрь дар Москва барпо мегардад.
Slurm Mega: дар зери сарпӯши Кубернетес менигарист — Москва, 22—24 ноябрь.
Slurm Online: ҳарду курсҳои Kubernetes ҳамеша дастрас.

Дар поён стенограммаи гузориш аст.

Субҳ ба хайр, ҳамкорон ва онҳое, ки ба онҳо ҳамдардӣ доранд. Имрӯз ман дар бораи бехатарӣ гап мезанам.

Мебинам, ки имруз дар толор посбонони зиёде хастанд. Пешакӣ аз шумо бахшиш мепурсам, агар ман истилоҳҳои ҷаҳони амниятро на ончунон ки барои шумо одат кардаам, истифода барам.

Ҳамин тавр шуд, ки тақрибан шаш моҳ пеш ман бо як кластери ҷамъиятии Kubernetes дучор шудам. Ҷамъиятӣ маънои онро дорад, ки шумораи n-уми фазои номҳо мавҷуд аст; дар ин фазоҳои номҳо корбарон дар фазои номи онҳо ҷудо шудаанд. Ҳамаи ин корбарон ба ширкатҳои гуногун тааллуқ доранд. Хуб, тахмин карда шуд, ки ин кластер бояд ҳамчун CDN истифода шавад. Яъне, онҳо ба шумо кластер медиҳанд, онҳо ба шумо дар он ҷо корбар медиҳанд, шумо ба он ҷо ба фазои номи худ меравед, фронтҳои худро ҷойгир кунед.

Ширкати қаблии ман кӯшиш кард, ки чунин хидматро фурӯшад. Ва аз ман хоҳиш карданд, ки кластерро кӯб кунам, то бубинам, ки ин ҳалли мувофиқ мувофиқ аст ё не.

Ман ба ин кластер омадам. Ба ман ҳуқуқҳои маҳдуд, фазои маҳдуд дода шуд. Он ҷо бачаҳо фаҳмиданд, ки бехатарӣ чист. Онҳо дар бораи назорати дастрасӣ дар асоси нақш (RBAC) дар Кубернетес хонданд - ва онҳо онро печонданд, то ман натавонам подкҳоро аз ҷойгиркунӣ алоҳида оғоз кунам. Ман мушкилотеро дар ёд надорам, ки ман кӯшиш мекардам тавассути оғоз кардани як подкаст бидуни ҷойгиркунӣ ҳал кунам, аммо ман дар ҳақиқат мехостам танҳо як подкастро оғоз кунам. Барои барори кор, ман қарор додам, ки ман дар кластер чӣ ҳуқуқҳо дорам, чӣ кор карда метавонам, чӣ кор карда наметавонам ва онҳо дар он ҷо чиро вайрон кардаанд. Дар айни замон, ман ба шумо мегӯям, ки онҳо дар RBAC чӣ нодуруст танзим кардаанд.

Ҳамин тавр рӯй дод, ки дар тӯли ду дақиқа ман як администраторро ба кластери онҳо гирифтам, ба ҳама фазоҳои номҳои ҳамсоя назар кардам ва дар он ҷо ҷабҳаҳои истеҳсолии ширкатҳоеро дидам, ки аллакай хидматро харида ва ҷойгир кардаанд. Ман базӯр худамро боздоштам, ки ба пеши касе равам ва дар саҳифаи асосӣ ягон калимаи дашном диҳам.

Ман ба шумо бо мисолҳо мегӯям, ки чӣ тавр ман ин корро кардам ва чӣ гуна худро аз ин муҳофизат кардан мумкин аст.

Аммо аввал биёед худамро муаррифӣ кунам. Номи ман Павел Селиванов аст. Ман меъмор дар Southbridge ҳастам. Ман Kubernetes, DevOps ва ҳама чизҳои зеборо мефаҳмам. Ман ва муҳандисони Ҷанубӣбриҷ ҳамаи инро месозем ва ман машварат мекунам.

Илова ба фаъолиятҳои асосии худ, мо ба наздикӣ лоиҳаҳоро бо номи Slurms оғоз кардем. Мо кӯшиш мекунем, ки қобилияти кор бо Кубернетесро каме ба омма расонем ва ба дигарон низ омӯзем, ки бо K8s кор кунанд.

Имрӯз ман дар бораи чӣ гап мезанам? Мавзӯи гузориш равшан аст - дар бораи амнияти кластери Kubernetes. Аммо ман мехоҳам фавран бигӯям, ки ин мавзӯъ хеле калон аст - ва аз ин рӯ, ман мехоҳам фавран фаҳмонам, ки ман бешубҳа дар бораи он чизе намегӯям. Ман дар бораи истилоҳоти хакконие, ки аллакай дар Интернет садҳо маротиба истифода шудаанд, ҳарф намезанам. Ҳама намудҳои RBAC ва сертификатҳо.

Ман дар бораи он чизе, ки ман ва ҳамкорони ман дар бораи амният дар кластери Кубернетес ранҷ мекашам, сӯҳбат мекунам. Мо ин мушкилотро ҳам дар байни провайдерҳое мебинем, ки кластерҳои Kubernetes пешниҳод мекунанд ва ҳам дар байни муштариёне, ки ба мо меоянд. Ва ҳатто аз муштариёне, ки аз дигар ширкатҳои маъмурии машваратӣ ба мо меоянд. Яъне миқёси фоҷиа воқеан хеле бузург аст.

Аслан се нукта вуҷуд дорад, ки ман имрӯз дар бораи он сӯҳбат хоҳам кард:

  1. Ҳуқуқҳои корбар против ҳуқуқҳои pod. Ҳуқуқҳои корбар ва ҳуқуқҳои подшоҳ як чиз нестанд.
  2. Ҷамъоварии маълумот дар бораи кластер. Ман нишон медиҳам, ки шумо метавонед тамоми маълумоти лозимиро аз кластер бидуни ҳуқуқи махсус дар ин кластер ҷамъ кунед.
  3. Ҳамлаи DoS ба кластер. Агар мо маълумот ҷамъ карда натавонем, мо метавонем кластерро дар ҳама ҳолат ҷойгир кунем. Ман дар бораи ҳамлаҳои DoS ба унсурҳои идоракунии кластер гап мезанам.

Чизи дигари умумие, ки ман зикр хоҳам кард, он чизест, ки ман ҳамаи инро санҷидам, ки ман бешубҳа гуфта метавонам, ки ҳама кор мекунад.

Мо ҳамчун асос насб кардани кластери Kubernetes бо истифода аз Kubespray мегирем. Агар касе намедонад, ин воқеан маҷмӯи нақшҳо барои Ansible аст. Мо онро дар кори худ пайваста истифода мебарем. Чизи хуб он аст, ки шумо метавонед онро дар ҳама ҷо ғелонед - шумо метавонед онро ба пораҳои оҳан ё дар ҷое ба абр печонед. Як усули насбкунӣ барои ҳама чиз кор мекунад.

Дар ин кластер ман Kubernetes v1.14.5 хоҳам дошт. Тамоми кластери Cube, ки мо онро баррасӣ хоҳем кард, ба фазои номҳо тақсим карда шудааст, ҳар як фазои ном ба дастаи алоҳида тааллуқ дорад ва аъзоёни ин даста ба ҳар як фазои ном дастрасӣ доранд. Онҳо наметавонанд ба фазои номҳои гуногун бираванд, танҳо ба номи худашон. Аммо як ҳисоби маъмурӣ вуҷуд дорад, ки ба тамоми кластер ҳуқуқ дорад.

Ислоҳи сӯрохиҳо дар кластери Kubernetes. Ҳисобот ва транскрипт аз DevOpsConf

Ман ваъда додам, ки аввалин чизе, ки мо мекунем, гирифтани ҳуқуқи администратор ба кластер аст. Ба мо як паҳлӯи махсус омодашуда лозим аст, ки кластери Кубернетесро мешиканад. Ба мо танҳо лозим аст, ки онро ба кластери Kubernetes татбиқ кунем.

kubectl apply -f pod.yaml

Ин подкаст ба яке аз устодони кластери Кубернетес мерасад. Ва пас аз ин кластер ба мо файлеро бо номи admin.conf бармегардонад. Дар Cube, ин файл ҳамаи сертификатҳои администраторро нигоҳ медорад ва ҳамзамон API кластериро танзим мекунад. Ба фикрам, 98% кластерҳои Kubernetes дастрасии администраторро ин қадар осон аст.

Такрор мекунам, ки ин подкаст аз ҷониби як таҳиягар дар кластери шумо сохта шудааст, ки барои ҷойгир кардани пешниҳодҳои худ дар як фазои хурд дастрасӣ дорад, ҳамааш аз ҷониби RBAC маҳкам карда мешавад. Ӯ ҳуқуқ надошт. Аммо бо вуҷуди ин шаҳодатнома баргардонида шуд.

Ва ҳоло дар бораи як pod махсус омода. Мо онро дар ҳама гуна тасвир иҷро мекунем. Биёед debian: Jessie-ро мисол гирем.

Мо ин чизро дорем:

tolerations:
-   effect: NoSchedule 
    operator: Exists 
nodeSelector: 
    node-role.kubernetes.io/master: "" 

Таҳаммулпазирӣ чист? Мастерҳо дар кластери Кубернетес одатан бо чизе ишора карда мешаванд, ки доғ номида мешаванд. Ва моҳияти ин "сироят" дар он аст, ки дар он гуфта мешавад, ки подкҳоро ба гиреҳҳои усто таъин кардан мумкин нест. Аммо касе намехохад, ки дар ягон подшох нишон дихад, ки он ба «сироят» тобовар аст. Бахши таҳаммул танҳо мегӯяд, ки агар ягон гиреҳ NoSchedule дошта бошад, пас гиреҳи мо ба чунин сироят таҳаммул мекунад - ва ҳеҷ мушкиле вуҷуд надорад.

Илова бар ин, мо мегӯем, ки зери мо на танҳо таҳаммулпазир аст, балки инчунин мехоҳад, ки устодро махсус ҳадаф қарор диҳад. Зеро устохо чизи лазизтарине, ки ба мо лозим аст — хамаи шаходатномахо доранд. Аз ин рӯ, мо мегӯем nodeSelector - ва мо тамғаи стандартии устодонро дорем, ки ба шумо имкон медиҳад, ки аз ҳамаи гиреҳҳои кластер маҳз ҳамон гиреҳҳоеро интихоб кунед, ки устоданд.

Бо ин ду бахш у хатман ба назди усто меояд. Ва ба ӯ иҷозат дода мешавад, ки дар он ҷо зиндагӣ кунад.

Аммо танхо ба назди устод омадан барои мо басанда нест. Ин ба мо чизе намедиҳад. Пас, дар оянда мо ин ду чизро дорем:

hostNetwork: true 
hostPID: true 

Мо муайян мекунем, ки подтаи мо, ки мо оғоз мекунем, дар фазои номи ядро, дар фазои номи шабака ва дар фазои номи PID зиндагӣ хоҳад кард. Пас аз он ки поддон дар усто оғоз мешавад, он метавонад ҳама интерфейсҳои воқеии зиндаи ин гиреҳро бубинад, тамоми трафикро гӯш кунад ва PID-и ҳама равандҳоро бубинад.

Он гоҳ сухан дар бораи чизҳои хурд аст. etcd гиред ва он чизеро, ки мехоҳед, хонед.

Аз ҳама ҷолиб ин хусусияти Kubernetes аст, ки дар он ҷо ба таври нобаёнӣ мавҷуд аст.

volumeMounts:
- mountPath: /host 
  name: host 
volumes:
- hostPath: 
    path: / 
    type: Directory 
  name: host 

Ва моҳияти он дар он аст, ки мо метавонем дар паҳлӯ бигӯем, ки мо ҳатто бидуни ҳуқуқ ба ин кластер оғоз мекунем, ки мо мехоҳем ҳаҷми навъи hostPath эҷод кунем. Ин маънои онро дорад, ки роҳро аз мизбоне, ки мо онро оғоз хоҳем кард - ва онро ҳамчун ҳаҷм гирифтан. Ва он гоҳ мо онро ном меномем: host. Мо тамоми ин hostPath-ро дар дохили подк ҷойгир мекунем. Дар ин мисол, ба феҳристи / host.

Ман боз такрор мекунам. Мо ба поддон гуфтем, ки назди усто биёяд, дар он ҷо hostNetwork ва hostPID-ро гиред - ва тамоми решаи устодро дар дохили ин подкаст насб кунед.

Шумо мефаҳмед, ки дар Debian мо баш кор мекунем ва ин баш зери реша кор мекунад. Яъне мо танҳо бе ягон ҳуқуқ дар кластери Кубернетес реша дар устод гирифтем.

Пас тамоми вазифа аз он иборат аст, ки ба зерпеҳристи /host /etc/kubernetes/pki равед, агар хато накунам, ҳама шаҳодатномаҳои асосии кластерро дар он ҷо гиред ва мутаносибан мудири кластер шавед.

Агар шумо ба он ин тавр назар кунед, инҳоянд баъзе аз ҳуқуқҳои хатарнок дар pods - новобаста аз он ки корбар кадом ҳуқуқҳоро дорад:
Ислоҳи сӯрохиҳо дар кластери Kubernetes. Ҳисобот ва транскрипт аз DevOpsConf

Агар ман ҳуқуқ дошта бошам, ки поддонро дар баъзе фазои номи кластер идора кунам, пас ин подкаст ба таври нобаёнӣ ин ҳуқуқҳоро дорад. Ман подкҳои имтиёзнокро идора карда метавонам ва инҳо умуман ҳама ҳуқуқҳо ҳастанд, амалан дар гиреҳ реша мегиранд.

Дӯстдоштаи ман корбари Root аст. Ва Kubernetes дорои ин хосият Run As Non-Root мебошад. Ин як намуди муҳофизат аз ҳакер аст. Оё шумо медонед, ки "вируси молдавӣ" чист? Агар шумо ногаҳон ҳакер бошед ва ба кластери ман Kubernetes биёед, пас мо, маъмурони камбизоат, мепурсем: "Лутфан, дар подкастҳои худ нишон диҳед, ки кластери маро бо он ҳакер мекунед, ҳамчун реша надошта бошед. Дар акси ҳол, чунин мешавад, ки шумо ин равандро дар подкоҳи худ зери реша иҷро мекунед ва ҳакер кардани ман барои шумо хеле осон хоҳад буд. Лутфан худро аз худ муҳофизат кунед."

Ҳаҷми роҳи мизбон, ба андешаи ман, роҳи зудтарини ба даст овардани натиҷаи дилхоҳ аз кластери Kubernetes аст.

Аммо бо ин ҳама чӣ бояд кард?

Фикре, ки бояд ба ҳар як маъмури муқаррарӣ, ки бо Кубернетес дучор меояд, ин аст: "Бале, ман ба шумо гуфтам, Кубернетес кор намекунад. Дар он сӯрохиҳо мавҷуданд. Ва тамоми Cube беҳуда аст." Воқеан, ҳуҷҷатгузорӣ ҳаст ва агар ба он ҷо нигоҳ кунед, бахше ҳаст Сиёсати амнияти Pod.

Ин объекти ямл аст - мо метавонем онро дар кластери Kubernetes эҷод кунем, ки ҷанбаҳои амниятро махсусан дар тавсифи подкҳо назорат мекунад. Яъне, дар асл, он ҳуқуқҳои истифодаи ҳама гуна hostNetwork, hostPID, намудҳои муайяни ҳаҷмро, ки ҳангоми оғозёбӣ дар қуттиҳо ҳастанд, назорат мекунад. Бо ёрии Pod Security Policy, ҳамаи инро метавон тавсиф кард.

Чизи ҷолибтарин дар бораи сиёсати амнияти Pod он аст, ки дар кластери Kubernetes, ҳама насбкунандагони PSP на танҳо ба ҳеҷ ваҷҳ тавсиф карда нашудаанд, онҳо ба таври оддӣ хомӯш карда мешаванд. Pod Security Policy бо истифода аз плагини қабул фаъол карда мешавад.

Хуб, биёед сиёсати Pod Security-ро дар кластер ҷойгир кунем, биёед бигӯем, ки мо дар фазои номҳо баъзе подкастҳои хидматрасонӣ дорем, ки ба онҳо танҳо маъмурон дастрасӣ доранд. Фарз мекунем, ки дар ҳама ҳолатҳои дигар, поддонҳо ҳуқуқҳои маҳдуд доранд. Азбаски эҳтимолан таҳиягарон лозим нест, ки дар кластери шумо подкҳои имтиёзнокро идора кунанд.

Ва ба назар чунин мерасад, ки дар мо ҳама чиз хуб аст. Ва кластери Kubernetes-и моро дар ду дақиқа ҳакер кардан мумкин нест.

Мушкилот вуҷуд дорад. Эҳтимол, агар шумо кластери Kubernetes дошта бошед, пас дар кластери шумо мониторинг насб карда мешавад. Ман ҳатто то ҳадде пешгӯӣ мекардам, ки агар кластери шумо мониторинг дошта бошад, он Прометей номида мешавад.

Он чизе ки ман ба шумо мегӯям, ҳам барои оператори Prometheus ва ҳам Prometheus, ки дар шакли тозаи он дода шудааст, эътибор хоҳад дошт. Савол ин аст, ки агар ман администраторро ба кластер ин қадар зуд ворид карда натавонам, пас ин маънои онро дорад, ки ман бояд бештар ҷустуҷӯ кунам. Ва ман метавонам бо ёрии мониторинги шумо ҷустуҷӯ кунам.

Эҳтимол ҳама як мақолаҳоро дар бораи Habré мехонанд ва мониторинг дар фазои мониторинг ҷойгир аст. Диаграммаи Ҳелм тақрибан барои ҳама якхела номида мешавад. Ман гумон мекунам, ки агар шумо стабил/прометейро насб кунед, шумо тақрибан бо ҳамон номҳо хоҳед буд. Ва эҳтимоли зиёд ба ман лозим нест, ки номи DNS-ро дар кластери шумо тахмин кунам. Зеро он стандарт аст.

Ислоҳи сӯрохиҳо дар кластери Kubernetes. Ҳисобот ва транскрипт аз DevOpsConf

Минбаъд мо як н.-и муайян дорем, ки дар он шумо метавонед як подкоҳи муайянро иҷро кунед. Ва он гоҳ, ки аз ин қуттӣ кор кардан хеле осон аст:

$ curl http://prometheus-kube-state-metrics.monitoring 

prometheus-kube-state-metrics яке аз содиркунандагони Prometheus мебошад, ки ченакҳоро аз худи API Kubernetes ҷамъоварӣ мекунад. Дар он ҷо маълумоти зиёде мавҷуд аст, ки дар кластери шумо чӣ кор мекунад, он чист, шумо бо он чӣ мушкилот доред.

Ҳамчун мисоли оддӣ:

kube_pod_container_info{namespace=“kube-system”,pod=”kube-apiserver-k8s- 1″,контейнер=”kube-apiserver”,тасвир=

"gcr.io/google-containers/kube-apiserver:v1.14.5"

,image_id=»docker-pullable://gcr.io/google-containers/kube- apiserver@sha256:e29561119a52adad9edc72bfe0e7fcab308501313b09bf99df4a96 38ee634989″,container_id=»docker://7cbe7b1fea33f811fdd8f7e0e079191110268f2 853397d7daf08e72c22d3cf8b»} 1

Бо қабули дархости оддии curl аз як поди беимтиёз, шумо метавонед маълумоти зеринро гиред. Агар шумо намедонед, ки кадом версияи Kubernetes кор карда истодаед, он ба осонӣ ба шумо мегӯяд.

Ва аз ҳама ҷолиб он аст, ки ба ғайр аз дастрасӣ ба kube-state-metrics, шумо метавонед ба осонӣ ба худи Prometheus бевосита дастрасӣ пайдо кунед. Шумо метавонед аз он ҷо ченакҳоро ҷамъ кунед. Шумо ҳатто метавонед аз он ҷо метрика созед. Ҳатто аз ҷиҳати назариявӣ, шумо метавонед чунин дархостро аз кластер дар Prometheus созед, ки он танҳо онро хомӯш мекунад. Ва мониторинги шумо аз кластер тамоман кор намекунад.

Ва дар ин ҷо саволе ба миён меояд, ки оё ягон мониторинги беруна мониторинги шуморо назорат мекунад? Ман танҳо имконият пайдо кардам, ки дар кластери Kubernetes бе ягон оқибат барои худам кор кунам. Шумо ҳатто намедонед, ки ман дар он ҷо кор мекунам, зеро дигар мониторинг нест.

Мисли PSP, мушкилот дар он аст, ки ҳамаи ин технологияҳои зебо - Кубернетес, Прометей - онҳо кор намекунанд ва пур аз сӯрохҳо ҳастанд. На дарвоқеъ.

Чунин чизе вуҷуд дорад - Сиёсати шабака.

Агар шумо администратори муқаррарӣ бошед, пас эҳтимолан шумо дар бораи Сиёсати шабака медонед, ки ин танҳо як ямл аст, ки аллакай дар кластер шумораи зиёди онҳо мавҷуданд. Ва баъзе сиёсатҳои шабакавӣ бешубҳа лозим нестанд. Ва ҳатто агар шумо хонед, ки Сиёсати шабака чист, ки он як девори ямл-и Кубернетес аст, он ба шумо имкон медиҳад, ки ҳуқуқҳои дастрасиро байни фазоҳои номҳо, байни подкҳо маҳдуд кунед, пас шумо бешубҳа қарор кардед, ки брандмауэр дар формати yaml дар Кубернетес ба абстраксияҳои навбатӣ асос ёфтааст. ... Не, не. Ин бешубҳа лозим нест.

Ҳатто агар шумо ба мутахассисони амниятии худ нагуфтед, ки бо истифода аз Kubernetes шумо метавонед як девори хеле осон ва оддӣ созед ва як девори хеле гранулӣ. Агар онҳо то ҳол инро намедонанд ва шуморо нороҳат накунанд: "Хуб, ба ман деҳ, ба ман деҳ..." Пас, дар ҳар сурат, ба шумо Сиёсати шабакавӣ лозим аст, то дастрасӣ ба баъзе ҷойҳои хидматрасониро, ки аз кластери шумо кашида мешавад, манъ кунад. бе ягон иҷозат.

Тавре ки дар мисоли ман овардаам, шумо метавонед метрикаи ҳолати кубро аз ҳама гуна фазои номҳо дар кластери Кубернетес бе ягон ҳуқуқ барои ин кор кунед. Сиёсати шабака дастрасиро аз ҳама фазоҳои номҳои дигар ба фазои номҳои мониторинг бастааст ва ин аст: дастрасӣ нест, мушкилот нест. Дар ҳама диаграммаҳои мавҷуда, ҳам Prometheus стандартӣ ва ҳам Prometheus, ки дар оператор ҷойгиранд, дар арзишҳои руль танҳо як вариант вуҷуд дорад, то сиёсати шабакаро барои онҳо фаъол созад. Шумо танҳо бояд онро фаъол кунед ва онҳо кор хоҳанд кард.

Дар ин ҷо воқеан як мушкилот вуҷуд дорад. Шумо ҳамчун администратори оддии ришдор ҳастед, эҳтимол шумо қарор кардед, ки сиёсати шабака лозим нест. Ва пас аз хондани ҳама гуна мақолаҳо дар бораи захираҳо ба монанди Habr, шумо қарор кардед, ки фланел, махсусан бо режими ҳост-gateway, беҳтарин чизест, ки шумо интихоб карда метавонед.

Чӣ бояд кард?

Шумо метавонед кӯшиш кунед, ки ҳалли шабакаро, ки дар кластери Kubernetes-и худ доред, дубора ҷойгир кунед ва кӯшиш кунед, ки онро бо чизи функсионалӣ иваз кунед. Масалан, барои ҳамон Калико. Аммо ман мехоҳам фавран бигӯям, ки вазифаи тағир додани ҳалли шабака дар кластери кории Kubernetes хеле ночиз аст. Ман онро ду маротиба ҳал кардам (ҳарду ҳам аз ҷиҳати назариявӣ), аммо мо ҳатто нишон додем, ки чӣ тавр инро дар Slurms иҷро кардан мумкин аст. Барои донишҷӯёни худ мо нишон додем, ки чӣ гуна ҳалли шабакаро дар кластери Kubernetes тағир додан мумкин аст. Аслан, шумо метавонед кӯшиш кунед, ки боварӣ ҳосил кунед, ки дар кластери истеҳсолӣ бекорӣ вуҷуд надорад. Аммо шумо эҳтимол муваффақ нахоҳед шуд.

Ва мушкилот воқеан хеле содда ҳал карда мешавад. Дар кластер сертификатҳо мавҷуданд ва шумо медонед, ки мӯҳлати шаҳодатномаҳои шумо пас аз як сол ба охир мерасад. Хуб, ва одатан як ҳалли муқаррарӣ бо сертификатҳо дар кластер - чаро мо хавотир мешавем, мо дар наздикии кластери нав мегузорем, бигзор кӯҳна пӯсида шавад ва ҳама чизро аз нав ҷойгир кунед. Дуруст, вақте ки он пӯсида мешавад, мо бояд як рӯз нишинем, аммо дар ин ҷо кластери нав аст.

Вақте ки шумо як кластери навро мебаред, дар айни замон ба ҷои фланел Калико гузоред.

Чӣ бояд кард, агар шаҳодатномаҳои шумо барои сад сол дода шаванд ва шумо кластерро дубора ҷойгир карданӣ нахоҳед шуд? Чунин чизе ба монанди Kube-RBAC-Proxy вуҷуд дорад. Ин як таҳияи хеле аҷиб аст, он ба шумо имкон медиҳад, ки худро ҳамчун контейнери паҳлӯ ба ҳама гуна подкаст дар кластери Кубернетес ҷойгир кунед. Ва он воқеан ба ин подкаст тавассути худи RBAC аз Kubernetes иҷозат медиҳад.

Як мушкилот вуҷуд дорад. Қаблан, ин ҳалли Kube-RBAC-Proxy дар Prometheus оператор сохта шуда буд. Аммо баъд ӯ рафт. Ҳоло версияҳои муосир ба он такя мекунанд, ки шумо сиёсати шабака доред ва бо истифода аз онҳо онро пӯшед. Ва аз ин рӯ, мо бояд диаграммаро каме аз нав нависем. Дар асл, агар шумо ба ин анбор, мисолҳое мавҷуданд, ки чӣ гуна онро ҳамчун варақаҳои канорӣ истифода бурдан мумкин аст ва диаграммаҳо бояд ба ҳадди ақал аз нав навишта шаванд.

Боз як мушкили хурде ҳаст. Прометей ягона шахсе нест, ки метрикаи худро ба касе медиҳад. Ҳама ҷузъҳои кластерии Kubernetes мо инчунин метавонанд ченакҳои худро баргардонанд.

Аммо тавре ки ман гуфтам, агар шумо ба кластер дастрасӣ пайдо карда натавонед ва маълумот ҷамъ кунед, пас шумо ҳадди аққал каме зарар расонида метавонед.

Ҳамин тавр, ман ба зудӣ ду роҳро нишон медиҳам, ки чӣ гуна кластери Кубернетесро вайрон кардан мумкин аст.

Вақте ки ман инро ба шумо мегӯям, шумо хандед, ин ду ҳолати воқеии ҳаёт мебошанд.

Усули якум. Камшавии захираҳо.

Биёед боз як поди махсусро ба кор андозем. Он дорои чунин бахш хоҳад буд.

resources: 
    requests: 
        cpu: 4 
        memory: 4Gi 

Тавре ки шумо медонед, дархостҳо миқдори CPU ва хотираест, ки дар ҳост барои подкастҳои мушаххас бо дархостҳо ҳифз шудаанд. Агар мо дар кластери Kubernetes як ҳости чор-аслӣ дошта бошем ва чаҳор подкахи CPU ба он ҷо бо дархостҳо оянд, ин маънои онро дорад, ки дигар подкҳои дорои дархост ба ин ҳост омада наметавонанд.

Агар ман чунин подборро иҷро кунам, пас ман фармонро иҷро мекунам:

$ kubectl scale special-pod --replicas=...

Он гоҳ ҳеҷ каси дигар наметавонад ба кластери Kubernetes ҷойгир карда шавад. Зеро ҳамаи гиреҳҳо аз дархостҳо тамом мешаванд. Ва ҳамин тавр ман кластери Kubernetes-и шуморо қатъ мекунам. Агар ман ин корро бегоҳ кунам, ман метавонам ҷойгиркуниро барои муддати тӯлонӣ қатъ кунам.

Агар мо бори дигар ба ҳуҷҷатҳои Kubernetes нигоҳ кунем, мо ин чизеро мебинем, ки доираи маҳдуд номида мешавад. Он захираҳоро барои объектҳои кластер муқаррар мекунад. Шумо метавонед объекти Диапазони Маҳдудро дар yaml нависед, онро ба фазои номҳои муайян татбиқ кунед - ва он гоҳ дар ин фазои ном шумо метавонед бигӯед, ки шумо захираҳои пешфарз, ҳадди аксар ва минималиро барои pods доред.

Бо ёрии чунин чизе, мо метавонем корбаронро дар фазоҳои мушаххаси маҳсулоти гурӯҳҳо бо қобилияти нишон додани ҳама гуна чизҳои бад дар қуттиҳои худ маҳдуд кунем. Аммо, мутаассифона, ҳатто агар шумо ба корбар бигӯед, ки онҳо наметавонанд подкладҳоро бо дархости зиёда аз як CPU оғоз кунанд, чунин як фармони миқёси олиҷаноб мавҷуд аст ё онҳо метавонанд тавассути панели асбобҳо миқёсро иҷро кунанд.

Ва аз ин ҷост, ки усули рақами дуюм аз ин ҷост. Мо 11 дона пуст мебарорем. Ин ёздах миллиард аст. Ин на аз он сабаб аст, ки ман чунин ракамро пеш гирифтаам, балки худам дидам.

Ҳикояи воқеӣ. Бевактии бегохй аз кабинет баромаданй будам. Ман як гурӯҳи таҳиягаронро мебинам, ки дар кунҷ нишастаанд ва бо ноутбугҳои худ бо ҳаяҷон коре мекунанд. Ман ба назди бачаҳо рафта мепурсам: "Ба шумо чӣ шуд?"

Каме пештар, тахминан соати нӯҳи бегоҳ, яке аз таҳиягарон барои рафтан ба хона омодагӣ медид. Ва ман қарор додам: "Ман ҳоло аризаамро то як андоза мебардорам." Яктоашро пахш кардам, аммо интернет каме суст шуд. Боз якеро пахш кард, якеро пахш кард ва Enter-ро пахш кард. Ман ҳар чизеро, ки метавонистам, задам. Пас аз он Интернет ба ҳаёт омад - ва ҳама чиз ба ин рақам коҳиш ёфт.

Дуруст аст, ки ин ҳикоя дар Кубернетес рӯй надодааст, он вақт он Nomad буд. Он бо он анҷом ёфт, ки пас аз як соати кӯшиши мо барои боздоштани Nomad аз кӯшишҳои доимии миқёс, Nomad ҷавоб дод, ки вай миқёсро бас намекунад ва дигар коре намекунад. — Хаста шудам, меравам. Ва ӯ печид.

Табиист, ки ман кӯшиш кардам, ки дар Кубернетес низ ҳамин тавр кунам. Кубернетес аз ёздаҳ миллиард пуд қаноатманд набуд, гуфт: "Ман наметавонам. Аз муҳофизати даҳони дохилӣ зиёдтар аст." Аммо 1 дона метавонад.

Дар ҷавоб ба як миллиард, Cube ба худ нарафт. Вай дар ҳақиқат ба миқёскунӣ оғоз кард. Чӣ қадаре ки ин раванд пеш равад, барои эҷод кардани қуттиҳои нав ҳамон қадар вақт лозим буд. Аммо раванд ба ҳар ҳол идома дошт. Ягона мушкилӣ дар он аст, ки агар ман метавонам подкладҳоро бемаҳдуд дар фазои номи худ оғоз кунам, пас ҳатто бидуни дархост ва маҳдудият ман метавонам он қадар подкҳоро бо баъзе вазифаҳо оғоз кунам, ки бо ёрии ин вазифаҳо гиреҳҳо дар хотира, дар CPU ҷамъ мешаванд. Вақте ки ман ин қадар подкҳоро ба кор мебарам, маълумот аз онҳо бояд ба анбор дохил шавад, яъне ва ғайра. Ва ҳангоме ки ба он ҷо маълумоти аз ҳад зиёд ворид мешавад, анбор хеле оҳиста бармегардад - ва Кубернетес кунд мешавад.

Ва боз як мушкили дигар... Тавре ки шумо медонед, унсурҳои идоракунии Kubernetes на як чизи марказӣ, балки якчанд ҷузъҳо мебошанд. Аз чумла, мудири контролер, планкаш ва гайра мавчуданд. Ҳамаи ин бачаҳо дар як вақт ба корҳои нодаркор ва беақл шурӯъ мекунанд, ки бо мурури замон вақти бештар ва бештарро мегирад. Менеҷери контроллер подкҳои нав эҷод мекунад. Барномасоз кӯшиш мекунад, ки барои онҳо гиреҳи нав пайдо кунад. Эҳтимол дорад, ки шумо гиреҳҳои навро дар кластери худ ба зудӣ тамом кунед. Кластери Kubernetes сусттар ва сусттар ба кор шурӯъ мекунад.

Аммо ман қарор додам, ки боз ҳам бештартар равам. Тавре ки шумо медонед, дар Кубернетес чунин чизе вуҷуд дорад, ки хидмат ном дорад. Хуб, бо нобаёнӣ дар кластерҳои шумо, эҳтимолан, хидмат бо истифода аз ҷадвалҳои IP кор мекунад.

Масалан, агар шумо як миллиард pods кор кунед ва пас аз скрипт истифода баред, то Kubernetisро маҷбур созед, ки хидматҳои нав эҷод кунад:

for i in {1..1111111}; do
    kubectl expose deployment test --port 80  
        --overrides="{"apiVersion": "v1", 
           "metadata": {"name": "nginx$i"}}"; 
done 

Дар ҳама гиреҳҳои кластер тақрибан дар як вақт қоидаҳои бештари нави iptables тавлид мешаванд. Ғайр аз он, барои ҳар як хидмат як миллиард қоидаҳои iptables тавлид мешаванд.

Ман ин ҳама чизро дар чанд ҳазор, то даҳ нафар тафтиш кардам. Ва мушкилот дар он аст, ки аллакай дар ин остона иҷро кардани ssh ба гиреҳ хеле мушкил аст. Зеро бастаҳо, ки аз занҷирҳои зиёд гузаштаанд, худро на он қадар хуб ҳис мекунанд.

Ва ин ҳам бо кӯмаки Кубернетес ҳал карда мешавад. Чунин объекти квота захиравӣ вуҷуд дорад. Шумораи захираҳо ва объектҳои дастрасро барои фазои номҳо дар кластер муқаррар мекунад. Мо метавонем дар ҳар як фазои номи кластери Kubernetes объекти yaml эҷод кунем. Бо истифода аз ин объект, мо метавонем бигӯем, ки мо миқдори муайяни дархостҳо ва маҳдудиятҳое дорем, ки барои ин фазои номҳо ҷудо карда шудаанд ва пас мо гуфта метавонем, ки дар ин фазои номҳо 10 хидмат ва 10 подкро эҷод кардан мумкин аст. Ва як таҳиягари танҳо метавонад бегоҳ худро буғ кунад. Кубернетес ба ӯ мегӯяд: "Шумо наметавонед қуттиҳои худро ба ин миқдор андоза кунед, зеро захира аз квота зиёд аст." Ана, масъала ҳал шуд. Ҳуҷҷатҳо дар ин ҷо.

Дар ин бобат як нуктаи проблемавй ба миён меояд. Шумо ҳис мекунед, ки эҷод кардани фазои ном дар Кубернетес то чӣ андоза мушкил шудааст. Барои ба вучуд овардани он мо бояд бисьёр чизхоро ба назар гирем.

Квота захираҳо + Диапазони лимити + RBAC
• Фазои ном эҷод кунед
• Дар дохили доираи маҳдуд эҷод кунед
• Квота дар дохили захираҳоро эҷод кунед
• Барои CI ҳисоби хидматӣ эҷод кунед
• Барои CI ва корбарон нақши ҳалкунанда эҷод кунед
• Ба таври ихтиёрӣ қуттиҳои хидматрасонии заруриро оғоз кунед

Аз ин рӯ, ман мехостам аз фурсат истифода бурда, дар бораи пешрафтҳои худ нақл кунам. Чунин чизе вуҷуд дорад, ки оператори SDK номида мешавад. Ин як роҳест барои кластери Kubernetes барои навиштани операторҳо барои он. Шумо метавонед бо истифода аз Ansible изҳорот нависед.

Дар аввал он дар Ansible навишта шуда буд ва баъд ман дидам, ки оператори SDK ҳаст ва нақши Ansible-ро ба оператор аз нав навиштам. Ин изҳорот ба шумо имкон медиҳад, ки объектеро дар кластери Kubernetes эҷод кунед, ки фармон ном дорад. Дар дохили фармон он ба шумо имкон медиҳад, ки муҳити ин фармонро дар yaml тасвир кунед. Ва дар муҳити даста, он ба мо имкон медиҳад тавсиф кунем, ки мо ин қадар захираҳоро ҷудо карда истодаем.

Хеле кам тамоми ин процесси мураккабро осон гардонад.

Ва дар хулоса. Бо ин ҳама чӣ бояд кард?
Аввал. Сиёсати амнияти Pod хуб аст. Ва сарфи назар аз он, ки ҳеҷ яке аз насбкунандагони Kubernetes онҳоро то имрӯз истифода намебарад, шумо ба ҳар ҳол бояд онҳоро дар кластерҳои худ истифода баред.

Сиёсати шабака танҳо як хусусияти нолозим нест. Ин дар ҳақиқат дар кластер лозим аст.

LimitRange/ResourceQuota - вақти истифодаи он расидааст. Мо онро кайҳо пештар истифода мебурдем ва муддати тӯлонӣ ман боварӣ доштам, ки ҳама онро истифода мебаранд. Маълум шуд, ки ин кам аст.

Илова бар он чизе, ки ман дар давоми гузориш зикр кардам, хусусиятҳои ҳуҷҷатнашуда мавҷуданд, ки ба шумо имкон медиҳанд ба кластер ҳамла кунед. Ба наздикӣ бароварда шуд таҳлили васеи осебпазирии Kubernetes.

Баъзе чизҳо хеле аламовар ва аламоваранд. Масалан, дар шароити муайян, кубҳо дар кластери Кубернетес метавонанд мундариҷаи директорияи warlocks-ро ба корбари беиҷозат диҳанд.

дар ин ҷо Дастурҳо дар бораи чӣ гуна такрор кардани ҳама чизе, ки ман ба шумо гуфтам, мавҷуданд. Файлҳое мавҷуданд, ки намунаҳои истеҳсолии ResourceQuota ва Pod Security Policy чӣ гунаанд. Ва шумо метавонед ҳамаи инро ламс кунед.

Ташаккур ба ҳама.

Манбаъ: will.com

Илова Эзоҳ