DevOps

Šta su Kubernetes operateri i kako rade?

Kubernetes operateri su moćan način za automatizaciju primene i upravljanja aplikacijama na Kubernetes-u.
Koristeći Operatore, možete da definišete kako vaša aplikacija treba da bude podešena i izvršena na deklarativni način, omogućavajući veću automatizaciju i manje ručne intervencije.
U ovom postu ćemo pogledati šta su Kubernetes operateri, zašto su korisni i kako da počnete rad sa njima.

Kubernetes Operateri

U svojoj srži, Operater je jednostavno kod koji se pokreće unutar Kubernetes klastera za automatizaciju zadataka koji se odnose na postavljanje ili upravljanje aplikacijama.
Dizajniran je tako da može da posmatra promene u okruženju (kao što su nove verzije softvera koje se objavljuju) ili parametre koje definiše korisnik (kao što su ograničenja resursa), a zatim da deluje u skladu sa tim preduzimanjem radnji kao što su kreiranje/ažuriranje/brisanje resursa ili povećanje/ smanjiti usluge na osnovu tih promena.

Ovo omogućava programerima da jednom definišu svoje željeno stanje umesto da moraju ručno da intervenišu svaki put kada nešto treba da se promeni – što primenu čini mnogo automatizovanijom nego ranije!

Operateri pružaju nekoliko prednosti u odnosu na tradicionalne metode: smanjuju složenost apstrahujući detalje implementacije; olakšavaju implementaciju jer se većina osnovnih operacija izvodi automatski; povećati pouzdanost jer se greške neće pojaviti zbog ručnih grešaka; konačno, operateri daju timovima bolju kontrolu nad svojim sistemima jer se sva konfiguracija obavlja preko koda, a ne ad hoc komandi koje se izdaju direktno u proizvodna okruženja – što čini vraćanje mnogo jednostavnijim!

kubernetes

Pored ovih prednosti, takođe nema potrebe za specijalizovanim znanjem kada koristite operatere – što znači da će svako ko zna dovoljno o ​​arhitekturi aplikacije moći da razume kako stvari funkcionišu brzo bez potrebe za dodatnom obukom!

Osim toga, ako koristite popularne okvire kao što su Helm i Charts, onda postavljanje sopstvenog prilagođenog operatera postaje još lakše zahvaljujući ugrađenoj podršci iz samih ovih skupova alata – dajući vam sve što vam je potrebno da započnete svoje putovanje do uspešne automatizacije za nekoliko minuta!

Instalacija Operatera

Evo nekoliko linkova koji će vam pomoći da preuzmete i instalirate sve što je potrebno za korišćenje Python operatera za Kubernetes:

  1. Instalacija Kubernetes klastera: Prvo je potrebno imati instaliran i pokrenut Kubernetes klaster. To možete uraditi korišćenjem alata kao što su minikube ili kubeadm.
  1. Instalacija Pythona: Potrebno je imati instaliranu Python verziju 3.6 ili noviju.
  1. Instalacija operator SDK-a: Operator SDK je alat koji se koristi za razvoj Kubernetes operatora. Možete ga instalirati preko pip-a komandom “pip install operator-sdk
  1. Kreiranje projekta: Kreirajte novi projekat koristeći operator-sdk komandu “operator-sdk init --domain=example.com --repo=example-operator
  1. Dodavanje logike operatera: Dodajte logiku operatera u projekat koristeći komandu “operator-sdk create api --group=example --version=v1alpha1 --kind=Example
  1. Kreiranje i objavljivanje Kubernetes manifesta: Мanifeste za operator i njegove resurse koristeći komandu “operator-sdk generate k8s” i objavite ih na Kubernetes klaster.
  1. Pokretanje operatera: Pokrenite operator na Kubernetes klasteru koristeći komandu “kubectl apply -f deploy/operator.yaml

Ove linkove možete koristiti kao početnu tačku za instalaciju i konfiguraciju svih potrebnih alata i biblioteka.

Deklarativni pristup

Nakon što ste izvršili ove korake, vaš Python operator treba da je spreman za rad na Kubernetes klasteru.
Navešću primer izvornog koda za kreiranje Python operatera za Kubernetes.

from kubernetes import client, config

def create_example_pod():
    # Configs can be set in Configuration class directly or using helper
    # utility. If no argument provided, the config will be loaded from
    # default location.
    config.load_kube_config()

    v1 = client.CoreV1Api()

    # Create a pod
    pod = client.V1Pod()
    pod.metadata = client.V1ObjectMeta(name="example-pod")
    pod.spec = client.V1PodSpec(containers=[client.V1Container(
        name="example",
        image="nginx:1.14.2",
    )])

    # Create the pod
    v1.create_namespaced_pod(namespace="default", body=pod)
    print("Pod example-pod created.")

if __name__ == '__main__':
    create_example_pod()

 

Ovaj primer kreira pod sa imenom “example-pod” i kontejnerom sa imenom “example” i slikom “nginx:1.14.2” u namespace-u “default” na Kubernetes klasteru.

Da bi ovaj kod radilo, potrebno je da imate instaliran kubeconfig fajl i da ste importovali kubernetes biblioteku.

Ovaj primer je jednostavan i služi samo kao demonstracija osnovnog korišćenja klijenta Python za Kubernetes API.
Ukoliko želite da kreirate pravi operater, potrebno je da dodate logiku koja će kontrolisati pod stanjem i reagovati na promene u resursima, kao i da kreirate Kubernetes manifeste za operator i njegove resurse.

 Primera logike operatera i Kubernetes manifesta za operator:

import yaml
import kubernetes
from kubernetes.client import CustomObjectsApi

def watch_example_resource():
    config.load_kube_config()
    custom_api = CustomObjectsApi()

    def on_event(event):
        example_resource = event['object']
        if example_resource['spec']['desired_state'] == 'running':
            create_example_pod()
        else:
            delete_example_pod()

    custom_api.watch_namespaced_custom_object(
        'example.com', 'v1alpha1', 'default', 'exampleresources',
        on_event=on_event)

def create_example_pod():
    v1 = client.CoreV1Api()
    pod = client.V1Pod()
    pod.metadata = client.V1ObjectMeta(name="example-pod")
    pod.spec = client.V1PodSpec(containers=[client.V1Container(
        name="example",
        image="nginx:1.14.2",
    )])
    v1.create_namespaced_pod(namespace="default", body=pod)
    print("Pod example-pod created.")

def delete_example_pod():
    v1 = client.CoreV1Api()
    v1.delete_namespaced_pod(name='example-pod', namespace='default')
    print("Pod example-pod deleted.")

if __name__ == '__main__':
    watch_example_resource()

 

Ovaj primer kreira operater koji nadgleda Kubernetes custom resurse sa imenom “exampleresource” iz domena “example.com” i verzije “v1alpha1” u namespace-u “default“.

Ukoliko se otkrije da je polje “desired_state” u spec-u “running” operater će kreirati pod sa imenom “example-pod” i kontejnerom sa imenom “example” i slikom “nginx:1.14.2”, u suprotnom će pod biti obrisan.

Primer Kubernetes manifesta za operator:

apiVersion: app.example.com/v1alpha1
kind: ExampleOperator
metadata:
  name: example-operator
spec:
  replicas: 1

Ovaj manifest fajl kreira operater sa imenom “example-operator” i sa jednim replikom u namespace-u “default“.

Imajte na umu da ovo je samo jedan primer i da će vaša implementacija možda biti drugačija.
To zavisi od vašeg konkretnog korišćenja i zahteva. 

Napišite komentar