Om den vÀxande populariteten av Kubernetes

Hej, Habr!

I slutet av sommaren vill vi pÄminna om att vi fortsatt arbetar med Àmnet Kubernetes och har beslutat att publicera en artikel frÄn Stackoverflow som visar lÀget i detta projekt i början av juni.

Om den vÀxande populariteten av Kubernetes

Trevlig lÀsning!

Vid tidpunkten för denna artikels skrivande Àr Kubernetes ungefÀr sex Är gammal, och under de senaste tvÄ Ären har dess popularitet ökat sÄ mycket att den stabilt ligger bland de mest Àlskade plattformarna. I Är har Kubernetes placerat sig pÄ tredje plats. LÄt oss pÄminna om: Kubernetes Àr en plattform avsedd för att köra och orkestrera containerarbetsbelastningar.

Containrar föddes som en specifik konstruktion för processisolering i Linux; sedan 2007 ingÄr cgroups, och sedan 2002 - namnrymder. Containrar blev Ànnu mer utvecklade 2008 nÀr LXC, och Google utvecklade sin interna mekanism som heter Borg, dÀr "allt arbete utförs i containrar". LÄt oss hoppa fram till 2013, nÀr den första versionen av Docker slÀpptes och containrar blev allmÀnt populÀra. Vid den tiden var det huvudsakliga verktyget för containerorkestrering Mesos, Àven om det inte var sÀrskilt populÀrt. Den första versionen av Kubernetes slÀpptes 2015, varefter detta verktyg de facto blev standard inom containerorkestrering.

För att försöka förstÄ varför Kubernetes Àr sÄ populÀrt, lÄt oss försöka svara pÄ nÄgra frÄgor. NÀr var senaste gÄngen utvecklare kunde enas om hur man distribuerar applikationer i produktion? Hur mÄnga utvecklare kÀnner du som anvÀnder verktyg i den form de tillhandahÄlls "ut ur lÄdan"? Hur mÄnga molnadministratörer idag förstÄr inte hur applikationer fungerar? Svaren pÄ dessa frÄgor kommer vi att gÄ igenom i denna artikel.

Infrastruktur som YAML

I en vÀrld som frÄn Puppet och Chef har kommit till Kubernetes, var en av de största förÀndringarna övergÄngen frÄn "infrastruktur som kod" till "infrastruktur som data" - specifikt, som YAML. Alla resurser i Kubernetes, inklusive pods, konfigurationer, distribuerade instanser, volymer och andra kan enkelt beskrivas i en YAML-fil. Till exempel:

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

Med en sÄdan representation blir det enklare för DevOps- eller SRE-specialister att helt uttrycka sina arbetsbelastningar utan att behöva skriva programkod pÄ sprÄk som Python eller Javascript.

Andra fördelar med att organisera infrastrukturen för data Àr bland annat:

  • GitOps eller versionskontroll för Git Operations. Denna metod gör det möjligt att hĂ„lla alla YAML-filer för Kubernetes i git-repo, vilket gör att du exakt kan spĂ„ra nĂ€r en Ă€ndring gjordes, vem som gjorde den och vad som Ă€ndrades. Detta ökar transparensen i verksamheten, förbĂ€ttrar effektiviteten genom att eliminera osĂ€kerhet, sĂ€rskilt nĂ€r det gĂ€ller var anstĂ€llda ska leta efter resurser. Samtidigt blir det enklare att automatiskt genomföra förĂ€ndringar i resurserna i Kubernetes genom att anvĂ€nda vanliga pull-request sammanslagningar.
  • Skalbarhet. NĂ€r resurser definieras i form av YAML blir det mycket enkelt för klusteroperatörer att Ă€ndra ett eller tvĂ„ siffror i Kubernetes-resursen, vilket Ă€ndrar dess skalningsprinciper. Kubernetes har en mekanism för horisontell automatisk skalning av pods, vilket gör det enkelt att definiera vad som Ă€r det minimi- och maximala antalet pods som krĂ€vs i en specifik distribuerad konfiguration för att hantera lĂ„g och hög trafik. Till exempel, om du har distribuerat en konfiguration som krĂ€ver ytterligare resurser pĂ„ grund av en kraftig trafikökning, kan maxReplicas-vĂ€rdet Ă€ndras frĂ„n 10 till 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

  • SĂ€kerhet och hantering. YAML Ă€r utmĂ€rkt för att bedöma hur olika saker distribueras i Kubernetes. Till exempel Ă€r ett allvarligt sĂ€kerhetsproblem relaterat till om dina arbetsbelastningar körs frĂ„n en anvĂ€ndare utan administratörsrĂ€ttigheter. I detta fall kan verktyg som conftest, YAML/JSON-validerare, plus Open Policy Agent, policynvaliderare som ser till att kontexten SecurityContext de arbetsbelastningarna tillĂ„ter inte containern att köra med administratörsbehörighet. Om detta behövs kan anvĂ€ndarna tillĂ€mpa en enkel policy rego, sĂ„ hĂ€r:

package main

deny[msg] {
  input.kind = "Deployment"
  not input.spec.template.spec.securityContext.runAsNonRoot = true
  msg = "Containrar fÄr inte köras som root"
}

  • Alternativ för integration med molnleverantören. En av de mest framtrĂ€dande trenderna inom modern högteknologi Ă€r att köra arbetsbelastningar pĂ„ resurser frĂ„n offentliga molnleverantörer. Genom hjĂ€lp av komponenten cloud-provider Kubernetes gör det möjligt för varje kluster att integreras med den molnleverantör dĂ€r det körs. Till exempel, om en anvĂ€ndare har startat en applikation i Kubernetes pĂ„ AWS och vill ge tillgĂ„ng till denna applikation via en tjĂ€nst, hjĂ€lper molnleverantören automatiskt att skapa en tjĂ€nst LoadBalancer, som automatiskt ger en belastningsbalanserare Amazon Elastic Load Balancer, för att omdirigera trafik till applikationens pods.

Utbyggbarhet

Kubernetes skalar mycket bra, vilket tilltalar utvecklare. Det finns en uppsÀttning befintliga resurser, som pods, distributioner, StatefulSets, hemligheter, ConfigMaps, osv. I sjÀlva verket kan anvÀndare och utvecklare Àven lÀgga till andra resurser i form av anpassade resurser.

Till exempel, om vi vill definiera en resurs CronTab, kan vi göra nÄgot liknande:

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

Sen kan vi skapa en CronTab-resurs pÄ ungefÀr det hÀr sÀttet:

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

Ett annat alternativ för utvidgbarhet i Kubernetes Ă€r att en utvecklare kan skriva sina egna operatörer. Operator – Ă€r en speciell process i Kubernetes-klustret som arbetar enligt mönstret "styrkontur". Med hjĂ€lp av operatören kan anvĂ€ndaren automatisera hanteringen av CRD (anpassade resursdefinitioner) genom att utbyta information med Kubernetes API.

Det finns flera verktyg i gemenskapen som underlÀttar för utvecklare att skapa sina egna operators. Bland dem finns Operator Framework och dess Operator SDK. Denna SDK ger en grund som utvecklaren kan utgÄ ifrÄn för att snabbt börja skapa en operator. Man kan till exempel börja frÄn kommandoraden pÄ följande sÀtt:

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

SÄ hÀr skapas all standardkod för din operator, inklusive YAML-filer och kod i 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

Sedan kan man lÀgga till nödvÀndiga API:er och kontroller, sÄ hÀr:

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

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

DÀrefter kan man Àntligen bygga operatorn och skicka den till din containerregister:

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

Om utvecklaren behöver Ànnu mer kontroll kan man Àndra standardkoden i Go-filerna. Till exempel, för att modifiera specifikationen för kontrollern kan man göra Àndringar i filen controller.go.

Ett annat projekt, KUDO, tillÄter att skapa operators enbart med deklarativa YAML-filer. Till exempel, en operator för Apache Kafka skulle definieras ungefÀr sÄ. Med den kan du med bara nÄgra kommandon installera en Kafka-kluster ovanpÄ Kubernetes:

$ kubectl kudo install zookeeper
$ kubectl kudo install kafka

Och sedan konfigurera den med ytterligare ett kommando:

$ 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

Innovationer

Under de senaste Ă„ren har stora versioner av Kubernetes slĂ€ppts var nĂ„gra mĂ„nader – det vill sĂ€ga tre till fyra stora versioner om Ă„ret. Antalet nya funktioner som införs i varje version minskar inte. Dessutom finns det inga tecken pĂ„ avmattning ens i dessa svĂ„ra tider – se hur aktivt Kubernetes-projektet Ă€r pĂ„ Github nu aktivitet..

De nya funktionerna möjliggör en mer flexibel klustring av operationer vid olika arbetsbelastningar. Dessutom tycker programmerare om att ha mer fullstÀndig kontroll vid distribution av applikationer direkt i produktionen.

Gemenskap

En annan viktig aspekt av Kubernetes popularitet Ă€r styrkan i dess samhĂ€lle. År 2015, vid lanseringen av version 1.0, sponsrades Kubernetes Cloud Native Computing Foundation.

Det finns Àven olika samhÀllen SIG (specialintressegrupper) som fokuserar pÄ olika omrÄden inom Kubernetes nÀr projektet utvecklas. Dessa grupper lÀgger stÀndigt till nya funktioner, vilket gör det enklare och mer bekvÀmt att arbeta med Kubernetes.

Cloud Native Foundation arrangerar ocksÄ CloudNativeCon/KubeCon, som, vid tidpunkten för detta skrivande, Àr den största öppna kÀllkodskonferensen i vÀrlden. Den hÄlls vanligtvis tre gÄnger om Äret och samlar tusentals yrkesverksamma som vill förbÀttra Kubernetes och dess ekosystem, samt lÀra sig de nya funktioner som dyker upp var tredje mÄnad.

Dessutom finns det inom Cloud Native Foundation Ett tekniskt övervakningskommitté, som tillsammans med SIG:erna granskar nya och befintliga projekt inom fonden som riktas mot molnekosystemet. MÄnga av dessa projekt hjÀlper till att förbÀttra styrkorna hos Kubernetes.

Slutligen tror jag att Kubernetes inte skulle ha haft sÄ stor framgÄng utan medvetna insatser frÄn hela gemenskapen, dÀr mÀnniskor stöttar varandra men ocksÄ gÀrna vÀlkomnar nykomlingar.

Framtiden

En av de grundlÀggande utmaningarna som utvecklare kommer att behöva hantera i framtiden Àr förmÄgan att fokusera pÄ detaljerna i sjÀlva koden snarare Àn pÄ den infrastruktur som den arbetar i. Det Àr dessa trender som den serverlösa arkitekturparadigmen, som idag Àr en av ledarna, svarar mot. Det finns redan avancerade ramverk, till exempel Knative och OpenFaas, som anvÀnder Kubernetes för att abstrahera infrastrukturen frÄn utvecklaren.

I den hĂ€r artikeln har vi endast i stora drag diskuterat det nuvarande tillstĂ„ndet för Kubernetes – i verkligheten Ă€r detta bara toppen av isberget. AnvĂ€ndare av Kubernetes har ocksĂ„ tillgĂ„ng till mĂ„nga andra resurser, funktioner och konfigurationer.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster