Olá, pessoal!
Hoje quero fugir um pouco do tema “Docker” e quero mostrar para vocês um pouco mais de “Kubernetes”. Já mostrei como era complicada a instalação e configuração do Kubernetes caso não quizesse usar AWS ou Google Cloud. Com a comunidade sempre mostrando o quanto a instalação do Kubernetes era sempre trabalhosa, a partir da versão 1.4, foi criado o utilitário “kubeadm”, que é utilizado para realizar a instalação de um cluster de Kubernetes de maneira rápida e fácil, possibilitando, assim, uma maneira fácil de instalação, o que levou a mais pessoas utilizando a ferramenta.
Passo 01
Vamos iniciar agora a instalação do Kubernetes em alguns passos simples e depois vamos realizar algumas operações básicas para que você possa conhecer mais sobre essa ferramenta tão poderosa.
apt-get update && apt-get install -y apt-transport-https curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - cat < /etc/apt/sources.list.d/kubernetes.list deb http://apt.kubernetes.io/ kubernetes-xenial main EOF apt-get update # Install docker if you don't have it already. apt-get install -y docker.io apt-get install -y kubelet kubeadm kubectl kubernetes-cni
Passo 02
Parecido com a sintaxe do comando, para iniciar um cluster com o “docker swarm” com o comando abaixo, vamos iniciar o cluster com Kubernetes. Caso tenha 2 placas de redes em seu servidor, você poderá especificar qual deseja utilizar com –api-advertise-addresses <ip-address> passando como parâmetro para o comando kubeadm init.
Na saída do comando, ao final, será possível visualizar a instrução para você adicionar um outro nó ao seu cluster. Para isso, basta você repetir o passo 01 em seu outro nó e colar a saída do comando acima, onde mostra:
kubeadm join --token=<token> <master-ip>
Após realizar os passos acima, você estará com seu cluster de kubernetes quase pronto, porém ainda para que você possa fazer funcionar o seu cluster perfeitamente, você ainda precisa que seja instalado um plugin de rede para que o cluster de Kubernetes esteja funcionando 100%. Para isso, basta você executar:
kubectl apply -f https://git.io/weave-kube
Nesse caso, o plugin escolhido foi o do Weave. Agora estamos com nosso cluster de Kubernetes no ar e podemos começar a realizar as operações básicas em um cluster. Para isso, vamos iniciar trabalhando com Pods.
Se você não sabe ainda os principais componentes do Docker, então, você pode acompanhar um outro artigo que fala sobre isso aqui. Então, vamos por a mão na massa!
Com o comando kubectl é possivel fazer todas as operações que precisamos que sejam feitas em caso de lidarmos com containers. Então, para listarmos os Pods que temos criados, podemos executar o comando:
kubectl get pods
Isso irá trazer os pods que foram criados no Namespace default. Namespaces são clusters virtuais dentro de um cluster físico, então, eu posso ter dezenas de Namespaces em 1 cluster de kubernetes e em cada Namespace ter diversos Pods, os quais possuem total isolamento entre eles. Com namespace, então, eu posso limitar recursos como: CPU, Memória, Disco e Rede. Para que eu liste todos os Pods criados em todos os namespaces, basta executar:
kubectl get pods --all-namespaces
Para criar um Pod com uma imagem do Node.Js, por exemplo, você utiliza:
kubectl run --image=ghost --port=2368
Estou utilizando a porta 2368, pois é a que está com o EXPOSE no Dockerfile. Também é possível criar 1 Pod com n containers – no caso, você deve utilizar o parâmetro –replicas:
kubectl run node --image=ghost --replicas=5 --port=2368
Nesse caso, será criado os cinco containers no Docker; porém, apenas 1 Pod estará visivel no Kubernetes. Agora, para que possamos acessar a nossa aplicação através do Browser, devemos expor a porta 2368 para alguma porta do Host, o mesmo conceito do Docker, porém sintaticamente de uma forma diferente. Para isso, utilizamos o comando:
kubectl expose deployment node --target-port=2368 --type=LoadBalancer
Com o comando acima, estamos dizendo para o Kubernetes pegar alguma porta livre no host e redirecionar o tráfego para a porta 2368 dentro do container e que o tipo de envio seja um LoadBalancer entre as réplicas que eu mandei criar. Então, no caso das 5 réplicas que foram criadas acima, cada requisição será enviada para uma réplica diferente da outra.
Mais para frente entraremos mais a fundo no Kubernetes. Mas nesse momento, quando executamos o comando kubectl expose, o Kubernetes criou um service de forma abstrata, sendo assim, podemos agora de forma resumida dizer que um service tem o papel de “Habilitar um endpoint para que o usuário consiga acessar a aplicação"
. Então se você executar o comando:
kubectl get services
Você irá ver algo parecido com isso:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE node 10.100.162.143 2368:31529/TCP 10s
Então, a porta para que possamos acessar nossa aplicação será a porta 31529.
Conforme criamos os primeiros artigos sobre como criar containers, imagens e coisas mais simples com Docker, começaremos a fazer também com o Kubernetes, então, vamos evoluir cada vez mais o conteúdo para que possa ser útil tanto para as pessoas que estão pensando em começar a usar, como também para as que estão usando há um certo tempo.
Grande abraço!