Kubernetes-in artan populyarlığı haqqında

Hey Habr!

Yayın sonunda mövzu üzərində işləməyə davam etdiyimizi xatırlatmaq istəyirik Kubernetes və iyunun əvvəlində bu layihənin vəziyyətini nümayiş etdirən Stackoverflow-dan məqalə dərc etmək qərarına gəldi.

Kubernetes-in artan populyarlığı haqqında

Oxumadan həzz alın!

Bu məqaləni yazarkən Kubernetesin yaşı təqribəndir. altı yaşında, və son iki il ərzində onun populyarlığı o qədər artıb ki, ardıcıl olaraq sıralanır ən sevimli platformalar. Kubernetes bu il üçüncü yerdədir. Xülasə etmək üçün: Kubernetes konteynerləşdirilmiş iş yüklərini idarə etmək və idarə etmək üçün hazırlanmış bir platformadır.

Konteynerlər Linux-da prosesləri təcrid etmək üçün xüsusi dizayn kimi başladı; konteynerlər 2007-ci ildən daxil edilmişdir qruplar, və 2002-ci ildən - ad boşluqları. Konteynerlər 2008-ci ildə mövcud olduqda daha da yaxşı dizayn edilmişdi LXC, və Google adlı öz daxili korporativ mexanizmini inkişaf etdirdi Borg, burada "bütün işlər konteynerlərdə edilir." Buradan Docker-in ilk buraxılışının baş verdiyi 2013-cü ilə qədər sürətlə irəliləyirik və konteynerlər nəhayət populyar kütləvi həll yoluna çevrildi. O dövrdə konteyner orkestrinin əsas aləti idi mesos, baxmayaraq ki, o, çox populyar deyildi. Kubernetes ilk dəfə 2015-ci ildə buraxıldı, bundan sonra bu alət konteyner orkestrasiyası sahəsində faktiki standart oldu.

Kubernetesin niyə bu qədər populyar olduğunu anlamağa çalışmaq üçün gəlin bir neçə suala cavab verməyə çalışaq. Tərtibatçılar proqramları istehsala necə yerləşdirmək barədə sonuncu dəfə nə vaxt razılığa gələ bildilər? Alətləri qutudan çıxarıldığı üçün istifadə edən neçə tərtibatçı bilirsiniz? Bu gün tətbiqlərin necə işlədiyini başa düşməyən nə qədər bulud administratoru var? Bu sualların cavablarını bu məqalədə nəzərdən keçirəcəyik.

YAML kimi infrastruktur

Kukla və Aşpazdan Kubernetesə keçən dünyada ən böyük dəyişikliklərdən biri “kod kimi infrastrukturdan” “məlumat kimi infrastruktura” - xüsusən YAML kimi keçid idi. Podlar, konfiqurasiyalar, yerləşdirilmiş nümunələr, həcmlər və s. daxil olan Kubernetesdəki bütün resurslar YAML faylında asanlıqla təsvir edilə bilər. Misal üçün:

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

Bu görünüş DevOps və ya SRE mütəxəssislərinin Python və ya Javascript kimi dillərdə kod yazmadan iş yüklərini tam ifadə etmələrini asanlaşdırır.

İnfrastrukturun məlumat kimi təşkilinin digər üstünlüklərinə aşağıdakılar daxildir:

  • GitOps və ya Git Əməliyyatlar Versiyasına Nəzarət. Bu yanaşma bütün Kubernetes YAML fayllarını git depolarında saxlamağa imkan verir, beləliklə siz dəyişikliyin nə vaxt edildiyini, kimin etdiyini və dəqiq nəyin dəyişdiyini izləyə bilərsiniz. Bu, təşkilat daxilində əməliyyatların şəffaflığını artırır və qeyri-müəyyənliyi aradan qaldırmaqla əməliyyat səmərəliliyini artırır, xüsusən də işçilərin ehtiyac duyduqları resursları axtarmalı olduğu yerlərdə. Eyni zamanda, sadəcə çəkmə sorğusunu birləşdirərək Kubernetes resurslarında avtomatik dəyişikliklər etmək daha asan olur.
  • Ölçeklenebilirlik. Resurslar YAML olaraq təyin olunduqda, klaster operatorları üçün Kubernetes resursunda bir və ya iki nömrəni dəyişmək çox asan olur və bununla da onun miqyasını dəyişir. Kubernetes, aşağı və yüksək trafik səviyyələrini idarə etmək üçün xüsusi yerləşdirmə konfiqurasiyasında minimum və maksimum podların nə qədər tələb olunduğunu rahat şəkildə müəyyən etmək üçün istifadə edilə bilən podların üfüqi avtomatik miqyası mexanizmini təmin edir. Məsələn, trafikdə qəfil artım səbəbindən əlavə tutum tələb edən konfiqurasiya yerləşdirmisinizsə, o zaman maxReplicas 10-dan 20-yə dəyişdirilə bilər:

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

  • Təhlükəsizlik və idarəetmə. YAML şeylərin Kubernetes-də necə yerləşdirildiyini qiymətləndirmək üçün əladır. Məsələn, əsas təhlükəsizlik problemi iş yüklərinizin admin olmayan istifadəçi kimi işlək olub-olmaması ilə bağlıdır. kimi vasitələrə ehtiyacımız ola bilər bu halda yarış, YAML/JSON təsdiqləyicisi, üstəlik Açıq Siyasət Agenti, kontekstdə olmasını təmin etmək üçün bir siyasət təsdiqləyicisi Təhlükəsizlik konteksti iş yükləriniz konteynerin administrator imtiyazları ilə işləməsinə icazə vermir. Bu tələb olunarsa, istifadəçilər sadə siyasət tətbiq edə bilərlər Mən dua edirəm, bunun kimi:

package main

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

  • Bulud provayderi ilə inteqrasiya üçün seçimlər. Müasir yüksək texnologiyanın ən diqqətəlayiq tendensiyalarından biri ictimai bulud provayderlərində iş yüklərinin idarə edilməsidir. Komponentdən istifadə bulud provayderi Kubernetes istənilən klasterə işlədiyi bulud provayderi ilə inteqrasiya etməyə imkan verir. Məsələn, istifadəçi AWS-də Kubernetes-də proqram işlədirsə və həmin tətbiqi xidmət vasitəsilə ifşa etmək istəyirsə, bulud provayderi avtomatik olaraq xidməti yaratmağa kömək edir. LoadBalanceravtomatik olaraq yük balanslaşdırıcısını təmin edəcək Amazon Elastik Yük Tarazlayıcısıtrafiki proqram podlarına yönləndirmək üçün.

Genişlənmə qabiliyyəti

Kubernetes çox genişlənir və tərtibatçılar onu sevirlər. Podlar, yerləşdirmələr kimi bir sıra mövcud resurslar var. StatefulSets, sirləri, ConfigMapsvə s. Doğrudur, istifadəçilər və tərtibatçılar formada başqa resurslar əlavə edə bilərlər xüsusi resurs tərifləri.

Məsələn, bir resursu müəyyən etmək istəyiriksə CronTab, onda belə bir şey edə bilərsiniz:

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

Daha sonra belə bir CronTab resursu yarada bilərik:

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

Kubernetes-də genişlənmə üçün başqa bir seçim, tərtibatçının öz ifadələrini yaza bilməsidir. Operator uyğun olaraq işləyən Kubernetes klasterində xüsusi bir prosesdir.nəzarət dövrəsi" Operatorun köməyi ilə istifadəçi Kubernetes API ilə məlumat mübadiləsi edərək CRD-lərin (xüsusi resurs tərifləri) idarə edilməsini avtomatlaşdıra bilər.

Cəmiyyətdə tərtibatçılara öz operatorlarını yaratmağı asanlaşdıran bir neçə alət var. Onların arasında - operator çərçivəsiOperator SDK. Bu SDK, tərtibatçının operator yaratmağa tez başlaya biləcəyi bir təməl təmin edir. Deyək ki, komanda xəttindən belə bir şeyə başlaya bilərsiniz:

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

Bu, YAML faylları və Golanq kodu daxil olmaqla, operatorunuz üçün bütün standart kodu yaradır:

.
|____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

Sonra tələb olunan API və nəzarətçi əlavə edə bilərsiniz, məsələn:

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

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

Sonra, nəhayət, operatoru toplayın və konteynerinizin reyestrinə göndərin:

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

Tərtibatçı daha çox nəzarət etmək istəyirsə, Go fayllarında qazan kodu dəyişdirilə bilər. Məsələn, nəzarətçinin xüsusiyyətlərini dəyişdirmək üçün faylda dəyişiklik edə bilərsiniz controller.go.

Başqa bir layihə HƏR YERDƏ, yalnız deklarativ YAML fayllarından istifadə edərək ifadələr yaratmağa imkan verir. Məsələn, Apache Kafka üçün operator təxminən müəyyən ediləcək belə. Bununla siz bir neçə əmrlə Kubernetes-in üstünə Kafka klasterini quraşdıra bilərsiniz:

$ kubectl kudo install zookeeper
$ kubectl kudo install kafka

Və sonra onu başqa bir əmrlə konfiqurasiya edin:

$ 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

Yeniliklər

Son bir neçə il ərzində əsas Kubernetes buraxılışları bir neçə aydan bir çıxır - yəni ildə üç-dörd əsas buraxılış. Onların hər birində təqdim edilən yeni funksiyaların sayı azalmır. Üstəlik, bu çətin vaxtlarda belə yavaşlama əlaməti yoxdur - görün indi vəziyyət necədir Github-da Kubernetes layihə fəaliyyəti.

Yeni imkanlar müxtəlif iş yükləri üzrə əməliyyatları daha çevik şəkildə qruplaşdırmağa imkan verir. Bundan əlavə, proqramçılar tətbiqləri birbaşa istehsala yerləşdirərkən daha çox nəzarətdən istifadə edirlər.

Icma

Kubernetesin populyarlığının digər əsas cəhəti onun icmasının gücüdür. 2015-ci ildə 1.0 versiyasına çatdıqdan sonra Kubernetes sponsorluq etdi Bulud Yerli Hesablama Vəqfi.

Müxtəlif icmalar da var SIG (Xüsusi Maraq Qrupları) layihə inkişaf etdikcə Kubernetes-in müxtəlif sahələrində işləməyə diqqət yetirdi. Bu qruplar daim yeni funksiyalar əlavə edərək Kubernetes ilə işi daha rahat və rahat edir.

Cloud Native Foundation həmçinin CloudNativeCon/KubeCon-a ev sahibliyi edir ki, bu da yazı hazırlanarkən dünyanın ən böyük açıq mənbəli konfransıdır. Adətən ildə üç dəfə keçirilir, Kubernetes və onun ekosistemini təkmilləşdirmək, həmçinin hər üç aydan bir görünən yeni funksiyaları öyrənmək istəyən minlərlə peşəkarı bir araya gətirir.

Üstəlik, Cloud Native Fondu var Texniki Nəzarət Komitəsi, SIG-lərlə birlikdə yeni və mövcud olanları nəzərdən keçirir Layihələr bulud ekosisteminə yönəlmiş vəsaitlər. Bu layihələrin əksəriyyəti Kubernetes-in güclü tərəflərini yaxşılaşdırmağa kömək edir.

Nəhayət, inanıram ki, Kubernetes bütün cəmiyyətin şüurlu səyləri olmadan olduğu qədər uğurlu ola bilməzdi, burada insanların bir-birinə yapışdığı, eyni zamanda yeni gələnləri salamlayır.

Gələcək

Tərtibatçıların gələcəkdə həll etməli olduqları əsas problemlərdən biri kodun işlədiyi infrastruktura deyil, onun detallarına diqqət yetirmək bacarığıdır. Bu tendensiyalara cavab verir serversiz memarlıq paradiqması, bu gün aparıcılardan biridir. Qabaqcıl çərçivələr artıq mövcuddur, məs. Bıçaqçı и OpenFaas, infrastrukturu tərtibatçıdan çıxarmaq üçün Kubernetes-dən istifadə edir.

Bu yazıda biz yalnız Kubernetesin hazırkı vəziyyətinin səthini cızdıq – əslində bu, aysberqin sadəcə görünən hissəsidir. Kubernetes istifadəçilərinin ixtiyarında olan bir çox başqa resurs, imkanlar və konfiqurasiyalar var.

Mənbə: www.habr.com

Добавить комментарий