Entendendo os Operators no k8s - Outro blog nerd
Outro blog nerd
With no bike-shed effect
Entendendo os Operators no k8s
#kubernetes , #operator-sdk , #kubebuilder
ATENÇÃO: ESTE ARTIGO AINDA ESTÁ INCOMPLETO. LOGO MAIS FINALIZO! :)
Neste artigo serão apresentados conceitos necessários para que você consiga desenvolver um Kubernetes Operator, compreendendo o que de fato ele é e como funciona.
O conteúdo aqui parte do principio que você já entenda ao menos os objetos básicos do Kubernetes 1, bem como saiba utilizar o kubectl, e claro, saiba o que é o Kubernetes.
O Kubernetes não possui uma arquitetura monolítica. Ao invés disto, ele é composto de uma série de componentes de software independentes que se conectam entre si para fazer todo seu maquinário funcionar. 2
Afinal, o que são Operators ?
Operators são um meio através do qual você pode estender o Kubernetes para fazê-lo atender a alguma necessidade específica a qual o mesmo não faça nativamente. A principal motivação para se criar um Operator é realizar a automação um trabalho repetitivo e complexo dentro do próprio Kubernetes. 3
Para tornar o entendimento mais "palpável", imagine que você possui um sistema de banco de dados executando dentro do Kubernetes, para o qual você precisa subir e descer constantemente réplicas que são utilizadas para exploração de dados, além de gerenciar os usuários que podem acessar estes bancos de dados.
A criação de um Operator poderia viabilizar a execução desta tarefa de uma forma simples e automatizada, permitindo que você gerencie dentro do próprio Kubernetes as suas instâncias de banco de dados, bem como os usuários contidos nele.
Imagine que, após criar um Operator que automatize todas estas tarefas, seria possível criar uma réplica e um novo usuário no Kubernetes somente por enviar os YAML como estes abaixo:
apiVersion: database.example.com/v1
kind: DatabaseReplica
name: my-replica-database
master: name-of-my-master
kind: DatabaseUser
name: secret-with-password
O processo de operação das réplicas e usuários se tornaria mais fácil, pois ao invés de reproduzir uma série de passos complexos e especializados, bastaria realizar o envio destes YAML ao Kubernetes, que se encarregaria de executar os passos por meio do Operator.
Além disto, por meio do Operator teríamos a possíbilidade de gerir estas réplicas e usuários por meio do kubectl, uma vez que o Operator criaria recursos na API do Kubernetes para tal.
Ou seja, você poderia listar todos seus usuários por meio de um kubectl get database-users, ou réplicas através de um kubectl get database-replicas.
Como o Kubernetes funciona?
Para entender como um Operator funciona no Kubernetes, entender a arquitetura do próprio Kubernetes é fundamental.
O Kubernetes é notóriamente um sistema distribuído completo e complexo, com uma série de componentes que interagem entre si para fazer o maquinário inteiro funcionar. Em sistemas como este é esperado que hajam sincronizações constantes e geralmente assíncronas em suas entidades internas, no caso, os objetos do Kubernetes. 4 5
No Kubernetes, a orquestração destas sincronizações é realizada por um componente chamado Control Plane, este por sua vez sendo composto por uma série de outros componentes menores.
O Control Plane é um dos componentes centrais do Kubernetes, que por sua vez é composto por uma série de componentes menores, dentre os quais está incluso o kube-apiserver, que é basicamente a aplicação que expõe a API do Kubernetes para todo e qualquer client que vá interagir com o Cluster, entre eles o próprio kubectl.
Ao receber um pedido de alteração no cluster (por exemplo, criação de um novo Pod), a API não é responsável por aplicá-la, e sim simplesmente validá-la e posteriormente armazenar a alteração desejada para que outro componente possa posteriormente aplicá-la: O Controller.
Understanding Kubernetes Objects ↩︎
Kubernetes Components ↩︎
Extending Kubernetes: Operator pattern ↩︎
Dobies, J., &; Wood, J. (2020). Kubernetes operators: Automating the container orchestration platform. Beijing ; O'Reilly. ↩︎