Кубернетестің өсіп келе жатқан танымалдығы туралы

Эй Хабр!

Жаздың соңында біз тақырыппен жұмысты жалғастыратынымызды еске салғымыз келеді Kubernetes және маусым айының басында осы жобадағы жағдайды көрсететін Stackoverflow мақаласын жариялауды ұйғарды.

Кубернетестің өсіп келе жатқан танымалдығы туралы

Оқуға ләззат алыңыз!

Осы мақаланы жазу кезінде Кубернетестің жасы шамамен. алты жаста, және соңғы екі жыл ішінде оның танымалдылығы соншалықты өсті, ол дәйектілікпен рейтингте ең сүйікті платформалар. Кубернетес биыл үшінші орында. Ескерту: Kubernetes - бұл контейнерлік жұмыс жүктемелерін орындауға және ұйымдастыруға арналған платформа.

Контейнерлер Linux жүйесінде процестерді оқшаулауға арналған арнайы дизайн ретінде басталды; контейнерлер 2007 жылдан бастап енгізілген топтар, ал 2002 жылдан бастап – аттар кеңістігі. Контейнерлер қол жетімді болған кезде 2008 жылға қарай жақсырақ жобаланған LXC, және Google өзінің ішкі корпоративтік механизмін әзірледі Борг, мұнда «барлық жұмыс контейнерлерде орындалады». Осы жерден біз Docker бірінші шығарылымы орын алған 2013 жылға қарай алға жылжып, ақырында контейнерлер танымал жаппай шешімге айналды. Ол кезде контейнерлік оркестрдің негізгі құралы болды Мезос, ол өте танымал болмаса да. Kubernetes алғаш рет 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 операцияларының нұсқасын басқару. Бұл тәсіл барлық 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 Kubernetes-те заттардың қалай орналастырылғанын бағалау үшін тамаша. Мысалы, негізгі қауіпсіздік мәселесі сіздің жұмыс жүктемелеріңіз әкімші емес пайдаланушы ретінде іске қосылатынына қатысты. Бұл жағдайда бізге құралдар қажет болуы мүмкін сайыс, YAML/JSON валидаторы, плюс Саясат агентін ашыңыз, контекстті қамтамасыз ету үшін саясат валидаторы Қауіпсіздік контекст сіздің жұмыс жүктемелеріңіз контейнерге әкімші артықшылықтарымен жұмыс істеуге мүмкіндік бермейді. Бұл қажет болса, пайдаланушылар қарапайым саясатты қолдана алады рего, бұл сияқты:

package main

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

  • Бұлттық провайдермен біріктіру опциялары. Бүгінгі жоғары технологиялардағы ең көрнекті трендтердің бірі - бұл жалпыға қолжетімді провайдерлерде жұмыс жүктемесін орындау. Компонентті пайдалану бұлтты жеткізуші Kubernetes кез келген кластерге өзі жұмыс істейтін бұлт провайдерімен біріктіруге мүмкіндік береді. Мысалы, пайдаланушы AWS жүйесінде Kubernetes қолданбасын іске қосса және сол қолданбаны қызмет арқылы көрсеткісі келсе, бұлттық провайдер қызметті автоматты түрде жасауға көмектеседі. LoadBalancerол жүктеме балансын автоматты түрде қамтамасыз етеді Amazon Elastic Load Balancerтрафикті қолданбалы бөлімдерге қайта бағыттау үшін.

Кеңейту мүмкіндігі

Kubernetes өте кеңейтілген және әзірлеушілер оны жақсы көреді. Қоспалар, орналастырулар сияқты қолжетімді ресурстар жиынтығы бар. 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 кеңейтімінің тағы бір нұсқасы - әзірлеуші ​​​​өз мәлімдемелерін жаза алады. Оператор сәйкес жұмыс істейтін Kubernetes кластеріндегі арнайы процесс болып табылады.басқару тізбегі" Оператордың көмегімен пайдаланушы Kubernetes API интерфейсімен ақпарат алмасу арқылы CRD басқаруын автоматтандыруы мүмкін (пайдаланушы ресурс анықтамалары).

Қауымдастықта әзірлеушілерге өз операторларын құруды жеңілдететін бірнеше құралдар бар. Олардың ішінде - Operator Framework және оның SDK операторы. Бұл SDK әзірлеуші ​​​​оператор құруды жылдам бастауға болатын негізді қамтамасыз етеді. Пәрмен жолынан келесідей нәрсені бастауға болады делік:

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

Бұл 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-тің негізгі шығарылымдары бірнеше ай сайын шығады, яғни жылына үш-төрт негізгі шығарылымдар. Олардың әрқайсысында енгізілген жаңа мүмкіндіктер саны азаймайды. Оның үстіне қазіргі қиын-қыстау кезеңде де бәсеңдеудің нышаны байқалмайды – қазір жағдай қандай екенін қараңыз Github-тағы Kubernetes жобасының қызметі.

Жаңа мүмкіндіктер әртүрлі жұмыс жүктемелері бойынша операцияларды икемді түрде кластерлеуге мүмкіндік береді. Сонымен қатар, бағдарламашылар қолданбаларды тікелей өндіріске орналастыру кезінде үлкен бақылауды пайдаланады.

Қоғамдастық

Кубернетестің танымалдығының тағы бір маңызды аспектісі - оның қауымдастығының күші. 2015 жылы 1.0 нұсқасына жеткенде Кубернетес демеушілік жасады Cloud Native Computing Foundation.

Әртүрлі қауымдастықтар да бар ГАЖ (Арнайы қызығушылық топтары) жоба дамып келе жатқанда Кубернетестің әртүрлі салаларында жұмыс істеуге бағытталған. Бұл топтар үнемі жаңа мүмкіндіктерді қосып, Kubernetes-пен жұмысты ыңғайлы әрі ыңғайлы етеді.

Cloud Native Foundation сонымен қатар CloudNativeCon/KubeCon ұсынады, ол жазу кезінде әлемдегі ең үлкен ашық бастапқы конференция болып табылады. Әдетте жылына үш рет өткізіледі, ол Kubernetes және оның экожүйесін жақсартқысы келетін, сондай-ақ үш ай сайын пайда болатын жаңа мүмкіндіктерді білгісі келетін мыңдаған мамандарды біріктіреді.

Сонымен қатар, Cloud Native Foundation бар Техникалық қадағалау комитеті, олар SIG-мен бірге жаңа және бұрыннан барларды қарайды жобалар бұлттық экожүйеге бағытталған қаражат. Бұл жобалардың көпшілігі Kubernetes-тің күшті жақтарын жақсартуға көмектеседі.

Соңында, мен Кубернетес бүкіл қауымдастықтың саналы күш-жігерінсіз сәтті бола алмайды деп ойлаймын, мұнда адамдар бір-бірімен тығыз байланыста болады, бірақ сонымен бірге жаңадан келгендерді қарсы алады.

Болашақ

Әзірлеушілер болашақта шешуге тура келетін негізгі қиындықтардың бірі - код жұмыс істейтін инфрақұрылымға емес, оның бөлшектеріне назар аудару мүмкіндігі. Ол осы үрдістерге сәйкес келеді серверсіз архитектуралық парадигма, ол бүгінгі таңда жетекшілердің бірі болып табылады. Жетілдірілген фреймворктер бұрыннан бар, мысалы: Нативті и OpenFaas, ол әзірлеушіден инфрақұрылымды абстракциялау үшін Kubernetes қолданбасын пайдаланады.

Бұл мақалада біз Кубернетестің қазіргі жағдайының бетін ғана сызып алдық — шын мәнінде, бұл айсбергтің ұшы ғана. Kubernetes пайдаланушыларында көптеген басқа ресурстар, мүмкіндіктер және конфигурациялар бар.

Ақпарат көзі: www.habr.com

пікір қалдыру