Slide 1

Slide 1 text

Criando Kubernetes Operators com o operator-sdk

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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.

Slide 4

Slide 4 text

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.

Slide 5

Slide 5 text

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.

Slide 6

Slide 6 text

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.

Slide 7

Slide 7 text

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.

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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.

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

Show me the code!

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

// 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

Slide 16

Slide 16 text

make manifests Gerar os manifests

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

Demo

Slide 21

Slide 21 text

https://operatorhub.io/ OperatorHub

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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