DEV Community

Paulo Ponciano
Paulo Ponciano

Posted on • Originally published at Medium

Cluster Kubernetes com Rancher [Lab Session]

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)
  }
}
Enter fullscreen mode Exit fullscreen mode

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:

Comando para adicionar os nodes K8S no Rancher

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:

Launch kubectl

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
Enter fullscreen mode Exit fullscreen mode

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:

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!

Top comments (0)