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

Trevlig lÀsning!
Vid tidpunkten för denna artikels skrivande Àr Kubernetes ungefÀr , och under de senaste tvÄ Ären har dess popularitet ökat sÄ mycket att den stabilt ligger bland de 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 , och sedan 2002 - namnrymder. Containrar blev Ànnu mer utvecklade 2008 nÀr , och Google utvecklade sin interna mekanism som heter , 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 , À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: 80Med 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 , YAML/JSON-validerare, plus , policynvaliderare som ser till att kontexten 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 , 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 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 , 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 .
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. â Ă€r en speciell process i Kubernetes-klustret som arbetar enligt mönstret "". 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 och dess . 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-operatorSÄ 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.goSedan 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=MyAppServiceDÀ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, , tillÄter att skapa operators enbart med deklarativa YAML-filer. Till exempel, en operator för Apache Kafka skulle definieras ungefÀr . Med den kan du med bara nÄgra kommandon installera en Kafka-kluster ovanpÄ Kubernetes:
$ kubectl kudo install zookeeper
$ kubectl kudo install kafkaOch 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 .
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 .
Det finns Àven olika samhÀllen (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 , som tillsammans med SIG:erna granskar nya och befintliga 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 , som idag Àr en av ledarna, svarar mot. Det finns redan avancerade ramverk, till exempel och , 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
