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

Njut av att lÀsa!
I skrivande stund handlar Kubernetes om , och under de senaste tvÄ Ären har dess popularitet vuxit sÄ mycket att den konsekvent har rankats bland 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 , och sedan 2002 â namnutrymmen. BehĂ„llarna fick ett Ă€nnu bĂ€ttre utseende 2008, dĂ„ , och Google utvecklade sin egen interna företagsmekanism som kallas , 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 , Ă€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: 80Med 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 , YAML/JSON-validator, plus , en policyvalidator som sÀkerstÀller att sammanhanget 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 , 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 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 fö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 .
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. â Ă€r en speciell process i ett Kubernetes-kluster som fungerar enligt mönstret "". 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: och . 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-operatorSÄ 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.goSedan 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=MyAppServiceSÀ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 , lÄter dig skapa operatorer med endast deklarativa YAML-filer. Till exempel skulle operatören för Apache Kafka definieras som ungefÀr . Med den kan du stÀlla in ett Kafka-kluster ovanpÄ Kubernetes med bara ett par kommandon:
$ kubectl kudo install zookeeper
$ kubectl kudo install kafkaOch 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 .
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 .
Det finns ocksÄ olika samfund (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 , som tillsammans med SIGs granskar nya och befintliga 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 , som Àr en av de ledande idag. Det finns redan avancerade ramverk, t.ex. О , 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
