O cluster Kubernetes que criaremos, utilizará três Droplets da DigitalOcean com Sistema Operacional Ubuntu 18.04. A criação dos Droplets foi realizada utilizando o utilitário de linha de comando doclt, mais informações de uso do doctl acesse o link.
Geralmente a VPS da DigitalOcean é chamada de Droplet.
Caso não tenha uma conta na DigitalOcean, utilize este link para fazer sua conta, assim você receberá 50 dólares em crédito para utilizar na DigitalOcean, durante 30 dias, a partir do momento que adicionar um método de pagamanto válido na sua conta.
Inicialmente, entre no terminal com as teclas de atalho ctrl+alt+t
, para exibir as três conexões com os hosts utilizaremos o tmux para multiplexar os treminais, caso não tenha instalado utilize o comando a seguir:
sudo apt-get -y install tmux
O tmux trabalha com sessões, janelas e painéis. Este link fornece alguns atalhos para utlizar com Tmux. Para criar uma nova sessão com o nome kubernetes, utilize o comando a seguir:
tmux new -s kubernetes
O tmux utilizar um prefixo para identificar os comandos, o prefixo pradão é ctrl + b
. Então a utilização do tmux funcionaria como pode ser observado abaixo:
<prefix> + commando
Para dividir o painel na horizontal, utilize o comando a seguir:
<prefix> + "
Para dividir o painel na vertical, utilize o comando a seguir:
<prefix> + %
Utiize o layout predefinido:
<prefix> + alt + 2
Para navegar entre os painéis:
<prefix> + seta
Expandir painel atual:
<prefix> + z
Scroll no painel:
<prefix> + PageUp
Para sincronizar os painéis na mesma janela, utilize o comando a seguir e digite setw synchronize on
:
<prefix> + :
Para retirar a sincronização dos painéis na mesma janela, utilize o comando a seguir e digite setw synchronize off
:
<prefix> + :
Para mais informações sobre o tmux, acesse a documentação ou o manual.
O Kubernetes é um orquestrador de containers, e para executar os containers nos Pods utiliza o runtime container, neste link tem algumas opções de runtime container para ser utilizado com o Kubernetes.
A opção escolhida foi o Docker , para realizar a instalação utilize o comando abaixo:
sudo curl -fsSL https://get.docker.com | bash
Adicione a chave do kubernetes:
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
Adicione o repositório do k8s no Ubuntu:
echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" > /etc/apt/sources.list.d/k8s.list
Atualize os nós:
apt-get update
Instale o kubelet, o agente que estará em todos os nós, responsavél por transmitir as informações dos nós para o kube-api, iniciar os pods e contêineres:
apt-get install kubelet
Instale o kubeadm que é o responsavél por inicializar o cluster:
apt-get install kubeadm
Instale o kubectl para realizar ações administrativas no cluster:
apt-get install kubectl
Desabilite o swap:
swapoff -a &&\
cp /etc/fstab /etc/fstab.bkp &&\
sed -i.bak '/ swap / s/^\(.*\)$/#/g' /etc/fstab
Realize as configurações recomendadas pelo site oficial do Kubernetes para utilizar o runtime container do Docker corretamente.
Crie o arquivo daemon.json
com as configurações a seguir, para utiizar o systemd o Cgroup drivers escolhido no lugar do cgroupfs.
sudo cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
Crie a estrutura de diretório:
sudo mkdir -p /etc/systemd/system/docker.service.d
Atualize os serviços no host e reinicie o Docker:
sudo systemctl daemon-reload && \
sudo systemctl restart docker
No nó master, utilize o comando kubeadm config images pull
, para realizar o dowload dos compomentes do cluster.
Inicialize o cluster:
kubeadm init
Crie uma pasta, mova o arquivo de configuração do cluster e altere o dono e grupo:
mkdir -p $HOME/.kube &&\
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config &&\
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Implante o Pod Network, responsável por permitir que os pods consigam-se comunicar em diferentes nós.
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
Visualize o token:
kubeadm token list
Realize o cálculo do hash da chave pública da CA raiz:
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
Realize o join dos nós, workers, com o comando a seguir, subtituindo ip-node-master pelo IP do nó master, my-token pelo token armazenado no master e o hash-ca por hash da chave pública da CA do master:
kubeadm join <ip-node-master>:6443 --token <my-token> --discovery-token-ca-cert-hash sha256:<hash-ca>
Outra opção para realizar o join; utilize o comando abaixo, copie o resultado para o novo nó para adicioná-lo:
kubeadm token create --print-join-command
Visualize os nós:
kubectl get nodes -o wide
Obtenha informações do nó master:
kubectl describe node <nome-do-nó>
Adicione o auto-completar:
echo "source <(kubectl completion bash)" >> .bashrc
Atualize o bashrc:
source ~/.bashrc
Visualize os namespaces:
kubectl get namespaces
Execute o deployment do nginx:
kubectl run nginx --port 80 --image=nginx
O kubernetes utiliza o range de portas 3000 - 32767 para uso com o tipo de service NodePort.
Crie um service para expôr uma porta acessível no browser:
kubectl expose deployment nginx --type=NodePort
Edite o service:
kubectl edit service nginx
Salve e converta em yaml
o conteúdo do deployment em execução:
kubectl get deployments nginx -o yaml > meu-deployment.yaml
Edite o arquivo meu-deployment.yaml
:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
run: nginx
name: nginx-novo
namespace: default
spec:
progressDeadlineSeconds: 600
replicas: 5
revisionHistoryLimit: 10
selector:
matchLabels:
run: nginx
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
run: nginx
spec:
containers:
- image: nginx
imagePullPolicy: Always
name: nginx
ports:
- containerPort: 80
protocol: TCP
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
Após a altereação no arquivo yaml
, execute-o com suas configurações:
kubectl create -f meu-deployment.yaml
Apague o deployment:
kubectl delete depoyment nginx
Apague o service:
kubectl delete service nginx
O helm é um forma de compartilhar e utilizar aplicações para uso em cluster kubernetes.
Realize o download do binário para seu Sistema Operacional aqui, com o comando abaixo será feito o download para ambiente Linux 64 bits:
curl -o linux-amd64.tar.gz -OL https://get.helm.sh/helm-v2.15.0-rc.1-linux-amd64.tar.gz
Descompacte o arquivo baixado:
tar -xvzf linux-amd64.tar.gz
Entre na pasta:
cd linux-amd64/
Mova o helm para a pasta /usr/local/bin/
:
mv helm /usr/local/bin/
Mova o tiller para a pasta /usr/local/bin/
:
mv tiller /usr/local/bin/
Outra opção de instalação do helm e tiller utilizando o script:
curl -L https://git.io/get_helm.sh | bash
Inicialize o helm:
helm init
Crie um serviceaccount (usuário) para que o helm funcione corretamente:
kubectl create serviceaccount --namespace=kube-system tiller
Crie um ClusterRoleBinding (prefil) para definir o que pode ser feito no cluster, e associar o usuário tiller a um ClusterRole específico:
kubectl create clusterrolebinding tiller-cluster-role --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
Crie um path para o deploy tiller-deploy fica associado ao o usuário tiller.
kubectl patch deployments -n kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'
Para pesquisar alguma software:
helm search <nome-do-software>
Neste link pode-se observar vários aplicativos disponíveis para instalação utilizando helm.
Imagem retirada do PDF disponível em https://ibd.sh/cheatsheet-k8s.
#3 - Kubernetes e Helm | ContainerWeek. LINUXtips. YOUTUBE, 10 abr. 2019. Disponível em: https://www.youtube.com/watch?v=QAc_nWXfffY. Acesso em: 16 out. 2019.
Install using the convenience script. In: Get Docker Engine - Community for Ubuntu. DOCKER. Disponível em: https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-using-the-convenience-script. Acesso em: 16 out. 2019.
Container runtimes. KUBERNETES, 2019. Disponível em: https://kubernetes.io/docs/setup/production-environment/container-runtimes. Acesso em: 16 out. 2019.
Installing kubeadm, kubelet and kubectl. In: Getting started. KUBERNETES, 2019. Disponível em: https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/#installing-kubeadm-kubelet-and-kubectl. Acesso em: 17 out. 2019.
GONÇALVES, Ariane. Como usar o Tmux + Lista de Comandos. HOSTINGER, 1 abr. 2019. Disponível em: https://www.hostinger.com.br/tutoriais/como-usar-tmux-lista-de-comandos/. Acesso em: 17 out. 2019.
Como Instalar E Utlizar O Tmux. Terminal Root. YOUTUBE, 14 jan. 2018. Disponível em: https://www.youtube.com/watch?v=Z7YcXTMMhEQ. Acesso em: 17 out. 2019.
Conheça a ferramenta tmux do GNU/Linux. Ricardo Prudenciato. YOUTUBE, 14 jan. 2019. Disponível em: https://www.youtube.com/watch?v=abuMVACvRNI. Acesso em: 17 out. 2019.
FERNANDO, Jeferson. [Descomplicando o Kubernetes ] 02 - INSTALANDO e CONFIGURANDO um CLUSTER KUBERNETES. LINUXTIPS, 22 jul. 2018. Disponível em: https://www.linuxtips.io/post/descomplicando-o-kubernetes-02. Acesso em: 17 out. 2019.
BUZDAR, Karim. Install and Deploy Kubernetes on Ubuntu 18.04 LTS. VITUX, 9 nov. 2018. Disponível em: https://vitux.com/install-and-deploy-kubernetes-on-ubuntu. Acesso em: 17 out. 2019.
ARUL, Muhammad. How to Install and Configure Kubernetes and Docker on Ubuntu 18.04 LTS. HOWTOFORGE, 25 out. 2018. Disponível em: https://www.howtoforge.com/tutorial/how-to-install-kubernetes-on-ubuntu. Acesso em: 20 out. 2019.