Slide 1

Slide 1 text

Criando Kubernetes Operators com o operator-sdk

Slide 2

Slide 2 text

Elton Minetto

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 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 8

Slide 8 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 9

Slide 9 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 10

Slide 10 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 11

Slide 11 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 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 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 17

Slide 17 text

No content

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

Show me the code

Slide 20

Slide 20 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 21

Slide 21 text

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

Slide 22

Slide 22 text

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"` }

Slide 23

Slide 23 text

Gerar os manifests make manifests

Slide 24

Slide 24 text

Código do Controller controllers/application_controller.go

Slide 25

Slide 25 text

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) }

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

Demo

Slide 28

Slide 28 text

OperatorHub https://operatorhub.io/

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

Links

Slide 31

Slide 31 text

Links ๏ Criando Kubernetes Operators com o operator- sdk

Slide 32

Slide 32 text

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

Slide 33

Slide 33 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 34

Slide 34 text

Contato https://eltonminetto.dev https://x.com/eminetto elton@minetto.dev