Skip to content

Instantly share code, notes, and snippets.

@franciscojsc
Created October 20, 2019 05:22
Show Gist options
  • Save franciscojsc/f10240471e8b0b7622ea7828eacec12d to your computer and use it in GitHub Desktop.
Save franciscojsc/f10240471e8b0b7622ea7828eacec12d to your computer and use it in GitHub Desktop.
Ubuntu com Kubernetes

Ubuntu com k8s

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.

Instalação do Tmux

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.

Instalação do Kubernetes

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

Instalação do Helm

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.

Cheatsheet kubernetes

Folha de dicas kubernetes Imagem retirada do PDF disponível em https://ibd.sh/cheatsheet-k8s.

Referências

#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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment