Pré-requisitos
A primeira coisa que você precisa é de acesso a um cluster do Kubernetes. Você pode criar um usando o Minikube ou usar o Docker para Windows ou Docker para Mac, que agora vêm com uma distribuição do Kubernetes de nó único que você pode habilitar nas configurações do Docker.
Você também precisa ter algum conhecimento a priori sobre Kubernetes. Este é um bom ponto de partida.
Criação de pods
Normalmente, criamos pods usando um arquivo yaml que especifica qual imagem de contêiner usar, quais portas expor, etc. Aqui está um arquivo simples para criar um pod nginx.
apiVersion: v1tipo: Pod
metadados:
nome: nginx-1
rótulo:
app: webserver
especificação:
recipientes:
- nome: nginx
imagem: nginx: 1.7.9
portas:
- containerPort: 80
Salve-o com o nome nginx-pod.yaml em um diretório e, a partir do mesmo diretório, execute o comando:
$ kubectl create -f ./ nginx-pod.yaml## Verifique se o pod foi criado executando:
$ kubectl get pods
Você notará que um único pod chamado “Nginx-1” está instalado e funcionando. Mas você não pode escalar este único pod. Corrida kubectl create novamente irá dar-lhe um erro, pois o nome nginx-1 não pode ser reutilizado novamente.
O Kubernetes oferece a capacidade de criar pods para abstrações mais altas, como Implantações e ReplicaSets. Que criam pods a partir de um determinado modelo de pod especificando quais imagens usar, quais portas expor em cada um dos novos pods etc., mas nada muito específico sobre um único pod. ReplicaSet (e implantações também), em seguida, começa a criar novos pods, dando a cada novo pod um nome exclusivo, bem como um rótulo não exclusivo que ajuda o ReplicaSet a rastrear os pods que foram criados a partir de um determinado modelo.
ReplicaSet garante que, a qualquer momento, um determinado número de pods de um determinado rótulo esteja sempre ativo e em execução. Se, por exemplo, um nó ficar inativo, é função do ReplicaSet criar mais pods em outros nós para compensar a perda. Para escrever um arquivo yaml de réplica, seguiríamos o padrão semelhante a escrever um pod. Terá uma versão api (apps / v1), um tipo (ReplicaSet) e um nome nos metadados. O replicaset em si pode ter rótulos, mas vamos manter as coisas simples por enquanto e apenas dar a ele um nome exclusivo meu-replicaset.
Então, precisamos mudar de metadados seção para a carne da matéria especificação. Aqui, fornecemos o número de replicações que queremos na seção réplicas. Então, damos a este ReplicaSet um seletor que seria usado para corresponder a um rótulo, digamos, aplicativo para um valor, digamos, servidor web, entre os pods em execução. Se houver menos desses pods, ele criará pods de acordo com o modelo fornecido e adicionará o mesmo rótulo a esses novos pods. Se houver mais pods do que o necessário, ele excluirá alguns.
Especificar um modelo que funcionaria como base para a criação de novos pods é a etapa mais envolvente. Este modelo não terá um nome, pois o replicaset criará um novo nome para cada novo pod criado. O terá rótulos, no entanto, e você pode notar que o mesmo rótulo app = webserver que o modelo possui é selecionado por meio do seletor parâmetro na especificação do replicaset.
apiVersion: apps / v1tipo: ReplicaSet
metadados:
nome: my-replicaset
especificação:
réplicas: 3
seletor:
matchLabels:
app: webserver
modelo:
metadados:
etiquetas:
app: webserver
especificação:
recipientes:
- nome: nginx
imagem: nginx: 1.7.9
portas:
- containerPort: 80
Salve este arquivo como nginx-replicaset.yaml e crie o replicaset usando o comando:
$ kubectl create -f nginx-replicaset.yamlPorque criamos anteriormente um pod com o mesmo rótulo app = webserver, o replicaset criaria apenas mais dois pods. Você pode listar todos os pods usando o comando:
$ kubectl get podsNOME PRONTO STATUS REINICIA IDADE
my-replicaset-nmvt9 1/1 Executando 0 9s
my-replicaset-xf9mx 1/1 Executando 0 9s
nginx-1 1/1 Running 0 28s
Cada um dos pods terá um nome exclusivo associado a eles. Como o primeiro pod que criamos tinha um nome nginx-1. Você pode tentar excluir este usando o comando:
$ kubectl delete pod nginx-1$ kubectl get pods
NOME PRONTO STATUS REINICIA IDADE
my-replicaset-nmvt9 1/1 Executando 0 1m
my-replicaset-pkn4q 1/1 Executando 0 22s
my-replicaset-xf9mx 1/1 Executando 0 1m
Você notará que quase instantaneamente o controlador ReplicaSet criou um novo pod para substituir o que excluímos. Assim, garantindo que o número de pods em execução, com rótulo app = webserver é sempre 3, conforme especificado em nosso manifesto de réplicas, acima.
Você obtém muito controle graças aos rótulos e seletores. Você pode espalhar ainda mais os pods em vários nós usando nodeSelectors, que são usados para alocar um certo número de pods em certos nós.
O que as réplicas não permitem são atualizações. Se for uma versão mais recente do seu aplicativo, digamos, nginx: 1.8 chegar, você terá que deletar esta réplica e criar uma nova com a imagem mencionada no manifesto yaml da réplica. É aqui que o conceito de implantações se torna útil. Inclui a ideia de replicasets e se estende ao fornecer suporte adicional para atualizar seus aplicativos. Agora que você está familiarizado com as réplicas, pode ser uma boa ideia examinar as implantações do Kubernetes.
Referências
- Criação de pods
- Criação de ReplicaSets