Escolar Documentos
Profissional Documentos
Cultura Documentos
INTRODUÇÃO AO KUBERNETES
SEGUNDO SEMESTRE DE 2020
Residência TI-JFRN
PROFESSOR: ANDRÉ SOLINO
andresolino@imd.ufrn.br
ALUNA: ANA AMARANTE
anapma22@gmail..com
04 de março de 2020
● Introdução
● Breve história
● O que o Kubernetes faz?
● Componentes do Control Plane
● Componentes do Node
1
Histórico de versões
Introdução
Figura 1 - Logotipo do kubernetes
Primeiramente, na figura 1, podemos vê à logotipo do kubernetes (conhecido também
como K8s), que sugere um leme de um navio. Mas sabemos que um navio pode levar
coisas mais variadas possíveis, porém em larga escala, seja lá o que for carregado dentro
de um navio, está armazenado dentro de um container. Outra dica é que a palavra
Kubernetes vem da palavra grega Kuvernetes, que representa a pessoa que pilota o
navio.
Com a inferência correta, já sabemos que o Kubernetes é responsável por fazer a
orquestração e gerenciamento de containers! É um sistema de orquestração open-source
que automatiza a implantação, o dimensionamento e a gestão de aplicações em
containers.
2
O Kubernetes faz o gerenciamento do cluster, que é composto por vários containers. O
Docker é a tecnologia mais utilizada para provisionar os containers O próprio Docker tem
seu orquestrador, o Docker Swarm, porém ele não é tão maduro quanto o Kubernetes.
Breve história
3
Estrutura do Kubernetes
● Pods: Menor unidade do K8s, pode conter um container e uma unidade de
armazenamento, em alguns casos ainda contém mais de um container e a unidade
de armazenamento, mas esse caso é raro. Todo pod tem um IP e id únicos.
Pods são voláteis.
○ Pending: Estado inicial do pod.
○ Running: Em execução.
○ Success: Pod concluiu a tarefa e morreu.
○ Unknown: Estado não reconhecido, o linux retornou qualquer coisa diferente
de 0.
● Cluster
○ Master: Execute o Control Plane.
○ Worker: Geralmente executa os containers, os pods
● Node: Servidor que roda o K8s. Menor unidade de hardware de computação no
Kubernetes.
● kubeadm: Automatiza parte do processo de criação do cluster.
● kubelet: Faz a interface com o docker, atua como agente em cada node. Lida com a
execução dos pods. Sempre conversa com o kube-apiserver.
● kubectl: Interface de linha de comando do K8s.
● Control Plane
○ etcd: Armazena o estado do cluster, se um pod ta ativo, se ele falhou…
○ kube-apiserver: API que provê os serviços do kubernetes, é baseado em
REST. Concentra as requisições.
○ kube-controller-manager: Conjunto de outros controladores
É papel do controller monitorar e tomar decisões com base em quem ele
controla.
4
Quando se implanta o Kubernetes, que é o deploy, você passar a ter um cluster. Que é
composto pelos nodes: masters e os workes. Os masters são responsáveis por
controlar os nodes do Kubernetes e os nodes fazem as tarefas dentro dos
containers. Cada cluster tem pelo menos um node de trabalho. Dentro dos nodes de
trabalho ficam os pods, que são os menores componentes do aplicativo, que podem ser
criadas e gerenciadas no Kubernetes.
Dentro dos pods, temos os services, que são um conjunto de pods como um serviço de
rede.
O acesso aos clusters, é feito por meio do ingress, que é uma coleção de regras de
roteamento que governam como usuários externos acessam serviços em execução em um
cluster Kubernetes.
5
Figura 2 - Estrututura do kubernetes
Existe ainda o kubectl, que é um utilitário de linha de comando que opera o cluster,
gerenciando suas interações.
Os componentes do plano de controle tomam decisões gerais sobre o cluster, além de
detectar e responder a eventos do cluster, como iniciar um novo pod quando uma réplica
de um deployment não correta.
Um rollout ocorre sempre que alguma alteração é feita no seu deployment. Durante esse
processo, precisamos manter os pods em execução. Para isso existe o conceito de Replica
Set, que mantém um conjunto estável de pods de réplicas em execução a qualquer
momento. Esse conceito garante a disponibilidade de um número de pods idênticos.
6
● kube-api-server
Fornece API kubernetes usando Jason. Estados de objetos da API são armazenados no
etcd, e o kubectl usa o kube-api-server para se comunicar com o cluster.
● etcd
É uma base de dados de chave valor, que armazena os dados de configuração do
cluster e o estado do cluster.
● kube-scheduler
Responsável por executar as tarefas de agendamento, como execução de
containers nos nodes com base na disponibilidade de recursos.
● kube-controller-manager
● cloud-controller-manager
O kube-controller-manager e o cloud-controller-manager monitora os controladores de
replicação e cria os pods para manter o estado desejado;
Componentes do Node
Os componentes do node, rodam em todos os nodes.
● kubelet
Agente que é executado em cada nó worker, se conecta ao Docker e faz a criação,
execução e exclusão de containers;
● kube-proxy
Encaminha o tráfego para os containers apropriados com base no endereço IP e no
número da porta da solicitação recebida.
Conceitos importante
● Arquivo de manifesto/ especificação
○ Pode ser no JSON ou YAML, mas YAML é o mais utilizado.
○ kind: Pod, Nodes, Deployment, ReplicaSet, Service. Na literatura isso é
chamado de recursos ou objetos.
● Maneira de interação
7
8
● Service: Tem um IP e uma porta, quando a requisição chega ele balanceia um
conjunto de pods. É possível fazer um balanceamento manual, porém, os pods
nascem e morrem muito rápido, então obtém IPs diferentes rapidamentes,
inviabilizando o balanceamento manual.
● Exportando um manifesto
○ Salva manifesto de um pod #enche de coisas do cluster
■ kubectl get pod <namepod> -o yaml > <namepod>.yaml
○ Salva manifesto sem informações específicas do cluster #o export dá uma
limpada
■ kubectl get pod <namepod> -o yaml --export > <namepod>.yaml
● Namespaces
○ Tem objetivo de organizar objetos no cluster através de uma divisão lógica.
○ Por padrão, kubectl interage com o namespace padrão (default).
○ Para usar um namespace diferente do padrão
■ --namespace=<nome>, ou ainda -n <nome>.
○ Para interagir com todos os namespaces
■ --all-namespaces para o comando.
○ Criar namespace
■ kubectl create namespace dev
■ kubectl create namespace prod
○ Listar namespaces
■ kubectl get namespaces
○ Remover namespace
■ kubectl delete namespace dev
○ Filtrar Pods por namespace <name>
■ kubectl get pods --namespace=<name>
○ Filtrar Pods por namespace <name>
■ kubectl get pods -n <name>
○ Listar Pods de todos os namespaces #Lista inclusive os pods do K8s
■ kubectl get pods --all-namespaces
● Label
○ É um par chave-valor do tipo string. Todos os objetos do K8s podem
rotulados. Pode ser usada de dois modos difrentes:
9
○ Equality-based requirement
■ environment = production
■ tier != frontend
○ Set-based requirement
■ environment in (production, qa)
■ tier notin (frontend, backend)
○ Mostrar labels dos recursos:
■ kubectl get pods --show-labels
○ Deletar Pods que têm label run=myapp
■ kubectl delete pods -l environment=production,tier=frontend
■ kubectl get pods -l 'environment in (production),tier in (frontend)'
○ Atribuir label
■ kubectl label deployment nginx-deployment tier=dev
○
10
11
12
Fontes:
1. Tudo o que você precisa saber sobre Kubernetes – Parte 0. iMasters. Acessado em
23 de fev. 2020. Disponível em:
<https://imasters.com.br/desenvolvimento/tudo-o-que-voce-precisa-saber-sobre-ku,
bernetes-parte-01>.
2. What is Kubernetes. Kubernetes. Acessado em 23 de fev. 2020. Disponível em:
<https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/>.
3. Kubernetes Components. Kubernetes. Acessado em 23 de fev. 2020. Disponível em:
<https://kubernetes.io/docs/concepts/overview/components/>.
4.
https://medium.com/tech-grupozap/alta-disponibilidade-com-kubernetes-na-pr%C3
%A1tica-b9cf4261d2f7
5. https://aws.amazon.com/pt/kubernetes/
13