SlideShare a Scribd company logo
1 of 51
Download to read offline
Criando operators
para Kubernetes
usando Go
// Matheus Moraes Oliveira
● SRE @ QuintoAndar
● Perguntas & slides:
twitter.com/math3vz
Quem já brincou com
Kubernetes?
// Deploy.yaml
// Deploy.yaml
// Service.yaml
O que acontece quando
aplicamos um deploy?
// Kubectl
● Kubectl é uma ferramenta CLI para controlar/interagir clusters Kuberentes
// Deploy.yaml
● kubectl apply -f deploy.yaml
● kubectl apply -f service.yaml
● Kubectl get events
● Kubernetes não é igual uma API síncrona
● Orientado a eventos
● kubectl -> api server -> etcd
● controller manager
● Pod é criado
Então é só uma API?
Se é uma API orientada
eventos, eu poderia ter a
minha?
SIM
// meu-recurso.yaml
Custom Resource
Definition (CRD)
// meu-recurso.yaml
// Para ver o CRD criado
Legal, mas isso não é
muito útil né?
Operators!
Tá, mas o que é um
operator?
Um Operator é o
controlador do seu CRD
// Kubernetes Operator
● Um pattern introduzido pelo CoreOS
● Usa CRDs!
● Um controller não core do Kubernetes
● Reconcile loop (Toda vez que há um evento, o reconcile loop é chamado
para “reconciliar” o recurso)
● Estende a API do Kubernetes para fazer da aplicação um Custom
Resource
Vantagens de um
Operator
// Vantagens de usar um Operator
● Faz uso da API nativa do Kubernetes
● Orientado a eventos (Conectado diretamente ao etcd)
● Abstrai para dentro do Kubernetes algo que não é nativo do Kubernetes
● Lógica de negócio encapsulada
● Interação via kubectl
// Exemplo de Operators
● https://github.com/argoproj/argo-cd
● https://github.com/zalando/postgres-operator
● https://github.com/jaegertracing/jaeger-operator
● https://github.com/coreos/prometheus-operator
● https://github.com/operator-framework/awesome-operators
Beleza, então como eu
crio um Operator?
// Como criar um Operator
● Client nativo do Kubernetes em Go: k8s.io/client-go
● Kubebuilder (https://github.com/kubernetes-sigs/kubebuilder)
● Operator-sdk (https://github.com/operator-framework/operator-sdk)
○ Go
○ Helm
○ Ansible
// Como criar um Operator
● Client nativo do Kubernetes em Go: k8s.io/client-go
● Kubebuilder (https://github.com/kubernetes-sigs/kubebuilder)
● Operator-sdk (https://github.com/operator-framework/operator-sdk)
○ Go
○ Helm
○ Ansible
Uso real
// AWS IAM Roles
● IAM: Identity Access Manager
● Role: perfil a ser incorporado pela aplicação com permissões pré definidas
a recursos da AWS
● Cada deploy no Kubernetes possui uma role
● Eram gerenciadas fora do cluster, via terraform
● Aplicações frequentemente precisavam ser migradas de cluster/conta
AWS, e as roles eram esquecidas.
// AWS IAM Roles
// Caso de uso: AWS IAM Roles
● Porque um Operator?
○ Move junto com o cluster
○ Gerenciamento acoplado à aplicação
○ Continua infra as code
○ Entra no workflow para quem já está acostumado a trabalhar com o
ecossistema do Kubernetes
Vamos começar
// minha_iam_role.yaml
// Operator-sdk boilerplate
// Operator-sdk
// Vamos adicionar nosso CRD e registrar a nossa API
// Operator-sdk
// iamrole_types.go ANTES
// iamrole_types.go DEPOIS
// Para regerar código
● operator-sdk generate k8s
○ Gera deep copy para API do Kubernetes
● operator-sdk generate crds
○ Gera o CRD baseado no arquivo iamrole_types.go
Temos a API, os CRDs,
mas ainda falta o
Controller
// Vamos adicionar o controller para gerenciar esse CRD
// iamrole_controller.go
// Reconcile loop
● Funciona como uma fila
● Pode responder OK
● Pode responder erro
● Pode responder para tentar mais tarde
// Build
$ operator-sdk build my-image:v0
// Build
// Publish
$ kubectl apply -f deploy/
Demo
Muito obrigado!
twitter.com/math3vz

More Related Content

Similar to Criando operators para kubernetes usando go

TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...tdc-globalcode
 
Ambiente de CI/CD com Google Cloud
Ambiente de CI/CD com Google CloudAmbiente de CI/CD com Google Cloud
Ambiente de CI/CD com Google CloudAlvaro Viebrantz
 
Publicando WSO2 API Manager no Kubernetes (Portuguese)
Publicando WSO2 API Manager no Kubernetes (Portuguese)Publicando WSO2 API Manager no Kubernetes (Portuguese)
Publicando WSO2 API Manager no Kubernetes (Portuguese)WSO2
 
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...Renato Groff
 
Docker + Kubernetes: Turbinando seus projetos Web - Open Source Saturday - Ag...
Docker + Kubernetes: Turbinando seus projetos Web - Open Source Saturday - Ag...Docker + Kubernetes: Turbinando seus projetos Web - Open Source Saturday - Ag...
Docker + Kubernetes: Turbinando seus projetos Web - Open Source Saturday - Ag...Renato Groff
 
Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado | Setembro-2020
Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado | Setembro-2020Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado | Setembro-2020
Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado | Setembro-2020Renato Groff
 
Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes	Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes Rhuan Karlus Silva
 
Estendendo o kubernetes
Estendendo o kubernetesEstendendo o kubernetes
Estendendo o kubernetesRicardo Katz
 
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018Renato Groff
 
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...Renato Groff
 
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018Renato Groff
 
TDC2018SP | Trilha Containers - Provisionando um cluster Kubernetes multi-mas...
TDC2018SP | Trilha Containers - Provisionando um cluster Kubernetes multi-mas...TDC2018SP | Trilha Containers - Provisionando um cluster Kubernetes multi-mas...
TDC2018SP | Trilha Containers - Provisionando um cluster Kubernetes multi-mas...tdc-globalcode
 
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018Docker para Desenvolvedores .NET - .NET SP - Novembro-2018
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018Renato Groff
 
Kubernetes na Nuvem | Minicurso Gratuito - Azure na Prática
Kubernetes na Nuvem | Minicurso Gratuito - Azure na PráticaKubernetes na Nuvem | Minicurso Gratuito - Azure na Prática
Kubernetes na Nuvem | Minicurso Gratuito - Azure na PráticaRenato Groff
 
Curso de Verão - Aula 02 - Orquestração de Contêineres
Curso de Verão - Aula 02 - Orquestração de ContêineresCurso de Verão - Aula 02 - Orquestração de Contêineres
Curso de Verão - Aula 02 - Orquestração de ContêineresGuilhermeJorgeAragod
 
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...Renato Groff
 
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...Renato Groff
 
Orquestrando Containers na Nuvem com o Azure Kubernetes Service - ThorArch #1...
Orquestrando Containers na Nuvem com o Azure Kubernetes Service - ThorArch #1...Orquestrando Containers na Nuvem com o Azure Kubernetes Service - ThorArch #1...
Orquestrando Containers na Nuvem com o Azure Kubernetes Service - ThorArch #1...Renato Groff
 

Similar to Criando operators para kubernetes usando go (20)

Iniciando com kubernetes
Iniciando com kubernetesIniciando com kubernetes
Iniciando com kubernetes
 
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
 
Ambiente de CI/CD com Google Cloud
Ambiente de CI/CD com Google CloudAmbiente de CI/CD com Google Cloud
Ambiente de CI/CD com Google Cloud
 
Publicando WSO2 API Manager no Kubernetes (Portuguese)
Publicando WSO2 API Manager no Kubernetes (Portuguese)Publicando WSO2 API Manager no Kubernetes (Portuguese)
Publicando WSO2 API Manager no Kubernetes (Portuguese)
 
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...
 
Docker + Kubernetes: Turbinando seus projetos Web - Open Source Saturday - Ag...
Docker + Kubernetes: Turbinando seus projetos Web - Open Source Saturday - Ag...Docker + Kubernetes: Turbinando seus projetos Web - Open Source Saturday - Ag...
Docker + Kubernetes: Turbinando seus projetos Web - Open Source Saturday - Ag...
 
Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado | Setembro-2020
Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado | Setembro-2020Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado | Setembro-2020
Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado | Setembro-2020
 
Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes	Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes
 
Estendendo o kubernetes
Estendendo o kubernetesEstendendo o kubernetes
Estendendo o kubernetes
 
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018
 
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...
 
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018
 
TDC2018SP | Trilha Containers - Provisionando um cluster Kubernetes multi-mas...
TDC2018SP | Trilha Containers - Provisionando um cluster Kubernetes multi-mas...TDC2018SP | Trilha Containers - Provisionando um cluster Kubernetes multi-mas...
TDC2018SP | Trilha Containers - Provisionando um cluster Kubernetes multi-mas...
 
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018Docker para Desenvolvedores .NET - .NET SP - Novembro-2018
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018
 
Kubernetes na Nuvem | Minicurso Gratuito - Azure na Prática
Kubernetes na Nuvem | Minicurso Gratuito - Azure na PráticaKubernetes na Nuvem | Minicurso Gratuito - Azure na Prática
Kubernetes na Nuvem | Minicurso Gratuito - Azure na Prática
 
Docker
DockerDocker
Docker
 
Curso de Verão - Aula 02 - Orquestração de Contêineres
Curso de Verão - Aula 02 - Orquestração de ContêineresCurso de Verão - Aula 02 - Orquestração de Contêineres
Curso de Verão - Aula 02 - Orquestração de Contêineres
 
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
 
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
 
Orquestrando Containers na Nuvem com o Azure Kubernetes Service - ThorArch #1...
Orquestrando Containers na Nuvem com o Azure Kubernetes Service - ThorArch #1...Orquestrando Containers na Nuvem com o Azure Kubernetes Service - ThorArch #1...
Orquestrando Containers na Nuvem com o Azure Kubernetes Service - ThorArch #1...
 

Criando operators para kubernetes usando go