O rastućoj popularnosti Kubernetesa

Hej Habr!

Krajem ljeta želimo vas podsjetiti da nastavljamo sa radom na ovoj temi Kubernet i odlučio da početkom juna objavi članak sa Stackoverflowa koji pokazuje stanje u ovom projektu.

O rastućoj popularnosti Kubernetesa

Uživajte u čitanju!

U vrijeme pisanja ovog članka, Kubernetes je star cca. šest godina, a u posljednje dvije godine njegova popularnost je toliko porasla da se konstantno rangira među najomiljenije platforme. Kubernetes je ove godine treći. Da rezimiramo: Kubernetes je platforma dizajnirana za pokretanje i orkestriranje kontejneriziranih radnih opterećenja.

Kontejneri su počeli kao poseban dizajn za izolaciju procesa u Linuxu; kontejneri su uključeni od 2007 cgroups, a od 2002. – imenski prostori. Kontejneri su još bolje dizajnirani do 2008. godine, kada su postali dostupni LXC, a Google je razvio vlastiti interni korporativni mehanizam tzv Borg, gdje se "svi radovi obavljaju u kontejnerima." Odavde idemo naprijed do 2013. godine, kada se dogodilo prvo izdanje Dockera, a kontejneri su konačno postali popularno masovno rješenje. U to vrijeme, glavni alat za orkestraciju kontejnera bio je Mesos, iako nije bio baš popularan. Kubernetes je prvi put objavljen 2015. godine, nakon čega je ovaj alat postao de facto standard u području orkestracije kontejnera.

Da bismo pokušali razumjeti zašto je Kubernetes toliko popularan, pokušajmo odgovoriti na nekoliko pitanja. Kada su se programeri posljednji put mogli dogovoriti o tome kako implementirati aplikacije u proizvodnju? Koliko programera znate koji koriste alate onako kako su isporučeni iz kutije? Koliko danas ima administratora oblaka koji ne razumiju kako aplikacije rade? Odgovore na ova pitanja ćemo pogledati u ovom članku.

Infrastruktura kao YAML

U svijetu koji je od Puppet and Chef-a prešao na Kubernetes, jedna od najvećih promjena bio je prelazak sa “infrastrukture kao koda” na “infrastrukturu kao podatke” – konkretno, kao što je YAML. Svi resursi u Kubernetesu, koji uključuju podove, konfiguracije, raspoređene instance, volumene, itd., mogu se lako opisati u YAML datoteci. Na primjer:

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

Ovaj pogled olakšava DevOps ili SRE profesionalcima da u potpunosti izraze svoje radno opterećenje bez potrebe da pišu kod na jezicima kao što su Python ili Javascript.

Ostale prednosti organiziranja infrastrukture kao podataka uključuju:

  • GitOps ili Git Operations Kontrola verzija. Ovaj pristup vam omogućava da zadržite sve Kubernetes YAML fajlove u git repozitorijumima, tako da možete tačno da pratite kada je promena napravljena, ko ju je napravio i šta se tačno promenilo. Ovo povećava transparentnost poslovanja u celoj organizaciji i poboljšava operativnu efikasnost eliminisanjem dvosmislenosti, posebno tamo gde zaposleni treba da traže resurse koji su im potrebni. U isto vrijeme, postaje lakše automatski izvršiti promjene u Kubernetes resursima jednostavnim spajanjem zahtjeva za povlačenje.
  • Skalabilnost. Kada su resursi definisani kao YAML, operaterima klastera postaje izuzetno lako da promene jedan ili dva broja u Kubernetes resursu, menjajući na taj način način njegovog skaliranja. Kubernetes pruža mehanizam za horizontalno automatsko skaliranje podova, koji se može koristiti za praktično određivanje minimalnog i maksimalnog broja modula koji su potrebni u određenoj konfiguraciji implementacije za rukovanje niskim i visokim nivoima prometa. Na primjer, ako ste implementirali konfiguraciju koja zahtijeva dodatni kapacitet zbog iznenadnog porasta prometa, tada se maxReplicas može promijeniti sa 10 na 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

  • Sigurnost i upravljanje. YAML je odličan za procjenu načina na koji su stvari raspoređene u Kubernetesu. Na primjer, glavni sigurnosni problem je da li se vaša radna opterećenja izvode kao korisnik koji nije administrator. U ovom slučaju će nam možda trebati alati kao što su conftest, YAML/JSON validator, plus Open Policy Agent, validator politike koji osigurava da kontekst SecurityContext vaša radna opterećenja ne dozvoljavaju da se kontejner pokrene sa administratorskim privilegijama. Ako je to potrebno, korisnici mogu primijeniti jednostavnu politiku molim se, Volim ovo:

package main

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

  • Opcije za integraciju sa provajderom u oblaku. Jedan od najistaknutijih trendova u današnjoj visokoj tehnologiji je pokretanje posla na javnim provajderima u oblaku. Korištenje komponente cloud-provajder Kubernetes omogućava da se bilo koji klaster integriše sa dobavljačem oblaka na kojem radi. Na primjer, ako korisnik pokrene aplikaciju u Kubernetes na AWS-u i želi tu aplikaciju izložiti putem usluge, dobavljač oblaka pomaže u automatskom kreiranju usluge LoadBalancerkoji će automatski osigurati balansiranje opterećenja Amazon Elastic Load Balancerza preusmjeravanje prometa na podove aplikacija.

Proširivost

Kubernetes je veoma proširiv i programeri ga obožavaju. Postoji skup dostupnih resursa kao što su podovi, implementacije, StatefulSets, tajne, ConfigMaps, itd. Istina, korisnici i programeri mogu dodati druge resurse u obrazac prilagođene definicije resursa.

Na primjer, ako želimo definirati resurs CronTab, onda biste mogli uraditi nešto ovako:

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

Kasnije možemo kreirati CronTab resurs otprilike ovako:

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

Druga opcija za proširivost u Kubernetesu je da programer može pisati svoje izjave. Operator je poseban proces u Kubernetes klasteru koji radi prema “kontrolni krug" Uz pomoć operatera, korisnik može automatizirati upravljanje CRD-ovima (prilagođenim definicijama resursa) razmjenom informacija sa Kubernetes API-jem.

Postoji nekoliko alata u zajednici koji programerima olakšavaju kreiranje vlastitih operatera. Među njima - okvir operatera i njegov Operator SDK. Ovaj SDK pruža osnovu iz koje programer može brzo započeti kreiranje operatora. Recimo da možete početi iz komandne linije otprilike ovako:

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

Ovo kreira sav osnovni kod za vašeg operatera, uključujući YAML datoteke i Golang kod:

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

Zatim možete dodati potrebne API-je i kontroler, ovako:

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

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

Zatim, konačno, sastavite operatera i pošaljite ga u registar vašeg kontejnera:

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

Ako programer želi još veću kontrolu, šablonski kod u Go datotekama može se promijeniti. Na primjer, da biste izmijenili specifičnosti kontrolera, možete napraviti promjene u datoteci controller.go.

Još jedan projekat SVUDA, omogućava vam da kreirate izjave koristeći samo deklarativne YAML datoteke. Na primjer, operator za Apache Kafku bi bio približno definiran tako. Pomoću njega možete instalirati Kafka klaster na Kubernetes sa samo nekoliko naredbi:

$ kubectl kudo install zookeeper
$ kubectl kudo install kafka

A zatim ga konfigurirajte drugom naredbom:

$ 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

Inovacije

U proteklih nekoliko godina, glavna izdanja Kubernetesa izlazila su svakih nekoliko mjeseci – odnosno tri do četiri glavna izdanja godišnje. Broj novih funkcija koje se uvode u svaku od njih se ne smanjuje. Štaviše, nema znakova usporavanja čak ni u ovim teškim vremenima – pogledajte kakva je situacija sada Projektna aktivnost Kubernetes na Githubu.

Nove mogućnosti vam omogućavaju da fleksibilnije grupišete operacije u različitim radnim opterećenjima. Osim toga, programeri uživaju veću kontrolu prilikom postavljanja aplikacija direktno u proizvodnju.

Zajednica

Još jedan važan aspekt Kubernetesove popularnosti je snaga njegove zajednice. U 2015, nakon dostizanja verzije 1.0, Kubernetes je bio sponzorisan od strane Cloud Native Computing Foundation.

Tu su i razne zajednice SIG (Special Interest Groups) fokusirane na rad na različitim oblastima Kubernetesa kako se projekat razvija. Ove grupe stalno dodaju nove funkcije, čineći rad sa Kubernetes praktičnijim i praktičnijim.

Cloud Native Foundation također ugošćuje CloudNativeCon/KubeCon, koji je, u vrijeme pisanja ovog teksta, najveća konferencija otvorenog koda na svijetu. Obično se održava tri puta godišnje, okuplja hiljade profesionalaca koji žele da poboljšaju Kubernetes i njegov ekosistem, kao i da nauče nove funkcije koje se pojavljuju svaka tri meseca.

Štaviše, Cloud Native Foundation ima Komisija za tehnički nadzor, koji zajedno sa SIG-ovima recenzira nove i postojeće projektima sredstva fokusirana na ekosistem u oblaku. Većina ovih projekata pomaže u poboljšanju prednosti Kubernetesa.

Konačno, vjerujem da Kubernetes ne bi bio uspješan kao što jeste bez svjesnih napora cijele zajednice, gdje se ljudi drže zajedno, ali u isto vrijeme pozdravljaju pridošlice u okrilje.

Budućnost

Jedan od glavnih izazova s ​​kojima će se programeri morati suočiti u budućnosti je mogućnost da se fokusiraju na detalje samog koda, a ne na infrastrukturu u kojoj se pokreće. Ispunjava ove trendove arhitektonska paradigma bez servera, koja je danas jedna od vodećih. Napredni okviri već postoje, npr. knativ и OpenFaas, koji koriste Kubernetes da apstrahuju infrastrukturu od programera.

U ovom članku samo smo zagrebali površinu trenutnog stanja Kubernetesa—u stvari, to je samo vrh ledenog brega. Korisnici Kubernetesa imaju na raspolaganju mnoge druge resurse, mogućnosti i konfiguracije.

izvor: www.habr.com

Dodajte komentar