Circa a pupularità crescente di Kubernetes

Ehi Habr!

À a fine di l'estate, vulemu ramintà vi chì cuntinuemu à travaglià nant'à u tema Kubernetes è decisu di pubblicà un articulu da Stackoverflow chì mostra u statu di l'affari in stu prughjettu à u principiu di ghjugnu.

Circa a pupularità crescente di Kubernetes

Enjoy reading!

À u mumentu di a scrittura di stu articulu, l'età di Kubernetes hè di circa. sei anni, è in l'ultimi dui anni a so popularità hè cresciutu tantu chì hè sempre classificatu trà u più favuritu piattaforme. Kubernetes hè terzu quist'annu. Per ricapitolare: Kubernetes hè una piattaforma pensata per l'esecuzione è l'orchestrazione di carichi di travagliu containerizzati.

I cuntenituri cuminciaru cum'è un disignu speciale per isolà i prucessi in Linux; i cuntenituri sò inclusi da u 2007 cgruppi, è da u 2002 - namespaces. I cuntenituri sò stati cuncepiti ancu megliu da u 2008, quandu hè diventatu dispunibule LXC, è Google hà sviluppatu u so propiu mecanismu corporativu internu chjamatu Borg, induve "tuttu u travagliu hè fattu in cuntenituri". Da quì avemu avanzatu à u 2013, quandu a prima liberazione di Docker hè stata fatta, è i cuntenituri sò finalmente diventati una soluzione di massa populari. À quellu tempu, u strumentu principale per l'orchestrazione di u containeru era Mesos, ancu s'ellu ùn era micca assai populari. Kubernetes hè stata prima liberata in 2015, dopu chì sta strumentu hè diventatu u standard de facto in u campu di l'orchestrazione di u containeru.

Per pruvà à capisce perchè Kubernetes hè cusì populari, pruvemu à risponde à uni pochi di dumande. Quandu hè stata l'ultima volta chì i sviluppatori sò stati capaci di cuncordà cumu implementà l'applicazioni à a produzzione? Quanti sviluppatori sapete chì utilizanu l'arnesi cumu sò furniti fora di a scatula? Quanti amministratori di nuvola ci sò oghje chì ùn capiscenu micca cumu funziona l'applicazioni? Fighjemu e risposte à queste dumande in questu articulu.

Infrastruttura cum'è YAML

In u mondu chì passava da Puppet and Chef à Kubernetes, unu di i più grandi cambiamenti era u muvimentu da "infrastruttura cum'è codice" à "infrastruttura cum'è dati" - specificamente, cum'è YAML. Tutte e risorse in Kubernetes, chì includenu pods, cunfigurazioni, istanze implementate, volumi, etc., ponu esse facilmente descritte in un schedariu YAML. Per esempiu:

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

Questa vista rende più faciule per i prufessiunali DevOps o SRE per sprime cumplettamente i so carichi di travagliu senza avè da scrive codice in lingue cum'è Python o Javascript.

Altri vantaghji di l'urganizazione di l'infrastruttura cum'è dati includenu:

  • GitOps o Git Operations Version Control. Stu approcciu vi permette di mantene tutti i fugliali YAML di Kubernetes in i repositori git, cusì pudete seguità esattamente quandu un cambiamentu hè statu fattu, quale l'hà fattu, è ciò chì hà cambiatu esattamente. Questu aumenta a trasparenza di l'operazioni in tutta l'urganizazione è migliurà l'efficienza operativa eliminendu l'ambiguità, in particulare induve l'impiegati anu da circà e risorse chì anu bisognu. À u listessu tempu, diventa più faciule per fà automaticamente cambiamenti à e risorse Kubernetes solu unendu una dumanda di pull.
  • Scalabilità. Quandu e risorse sò definite cum'è YAML, diventa estremamente faciule per l'operatori di cluster di cambià unu o dui numeri in una risorsa Kubernetes, cambiendu cusì cumu si scala. Kubernetes furnisce un mecanismu per l'autoscaling horizontale di pods, chì pò esse usatu per determinà convenientemente ciò chì u minimu è massimu di pods sò necessarii in una cunfigurazione di implementazione particulare per trattà i livelli di trafficu bassu è altu. Per esempiu, se avete implementatu una cunfigurazione chì richiede capacità supplementu per via di un spike bruscu in u trafficu, allora maxReplicas pò esse cambiatu da 10 à 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

  • Sicurezza è gestione. YAML hè grande per evaluà cumu e cose sò implementate in Kubernetes. Per esempiu, una preoccupazione maiò di a sicurità riguarda se i vostri carichi di travagliu sò in esecuzione cum'è un utilizatore non amministratore. In questu casu, pudemu avè bisognu di strumenti cum'è cuncorsu, validatore YAML/JSON, più Open Policy Agent, un validatore di pulitica per assicurà chì u cuntestu Cuntestu di sicurità i vostri carichi di travagliu ùn permettenu micca u cuntinuu per eseguisce cù privilegi di amministratore. Se questu hè necessariu, l'utilizatori ponu applicà una pulitica simplice trinchera, cum'è què:

package main

deny[msg] {
  input.kind = "Deployment"
  not input.spec.template.spec.securityContext.runAsNonRoot = true
  msg = "Containers must not run as root"
}

  • Opzioni per l'integrazione cù un fornitore di nuvola. Una di e tendenze più notevuli in l'alta tecnulugia d'oghje hè di eseguisce carichi di travagliu nantu à i fornitori di nuvola publica. Utilizà u cumpunente fornitore di nuvola Kubernetes permette à qualsiasi cluster di integrà cù u fornitore di nuvola nantu à quale si corre. Per esempiu, se un utilizatore esegue una applicazione in Kubernetes in AWS è vole esporà quella applicazione attraversu un serviziu, u fornitore di nuvola aiuta automaticamente à creà u serviziu. LoadBalancer, chì furnisce automaticamente u balancer di carica Amazon Elastic Load Balancerper reindirizzà u trafficu à i pods di l'applicazione.

Espandibilità

Kubernetes hè assai estensibile, è i sviluppatori amanu. Ci hè un inseme di risorse dispunibili cum'è pods, implementazioni, StatefulSets, sicreti, ConfigMaps, etc. True, l'utilizatori è i sviluppatori ponu aghjunghje altre risorse in a forma definizione di risorse persunalizati.

Per esempiu, se vulemu definisce una risorsa CronTab, allora pudete fà qualcosa cum'è questu:

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

In seguitu pudemu creà una risorsa CronTab qualcosa cum'è questu:

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

Un'altra opzione per l'estensibilità in Kubernetes hè chì u sviluppatore pò scrive e so dichjarazioni. Operatore hè un prucessu speciale in u cluster Kubernetes chì travaglia secondu u "circuitu di cuntrollu" Cù l'aiutu di un operatore, l'utilizatore pò automatizà a gestione di CRDs (definizioni di risorse persunalizati) scambiendu infurmazioni cù l'API Kubernetes.

Ci hè parechje strumenti in a cumunità chì facenu fàciule per i sviluppatori di creà i so operatori. À mezu à elli - Quadru di l'operatore è so Operatore SDK. Stu SDK furnisce una basa da quale un sviluppatore pò cumincià rapidamente à creà un operatore. Diciamu chì pudete inizià da a linea di cummanda qualcosa cum'è questu:

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

Questu crea tuttu u codice boilerplate per u vostru operatore, cumpresi i schedari YAML è u codice 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

Allora pudete aghjunghje l'API è u controller necessarii, cum'è questu:

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

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

Allora, infine, assemble l'operatore è mandate à u registru di u vostru containeru:

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

Se u sviluppatore vole ancu più cuntrollu, u codice boilerplate in i schedari Go pò esse cambiatu. Per esempiu, per mudificà e specifiche di u controller, pudete fà cambiamenti à u schedariu controller.go.

Un altru prughjettu DUTUTTI, permette di creà dichjarazioni usendu solu i schedarii YAML dichjarativi. Per esempiu, un operatore per Apache Kafka seria definitu circa tantu. Cù questu, pudete installà un cluster Kafka sopra Kubernetes cù solu un paru di cumandamenti:

$ kubectl kudo install zookeeper
$ kubectl kudo install kafka

E poi cunfigurà cù un altru cumandamentu:

$ 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

Innuvazione

In l'ultimi anni, i grandi versioni di Kubernetes sò ghjunti ogni pochi mesi - vale à dì trè o quattru versioni maiò annu. U nùmeru di funzioni novi introdutte in ognuna di elli ùn diminuite micca. Inoltre, ùn ci sò micca signali di rallentà ancu in questi tempi difficili - fighjate ciò chì a situazione hè avà Attività di prughjettu Kubernetes nantu à Github.

Nuvelle capacità permettenu di raggruppà operazioni più flessibili in diverse carichi di travagliu. Inoltre, i programatori godenu un cuntrollu più grande quandu implementanu applicazioni direttamente à a produzzione.

Community

Un altru aspettu maiò di a popularità di Kubernetes hè a forza di a so cumunità. In u 2015, quandu hà ghjuntu à a versione 1.0, Kubernetes hè statu sponsorizatu da Fondazione Cloud Native Computing.

Ci sò dinù diverse cumunità SIG (Gruppi di Interessi Speciali) cuncintrau nantu à travaglià in diverse aree di Kubernetes mentre u prugettu evoluzione. Questi gruppi aghjunghjenu constantemente novi funzioni, rendendu u travagliu cù Kubernetes più còmuda è cunvene.

A Cloud Native Foundation ospita ancu CloudNativeCon / KubeCon, chì, à u mumentu di a scrittura, hè a più grande cunferenza open source in u mondu. Tipicamenti tenutu trè volte à l'annu, riunisce migliaia di prufessiunali chì volenu migliurà Kubernetes è u so ecosistema, è ancu amparà e funzioni novi chì appariscenu ogni trè mesi.

Inoltre, Cloud Native Foundation hà Cumitatu di Supervisione Tecnica, chì, inseme cù i SIG, rivisione novi è esistenti prughjetti fondi focalizati nantu à l'ecosistema nuvola. A maiò parte di sti prughjetti aiutanu à migliurà i punti di forza di Kubernetes.

Infine, crede chì Kubernetes ùn saria micca cusì successu cum'è senza l'sforzi cuscienti di tutta a cumunità, induve a ghjente si ferma, ma à u stessu tempu accolta i novi vinuti in u locu.

U Futuru

Unu di i sfidi principali chì i sviluppatori anu da trattà in u futuru hè a capacità di fucalizza nantu à i dettagli di u codice stessu, è micca nantu à l'infrastruttura in quale corre. Incontra sti tendenzi paradigma architetturale senza server, chì hè unu di i principali oghje. I quadri avanzati esistenu digià, per esempiu. nativu и OpenFaas, chì utilizanu Kubernetes per astrattu l'infrastruttura da u sviluppatore.

In questu articulu, avemu solu graffiatu a superficia di u statu attuale di Kubernetes - in fattu, hè solu a punta di l'iceberg. L'utilizatori di Kubernetes anu parechje altre risorse, capacità è cunfigurazioni à a so dispusizione.

Source: www.habr.com

Add a comment