Palestra apresentada no Golang SP, link da palestra: https://www.youtube.com/watch?v=TfrNmPPNMuk
Alguns slides possuem o link para um Gif de demonstração
5. // Principais características
● Expõe uma API REST
● Usa o etcd como seu database
● Possui o kubectl como principal client de sua API
● Recursos geralmente são declarados em YAML
● Arquitetura com foco em eventos
● API extensível
6. // O Recurso deployment
Cabeçalho: Padrão para todos os recursos, descreve
qual versão da API será usada, qual o tipo (Kind) do
recurso que está descrito e qual o nome desse
recurso.
$ cat resource.yaml
7. // O Recurso deployment
Spec: Específico por tipo (Kind) de recurso. Descreve
o estado desejado do recurso que está sendo criado.
$ cat resource.yaml
12. // Kubernetes
$ kubectl apply -f resource.yaml
API Server
API Server: Responsável pelo gerenciamento e
validação do manifesto.
13. // Kubernetes
$ kubectl apply -f resource.yaml
API Server
etcd: Responsável por guardar o manifesto (age como
um banco de dados)
etcd
14. // Kubernetes
$ kubectl apply -f resource.yaml
API Server
controller-manager: Controla a estado atual vs estado
desejado do cluster.
etcd
controller-manager
18. // Kubernetes
● Expõe uma API REST
● Usa o etcd como seu database
● Possui o kubectl como principal client de sua API
● Recursos geralmente são declarados em YAML
● Arquitetura com foco em eventos
● API extensível
28. // Kubernetes Operator
● Um pattern introduzido pelo CoreOS
● Um controller não core do Kubernetes
● Usa CRDs!
● Específico para uma aplicação
● Estende a API do Kubernetes para fazer da aplicação um Custom
Resource
30. // Vantagens de usar um Operator
● Encapsula lógica que um “Operador” teria sobre o negócio
● Abstrai para dentro do Kubernetes algo que não é nativo do Kubernetes
● Faz uso da API nativa do Kubernetes
● Orientado a eventos (Conectado diretamente ao etcd)
● Interação via kubectl
33. // AWS IAM Roles - O que é
● IAM: Identity Access Manager
● Role: perfil a ser incorporado pela aplicação com permissões pré definidas
a recursos da AWS
● Cada aplicação possui uma role
● Uma role possui N policies
● Eram gerenciadas fora do cluster, via terraform
● Aplicações frequentemente precisavam ser migradas de cluster/conta
AWS, e as roles eram esquecidas.
35. // AWS IAM Roles - Critérios de aceite
● Maneira mais fácil de escrever policies sem usar JSON
● Opção de usar policies já existentes na AWS
● Suporte a policies em JSON para casos específicos
37. // AWS IAM Roles: Um operator
● 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
44. // Operator-sdk
cmd: Arquivo principal do operator,
instancia um novo manager que registra
todos os custom resources definitions
dentro de pkg/apis e inicia todos os
controllers dentro de pkg/controllers
45. // Operator-sdk
pkg/controller: Implementação dos controllers.
Usuários devem editar os arquivos
pkg/controller/<kind>/<kind>_controller.go para
implementar a lógica de gerenciamento de
recursos.
46. // Operator-sdk
pkg/apis: Path que define as APIs (Custom
resources definitions). Usuários devem editar
pkg/apis/<group>/<version>/<kind>_types.go
para definir seus recursos e importá-los no
controller.
56. // 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
○ Validação adicionais usando markers:
https://book.kubebuilder.io/reference/markers/crd-validation.html
57. Temos a API, os CRDs,
mas ainda falta o
Controller
62. // Deletando o recurso
● Caso seu operator faça uso de outros recursos do cluster, você deve
declarar o seu custom resource como “dono” do objeto e assim que o
custom resource for deletado o recurso declarado como propriedade
também será deletado.
● Exemplo: Deployment apagado, pods são apagados.