Babagan popularitas Kubernetes sing saya akeh

Hey Habr!

Ing pungkasan mangsa panas, kita pengin ngelingake yen kita terus nggarap topik kasebut Kubernetes lan mutusake kanggo nerbitake artikel saka Stackoverflow sing nuduhake kahanan ing proyek iki ing awal Juni.

Babagan popularitas Kubernetes sing saya akeh

Seneng maca!

Nalika nulis artikel iki, umur Kubernetes kira-kira. enem taun, lan sajrone rong taun kepungkur, popularitase saya tambah akeh sing terus-terusan ditingkat ing antarane paling favorit platform. Kubernetes rangking katelu ing taun iki. Kanggo ngringkes: Kubernetes minangka platform sing dirancang kanggo mbukak lan ngatur beban kerja sing disimpen.

Wadhah diwiwiti minangka desain khusus kanggo ngisolasi proses ing Linux; wadhah wis kalebu wiwit 2007 klompok, lan wiwit 2002 - namespaces. Kontainer dirancang luwih apik ing taun 2008, nalika kasedhiya LXC, lan Google ngembangake mekanisme perusahaan internal dhewe sing diarani kutha, ngendi "kabeh karya wis rampung ing kontaner." Saka kene kita cepet nerusake menyang 2013, nalika release pisanan Docker njupuk Panggonan, lan kontaner pungkasanipun dadi solusi massa populer. Ing wektu iku, alat utama kanggo orkestrasi wadah yaiku Mesos, sanajan dheweke ora populer banget. Kubernetes pisanan dirilis ing 2015, sawise alat iki dadi standar de facto ing bidang orkestrasi kontainer.

Kanggo nyoba ngerti kenapa Kubernetes dadi populer, ayo nyoba mangsuli sawetara pitakon. Nalika pungkasan wektu pangembang bisa setuju babagan cara nyebarake aplikasi menyang produksi? Pira pangembang sampeyan ngerti sing nggunakake alat kasebut amarga kasedhiya ing kothak? Pira akeh administrator awan saiki sing ora ngerti cara kerja aplikasi? Kita bakal nliti jawaban kanggo pitakonan kasebut ing artikel iki.

Infrastruktur minangka YAML

Ing donya sing pindhah saka Wayang lan Chef kanggo Kubernetes, salah siji saka owah-owahan paling gedhe ana pamindhahan saka "infrastruktur minangka kode" kanggo "infrastruktur minangka data" -specifically, kaya YAML. Kabeh sumber daya ing Kubernetes, sing kalebu pods, konfigurasi, conto sing disebarake, volume, lan sapiturute, bisa diterangake kanthi gampang ing file YAML. Tuladhane:

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

Tampilan iki nggampangake para profesional DevOps utawa SRE kanggo nyatakake beban kerjane kanthi lengkap tanpa kudu nulis kode ing basa kaya Python utawa Javascript.

Kauntungan liyane saka ngatur infrastruktur minangka data kalebu:

  • Kontrol Versi GitOps utawa Git Operations. Pendekatan iki ngidini sampeyan nyimpen kabeh file YAML Kubernetes ing repositori git, supaya sampeyan bisa nglacak persis nalika owah-owahan, sapa sing nggawe, lan apa sing diganti. Iki nambah transparansi operasi ing saindhenging organisasi lan nambah efisiensi operasional kanthi ngilangi ambiguitas, utamane ing ngendi karyawan kudu nggoleki sumber daya sing dibutuhake. Ing wektu sing padha, dadi luwih gampang kanggo nggawe pangowahan kanthi otomatis menyang sumber daya Kubernetes kanthi mung nggabungake panyuwunan tarik.
  • Skalabilitas. Nalika sumber daya ditetepake minangka YAML, dadi gampang banget kanggo operator kluster kanggo ngganti siji utawa loro nomer ing sumber Kubernetes, mangkono ngganti cara timbangan. Kubernetes nyedhiyakake mekanisme kanggo autoscaling polong horisontal, sing bisa digunakake kanggo nemtokake jumlah polong minimal lan maksimum sing dibutuhake ing konfigurasi panyebaran tartamtu kanggo nangani lalu lintas sing kurang lan dhuwur. Contone, yen sampeyan wis masang konfigurasi sing mbutuhake kapasitas tambahan amarga tiba-tiba lonjakan lalu lintas, banjur maxReplicas bisa diganti saka 10 kanggo 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

  • Keamanan lan manajemen. YAML apik banget kanggo ngevaluasi cara disebarake ing Kubernetes. Contone, masalah keamanan utama yaiku apa beban kerja sampeyan mlaku minangka pangguna non-admin. Ing kasus iki, kita bisa uga mbutuhake alat kayata kontes, validator YAML/JSON, plus Bukak Agen Kebijakan, validator kabijakan kanggo mesthekake yen konteks Konteks Keamanan beban kerja sampeyan ora ngidini wadhah mbukak kanthi hak istimewa administrator. Yen iki dibutuhake, pangguna bisa ngetrapake kabijakan sing gampang Aku ndedonga, kaya iki:

package main

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

  • Pilihan kanggo integrasi karo panyedhiya maya. Salah sawijining tren sing paling misuwur ing teknologi dhuwur saiki yaiku mbukak beban kerja ing panyedhiya awan umum. Nggunakake komponen panyedhiya awan Kubernetes ngidini kluster apa wae kanggo nggabungake karo panyedhiya maya sing digunakake. Contone, yen pangguna mbukak aplikasi ing Kubernetes ing AWS lan pengin mbukak aplikasi kasebut liwat layanan, panyedhiya maya mbantu nggawe layanan kasebut kanthi otomatis. LoadBalancersing bakal nyedhiyakake load balancer kanthi otomatis Amazon Elastic Load Balancerkanggo ngarahake lalu lintas menyang pod aplikasi.

Expandability

Kubernetes banget extensible lan pangembang seneng. Ana sakumpulan sumber daya sing kasedhiya kayata pods, penyebaran, StatefulSets, rahasia, ConfigMaps, lsp. Bener, pangguna lan pangembang bisa nambah sumber daya liyane ing formulir kasebut definisi sumber adat.

Contone, yen kita pengin nemtokake sumber daya CronTab, banjur sampeyan bisa nindakake kaya iki:

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

Mengko kita bisa nggawe sumber daya CronTab kaya iki:

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

Pilihan liyane kanggo ekstensibilitas ing Kubernetes yaiku pangembang bisa nulis pratelan dhewe. Operator minangka proses khusus ing kluster Kubernetes sing dianggo miturut "sirkuit kontrol" Kanthi bantuan operator, pangguna bisa ngotomatisasi manajemen CRD (definisi sumber daya khusus) kanthi ijol-ijolan informasi nganggo API Kubernetes.

Ana sawetara alat ing komunitas sing nggawe pangembang gampang nggawe operator dhewe. Antarane wong- Kerangka Operator lan dheweke Operator SDK. SDK iki nyedhiyakake dhasar saka pangembang bisa miwiti nggawe operator kanthi cepet. Contone, sampeyan bisa miwiti saka baris perintah kaya iki:

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

Iki nggawe kabeh kode boilerplate kanggo operator sampeyan, kalebu file YAML lan 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

Banjur sampeyan bisa nambah API lan pengontrol sing dibutuhake, kaya iki:

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

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

Banjur, pungkasane, kumpulake operator lan kirim menyang pendaptaran wadah sampeyan:

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

Yen pangembang pengin kontrol luwih akeh, kode boilerplate ing file Go bisa diganti. Contone, kanggo ngowahi spesifik controller, sampeyan bisa ngganti file controller.go.

Proyek liyane Nang endi wae, ngidini sampeyan nggawe statement nggunakake mung file YAML deklaratif. Contone, operator kanggo Apache Kafka bakal ditetepake kira-kira supaya. Kanthi, sampeyan bisa nginstal kluster Kafka ing ndhuwur Kubernetes kanthi mung sawetara prentah:

$ kubectl kudo install zookeeper
$ kubectl kudo install kafka

Banjur atur nganggo printah liyane:

$ 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

Sajrone sawetara taun kepungkur, rilis Kubernetes utama wis metu saben sawetara sasi - yaiku, telu nganti patang rilis utama saben taun. Jumlah fitur anyar sing dienal ing saben wong ora suda. Kajaba iku, ora ana tandha-tandha saya mudhun sanajan ing jaman sing angel iki - deleng kahanan saiki Aktivitas proyek Kubernetes ing Github.

Kapabilitas anyar ngidini sampeyan nindakake operasi cluster kanthi luwih fleksibel ing macem-macem beban kerja. Kajaba iku, programer seneng kontrol luwih nalika deploying aplikasi langsung menyang produksi.

Komunitas

Aspek utama liyane saka popularitas Kubernetes yaiku kekuwatan komunitase. Ing 2015, nalika tekan versi 1.0, Kubernetes disponsori dening Yayasan Komputasi Native Cloud.

Ana uga macem-macem komunitas SIG (Klompok Minat Khusus) fokus kanggo nggarap macem-macem wilayah Kubernetes nalika proyèk berkembang. Klompok iki terus nambah fitur-fitur anyar, nggawe nggarap Kubernetes luwih trep lan trep.

Cloud Native Foundation uga dadi tuan rumah CloudNativeCon / KubeCon, sing, nalika nulis, minangka konferensi open source paling gedhe ing donya. Biasane dianakake kaping telu saben taun, ngumpulake ewonan profesional sing pengin nambah Kubernetes lan ekosisteme, uga sinau fitur anyar sing katon saben telung wulan.

Kajaba iku, Cloud Native Foundation wis Komite Pengawasan Teknis, kang, bebarengan karo SIGs, review anyar lan ana proyek dana fokus ing ekosistem awan. Umume proyek kasebut mbantu nambah kekuwatan Kubernetes.

Pungkasan, aku percaya yen Kubernetes ora bakal sukses kaya tanpa upaya sadar saka kabeh komunitas, ing ngendi wong tetep bebarengan nanging ing wektu sing padha nampani para pendatang anyar.

Ing masa depan

Salah sawijining tantangan utama sing kudu ditindakake para pangembang ing mangsa ngarep yaiku kemampuan kanggo fokus ing rincian kode kasebut dhewe, lan ora ing infrastruktur sing ditindakake. Iku ketemu tren iki paradigma arsitektur tanpa server, kang salah siji saka anjog dina. Framework majeng wis ana, f.eks. knative и OpenFaas, sing nggunakake Kubernetes kanggo abstrak infrastruktur saka pangembang.

Ing artikel iki, kita mung ngeruk permukaan Kubernetes saiki - nyatane, iki mung pucuk gunung es. Pangguna Kubernetes duwe akeh sumber daya, kapabilitas, lan konfigurasi liyane sing bisa digunakake.

Source: www.habr.com

Add a comment