Om Kubernetes vÀxande popularitet

Hej Habr!

I slutet av sommaren vill vi pÄminna om att vi fortsÀtter att arbeta med detta Àmne. Kubernetes och beslutade att publicera en artikel frÄn Stackoverflow som visar lÀget i detta projekt i början av juni.

Om Kubernetes vÀxande popularitet

Njut av att lÀsa!

I skrivande stund handlar Kubernetes om sex Är gammal, och under de senaste tvÄ Ären har dess popularitet vuxit sÄ mycket att den konsekvent har rankats bland den mest Àlskade plattformar. I Är ligger Kubernetes pÄ tredje plats. För att sammanfatta, Àr Kubernetes en plattform designad för att köra och orkestrera containeriserade arbetsbelastningar.

BehĂ„llare har sitt ursprung som en speciell design för att isolera processer i Linux; sedan 2007 har containrarna inkluderat cgrupper, och sedan 2002 – namnutrymmen. BehĂ„llarna fick ett Ă€nnu bĂ€ttre utseende 2008, dĂ„ LXC, och Google utvecklade sin egen interna företagsmekanism som kallas Borg, dĂ€r "allt arbete utförs i containrar." HĂ€rifrĂ„n gĂ„r vi till 2013, dĂ„ Docker först slĂ€pptes och containrar Ă€ntligen blev en populĂ€r masslösning. PĂ„ den tiden var det frĂ€msta verktyget för containerorkestrering Mesos, Ă€ven om det inte Ă„tnjöt vild popularitet. Kubernetes slĂ€pptes första gĂ„ngen 2015 och har sedan dess blivit de facto-standarden för 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 kunde utvecklare senast komma överens om hur applikationer skulle distribueras till produktion? Hur mÄnga utvecklare kÀnner du som anvÀnder verktygen nÀr de tillhandahÄlls direkt? Hur mÄnga molnadministratörer finns det idag som inte förstÄr hur applikationer fungerar? Vi kommer att övervÀga svaren pÄ dessa frÄgor i den hÀr artikeln.

Infrastruktur som YAML

I vÀrlden som har flyttat frÄn Puppet and Chef till Kubernetes har en av de största förÀndringarna varit övergÄngen frÄn "infrastruktur som kod" till "infrastruktur som data" - nÀrmare bestÀmt som YAML. Alla resurser i Kubernetes, inklusive poddar, konfigurationer, distribuerade instanser, volymer, etc., 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 denna representation Àr det lÀttare för DevOps- eller SRE-proffs att uttrycka sina arbetsbelastningar fullt ut utan att behöva skriva kod pÄ sprÄk som Python eller Javascript.

Andra fördelar med att organisera infrastruktur som data inkluderar:

  • GitOps eller Git Operations versionskontroll. Detta tillvĂ€gagĂ„ngssĂ€tt lĂ„ter dig behĂ„lla alla dina Kubernetes YAML-filer i git-förrĂ„d, sĂ„ att du kan spĂ„ra exakt nĂ€r en Ă€ndring gjordes, vem som gjorde den och exakt vad som Ă€ndrades. Detta ökar transparensen i verksamheten i hela organisationen och förbĂ€ttrar den operativa effektiviteten genom att eliminera oklarheter, sĂ€rskilt dĂ€r anstĂ€llda ska leta efter de resurser de behöver. Samtidigt blir det lĂ€ttare att automatiskt göra Ă€ndringar i Kubernetes-resurser – genom att helt enkelt slĂ„ samman en pull-begĂ€ran.
  • Skalbarhet. NĂ€r resurser definieras som YAML blir det extremt enkelt för klusteroperatörer att Ă€ndra ett eller tvĂ„ nummer i en Kubernetes-resurs och dĂ€rigenom Ă€ndra hur den skalas. Kubernetes tillhandahĂ„ller en mekanism för horisontell pod-autoskalning, vilket gör det enkelt att avgöra vad det minsta och maximala antalet pods Ă€r som en viss distribution krĂ€ver för att hantera lĂ„ga och höga nivĂ„er av trafik. Om du till exempel distribuerade en konfiguration som krĂ€ver ytterligare kapacitet pĂ„ grund av en plötslig ökning av trafiken, kan du Ă€ndra maxReplicas-vĂ€rdet 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 förvaltning. YAML Ă€r bra för att förstĂ„ hur saker distribueras till Kubernetes. Ett stort sĂ€kerhetsproblem Ă€r till exempel om dina arbetsbelastningar körs under en anvĂ€ndare som inte Ă€r administratör. I det hĂ€r fallet kan vi hitta verktyg som t.ex strid, YAML/JSON-validator, plus Öppna Policy Agent, en policyvalidator som sĂ€kerstĂ€ller att sammanhanget SĂ€kerhetskontext dina arbetsbelastningar tillĂ„ter inte att behĂ„llaren körs med administratörsbehörighet. Om detta mĂ„ste sĂ€kerstĂ€llas 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 = "Containers must not run as root"
}

  • Alternativ för integration med en molnleverantör. En av de mest mĂ€rkbara trenderna inom modern högteknologi Ă€r att köra arbetsbelastningar pĂ„ kapaciteten hos offentliga molnleverantörer. AnvĂ€nda komponenten molnleverantör Kubernetes lĂ„ter vilket kluster som helst integreras med molnleverantören det körs pĂ„. Till exempel, om en anvĂ€ndare kör en applikation i Kubernetes pĂ„ AWS och vill göra den applikationen tillgĂ€nglig via en tjĂ€nst, hjĂ€lper molnleverantören till att skapa tjĂ€nsten automatiskt. LoadBalancer, som automatiskt ger en lastbalanserare Amazon Elastic Load Balancerför att omdirigera trafik till programpoddar.

Expanderbarhet

Kubernetes Àr mycket utbyggbart, och utvecklare Àlskar det. Det finns en uppsÀttning tillgÀngliga resurser som pods, distributioner, StatefulSets, hemligheter, ConfigMaps, etc. Det Àr sant att anvÀndare och utvecklare kan lÀgga till andra resurser i formulÀret anpassade resursdefinitioner.

Till exempel om vi vill definiera en resurs CronTab, dÄ kan du göra nÄgot sÄ hÀr:

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

Senare kan vi skapa en CronTab-resurs sÄ hÀr:

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

Ett annat utökningsalternativ i Kubernetes Ă€r att en utvecklare kan skriva sina egna operatörer. Operatör – Ă€r en speciell process i ett Kubernetes-kluster som fungerar enligt mönstret "kontrollslinga". Med hjĂ€lp av operatören kan anvĂ€ndaren automatisera hanteringen av CRD:er (custom resource definitions) genom att utbyta information med Kubernetes API.

Det finns flera verktyg i communityn som gör det enkelt för utvecklare att skapa sina egna operatörer. Bland dem finns: Operatörsramverk och Operatörs-SDK. Denna SDK ger en grund frÄn vilken en utvecklare mycket snabbt kan börja skapa en operatör. LÄt oss sÀga att du kan börja frÄn kommandoraden sÄ hÀr:

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

SÄ hÀr genereras all kod för din operatör, inklusive YAML-filer och 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

Sedan kan du lÀgga till det nödvÀndiga API:et och styrenheten, 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

SÀtt sedan ihop operatören och skicka den till ditt containerregister:

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

Om en utvecklare krÀver Ànnu mer kontroll, kan standardkoden i Go-filer Àndras. Till exempel, för att Àndra detaljerna för en styrenhet, kan du göra Àndringar i filen controller.go.

Ett annat projekt ÖVERALLT, lĂ„ter dig skapa operatorer med endast deklarativa YAML-filer. Till exempel skulle operatören för Apache Kafka definieras som ungefĂ€r sĂ„. Med den kan du stĂ€lla in ett Kafka-kluster ovanpĂ„ Kubernetes med bara ett par kommandon:

$ kubectl kudo install zookeeper
$ kubectl kudo install kafka

Och sedan konfigurera det med ett annat 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 Kubernetes-slĂ€pp skett med nĂ„gra mĂ„naders mellanrum – det vill sĂ€ga tre till fyra stora releaser per Ă„r. Antalet nya funktioner som introduceras i var och en av dem minskar inte. Dessutom finns det inga tecken pĂ„ att sakta ner ens i vĂ„ra svĂ„ra tider – titta pĂ„ hur situationen ser ut just nu Kubernetes projektaktivitet pĂ„ Github.

Nya funktioner möjliggör mer flexibel klustring av verksamheter vid hantering av en mÀngd olika arbetsbelastningar. Dessutom fÄr utvecklare mer kontroll nÀr de distribuerar applikationer direkt till produktionen.

Gemenskapen

En annan viktig aspekt av Kubernetes popularitet Àr styrkan i dess community. Under 2015, efter att ha nÄtt version 1.0, sponsrades Kubernetes av Cloud Native Computing Foundation.

Det finns ocksÄ olika samfund SIG (speciella intressegrupper) som syftar till att arbeta med olika delar av Kubernetes allt eftersom projektet utvecklas. Dessa team lÀgger stÀndigt till nya funktioner som gör arbetet med Kubernetes enklare och bekvÀmare.

Cloud Native Foundation Àr ocksÄ vÀrd för CloudNativeCon/KubeCon, som i skrivande stund Àr den största konferensen med öppen kÀllkod 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 bemÀstra de nya funktionerna som dyker upp var tredje mÄnad.

Dessutom har Cloud Native Foundation Utskottet för teknisk övervakning, som tillsammans med SIGs granskar nya och befintliga Projekt fonder fokuserade pÄ molnets ekosystem. De flesta av dessa projekt hjÀlper till att förbÀttra Kubernetes styrkor.

Slutligen tror jag att Kubernetes inte hade varit sÄ framgÄngsrik som den Àr utan hela samhÀllets medvetna insatser, dÀr mÀnniskor hÄller ihop, men samtidigt vÀlkomnar nykomlingar i sina led.

Framtiden

En av de stora utmaningarna som utvecklare kommer att behöva hantera i framtiden Àr förmÄgan att fokusera pÄ detaljerna i sjÀlva koden, snarare Àn infrastrukturen som den körs pÄ. Det Àr just dessa trender som möts serverlöst arkitektoniskt paradigm, som Àr en av de ledande idag. Det finns redan avancerade ramverk, t.ex. Kniv О OpenFaas, som anvÀnder Kubernetes för att abstrahera infrastruktur frÄn utvecklaren.

I den hÀr artikeln har vi bara skrapat pÄ ytan av det nuvarande tillstÄndet Kubernetes - i sjÀlva verket Àr detta bara toppen av isberget. Kubernetes-anvÀndare har mÄnga andra resurser, möjligheter och konfigurationer till sitt förfogande.

KĂ€lla: will.com

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