Беҳтарин 10 ҳилаҳо ва маслиҳатҳои Kubernetes

Беҳтарин 10 ҳилаҳо ва маслиҳатҳои Kubernetes

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

Фармони соддатарин барои кор бо Kubernetes

Барои оғоз кардан, шояд соддатарин ва муфидтарин амал дар кор бо Kubernetes. Фармони зерин ба итмом расонидани фармон имкон медиҳад kubectl дар shell bash:

echo "source <(kubectl completion bash)" >> ~/.bashrc

Автоматӣ kubectl ба файли .bashrc навишта мешавад ва ҳар дафъае, ки қабат оғоз мешавад, ба таври худкор фаъол мешавад. Ин чопкунии фармонҳои дароз ва параметрҳои монанди all-namespaces. Муфассалтар дар Кӯмаки Kubernetes bash.

Маҳдудиятҳои хотираи пешфарз ва CPU дар фазои ном

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

Барои пешгирии ин, Kubernetes ба шумо имкон медиҳад, ки маҳдудиятҳои пешфарзро дар асоси ҳар як фазо муқаррар кунед. Онҳо дар файли yaml барои фазои мушаххас навишта шудаанд. Дар ин ҷо як мисоли чунин файл аст:

apiVersion: v1
kind: LimitRange
metadata:
  name: mem-limit-range
spec:
  limits:
  - default:
      memory: 512Mi
    defaultRequest:
      memory: 256Mi
    type: Container

Чунин ямл эҷод кунед ва ба ягон фазои ном муроҷиат кунед. Масалан, ба фазои ном limit-example. Ҳоло ҳар як контейнере, ки дар ин фазои ном ҷойгир карда шудааст, маҳдудияти 512Mi хоҳад дошт, агар барои ин контейнер дигар маҳдудияти инфиродӣ муқаррар карда нашавад.

Ҷамъоварии партовҳо дар версияҳои кӯҳнаи Kubernetes

Кубелет ба таври нобаёнӣ ҷамъоварии ахлотро вақте оғоз мекунад var/lib/docker 90% фазои мавҷудаи дискро ишғол мекунад. Аммо ин олиҷаноб аст, то Kubernetes 1.7 маҳдудияти пешфарз дар шумораи инодҳои истифодашуда вуҷуд надошт, ки ба шумораи файлҳои системаи файлӣ мувофиқат мекунанд.

Потенсиали контейнери шумо var/lib/docker метавонад танҳо 50% фазои дискро истифода барад, аммо инодҳо тамом мешаванд, ки ин боиси мушкилиҳои коргарон мегардад.

Дар версияҳои кӯҳнаи kubelet аз 1.4 то 1.6 шумо бояд ин парчамро илова кунед:

--eviction-hard
=memory.available<100Mi,nodefs.available<10%,nodefs.inodesFree<5%

Дар версияҳои 1.7 ва баъдтар ин парчам бо нобаёнӣ муқаррар карда мешавад. Аммо, версияҳои қаблӣ маҳдудияти инодро назорат намекунанд.

Minikube... Кубернетҳои хурд, вале пурқуввати маҳаллӣ

Minikube роҳи осонтарини идора кардани кластери маҳаллии Kubernetes мебошад. Он бо фармони оддӣ оғоз мешавад:

minikube start

Иҷрои ин фармон ба кластери воқеии Kubernetes дар мошини шумо кор мекунад.

Беҳтарин 10 ҳилаҳо ва маслиҳатҳои Kubernetes
Манбаи тасвир

Ҳилла дар он аст, ки чӣ гуна барномаро сохтан ва онро дар ин кластер ба таври маҳаллӣ иҷро кардан мумкин аст. Агар ба таври махсус дастур дода нашавад, тасвири Docker дар компютери шумо сохта мешавад, на дар кластер.

Барои маҷбур кардани Docker, ки тасвирро ба кластери маҳаллии Kubernetes тела диҳад, ба мошини докер фармони зерин дода мешавад:

eval $(minikube docker-env)

Акнун мо метавонем барномаҳоро дар кластери маҳаллии Kubernetes созем.

Ба kubectl дастрасиро ба ҳама надиҳед

Ин равшан ба назар мерасад, аммо агар дастаҳои сершумор як кластерро барои замимаҳои худ истифода баранд (ки Kubernetes барои он сохта шудааст), шумо набояд танҳо ба ҳама дод kubectl. Беҳтар аст, ки фармонҳоро ҷудо карда, ба ҳар яки онҳо фазои номи худро таъин кунед ва дастрасиро бо истифода аз сиёсати RBAC маҳдуд кунед.

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

Идоракунии буҷетҳои Pod

Чӣ тавр кафолат додан мумкин аст, ки вақти бекористии барнома дар кластери Kubernetes? PodDisruptionBudget ва боз PodDisruptionBudget.

Кластерҳо давра ба давра нав карда мешаванд ва гиреҳҳо холӣ мешаванд. Ҳеҷ чиз дар ҷои худ намеистад, ин воқеият аст. Ҳар як ҷойгиркунӣ бо зиёда аз як мисол бояд PDB (PodDisruptionBudget) дошта бошад. Он дар файли оддии yaml сохта шудааст, ки ба кластер татбиқ карда мешавад. Майдони фарогирии як PDB аз ҷониби селекторҳои тамғакоғаз муайян карда мешавад.

Эзоҳ: Буҷети ҲХД танҳо ҳангоми баргардонидани вайронкунии буҷет ба инобат гирифта мешавад (вайронкунии ихтиёрӣ). Дар ҳолатҳое, ки ба монанди нокомии сахтафзор, PDB кор намекунад.

Намунаи PDB:

apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
  name: app-a-pdb
spec:
  minAvailable: 2
  selector:
      matchLabels:
        app: app-a

Ду параметри асосӣ инҳоянд matchLabels и minAvailable. Параметри якум муайян мекунад, ки буҷет ба кадом барномаҳо дахл дорад. Масалан, агар ман ҷойгиркунӣ бо тамғакоғазҳо дошта бошам app: app-a и app: app-b, он гоҳ ин PDB танҳо ба аввал татбиқ мешавад.

Параметр minAvailable хангоми холй кардан (тоза кардан) гирех ба назар гирифта мешавад. Масалан, дар мисоли мо, дар вақти холӣ, ҳама ҳолатҳо хориҷ карда мешаванд app: app-a, гайр аз ду.

Ин ба шумо имкон медиҳад, ки назорат кунед, ки чанд намунаи барнома бояд дар вақти дилхоҳ кор кунад.

Мониторинги саломатии барнома

Чунин мониторинг бо ду роҳ имконпазир аст: бо истифода аз санҷишҳои Омодагӣ ё Зиндагӣ.

Санҷиши якум (тайёр будан) омодагии контейнерро ба қабули трафик муайян мекунад.

Дуюм (зиндагӣ) нишон медиҳад, ки контейнер солим аст ё бояд дубора оғоз шавад.

Конфигуратсияҳои дахлдор танҳо ба yaml барои ҷойгиркунӣ илова карда мешаванд. Дар он ҷо шумо метавонед мӯҳлатҳои вақт, вақти таъхир ва шумораи такрории санҷишҳоро муайян кунед. Тафсилоти бештар дар бораи онҳо бубинед Ҳуҷҷатҳои Kubernetes.

Тегҳо дар ҳама ҷо ҳастанд

Тамғакоғазҳо яке аз мафҳумҳои бунёдии Kubernetes мебошанд. Онҳо ба объектҳо имкон медиҳанд, ки бо ҳамдигар озодона муошират кунанд ва инчунин дар асоси нишонаҳо дархостҳо эҷод кунанд. Дар Kubernetes, шумо ҳатто метавонед ба муштарӣ равед ва рӯйдодҳоро барои барчаспҳои мушаххас тамошо кунед.

Шумо метавонед бо тегҳо қариб ҳама чизро иҷро кунед, аммо намунаи хуб эҷод кардани муҳитҳои сершумор барои иҷро кардани барномаҳо дар як кластер аст.

Фарз мекунем, ки шумо ҳамон кластерро барои dev и qa. Ин маънои онро дорад, ки шумо метавонед як барнома дошта бошед app-a, ҳамзамон дар ҳарду муҳит кор мекунанд qa и dev. Дар ин ҳолат, мо метавонем ба мисоли барнома дар муҳити мушаххас тавассути муайян кардани параметри мувофиқ дастрасӣ пайдо кунем environment. Масалан, app: app-a и environment: dev барои як муҳити зист, ва app: app-a и environment: qa барои дуюм.

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

Чизҳоро ба тартиб дароваред

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

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

Агар бо ягон сабаб шумо ҷойгиркуниро нест кунед (контейнер, тасвир, ҳар чизе), танҳо боварӣ ҳосил кунед, ки пурра тоза кунед.

Вохӯред Go

Мо маслиҳати асосиро то охир нигоҳ доштем. Забони барномасозии Go-ро омӯзед.

Kubernetes дар Go таҳия шудааст, ҳама васеъкуниҳо дар Go навишта шудаанд ва китобхонаи муштарии муштарӣ низ расман дастгирӣ карда мешавад.

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

Омӯзиши забони барномасозии Go ва азхудкунии муштарӣ-go шояд муҳимтарин маслиҳатест, ки шумо метавонед ба корбарони нави Kubernetes диҳед.

Бо дастгирии Mail.ru Cloud Solutions тарҷума шудааст

Боз чӣ хондан:

  1. Се сатҳи автоматизатсия дар Кубернетес ва тарзи истифодаи самараноки онҳо.
  2. Гиреҳҳои коргарии Kubernetes: бисёр хурд ё чанд калон?
  3. 25 Асбобҳои муфид барои ҷойгиркунӣ ва идоракунии Kubernetes.

Манбаъ: will.com

Илова Эзоҳ