Kubernetes

De TheNets Wiki
Ir para: navegação, pesquisa

Kubernetes is an open-source system for automating deployment, scaling, and management of containerized applications.

https://kubernetes.io/

Perguntas

Perguntas que eu ainda não sei responder:

  • Qual é a maneira correta de se utilizar o NFS?
  • É melhor usar outra tecnologia de block storage? Longhorn?
  • Como que eu faço o Kubernetes ser resistente a falhas?
  • Para o que tanto que o etcd é utilizado?
  • Qual ferramenta utilizo para monitorar a saúde dos meus nós?
  • Tem como instalar um netdata, por exemplo, e ter o acesso à eles através do Ingress?
  • Como eu configuro uma aplicação stateful, como Wordpress, utilizando volumes?

Fontes de estudo

Fontes de estudo para você dominar o Kubernetes e controlar sua infraestrutura.

Play with Kubernetes

O Docker criou um ambiente interativo online para ensinar a trabalhar com o Kubernetes. Tudo o que você precisará é do seu navegador.

https://training.play-with-kubernetes.com/

Katacoda

Mais um ambiente interativo, assim como o "Play with Kubernetes", porém criado pelo próprio Katacoda. É um excelente ambiente para fixar comandos.

https://www.katacoda.com/courses/kubernetes

LinuxTips

Canal do YouTube com séries sobre Docker, Kubernetes e outras ferramentas de DevOps. Recomendo não apenas pelo conteúdo em si do sobre Docker e Kubernetes, mas principalmente por alguns comentários e observações que são difíceis de encontrar em outras fontes, mesmo em inglês.

https://www.youtube.com/playlist?list=PLf-O3X2-mxDmXQU-mJVgeaSL7Rtejvv0S&playnext=1&index=1

Kubernetes Examples

Repositório com alguns exemplos de como executar aplicações do mundo real com o Kubernetes. É uma boa fonte de informação se você estiver buscando uma referência de como criar seus arquivos Kubernetes seguindo as boas práticas. Este repositório é sempre atualizado, então se algum recurso novo sair, provavelmente você verá exemplos de como usá-lo aqui.

https://github.com/kubernetes/examples

Ambiente de produção enxuto com k3s

Projeto do Rancher Labs para instalar e executar o Kubernetes com simplicidade:

https://github.com/rancher/k3s

Ambiente de desenvolvimento com o minikube e kubectl

O processo de instalação considerará pacotes snaps para sistemas Debian/Ubuntu. Se estiver utilizando outro SO, adapte os comandos.

Documentação: https://kubernetes.io/docs/tasks/tools/install-minikube/

Instale o kubectl

O kubectl é a interface de linha de comando que é utilizada para administrar Kubernetes environments.

Documentação: https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl

1 # Instale o kubectl
2 # veja a última versão em https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl
3 curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/v1.9.4/bin/linux/amd64/kubectl
4 
5 # Dê permissão de execução e mova para `/usr/local/bin/`
6 # ou qualquer outro diretório que esteja no path
7 chmod +x kubectl
8 sudo mv kubectl /usr/local/bin/

Instale o minikube

O minikube é a ferramenta para ESTUDAR e aprender a trabalhar com o Kubernetes. NÃO UTILIZE-O EM AMBIENTE DE PRODUÇÃO!

Documentação: https://kubernetes.io/docs/tasks/tools/install-minikube/#install-minikube

1 # Instale o minikube
2 # veja a última versão em https://github.com/kubernetes/minikube/releases
3 curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.25.2/minikube-linux-amd64
4 
5 # Dê permissão de execução e mova para `/usr/local/bin/`
6 # ou qualquer outro diretório que esteja no path
7 chmod +x minikube
8 sudo mv minikube /usr/local/bin/

Instale o VirtualBox

O minikube utiliza o VirtualBox para construir um cluster em uma máquina virtual. Será esta máquina virtual que utilizaremos para começar os nossos estudos com Kubernetes.

Documentação: https://www.virtualbox.org/wiki/Linux_Downloads

1 # Instale o VirtualBox
2 sudo apt-get install -y virtualbox

Crie o cluster com o minikube e abra a dashboard

Utilizaremos o minikube para criar nosso cluster no VirtualBox e em seguida permitiremos que o kubectl saiba o contexto do nosso recém-criado cluster.

Documentação: https://kubernetes.io/docs/setup/minikube/#kubectl

1 # Crie o novo cluster como o minikube
2 # deverá demorar um tempo para baixar as
3 # imagens da máquina virtual e executá-la.
4 minikube start
5 
6 # Abrir a dashboard do Kubernetes
7 minikube dashboard

Defina o minikube como contexto

O kubectl pode ser utilizado para controlar multiplos clusters Kubernetes, ou seja, é necessário informar ao kubectl qual Kubernetes você deseja utilizar. Esta informação é chamada de "context" pelo kubectl.

É possível definir um contexto enquanto o shell estiver aberto (exibido na caixa de código abaixo), mas também é possível definir na linha de cada comando, se prefere: kubectl get pods --context=minikube

Documentação: https://kubernetes.io/docs/setup/minikube/#kubectl

1 # Crie o novo cluster como o minikube
2 # deverá demorar um tempo para baixar as
3 # imagens da máquina virtual e executá-la.
4 kubectl config use-context minikube

Ambiente de produção com kubelet, kubeadm e kubectl

Instale as ferramentas do Kubernetes

O kubeadm permite gerenciar os nós de cluster Kubernetes. Através dele é possível iniciar um novo cluster ou entrar em um cluster já existente.

Documentação: https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/

 1 # Instalar Docker
 2 curl -sSL https://get.docker.io | sudo sh
 3 
 4 # Adicionar repositório oficial
 5 curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
 6 echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list
 7 apt update
 8 
 9 # HACK Installar Kubernetes CNI
10 apt install kubernetes-cni=0.6.0-00
11 
12 # Instalar Kubernetes Tools
13 apt install kubectl kubelet kubeadm

Inicialize o cluster Kubernetes

Utilize o kubeadm para inicializar um novo cluster.

1 # Criar o nó master sem especificar o IP
2 kubeadm init --kubernetes-version $(kubeadm version -o short)
3 
4 # Criar o nó master especificando o IP
5 # é necessário quando o servidor possui mais de uma interface de rede.
6 # use o IP da intranet, se tiver.
7 kubeadm init --kubernetes-version $(kubeadm version -o short) --apiserver-advertise-address=MEU_IP_AQUI

Copie o arquivo de configuração padrão, ele está localizado em /etc/kubernetes/admin.conf:

1 cp /etc/kubernetes/admin.conf $HOME/
2 chown $(id -u):$(id -g) $HOME/admin.conf
3 export KUBECONFIG=$HOME/admin.conf

O comando kubeadmin init retornou um comando de join parecido com:

1 kubeadm join {{MASTER_IP}}:6443 --token ax8vj5.zwj3j2sd2n27os75 --discovery-token-ca-cert-hash sha256:caff8e19654f6cd9eac57efd26bcdffa650505133e4143c65a950c84176db1b0

Instale o Weaveworks

Criar serviço de rede entre os nós do cluster com o Weaveworks.

Site oficial: https://www.weave.works/services/

Blog oficial: https://www.weave.works/blog/weave-net-kubernetes-integration/

1 kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

Adicionar módulos extras

 1 # vim /etc/modules-load.d/k8s.conf
 2 br_netfilter
 3 ip_vs_rr
 4 ip_vs_wrr
 5 ip_vs_sh
 6 nf_conntrack_ipv4
 7 ip_vs
 8 br_netfilter
 9 
10 # modprobe br_netfilter ip_vs_rr ip_vs_wrr ip_vs_sh nf_conntrack_ipv4 ip_vs

Adicionar autocompletar para o BASH

1 echo "source <(kubectl completion bash)" >> ~/.bashrc

Gerenciar pods

Primeiro hello-world

123

1 kubectl run http --image=katacoda/docker-http-server:latest --replicas=1
2 kubectl get pods

Referências

https://docs.helm.sh/using_helm/#quickstart

https://www.youtube.com/watch?v=1ENtPSKjD2I

https://materiaiseducativos.kinghost.net/descomplicando-o-kubernetes-webinar/obrigado/