Cluster Kubernetes com Rancher [Lab Session]
Paulo Ponciano
Posted on January 29, 2024
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.
Pré-requisitos
Terraform instalado
AWS CLI instalado
Credenciais administrativas da conta alvo/aws configuradas localmente
AWS VPC provisionada com duas subnets públicas e ao menos uma privada (https://medium.com/@paulofponciano/provisionamento-de-aws-vpc-base-com-terraform-a1db1834290a)
Key pair provisionada (para acessar as instâncias após provisionamento)
Domínio válido — Não é necessariamente pré-requisito, mas vai ajudar muito
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
- 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:
- Acesse o rancher pelo navegador e defina a nova senha do usuário ‘admin’, na sequência, defina a URL de acesso:
- Adicione um novo cluster em ‘Add Cluster’ e escolha ‘From existing nodes (Custom)’, pois vamos utilizar os três nodes k8s privisionados com terraform:
- 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:
- 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:
Cluster criado:
- 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:
- No dashboard do cluster, execute ‘Launch kubectl’ para executar alguns comandos diretamente no cluster:
Execute:
kubectl apply -f [https://raw.githubusercontent.com/traefik/traefik/v1.7/examples/k8s/traefik-rbac.yaml](https://raw.githubusercontent.com/traefik/traefik/v1.7/examples/k8s/traefik-rbac.yaml)
kubectl apply -f [https://raw.githubusercontent.com/traefik/traefik/v1.7/examples/k8s/traefik-ds.yaml](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:
- 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:
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:
Happy building!
Posted on January 29, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.