Por exemplo, alguns dos principais componentes do Kubernetes, como etcd, têm seus operadores correspondentes disponibilizados pelo projeto CoreOs. Etcd é um armazenamento de chave-valor distribuído que reflete o estado de execução de todo o cluster Kubernetes em qualquer momento. Naturalmente, é um aplicativo com estado e vários controladores do Kubernetes se referem ao etcd para descobrir qual será a próxima etapa. Por exemplo, o controlador ReplicaSet examinará o número de pods em execução em um determinado seletor e tentará trazer o número de instâncias em execução igual ao número especificado por seu ReplicaSet ou Deployment YAML. O ReplicaSet se refere ao etcd, que mantém o controle do número de pods em execução e, uma vez que o número de pods seja alterado para um valor desejado, o etcd também atualizaria seu registro.
Mas quando se trata de aplicativos com estado, como o próprio etcd, não podemos ativar mais pods em nós diferentes sem alguma intervenção séria. Porque todas as instâncias em execução devem ter dados consistentes entre si o tempo todo. É aqui que os operadores são úteis.
Pré-requisitos
Se você deseja acompanhar este tutorial, pode começar com algo pequeno como um Minikube instalado em seu laptop ou a distribuição do Kubernetes que vem com o Docker para desktop.
O importante é ter uma compreensão das ideias básicas do Kubernetes para começar.
Etcd
Vamos criar um operador que gerencie o etcd em nosso cluster Kubernetes. Não instalaremos o etcd como um componente do Kubernetes (ou seja, no namespace do sistema kube), mas como um aplicativo normal. Porque fazer isso colocaria todo o cluster em risco. No entanto, quando estiver familiarizado com os Operadores, você pode usá-los para implantar o etcd no sistema kube enquanto inicializa um novo cluster.
Usarei o Katacoda Playground aqui, e uma inspeção mais detalhada do namespace do sistema kube mostraria que temos um pod rodando etcd para nós. Mas isso não é algo que vamos mexer. Vamos instalar o etcd no namespace padrão gerenciado pelo etcd-operator
Começando com o namespace padrão, não há pods em execução, temos uma lousa limpa.
$ kubectl get podsNenhum recurso encontrado.
Agora vamos instalar uma nova instância do etcd neste namespace. Começamos clonando o repositório seguido por um comando kubectl simples.
$ git clone https: // github.com / coreos / etcd-operator.idiota$ cd etd-operator
Criando Operador Etcd
No repo, há vários exemplos para operar, o primeiro criaria um operador etcd simples usando desdobramento, desenvolvimento.yaml Arquivo. Antes de usarmos isso, primeiro precisamos criar um papel para o operador por meio do qual ele pode gerenciar e escalar o cluster etcd. Você pode criar essa função usando um script de shell.
$ / example / rbac / create_role.sh$ kubectl create -f ./ example / deployment.yaml
O objeto operador será criado pelo último comando, embora não haja nada para operar. Ainda não temos um cluster etcd. Então vamos criar um.
$ kubectl create -f ./ example / example-etcd-cluster.yamlIsso cria um cluster de pods etcd. Você pode vê-los usando:
$ kubectl get podsNOME PRONTO STATUS REINICIA IDADE
etcd-operator-69b559656f-495vg 1/1 Running 0 9m
example-etcd-cluster-9bxfh657qq 1/1 Executando 0 23s
example-etcd-cluster-ntzp4hrw79 1/1 Executando 0 8m
example-etcd-cluster-xwlpqrzj2q 1/1 Executando 0 9m
O primeiro nesta lista é o pod de operador que garantiria que o cluster etcd mantenha um determinado estado, conforme declarado nos arquivos yaml que usamos anteriormente. Se você tentar excluir um dos pods example-etcd-cluster, outro será criado para substituí-lo. Isso é muito semelhante ao que ReplicaSet faz, mas aqui os pods têm estado!
Operadores em geral
Como mencionado anteriormente, os operadores são uma estrutura geral dentro da qual se pode implantar e gerenciar aplicativos complexos. A estrutura em si é o que os torna úteis e os exemplos específicos como operador etcd ou operador Prometheus que o CoreOS fornece têm o objetivo de agir como um guia para você desenvolver seu próprio aplicativo de maneira semelhante.
Alguns aspectos importantes dos operadores do Kubernetes são o SDK usado para escrever, construir e testar seu próprio operador personalizado, o segundo é a ideia de Gerente de Ciclo de Vida do Operador em que você pode pensar sobre todos os vários estágios pelos quais sua operadora, bem como o serviço que ela oferece, podem passar.
Os estágios do ciclo de vida podem incluir várias atualizações, descobrir qual operador está executando em quais namespaces e também atualizar os operadores quando uma nova versão chega.
Referências
Você pode ler muito mais sobre essa tecnologia em:
- Postagem original do CoreOS, e
- O operador etcd pode ser explorado aqui