Дар бораи маъруфияти афзояндаи Кубернетес

Эй Ҳабр!

Дар охири тобистон, мо мехоҳем ба шумо хотиррасон кунем, ки мо корро дар мавзӯъ идома медиҳем Кубернитель ва тасмим гирифт, ки дар аввали моҳи июн мақолае аз Stackoverflow нашр кунад, ки вазъи ин лоиҳаро нишон медиҳад.

Дар бораи маъруфияти афзояндаи Кубернетес

Аз хондан лаззат баред!

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

Контейнерҳо ҳамчун тарҳи махсус барои ҷудокунии равандҳо дар Linux оғоз ёфтанд; контейнерҳо аз соли 2007 дохил карда шудаанд гурӯҳҳо, ва аз соли 2002 - фазоҳои ном. Контейнерҳо то соли 2008, вақте ки онҳо дастрас шуданд, беҳтар тарҳрезӣ шуданд LXC, ва Google механизми дохилии корпоративии худро таҳия кард, ки ном дорад Багг, ки дар он «тамоми кор дар контейнерхо ичро карда мешавад». Аз ин ҷо мо ба соли 2013, вақте ки аввалин барориши Docker ба амал омад ва контейнерҳо ниҳоят як ҳалли оммавии маъмул гардиданд. Дар он вақт асбоби асосии оркестрсозии контейнерӣ буд Месос, гарчанде ки вай хеле маъмул набуд. Кубернетес бори аввал соли 2015 бароварда шуд, ки пас аз он ин асбоб стандарти воқеии соҳаи оркестрсозии контейнер гардид.

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

Инфрасохтор ҳамчун YAML

Дар ҷаҳоне, ки аз лӯхтак ва шеф ба Кубернетес гузашт, яке аз бузургтарин тағирот ин гузариш аз "инфрасохтор ҳамчун код" ба "инфрасохтор ҳамчун маълумот" буд - махсусан, ба монанди YAML. Ҳама захираҳои Kubernetes, ки дорои подкастҳо, конфигуратсияҳо, намунаҳои ҷойгиршуда, ҳаҷмҳо ва ғайра мебошанд, метавонанд дар файли YAML ба осонӣ тавсиф карда шаванд. Барои намуна:

apiVersion: v1
kind: Pod
metadata:
  name: site
  labels:
    app: web
spec:
  containers:
    - name: front-end
      image: nginx
      ports:
        - containerPort: 80

Ин назар барои мутахассисони DevOps ё SRE осонтар мекунад, ки сарбории кори худро бидуни навиштани код бо забонҳо ба монанди Python ё Javascript пурра баён кунанд.

Бартариҳои дигари ташкили инфрасохтор ҳамчун маълумот иборатанд аз:

  • GitOps ё Git Operations Control Version. Ин равиш ба шумо имкон медиҳад, ки ҳама файлҳои Kubernetes YAML-ро дар анбори git нигоҳ доред, то шумо метавонед дақиқ пайгирӣ кунед, ки тағирот кай ворид шудааст, кӣ онро кардааст ва чӣ маҳз тағир ёфтааст. Ин шаффофияти амалиётро дар тамоми созмон афзоиш медиҳад ва самаранокии амалиётро тавассути рафъи номуайянӣ беҳтар мекунад, алахусус дар он ҷое, ки кормандон бояд захираҳои заруриро ҷустуҷӯ кунанд. Ҳамзамон, ба таври худкор ворид кардани тағирот ба захираҳои Kubernetes тавассути якҷоя кардани дархости кашидан осонтар мешавад.
  • Миқёспазирӣ. Вақте ки захираҳо ҳамчун YAML муайян карда мешаванд, барои операторони кластер тағир додани як ё ду рақам дар манбаи Kubernetes хеле осон мешавад ва ба ин васила тағир додани миқёси он. Kubernetes як механизми автоматикунонии уфуқии подкҳоро пешниҳод мекунад, ки онро метавон ба осонӣ муайян кард, ки дар конфигуратсияи мушаххаси ҷойгиркунӣ барои идора кардани сатҳи паст ва баланди трафик чӣ миқдори ҳадди ақал ва ҳадди аксар бандҳо лозим аст. Масалан, агар шумо конфигуратсияеро ҷойгир карда бошед, ки бо сабаби афзоиши ногаҳонии трафик иқтидори иловагиро талаб мекунад, пас maxReplicas-ро аз 10 то 20 тағир додан мумкин аст:

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: myapp
  namespace: default
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: myapp-deployment
  minReplicas: 1
  maxReplicas: 20
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50

  • Амният ва идоракунӣ. YAML барои арзёбии он, ки чӣ гуна чизҳо дар Кубернетес ҷойгир карда мешаванд, олӣ аст. Масалан, як нигаронии асосии амният ба он нигаронида шудааст, ки оё сарбории шумо ҳамчун корбари ғайриадминистратор кор мекунад. Дар ин ҳолат, ба мо шояд асбобҳое, ба монанди мусобика, тасдиқкунандаи YAML/JSON, плюс Агенти сиёсати кушод, як тасдиқкунандаи сиёсат барои таъмини он, ки контекст Context Security сарбории кори шумо имкон намедиҳад, ки контейнер бо имтиёзҳои администратор кор кунад. Агар ин талаб карда шавад, корбарон метавонанд сиёсати оддиро татбиқ кунанд рего, монанди ин:

package main

deny[msg] {
  input.kind = "Deployment"
  not input.spec.template.spec.securityContext.runAsNonRoot = true
  msg = "Containers must not run as root"
}

  • Имконот барои ҳамгироӣ бо провайдери абр. Яке аз тамоюлҳои назаррас дар технологияи баланди имрӯза иҷрои сарбории корӣ дар провайдерҳои абрии ҷамъиятӣ мебошад. Истифодаи компонент провайдери абр Kubernetes ба ҳама гуна кластер имкон медиҳад, ки бо провайдери абре, ки дар он кор мекунад, ҳамгиро шавад. Масалан, агар корбар барномаеро дар Kubernetes дар AWS иҷро кунад ва мехоҳад он барномаро тавассути хидмат фош кунад, провайдери абрӣ ба таври худкор хидматро эҷод мекунад. LoadBalancerки ба таври автоматй мувозинаткунандаи борро таъмин мекунад Amazon Elastic Load Balancerбарои интиқоли трафик ба подкастҳои барномаҳо.

Васеъшавӣ

Kubernetes хеле васеъ аст ва таҳиягарон онро дӯст медоранд. Маҷмӯи захираҳои мавҷуда вуҷуд доранд, ба монанди pods, deployment, StatefulSets, асрор, ConfigMaps, ва гайра. Дуруст аст, ки корбарон ва таҳиягарон метавонанд захираҳои дигарро дар шакл илова кунанд таърифҳои захираҳои фармоишӣ.

Масалан, агар мо захираеро муайян карданием CronTab, пас шумо метавонед ин корро кунед:

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: crontabs.my.org
spec:
  group: my.org
  versions:
    - name: v1
      served: true
      storage: true
      Schema:
        openAPIV3Schema:
          type: object
          properties:
            spec:
              type: object
              properties:
                cronSpec:
                  type: string
                  pattern: '^(d+|*)(/d+)?(s+(d+|*)(/d+)?){4}$'
                replicas:
                  type: integer
                  minimum: 1
                  maximum: 10
  scope: Namespaced
  names:
    plural: crontabs
    singular: crontab
    kind: CronTab
    shortNames:
    - ct

Баъдтар мо метавонем як манбаи CronTab-ро чунин созем:

apiVersion: "my.org/v1"
kind: CronTab
metadata:
  name: my-cron-object
spec:
  cronSpec: "* * * * */5"
  image: my-cron-image
  replicas: 5

Варианти дигари васеъшавӣ дар Kubernetes ин аст, ки таҳиякунанда метавонад изҳороти худро нависад. Оператор як раванди махсус дар кластери Кубернетес аст, ки мувофиқи "схемаи назорат" Бо ёрии оператор, корбар метавонад тавассути табодули иттилоот бо API Kubernetes идоракунии CRD-ро (маърифҳои захираҳои фармоишӣ) автоматӣ кунад.

Дар ҷомеа якчанд асбобҳо мавҷуданд, ки ба таҳиягарон эҷоди операторони худро осон мекунанд. Дар байни онҳо - Чаҳорчӯбаи оператор ва ӯ Оператор SDK. Ин SDK заминаеро фароҳам меорад, ки аз он таҳиягар метавонад зуд эҷоди операторро оғоз кунад. Фарз мекунем, ки шумо метавонед аз сатри фармон чунин чизеро оғоз кунед:

$ operator-sdk new my-operator --repo github.com/myuser/my-operator

Ин барои оператори шумо тамоми коди боиlerplate, аз ҷумла файлҳои YAML ва рамзи Голангро эҷод мекунад:

.
|____cmd
| |____manager
| | |____main.go
|____go.mod
|____deploy
| |____role.yaml
| |____role_binding.yaml
| |____service_account.yaml
| |____operator.yaml
|____tools.go
|____go.sum
|____.gitignore
|____version
| |____version.go
|____build
| |____bin
| | |____user_setup
| | |____entrypoint
| |____Dockerfile
|____pkg
| |____apis
| | |____apis.go
| |____controller
| | |____controller.go

Пас шумо метавонед API-ҳои лозимӣ ва контроллерро илова кунед, ба монанди:

$ operator-sdk add api --api-version=myapp.com/v1alpha1 --kind=MyAppService

$ operator-sdk add controller --api-version=myapp.com/v1alpha1 --kind=MyAppService

Сипас, дар ниҳоят, операторро ҷамъ кунед ва онро ба реестри контейнери худ фиристед:

$ operator-sdk build your.container.registry/youruser/myapp-operator

Агар таҳиякунанда мехоҳад, ки назорати боз ҳам бештар бошад, рамзи дегхонаи файлҳои Go метавонад тағир дода шавад. Масалан, барои тағир додани хусусиятҳои контроллер, шумо метавонед ба файл тағирот ворид кунед controller.go.

Лоиҳаи дигар КУДО, ба шумо имкон медиҳад, ки бо истифода аз файлҳои декларативии YAML изҳорот эҷод кунед. Масалан, оператори Apache Kafka тахминан муайян карда мешавад ҳамин тавр. Бо он, шумо метавонед кластери Кафкаро дар болои Kubernetes бо якчанд фармон насб кунед:

$ kubectl kudo install zookeeper
$ kubectl kudo install kafka

Ва он гоҳ онро бо фармони дигар танзим кунед:

$ kubectl kudo install kafka --instance=my-kafka-name 
            -p ZOOKEEPER_URI=zk-zookeeper-0.zk-hs:2181 
            -p ZOOKEEPER_PATH=/my-path -p BROKER_CPUS=3000m 
            -p BROKER_COUNT=5 -p BROKER_MEM=4096m 
            -p DISK_SIZE=40Gi -p MIN_INSYNC_REPLICAS=3 
            -p NUM_NETWORK_THREADS=10 -p NUM_IO_THREADS=20

Навовариҳо

Дар тӯли чанд соли охир релизҳои асосии Kubernetes ҳар чанд моҳ мебароянд - яъне аз се то чор релизҳои асосӣ дар як сол. Шумораи хусусиятхои наве, ки дар хар кадоми онхо чорй карда шудаанд, кам намешавад. Зиёда аз он, хатто дар ин айёми душвор аломати суст шудани суръат дида намешавад — бубинед, ки хозир вазъият чй гуна аст Фаъолияти лоиҳаи Kubernetes дар Github.

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

Ҷамъият

Ҷанбаи дигари муҳими маъруфияти Кубернетес ин қудрати ҷомеаи он аст. Дар соли 2015, пас аз расидан ба версияи 1.0, Kubernetes аз ҷониби сарпарастӣ карда шуд Бунёди компютерии Cloud Cloud.

Инчунин ҷамоатҳои гуногун мавҷуданд Сиг (Гурӯҳҳои махсуси таваҷҷӯҳ) ба кор дар соҳаҳои гуногуни Кубернетес ҳангоми рушди лоиҳа тамаркуз карданд. Ин гурӯҳҳо пайваста хусусиятҳои нав илова мекунанд, ки кор бо Kubernetes осонтар ва қулайтар мешаванд.

Бунёди Cloud Native инчунин CloudNativeCon/KubeCon-ро баргузор мекунад, ки дар замони навиштан он бузургтарин конфронси кушодаасос дар ҷаҳон аст. Он одатан дар як сол се маротиба баргузор мешавад, он ҳазорон мутахассисонро ҷамъ меорад, ки мехоҳанд Kubernetes ва экосистемаи онро такмил диҳанд ва инчунин хусусиятҳои наверо, ки ҳар се моҳ пайдо мешаванд, омӯзанд.

Ғайр аз он, Cloud Native Foundation дорад Комитети назорати техникй, ки дар якҷоягӣ бо SIGs нав ва мавҷударо баррасӣ мекунанд лоиҳаҳо маблағҳое, ​​ки ба экосистемаи абр нигаронида шудаанд. Аксарияти ин лоиҳаҳо ба беҳтар кардани ҷиҳатҳои тавонои Kubernetes кӯмак мекунанд.

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

Дар оянда

Яке аз мушкилоти асосие, ки таҳиягарон бояд дар оянда ҳал кунанд, ин қобилияти тамаркуз ба ҷузъиёти худи код аст, на ба инфрасохтори он, ки дар он кор мекунад. Он ба ин тамоюлҳо мувофиқат мекунад парадигмаи меъмории бе сервер, ки имруз яке аз пешкадамон мебошад. Чаҳорчӯбаҳои пешрафта аллакай вуҷуд доранд, масалан. Узвӣ и OpenFaas, ки Kubernetes-ро барои абстраксияи инфрасохтор аз таҳиякунанда истифода мебаранд.

Дар ин мақола, мо танҳо сатҳи ҳолати кунунии Кубернетесро харош кардем - дар асл, ин танҳо нӯги айсберг аст. Корбарони Kubernetes дар ихтиёри худ захираҳо, қобилиятҳо ва конфигуратсияҳои зиёде доранд.

Манбаъ: will.com

Илова Эзоҳ