O documento discute várias maneiras de estender o Kubernetes além de um orquestrador de container, incluindo: 1) criar Recursos Personalizados para suportar novos tipos de objetos, 2) usar o Service Catalog para integrar serviços de terceiros, e 3) desenvolver Controllers e Schedulers personalizados.
2. Eu, rapidão :)
● CKA, CKAD, LPIC3
(essa venceu…)
● Gerente de engenharia
de Nuvem no SERPRO -
Projeto Estaleiro
● Nesse mundo Linux
desde 2004, no SERPRO
desde 2009, mexendo
com esses trecos
desde 2014
● Aficionado por aviação
Essa palestra não representa a opinião da empresa em que trabalho
e trata apenas de opniões pessoais :)
7. API Server
API Server
● Repositório de objetos
○ POD
○ NODE
○ Service
○ Deployment
○ [........] (kubectl explain)
○ Custom Resource Definition (CRD)
● Validador de “Regras”
8. CRD
● Preciso que meu Cluster suporte um novo tipo de Objeto
○ É global ou por namespace?
○ Tem algum esquema pré definido ou posso escrever
qualquer coisa?
9. Quem usa?
● Calico - Kubernetes Datastore
● Diversos Operators - coreos.com/operators/
● Kong Ingress Controller
● Qualquer sistema integrado com o Kubernetes que
demande armazenamento de objetos :)
15. Vantagens
● Uso do Kubernetes como um ‘Banco de Objetos’
● Abstração de acessos ao ETCD
● Chamadas, modificações, leituras podem ser feitas com
bibliotecas prontas do Kubernetes ou chamadas HTTP
(e usar toda a Alta Disponibilidade que o ambiente tem)
Guitar UI
K8S
16. API Server Builder
● Build your own API
Server - Bibliotecas em
GO para a construção
de uma nova API
● Aggregation layer -
Você roteia um set de
objetos para outra API
Fonte: https://raw.githubusercontent.com/kubernetes-incubator/apiserver-builder/master/docs/concepts/extensionserver.jpg
18. Service Catalog
● Chamar uma outra API para determinados Workloads
● Padrão Open Service Broker
○ Azure, GCP, AWS, DIY
● Define Objetos que criam uma nova oferta de serviço,
com o Broker e suas credenciais, a Classe, os planos
disponíveis (gold, silver), e as instâncias
22. Controller / Cloud Controller Manager
Controller
● Controla o estado dos objetos no Cluster
● Provisiona novos recursos em caso do estado
estar NOK
○ Um ServiceAccount para um novo Namespace
○ Mais PODs para um ReplicaSet
○ Um novo Volume na GCE para ser
disponibilizado como PV
○ Um novo LoadBalancer para um serviço
23. Exemplos de Controllers externos
● MetalLB - github.com/google/metallb
○ Verifica serviços do tipo ‘LoadBalancer’ e cria um balanceador
BareMetal
● NGINX Ingress Controller - github.com/kubernetes/ingress-nginx
● Qualquer programa que fique ‘controlando’ os objetos na API e
alterando seu Status
29. Scheduler
Scheduler
● Onde cabe cada workload?
● Taint / Affinity
○ Forçar um workload a rodar em um node
○ Forçar um workload a rodar junto ou separado
de outros nodes
● Status “Pending”
36. Kubelet
Kubelet
● Para Kubelets que lidam com containers:
○ CNI para estender rede
○ CSI para estender storage
● E se eu quiser ter o meu próprio ‘Node’ que finge
ser um kubelet?
● VIRTUAL KUBELET
○ Não confundir com projeto ‘kube-virt’
37. Virtual Kubelet
Virtual
Kubelet
● Finge ser um Kubelet
● Implementa interface para as principais
funcionalidades de um Kubelet
○ Criar PODs
○ Ler ConfigMaps
○ Informar capacidade
○ Etc