SlideShare uma empresa Scribd logo
1 de 72
Baixar para ler offline
Criando operators
para Kubernetes
usando Go
// Matheus Moraes Oliveira
● SRE @ QuintoAndar
● Perguntas & slides:
twitter.com/math3vz
Como o Kubernetes
funciona
// Kubernetes
● É um sistema usado para orquestrar containers
// 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
// 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
// O Recurso deployment
Spec: Específico por tipo (Kind) de recurso. Descreve
o estado desejado do recurso que está sendo criado.
$ cat resource.yaml
// Outros exemplos de recursos
$ cat service.yaml $ cat configmap.yaml
// Para visualizar todos os recursos e APIs
● $ kubectl api-resources
● $ kubectl api-versions
O que acontece quando
aplicamos um deploy?
// Aplicando nosso deployment
// Kubernetes
$ kubectl apply -f resource.yaml
API Server
API Server: Responsável pelo gerenciamento e
validação do manifesto.
// Kubernetes
$ kubectl apply -f resource.yaml
API Server
etcd: Responsável por guardar o manifesto (age como
um banco de dados)
etcd
// Kubernetes
$ kubectl apply -f resource.yaml
API Server
controller-manager: Controla a estado atual vs estado
desejado do cluster.
etcd
controller-manager
// Kubernetes
● $ kubectl get events
// Visualizar requests/responses ao API Server
● $ kubectl apply -f resource.yaml -v=7
// Kubernetes
● $ kubectl apply -f resource.yaml -v=7
// 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
Criando recursos
customizados
// Custom Resource (CR)
// Custom resource definition (CRD)
Definição/validação do seu
recurso
// Custom resource definition (CRD)
Spec: Declaração do recurso, podendo
incluir validações que serão validadas
direto pela API
// Para ver o CRD criado https://imgur.com/gO6FXhY
Legal, mas isso não é
muito útil né?
Finalmente...
Operators!
Tá, mas o que é um
operator?
Um Operator é o
controlador do seu CRD
// 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
Vantagens de um
Operator
// 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
// 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
Caso de uso
// 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.
// AWS IAM Roles - Visualização
// 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
// AWS IAM Roles: Cenário ideal
// 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
Criando um Operator
// Como criar um Operator
● Client nativo do Kubernetes em Go: k8s.io/client-go
● Kopf (https://github.com/zalando-incubator/kopf)
● 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
● Kopf (https://github.com/zalando-incubator/kopf)
● Kubebuilder (https://github.com/kubernetes-sigs/kubebuilder)
● Operator-sdk (https://github.com/operator-framework/operator-sdk)
○ Go
○ Helm
○ Ansible
Vamos começar
// Instalando operator-sdk
https://sdk.operatorframework.io/docs/install-operator-sdk/#install-from-github-release
# Set the release version variable
$ RELEASE_VERSION=v0.18.1
# Linux
$ curl -LO
https://github.com/operator-framework/operator-sdk/releases/download/${RELEASE_VERSION}/operat
or-sdk-${RELEASE_VERSION}-x86_64-linux-gnu
# macOS
$ curl -LO
https://github.com/operator-framework/operator-sdk/releases/download/${RELEASE_VERSION}/operat
or-sdk-${RELEASE_VERSION}-x86_64-apple-darwin
// Operator-sdk scaffold
// 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
// 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.
// 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.
// Operator-sdk
deploy: Recursos necessários para o deploy do
Operator em si. Role, ServiceAccount,
RoleBinding e Deployment.
// Operator-sdk
build: Dockerfile e scripts necessários para a
build do Operator.
// Vamos adicionar nosso CRD e registrar a nossa API
// iamrole_types.go ANTES
// iamrole_types.go DEPOIS
// iamrole_types.go DEPOIS
// 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
○ Validação adicionais usando markers:
https://book.kubebuilder.io/reference/markers/crd-validation.html
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
// Deletando o recurso
// 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.
// Criando o recurso
// Criando o recurso
// Criando o recurso
// Criando o recurso
// Build
$ operator-sdk build my-operator:v0
// Build
// Publish
$ kubectl apply -f deploy/crds/math3vz.com_awsiamroles_crd.yaml
$ kubectl apply -f deploy/
Demo
https://imgur.com/eyHw9FE
Muito obrigado!
twitter.com/math3vz

Mais conteúdo relacionado

Semelhante a Criando operators para Kubernetes usando Go - v2

Criando operators para kubernetes usando go
Criando operators para kubernetes usando goCriando operators para kubernetes usando go
Criando operators para kubernetes usando goMatheus Moraes
 
Estendendo o kubernetes
Estendendo o kubernetesEstendendo o kubernetes
Estendendo o kubernetesRicardo Katz
 
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
 
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
 
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
 
Construindo APIs com Amazon API Gateway e AWS Lambda
Construindo APIs com Amazon API Gateway e AWS LambdaConstruindo APIs com Amazon API Gateway e AWS Lambda
Construindo APIs com Amazon API Gateway e AWS LambdaAmazon Web Services LATAM
 
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
 
Source-to-container no mundo real
Source-to-container no mundo realSource-to-container no mundo real
Source-to-container no mundo realEvandro Silvestre
 
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
 
JHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãosJHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãosThiago Soares
 
Desenvolvimento Ágil com Grails.
Desenvolvimento Ágil com Grails.Desenvolvimento Ágil com Grails.
Desenvolvimento Ágil com Grails.Alex Guido
 
TDC2018SP | Trilha Containers - ASGARD: Abstraindo orquestradores de containers
TDC2018SP | Trilha Containers - ASGARD: Abstraindo orquestradores de containers TDC2018SP | Trilha Containers - ASGARD: Abstraindo orquestradores de containers
TDC2018SP | Trilha Containers - ASGARD: Abstraindo orquestradores de containers tdc-globalcode
 
Gerenciando Clusters Kubernetes usando Cluster API, Azure Arc e GitOps
Gerenciando Clusters Kubernetes usando Cluster API, Azure Arc e GitOpsGerenciando Clusters Kubernetes usando Cluster API, Azure Arc e GitOps
Gerenciando Clusters Kubernetes usando Cluster API, Azure Arc e GitOpsJorge Arteiro
 
Angular 2, TypeScript e Além
Angular 2, TypeScript e AlémAngular 2, TypeScript e Além
Angular 2, TypeScript e AlémAndre Baltieri
 

Semelhante a Criando operators para Kubernetes usando Go - v2 (20)

Criando operators para kubernetes usando go
Criando operators para kubernetes usando goCriando operators para kubernetes usando go
Criando operators para kubernetes usando go
 
Estendendo o kubernetes
Estendendo o kubernetesEstendendo o kubernetes
Estendendo o 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 ...
 
5. rodando containers docker na aws
5. rodando containers docker na aws5. rodando containers docker na aws
5. rodando containers docker na aws
 
De 0 a DevOps
De 0 a DevOpsDe 0 a DevOps
De 0 a DevOps
 
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
 
Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes	Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes
 
Construindo APIs com Amazon API Gateway e AWS Lambda
Construindo APIs com Amazon API Gateway e AWS LambdaConstruindo APIs com Amazon API Gateway e AWS Lambda
Construindo APIs com Amazon API Gateway e AWS Lambda
 
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
 
Source-to-container no mundo real
Source-to-container no mundo realSource-to-container no mundo real
Source-to-container no mundo real
 
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...
 
Curso AngularJS - Parte 1
Curso AngularJS - Parte 1Curso AngularJS - Parte 1
Curso AngularJS - Parte 1
 
JHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãosJHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãos
 
Desenvolvimento Ágil com Grails.
Desenvolvimento Ágil com Grails.Desenvolvimento Ágil com Grails.
Desenvolvimento Ágil com Grails.
 
Iniciando com kubernetes
Iniciando com kubernetesIniciando com kubernetes
Iniciando com kubernetes
 
Introdução ao vraptor
Introdução ao vraptorIntrodução ao vraptor
Introdução ao vraptor
 
TDC2018SP | Trilha Containers - ASGARD: Abstraindo orquestradores de containers
TDC2018SP | Trilha Containers - ASGARD: Abstraindo orquestradores de containers TDC2018SP | Trilha Containers - ASGARD: Abstraindo orquestradores de containers
TDC2018SP | Trilha Containers - ASGARD: Abstraindo orquestradores de containers
 
Gerenciando Clusters Kubernetes usando Cluster API, Azure Arc e GitOps
Gerenciando Clusters Kubernetes usando Cluster API, Azure Arc e GitOpsGerenciando Clusters Kubernetes usando Cluster API, Azure Arc e GitOps
Gerenciando Clusters Kubernetes usando Cluster API, Azure Arc e GitOps
 
Angular 2, TypeScript e Além
Angular 2, TypeScript e AlémAngular 2, TypeScript e Além
Angular 2, TypeScript e Além
 

Criando operators para Kubernetes usando Go - v2

  • 2. // Matheus Moraes Oliveira ● SRE @ QuintoAndar ● Perguntas & slides: twitter.com/math3vz
  • 4. // Kubernetes ● É um sistema usado para orquestrar containers
  • 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
  • 8. // Outros exemplos de recursos $ cat service.yaml $ cat configmap.yaml
  • 9. // Para visualizar todos os recursos e APIs ● $ kubectl api-resources ● $ kubectl api-versions
  • 10. O que acontece quando aplicamos um deploy?
  • 11. // Aplicando nosso deployment
  • 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
  • 15. // Kubernetes ● $ kubectl get events
  • 16. // Visualizar requests/responses ao API Server ● $ kubectl apply -f resource.yaml -v=7
  • 17. // Kubernetes ● $ kubectl apply -f resource.yaml -v=7
  • 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
  • 21. // Custom resource definition (CRD) Definição/validação do seu recurso
  • 22. // Custom resource definition (CRD) Spec: Declaração do recurso, podendo incluir validações que serão validadas direto pela API
  • 23. // Para ver o CRD criado https://imgur.com/gO6FXhY
  • 24. Legal, mas isso não é muito útil né?
  • 26. Tá, mas o que é um operator?
  • 27. Um Operator é o controlador do seu CRD
  • 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
  • 31. // 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
  • 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.
  • 34. // AWS IAM Roles - Visualização
  • 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
  • 36. // AWS IAM Roles: Cenário ideal
  • 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
  • 39. // Como criar um Operator ● Client nativo do Kubernetes em Go: k8s.io/client-go ● Kopf (https://github.com/zalando-incubator/kopf) ● Kubebuilder (https://github.com/kubernetes-sigs/kubebuilder) ● Operator-sdk (https://github.com/operator-framework/operator-sdk) ○ Go ○ Helm ○ Ansible
  • 40. // Como criar um Operator ● Client nativo do Kubernetes em Go: k8s.io/client-go ● Kopf (https://github.com/zalando-incubator/kopf) ● Kubebuilder (https://github.com/kubernetes-sigs/kubebuilder) ● Operator-sdk (https://github.com/operator-framework/operator-sdk) ○ Go ○ Helm ○ Ansible
  • 42. // Instalando operator-sdk https://sdk.operatorframework.io/docs/install-operator-sdk/#install-from-github-release # Set the release version variable $ RELEASE_VERSION=v0.18.1 # Linux $ curl -LO https://github.com/operator-framework/operator-sdk/releases/download/${RELEASE_VERSION}/operat or-sdk-${RELEASE_VERSION}-x86_64-linux-gnu # macOS $ curl -LO https://github.com/operator-framework/operator-sdk/releases/download/${RELEASE_VERSION}/operat or-sdk-${RELEASE_VERSION}-x86_64-apple-darwin
  • 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.
  • 47. // Operator-sdk deploy: Recursos necessários para o deploy do Operator em si. Role, ServiceAccount, RoleBinding e Deployment.
  • 48. // Operator-sdk build: Dockerfile e scripts necessários para a build do Operator.
  • 49. // Vamos adicionar nosso CRD e registrar a nossa API
  • 50.
  • 51.
  • 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
  • 58. // Vamos adicionar o controller para gerenciar esse CRD
  • 60. // Reconcile loop ● Funciona como uma fila ● Pode responder OK ● Pode responder erro ● Pode responder para tentar mais tarde
  • 61. // Deletando o recurso
  • 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.
  • 63. // Criando o recurso
  • 64. // Criando o recurso
  • 65. // Criando o recurso
  • 66. // Criando o recurso
  • 67. // Build $ operator-sdk build my-operator:v0
  • 69. // Publish $ kubectl apply -f deploy/crds/math3vz.com_awsiamroles_crd.yaml $ kubectl apply -f deploy/
  • 70. Demo