$30 off During Our Annual Pro Sale. View Details »

Criando Kubernetes Operators com o operator-sdk

Criando Kubernetes Operators com o operator-sdk

Nesta talk falo sobre Kubernetes Operators e mostrar como criar um usando Go e o operator-sdk

Elton Minetto

October 02, 2023
Tweet

More Decks by Elton Minetto

Other Decks in Programming

Transcript

  1. Criando Kubernetes
    Operators com o
    operator-sdk

    View Slide

  2. Elton Minetto

    View Slide

  3. Elton Minetto
    ๏ Escrevo códigos, sou professor, palestrante, e
    escritor

    View Slide

  4. Elton Minetto
    ๏ Escrevo códigos, sou professor, palestrante, e
    escritor
    ๏ Escrevo no https://eltonminetto.dev e no x

    View Slide

  5. Elton Minetto
    ๏ Escrevo códigos, sou professor, palestrante, e
    escritor
    ๏ Escrevo no https://eltonminetto.dev e no x
    ๏ Principal Software Engineer @ PicPay

    View Slide

  6. Elton Minetto
    ๏ Escrevo códigos, sou professor, palestrante, e
    escritor
    ๏ Escrevo no https://eltonminetto.dev e no x
    ๏ Principal Software Engineer @ PicPay
    ๏ Google Developer Expert em Go

    View Slide

  7. Kubernetes
    O Kubernetes foi projetado para automação.
    Existe muita automação integrada do núcleo do
    Kubernetes. Você pode usar o Kubernetes para
    automatizar o deploy e execução de
    workloads e você pode automatizar como o
    Kubernetes faz isso.

    View Slide

  8. Operators
    O conceito de operator pattern do Kubernetes
    permite estender o comportamento do cluster
    sem modificar o código do próprio Kubernetes,
    vinculando controllers a um ou mais custom
    resources.

    View Slide

  9. Controller
    Um
    controller
    rastreia pelo menos um
    tipo de
    recurso
    do Kubernetes. Esses objetos têm um
    campo
    spec
    que representa o
    estado desejado
    .
    O(s) controlador(es) desse recurso são
    responsáveis por fazer com que o estado atual se
    aproxime daquele estado desejado.

    View Slide

  10. Resources
    Um recurso é um endpoint na API do
    Kubernetes que armazena uma coleção de objetos
    de API de um determinado tipo; por exemplo, o
    recurso built-in pods contém uma coleção de
    objetos Pod.

    View Slide

  11. Custom resources
    Um recurso personalizado é uma extensão da API
    do Kubernetes que não está necessariamente
    disponível em uma instalação padrão do
    Kubernetes. Ele representa uma personalização de
    uma instalação específica do Kubernetes.

    View Slide

  12. Algumas das coisas que você pode usar um
    operador para automatizar:

    View Slide

  13. Algumas das coisas que você pode usar um
    operador para automatizar:
    ๏ deploy de uma aplicação sob demanda

    View Slide

  14. Algumas das coisas que você pode usar um
    operador para automatizar:
    ๏ deploy de uma aplicação sob demanda
    ๏ fazer e restaurar backups do estado desse
    aplicativo

    View Slide

  15. Algumas das coisas que você pode usar um
    operador para automatizar:
    ๏ deploy de uma aplicação sob demanda
    ๏ fazer e restaurar backups do estado desse
    aplicativo
    ๏ lidar com atualizações do código do aplicativo
    juntamente com alterações relacionadas, como
    esquemas de banco de dados ou configurações
    extras

    View Slide

  16. Reconciliation Loop
    O Kubernetes é baseado no conceito de uma
    especificação declarativa do estado desejado do
    cluster e no uso de loops de reconciliação para
    direcionar o estado real para o estado desejado.

    View Slide

  17. View Slide

  18. Operator SDK
    https://sdk.operatorframework.io/

    View Slide

  19. Show me the
    code

    View Slide

  20. Objetivo
    apiVersion: v1
    kind: Namespace
    metadata:
    name: application-sample
    ---
    apiVersion: minetto.dev/v1alpha1
    kind: Application
    metadata:
    name: application-sample
    namespace: application-sample
    spec:
    image: nginx:latest
    replicas: 2
    port: 80

    View Slide

  21. Scaffolding
    operator-sdk init --domain minetto.dev --repo github.com/eminetto/k8s-operator-talk
    operator-sdk create api --version v1alpha1 --kind Application --resource --controller

    View Slide

  22. Adicionar informações ao Custom Resource Application
    // api/v1alpha1/application_types.go
    type ApplicationSpec struct {
    Image string `json:"image,omitempty"`
    Replicas int32 `json:"replicas,omitempty"`
    Port int32 `json:"port,omitempty"`
    }

    View Slide

  23. Gerar os manifests
    make manifests

    View Slide

  24. Código do Controller
    controllers/application_controller.go

    View Slide

  25. main.go
    if err = (&controllers.ApplicationReconciler{
    Client: mgr.GetClient(),
    Scheme: mgr.GetScheme(),
    }).SetupWithManager(mgr); err != nil {
    setupLog.Error(err, "unable to create controller", "controller", "Application")
    os.Exit(1)
    }

    View Slide

  26. Deploy
    make docker-build docker-push IMG=registry.hub.docker.com/eminetto/k8s-operator-talk:latest
    make deploy IMG=registry.hub.docker.com/eminetto/k8s-operator-talk:latest

    View Slide

  27. Demo

    View Slide

  28. OperatorHub
    https://operatorhub.io/

    View Slide

  29. Código
    https://github.com/eminetto/k8s-operator-talk

    View Slide

  30. Links

    View Slide

  31. Links
    ๏ Criando Kubernetes Operators com o operator-
    sdk

    View Slide

  32. Links
    ๏ Criando Kubernetes Operators com o operator-
    sdk
    ๏ Escrevendo testes para um Kubernetes
    Operator

    View Slide

  33. Links
    ๏ Criando Kubernetes Operators com o operator-
    sdk
    ๏ Escrevendo testes para um Kubernetes
    Operator
    ๏ Acelere seu ambiente de desenvolvimento local
    com o Tilt

    View Slide

  34. Contato
    https://eltonminetto.dev
    https://x.com/eminetto
    [email protected]

    View Slide