Conceitos-chave do k8s
É importante saber que a forma como o k8s gerencia os contêineres é ligeiramente diferente de outros orquestradores, como o Docker Swarm, sobretudo devido ao fato de que ele não trata os contêineres diretamente, mas sim através de pods. Vamos conhecer alguns dos principais conceitos que envolvem o k8s a seguir:
Pod: É o menor objeto do k8s. Como dito anteriormente, o k8s não trabalha com os contêineres diretamente, mas organiza-os dentro de pods, que são abstrações que dividem os mesmos recursos, como endereços, volumes, ciclos de CPU e memória. Um pod pode possuir vários contêineres;
Deployment: É um dos principais controllers utilizados. O Deployment, em conjunto com o ReplicaSet, garante que determinado número de réplicas de um pod esteja em execução nos nós workers do cluster. Além disso, o Deployment também é responsável por gerenciar o ciclo de vida das aplicações, onde características associadas a aplicação, tais como imagem, porta, volumes e variáveis de ambiente, podem ser especificados em arquivos do tipo yaml ou json para posteriormente serem passados como parâmetro para o kubectl executar o deployment. Esta ação pode ser executada tanto para criação quanto para atualização e remoção do deployment;
ReplicaSets: É um objeto responsável por garantir a quantidade de pods em execução no nó;
Services: É uma forma de você expor a comunicação através de um ClusterIP, NodePort ou LoadBalancer para distribuir as requisições entre os diversos Pods daquele Deployment. Funciona como um balanceador de carga.
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
Instalação Global
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
Instalação local
chmod +x kubectl
mkdir -p ~/.local/bin
mv ./kubectl ~/.local/bin/kubectl
O Kind (Kubernetes in Docker) é outra alternativa para executar o Kubernetes num ambiente local para testes e aprendizado, mas não é recomendado para uso em produção.
Instalar
# For AMD64 / x86_64
[ $(uname -m) = x86_64 ] && curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-amd64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind
Criar um cluster Sigle node
kind create cluster
Criando um cluster com múltiplos nós locais com o Kind
É possível para essa aula incluir múltiplos nós na estrutura do Kind, que foi mencionado anteriormente.
Execute o comando a seguir para selecionar e remover todos os clusters locais criados no Kind.
kind delete clusters $(kind get clusters)
Deleted clusters: ["giropops" "kind"]
Crie um arquivo de configuração para definir quantos e o tipo de nós no cluster que você deseja. No exemplo a seguir, será criado o arquivo de configuração kind-3nodes.yaml para especificar um cluster com 1 nó control-plane (que executará o control plane) e 2 workers.
Criar um cluster multi nodes
cat << EOF > $HOME/kind-3nodes.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker
EOF
kind create cluster --name cda --config kind-3nodes.yaml
Listar os nodes
kubectl get nodes
Listar os podes no namespace default
kubectl get pods
Listar todos pods
kubectl get po -A
Listar os Deployments
kubectl get deployment
kubectl get deployment -A
Listar os Services
kubectl get service
kubectl get service -A
Listar as ReplicaSer
kubectl get replicaset
kubectl get replicaset -A
Criar um Pod
kubectl run --image nginx --port 80 cda
Listar pods
kubectl get pods
Delete pods
kubectl delete pods cda
Expor um Pod como Serviço
kubectl expose pods cda
Delete Service
kubectl delete svc cda
Expor um Pod como Serviço
kubectl expose pods --type NodePort
Simula a criação de um Pod
kubectl run --image nginx --port 80 cda --dry-run=client
Simula a criação de um Pod e mostra no terminal o yaml
kubectl run --image nginx --port 80 cda --dry-run=client -oyaml
kubectl run --image nginx --port 80 cda --dry-run=client -oyaml > pod.yaml
Criar um Deployment com uma replicaset
kubectl create deployment --image nginx cda --dry-run=client -oyaml
Expor o deployment como serviço
kubectl expose deployment cda --type="NodePort" --port 80
Acessar o serviço pelo Browser usando port-forward
kubectl port-forward services/cda 8080:80