Cluster Kubernetes com Rancher [Lab Session]

Paulo Ponciano
5 min readAug 24, 2022

--

Neste laboratório foi provisionado um cluster kubernetes com três nodes utilizando rancher single node para gerenciamento. Toda estrutura foi provisionada na AWS.

Utilizamos o terraform para provisionar grande parte da estrutura, como: instâncias EC2 e suas dependências, Docker, Rancher, network load balancer, security groups e target group.

Topologia alcançada

Código terraform aqui.

Pré-requisitos

Variáveis

Entrada de informações para identificação do ambiente, região de provisionamento e subnets:

variable "project_name" {
default = "my-k8s-project"
}

variable "env" {
default = "dev"
}

#For k8s cluster
variable "instance_name" {
type = list(string)
default = [
"k8s-node-01",
"k8s-node-02",
"k8s-node-03",
]
}

#For rancher
variable "rancher_name" {
default = "rancher-node"
}

#For rancher and NLB
variable "subnet_id_public_az1" {
default = "subnet-*****************"
}

variable "subnet_id_public_az2" {
default = "subnet-*****************"
}

#For k8s cluster
variable "subnet_id_private_az1" {
default = "subnet-*****************"
}

variable "aws_details" {
type = map(string)
default = {
region = "us-west-2"
instance_type = "t3.medium"
key_name = "k8s-kp" #keypair (.pem)
}
}

Construção

  1. Após finalizar a execução do código terraform, identifique qual IP público foi provisionado para o Rancher e CNAME provisionado para o Network load balancer. Crie as duas entradas no DNS do seu domínio:

2. Acesse o rancher pelo navegador e defina a nova senha do usuário ‘admin’, na sequência, defina a URL de acesso:

3. Adicione um novo cluster em ‘Add Cluster’ e escolha ‘From existing nodes (Custom)’, pois vamos utilizar os três nodes k8s privisionados com terraform:

4. Defina um nome para seu cluster em ‘Cluster Name’. Em Advanced Options, marque como Disabled a opção Nginx Ingress — Usaremos o Traefik como proxy reverso:

5. Na próxima etapa, selecione as roles que serão executadas: etcd, Control Plane e Worker. Também informe o nome do primeiro node kubernetes:

Ainda nesse passo, é importante copiar o comando que é gerado logo abaixo:

Comando para adicionar os nodes K8S no Rancher

Cluster criado:

6. Conecte nos três nodes criados para o K8S, e execute o comando copiado no passo anterior, mas lembre-se de alterar apenas o valor do — node-name de acordo com a sequência definida (k8s-node-02, k8s-node-03):

Após executar o comando nos três nodes, aguarde o deploy:

Deploy finalizado e nodes ativos:

7. No dashboard do cluster, execute ‘Launch kubectl’ para executar alguns comandos diretamente no cluster:

Launch kubectl

Execute:

kubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v1.7/examples/k8s/traefik-rbac.yamlkubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v1.7/examples/k8s/traefik-ds.yaml

Crie o arquivo ui.yml para deploy do traefik:

touch ui.yml

Insira o conteúdo abaixo em ui.yml:

---
apiVersion: v1
kind: Service
metadata:
name: traefik-web-ui
namespace: kube-system
spec:
selector:
k8s-app: traefik-ingress-lb
ports:
- name: web
port: 80
targetPort: 8080
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: traefik-web-ui
namespace: kube-system
spec:
rules:
- host: traefik.sevira.ninja
http:
paths:
- path: /
backend:
serviceName: traefik-web-ui
servicePort: web

Faça o apply para deploy do traefik:

kubectl apply -f ui.yml

Deploy finalizado e traefik ativo:

8. Na console AWS, adicione os nodes K8S no target group que foi criado na execução do terraform:

Após o passo anterior, veja que é possível acessar o traefik através da URL definida tanto no DNS do domínio, quanto no arquivo ui.yml:

Web UI Traefik

Até aqui, o ambiente já está disponível para iniciar o deploy de suas aplicações. Pode ser utilizado o próprio catálogo do Rancher — Em ‘Apps’.

Grafana, por exemplo:

Defina ‘Grafana Admin Password’ e em ‘Hostname’, uma nova URL que pode ser criada em seu domínio:

Pod grafana em um node
Ingress grafana
Registro no DNS

Happy building!

--

--

Paulo Ponciano

Solutions Architect | 7x AWS Certified | AWS Black Belt | AWS Community Builder