Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

November 25, 2023
Tweet

More Decks by Elton Minetto

Other Decks in Programming

Transcript

  1. Criando Kubernetes
    Operators com o
    operator-sdk

    View full-size slide

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

    View full-size slide

  3. 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 full-size slide

  4. 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 full-size slide

  5. 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 full-size slide

  6. 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 full-size slide

  7. 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 full-size slide

  8. Alguns usos
    1. deploy de uma aplicação sob demanda
    2. fazer e restaurar backups do estado desse aplicativo
    3. 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 full-size slide

  9. 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 full-size slide

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

    View full-size slide

  11. Show me the code!

    View full-size slide

  12. 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 full-size slide

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

    View full-size slide

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

    View full-size slide

  15. make manifests
    Gerar os manifests

    View full-size slide

  16. https://github.com/eminetto/k8s-operator-talk/blob/main/controllers/ap
    plication_controller.go
    Código do Controller

    View full-size slide

  17. 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)
    }
    main.go

    View full-size slide

  18. 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
    Deploy

    View full-size slide

  19. https://operatorhub.io/
    OperatorHub

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide