Ngeunaan tumuwuhna popularitas Kubernetes

Héy Habr!

Dina ahir usum panas, urang hoyong ngingetkeun yén urang terus ngerjakeun topik Kubernetes sarta mutuskeun pikeun nyebarkeun hiji artikel ti Stackoverflow demonstrating kaayaan dina proyék ieu dina awal Juni.

Ngeunaan tumuwuhna popularitas Kubernetes

Senang bacaan!

Dina waktos nyerat tulisan ieu, umur Kubernetes kirang langkung. genep taun, sarta leuwih dua taun kaliwat popularitasnya geus tumuwuh jadi loba nu konsistén rengking diantara paling karesep platform. Kubernetes rengking katilu taun ieu. Recap: Kubernetes mangrupikeun platform anu dirancang pikeun ngajalankeun sareng ngatur beban kerja wadahna.

Wadah dimimitian salaku desain husus pikeun ngasingkeun prosés di Linux; peti geus kaasup saprak 2007 cgroups, sarta saprak 2002 - namespaces. Wadahna dirancang langkung saé ku 2008, nalika éta sayogi LXC, sarta Google ngembangkeun mékanisme perusahaan internal sorangan disebut Borg, dimana "sagala pagawéan dilakukeun dina wadah". Ti dieu urang gancang maju ka 2013, nalika pelepasan munggaran Docker lumangsung, sareng wadahna tungtungna janten solusi massa anu populér. Waktu éta, alat utama pikeun orkestrasi wadahna nyaéta Mésos, sanajan anjeunna teu wildly populér. Kubernetes munggaran dileupaskeun dina 2015, saatos éta alat ieu janten standar de facto dina widang orkestrasi wadah.

Pikeun nyobaan ngartos naha Kubernetes populer pisan, hayu urang coba ngajawab sababaraha patarosan. Iraha waktos terakhir pamekar tiasa satuju kumaha cara nyebarkeun aplikasi pikeun produksi? Sabaraha pamekar anjeun terang anu ngagunakeun alat-alat anu disayogikeun kaluar tina kotak? Sabaraha pangurus awan ayeuna anu henteu ngartos kumaha aplikasi jalanna? Urang bakal ningali jawaban kana patarosan ieu dina tulisan ieu.

Infrastruktur sakumaha YAML

Di dunya anu angkat tina Wayang sareng Chef ka Kubernetes, salah sahiji parobihan pangbadagna nyaéta pamindahan tina "infrastruktur salaku kode" ka "infrastruktur salaku data" - khususna, sapertos YAML. Sadaya sumber di Kubernetes, anu kalebet pods, konfigurasi, instansi anu disebarkeun, volume, sareng sajabana, tiasa dijelaskeun kalayan gampang dina file YAML. Salaku conto:

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

Pandangan ieu ngagampangkeun pikeun para profesional DevOps atanapi SRE pikeun nganyatakeun beban kerjana sapinuhna tanpa kedah nyerat kode dina basa sapertos Python atanapi Javascript.

Kauntungan sejenna tina pangatur infrastruktur salaku data ngawengku:

  • GitOps atanapi Git Operations Version Control. Pendekatan ieu ngamungkinkeun anjeun pikeun nyimpen sadaya file Kubernetes YAML dina repositori git, ku kituna anjeun tiasa ngalacak persis nalika parobihan dilakukeun, saha anu ngadamelna, sareng naon anu dirobih. Ieu ngaronjatkeun transparansi operasi sakuliah organisasi sarta ngaronjatkeun efisiensi operasional ku ngaleungitkeun ambiguity, utamana di mana karyawan kudu néangan sumber daya maranéhna butuh. Dina waktos anu sami, janten langkung gampang pikeun sacara otomatis ngarobih sumber daya Kubernetes ku ngan ukur ngahijikeun pamundut tarik.
  • Skalabilitas. Nalika sumberdaya dihartikeun salaku YAML, janten pisan gampang pikeun operator klaster ngarobah hiji atawa dua angka dina sumberdaya Kubernetes, kukituna ngarobah cara skala. Kubernetes nyadiakeun mékanisme pikeun autoscaling horizontal pods, nu bisa dipaké pikeun merenah nangtukeun naon minimum jeung maksimum jumlah pods diperlukeun dina konfigurasi deployment husus pikeun nanganan tingkat low jeung luhur lalulintas. Salaku conto, upami anjeun parantos masang konfigurasi anu peryogi kapasitas tambahan kusabab spike lalu lintas ngadadak, maka maxReplicas tiasa dirobih tina 10 dugi ka 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

  • Kaamanan jeung manajemén. YAML sae pikeun ngevaluasi kumaha hal-hal anu disebarkeun di Kubernetes. Salaku conto, masalah kaamanan utama ngeunaan naha beban kerja anjeun dijalankeun salaku pangguna non-admin. Dina hal ieu, urang tiasa peryogi alat sapertos kontes, validator YAML/JSON, tambah Buka Agen Kabijakan, validator kawijakan pikeun mastikeun yén konteks Konteks Kaamanan workloads anjeun teu ngidinan wadahna ngajalankeun kalawan hak husus administrator. Upami ieu diperlukeun, pamaké bisa nerapkeun kawijakan basajan Abdi ngadoa, resep ieu:

package main

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

  • Pilihan pikeun integrasi sareng panyadia awan. Salah sahiji tren anu paling kasohor dina téknologi luhur ayeuna nyaéta ngajalankeun beban kerja dina panyadia awan umum. Ngagunakeun komponén awan-panyadia Kubernetes ngamungkinkeun klaster mana waé pikeun ngahijikeun sareng panyadia awan dimana éta ngajalankeun. Salaku conto, upami pangguna ngajalankeun aplikasi dina Kubernetes dina AWS sareng hoyong ngungkabkeun aplikasi éta ngaliwatan ladenan, panyadia awan ngabantosan otomatis nyiptakeun ladenan éta. LoadBalancernu otomatis bakal nyadiakeun beban balancer Amazon elastis beban Balancerpikeun alihan lalulintas ka pods aplikasi.

Expandability

Kubernetes pisan extensible sarta pamekar resep eta. Aya sakumpulan sumberdaya anu sayogi sapertos pods, deployments, StatefulSets, Rahasia, ConfigMaps, jsb. Leres, pangguna sareng pamekar tiasa nambihan sumber daya sanés dina bentuk definisi sumberdaya custom.

Contona, upami urang hoyong nangtukeun sumberdaya a CronTab, teras anjeun tiasa ngalakukeun sapertos kieu:

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

Teras urang tiasa nyiptakeun sumber daya CronTab sapertos kieu:

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

Pilihan séjén pikeun éksténsif dina Kubernetes nyaéta pamekar tiasa nyerat pernyataan sorangan. Operator mangrupikeun prosés khusus dina klaster Kubernetes anu dianggo dumasar kana "sirkuit kontrol" Kalayan bantosan operator, pangguna tiasa ngajadikeun otomatis manajemén CRD (definisi sumberdaya khusus) ku cara tukeur inpormasi sareng API Kubernetes.

Aya sababaraha alat di komunitas anu ngagampangkeun pamekar pikeun nyiptakeun operator sorangan. Diantara aranjeunna - Kerangka Operator jeung Operator SDK. SDK ieu nyadiakeun yayasan ti mana pamekar bisa gancang ngamimitian nyieun operator. Anggap anjeun tiasa ngamimitian tina garis paréntah sapertos kieu:

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

Ieu nyiptakeun sadaya kode boilerplate pikeun operator anjeun, kalebet file YAML sareng kode Golang:

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

Teras anjeun tiasa nambihan API sareng pengontrol anu diperyogikeun, sapertos kieu:

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

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

Teras, tungtungna, ngumpul operator sareng kirimkeun ka pendaptaran wadahna anjeun:

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

Upami pamekar hoyong langkung seueur kontrol, kode boilerplate dina file Go tiasa dirobih. Contona, pikeun ngaropea spésifik controller, Anjeun bisa nyieun parobahan dina file controller.go.

proyék séjén DI MANA-MANA, ngidinan Anjeun pikeun nyieun pernyataan maké ngan file YAML déklaratif. Contona, operator pikeun Apache Kafka bakal dihartikeun kira-kira janten. Kalayan éta, anjeun tiasa masang klaster Kafka di luhur Kubernetes kalayan ngan ukur sababaraha paréntah:

$ kubectl kudo install zookeeper
$ kubectl kudo install kafka

Teras ngonpigurasikeunana nganggo paréntah anu sanés:

$ 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

Inovasi

Dina sababaraha taun katukang, sékrési Kubernetes utama parantos kaluar unggal sababaraha bulan - nyaéta, tilu dugi ka opat sékrési utama per taun. Jumlah fitur anyar diwanohkeun dina unggal sahijina teu ngurangan. Sumawona, teu aya tanda-tanda ngalambatkeun bahkan dina waktos susah ieu - tingali kumaha kaayaan ayeuna Aktivitas proyék Kubernetes dina Github.

Kamampuhan anyar ngamungkinkeun anjeun pikeun operasi klaster langkung fleksibel dina sagala rupa beban kerja. Salaku tambahan, programer mikaresep kontrol anu langkung ageung nalika nyebarkeun aplikasi langsung ka produksi.

masarakat

Aspék utama séjén tina popularitas Kubernetes nyaéta kakuatan komunitasna. Dina 2015, sanggeus ngahontal versi 1.0, Kubernetes disponsoran ku Yayasan Komputasi Asli Awan.

Aya ogé rupa-rupa komunitas SIG (Grup Minat Khusus) fokus kana damel di sababaraha daérah Kubernetes nalika proyékna mekar. Grup ieu terus nambahkeun fitur anyar, nyieun gawé bareng Kubernetes leuwih merenah tur merenah.

Cloud Native Foundation ogé ngagaduhan CloudNativeCon / KubeCon, anu, dina waktos nyerat, mangrupikeun konperénsi open source panggedéna di dunya. Biasana diayakeun tilu kali sataun, éta ngahijikeun rébuan profésional anu hoyong ningkatkeun Kubernetes sareng ékosistemna, ogé diajar fitur anyar anu muncul unggal tilu bulan.

Sumawona, Cloud Native Foundation gaduh Panitia Pengawasan Téknis, nu, bareng jeung SIGs, ulasan anyar jeung aya proyék dana fokus kana ékosistem awan. Seuseueurna proyék ieu ngabantosan ningkatkeun kakuatan Kubernetes.

Tungtungna, kuring yakin yén Kubernetes moal jadi suksés sakumaha anu kasebut tanpa usaha sadar sakabéh masarakat, dimana urang lengket babarengan tapi dina waktos anu sareng ngabagéakeun pendatang kana melu.

Ka hareup

Salah sahiji tantangan utama anu pamekar bakal kudu nungkulan di mangsa nu bakal datang nyaéta kamampuhan pikeun museurkeun kana detil kode sorangan, sarta henteu dina infrastruktur di mana eta dijalankeun. Ieu meets tren ieu paradigma arsitéktur serverless, nu salah sahiji ngarah kiwari. kerangka canggih geus aya, misalna. Knatif и OpenFaas, nu ngagunakeun Kubernetes pikeun abstrak infrastruktur ti developer.

Dina tulisan ieu, urang ngan ukur ngeruk kaayaan Kubernetes ayeuna — kanyataanna, éta ngan ukur puncak gunung es. Pangguna Kubernetes gaduh seueur sumber daya, kamampuan, sareng konfigurasi anu tiasa dianggo.

sumber: www.habr.com

Tambahkeun komentar