I slutningen af sommeren vil vi minde om, at vi arbejder videre med emnet Kubernetes og besluttede at publicere en artikel fra Stackoverflow, der demonstrerer tingenes tilstand i dette projekt i begyndelsen af juni.
Nyd læsning!
På tidspunktet for skrivning af denne artikel er Kubernetes alder ca. seks år gammel, og i løbet af de sidste to år er dens popularitet vokset så meget, at den konsekvent er rangeret blandt mest favorit platforme. Kubernetes ligger på tredjepladsen i år. For at opsummere: Kubernetes er en platform designet til at køre og orkestrere containeriserede arbejdsbelastninger.
Containere begyndte som et specielt design til isolering af processer i Linux; containere har inkluderet siden 2007 cgrupper, og siden 2002 – navnerum. Containere blev designet endnu bedre i 2008, da de blev tilgængelige LXC, og Google udviklede sin egen interne virksomhedsmekanisme kaldet Borg, hvor "alt arbejde udføres i containere." Herfra spoler vi frem til 2013, hvor den første udgivelse af Docker fandt sted, og containere endelig blev en populær masseløsning. På det tidspunkt var det vigtigste værktøj til containerorkestrering Mesos, selvom han ikke var voldsomt populær. Kubernetes blev første gang udgivet i 2015, hvorefter dette værktøj blev de facto standard inden for containerorkestrering.
For at prøve at forstå, hvorfor Kubernetes er så populær, lad os prøve at besvare et par spørgsmål. Hvornår var det sidste gang, udviklere var i stand til at blive enige om, hvordan de skulle implementere applikationer til produktion? Hvor mange udviklere kender du, der bruger værktøjerne, når de leveres ud af kassen? Hvor mange cloud-administratorer er der i dag, som ikke forstår, hvordan applikationer fungerer? Vi vil se på svarene på disse spørgsmål i denne artikel.
Infrastruktur som YAML
I verden, der gik fra Puppet and Chef til Kubernetes, var en af de største ændringer overgangen fra "infrastruktur som kode" til "infrastruktur som data" - specifikt som YAML. Alle ressourcer i Kubernetes, som inkluderer pods, konfigurationer, implementerede forekomster, volumener osv., kan nemt beskrives i en YAML-fil. For eksempel:
apiVersion: v1
kind: Pod
metadata:
name: site
labels:
app: web
spec:
containers:
- name: front-end
image: nginx
ports:
- containerPort: 80
Denne visning gør det nemmere for DevOps- eller SRE-professionelle at udtrykke deres arbejdsbelastning fuldt ud uden at skulle skrive kode på sprog som Python eller Javascript.
Andre fordele ved at organisere infrastruktur som data omfatter:
GitOps eller Git Operations Version Control. Denne tilgang giver dig mulighed for at beholde alle Kubernetes YAML-filer i git-repositories, så du kan spore præcis, hvornår en ændring blev foretaget, hvem der lavede den, og hvad der præcist ændrede sig. Dette øger gennemsigtigheden af operationer i hele organisationen og forbedrer den operationelle effektivitet ved at eliminere tvetydighed, især hvor medarbejderne skal lede efter de ressourcer, de har brug for. Samtidig bliver det nemmere automatisk at foretage ændringer i Kubernetes-ressourcer ved blot at flette en pull-anmodning.
Skalerbarhed. Når ressourcer er defineret som YAML, bliver det ekstremt nemt for klyngeoperatører at ændre et eller to tal i en Kubernetes-ressource og derved ændre, hvordan den skaleres. Kubernetes leverer en mekanisme til horisontal autoskalering af pods, som kan bruges til bekvemt at bestemme, hvilket minimum og maksimum antal pods, der kræves i en bestemt implementeringskonfiguration for at håndtere lave og høje niveauer af trafik. Hvis du for eksempel har implementeret en konfiguration, der kræver yderligere kapacitet på grund af en pludselig stigning i trafikken, kan maxReplicas ændres fra 10 til 20:
Sikkerhed og ledelse. YAML er fantastisk til at evaluere, hvordan tingene er implementeret i Kubernetes. Et stort sikkerhedsproblem vedrører f.eks., om dine arbejdsbelastninger kører som en ikke-administratorbruger. I dette tilfælde kan vi få brug for værktøjer som f.eks konkurrence, YAML/JSON validator, plus Åbn Politikagent, en politikvalidator for at sikre, at konteksten Sikkerhedskontekst dine arbejdsbelastninger tillader ikke containeren at køre med administratorrettigheder. Hvis dette er påkrævet, kan brugerne anvende en simpel politik Rego, sådan her:
package main
deny[msg] {
input.kind = "Deployment"
not input.spec.template.spec.securityContext.runAsNonRoot = true
msg = "Containers must not run as root"
}
Muligheder for integration med en cloud-udbyder. En af de mest bemærkelsesværdige tendenser i nutidens højteknologi er at køre arbejdsbelastninger på offentlige cloud-udbydere. Brug af komponenten cloud-udbyder Kubernetes tillader enhver klynge at integrere med den cloud-udbyder, den kører på. For eksempel, hvis en bruger kører en applikation i Kubernetes på AWS og ønsker at eksponere den applikation gennem en tjeneste, hjælper skyudbyderen automatisk med at oprette tjenesten LoadBalancersom automatisk vil levere belastningsbalanceren Amazon Elastic Load Balancerat omdirigere trafik til applikations-pods.
Udvidelsesmuligheder
Kubernetes er meget udvidelsesmuligheder, og udviklere elsker det. Der er et sæt tilgængelige ressourcer såsom pods, implementeringer, StatefulSets, hemmeligheder, ConfigMaps, etc. Sandt nok kan brugere og udviklere tilføje andre ressourcer i formularen brugerdefinerede ressourcedefinitioner.
For eksempel hvis vi vil definere en ressource CronTab, så kunne du gøre sådan noget:
En anden mulighed for udvidelse i Kubernetes er, at udvikleren kan skrive sine egne udsagn. operatør er en særlig proces i Kubernetes-klyngen, der fungerer i henhold til "styrekredsløb" Ved hjælp af en operatør kan brugeren automatisere håndteringen af CRD'er (custom resource definitions) ved at udveksle information med Kubernetes API.
Der er flere værktøjer i fællesskabet, der gør det nemt for udviklere at oprette deres egne operatører. Blandt dem - Operatørramme og Operatør SDK. Denne SDK giver et fundament, hvorfra en udvikler hurtigt kan begynde at oprette en operatør. Lad os sige, at du kan starte fra kommandolinjen noget som dette:
$ operator-sdk new my-operator --repo github.com/myuser/my-operator
Dette opretter al boilerplate-koden for din operatør, inklusive YAML-filer og Golang-kode:
Hvis udvikleren ønsker endnu mere kontrol, kan boilerplate-koden i Go-filer ændres. For at ændre controllerens specifikationer kan du for eksempel foretage ændringer i filen controller.go.
Endnu et projekt KUDO, giver dig mulighed for at oprette udsagn ved kun at bruge deklarative YAML-filer. For eksempel vil en operatør for Apache Kafka blive defineret tilnærmelsesvis så. Med det kan du installere en Kafka-klynge oven på Kubernetes med blot et par kommandoer:
I løbet af de sidste par år er store Kubernetes-udgivelser udkommet med få måneders mellemrum - det vil sige tre til fire store udgivelser om året. Antallet af nye funktioner introduceret i hver af dem falder ikke. Desuden er der ingen tegn på at sætte farten ned selv i disse svære tider – se på, hvordan situationen er nu Kubernetes projektaktivitet på Github.
Nye funktioner giver dig mulighed for mere fleksibelt at gruppere operationer på tværs af forskellige arbejdsbelastninger. Derudover har programmører større kontrol, når de implementerer applikationer direkte til produktionen.
Fællesskab
Et andet vigtigt aspekt af Kubernetes' popularitet er styrken af dets fællesskab. I 2015, efter at have nået version 1.0, blev Kubernetes sponsoreret af Cloud Native Computing Foundation.
Der er også forskellige fællesskaber SIG (Special Interest Groups) fokuserede på at arbejde på forskellige områder af Kubernetes, efterhånden som projektet udvikler sig. Disse grupper tilføjer konstant nye funktioner, hvilket gør arbejdet med Kubernetes mere bekvemt og bekvemt.
Cloud Native Foundation er også vært for CloudNativeCon/KubeCon, som i skrivende stund er den største open source-konference i verden. Det afholdes typisk tre gange om året og samler tusindvis af fagfolk, der ønsker at forbedre Kubernetes og dets økosystem, samt lære nye funktioner, der vises hver tredje måned.
Desuden har Cloud Native Foundation Teknisk Tilsynsudvalg, som sammen med SIGs gennemgår nye og eksisterende Projekter midler fokuseret på skyens økosystem. De fleste af disse projekter hjælper med at forbedre Kubernetes styrker.
Endelig tror jeg på, at Kubernetes ikke ville være så succesfuld, som den er uden hele samfundets bevidste indsats, hvor folk holder sammen, men samtidig byder nytilkomne velkommen i folden.
fremtiden
En af de vigtigste udfordringer, som udviklere skal håndtere i fremtiden, er evnen til at fokusere på detaljerne i selve koden, og ikke på den infrastruktur, den kører i. Det imødekommer disse tendenser serverløst arkitektonisk paradigme, som er en af de førende i dag. Avancerede rammer findes allerede, f.eks. Kniv и OpenFaas, som bruger Kubernetes til at abstrahere infrastrukturen fra udvikleren.
I denne artikel har vi kun ridset overfladen af den nuværende tilstand Kubernetes – faktisk er det kun toppen af isbjerget. Kubernetes-brugere har mange andre ressourcer, muligheder og konfigurationer til deres rådighed.