K8s The Hard Way 1/10 - Pré-requisitos

Tue, Feb 9, 2021 4-minute read

Kubernetes The Hard Way

Esse guia foi originalmente criado pelo pelo grande Kelsey Hightower ( GITHUB ), ele é um dos grandes Advocate do Google, aqui vou basicamento apenas traduzir e adaptar para uma ambiente vagrant+libvirt, todos os demais comando são originais do https://github.com/kelseyhightower/kubernetes-the-hard-way, sinta-se a vontade para me enviar uma mensagem questionando o guia.

Este tutorial orienta você a configurar do Kubernetes da maneira mais difícil. Este guia não é para pessoas que procuram um comando totalmente automatizado para ativar um cluster do Kubernetes.

O Kubernetes The Hard Way é otimizado para aprendizagem, o que significa seguir um longo caminho para garantir que você entenda cada tarefa necessária para inicializar um cluster Kubernetes.

Este trabalho está licenciado sob a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Target Audience

O público-alvo deste tutorial é alguém que planeja oferecer suporte a um cluster de produção do Kubernetes e quer entender como tudo se encaixa.

Cluster Details O Kubernetes The Hard Way orienta você na criar um cluster Kubernetes altamente disponível com criptografia de ponta a ponta entre os componentes e autenticação RBAC. kubernetes v1.18.6 containerd v1.3.6 coredns v1.7.0 cni v0.8.6 etcd v3.4.10

Labs

Este tutorial pressupõe que você tenha uma ambiente vagrant+libvirt funcional rodando na sua maquina. As lições aprendidas neste tutorial podem ser aplicadas a outras plataformas.

Pré-requisitos

Installing the Client Tools Provisioning Compute Resources Provisioning the CA and Generating TLS Certificates Generating Kubernetes Configuration Files for Authentication Generating the Data Encryption Config and Key Bootstrapping the etcd Cluster Bootstrapping the Kubernetes Control Plane Bootstrapping the Kubernetes Worker Nodes Configuring kubectl for Remote Access Provisioning Pod Network Routes Deploying the DNS Cluster Add-on Smoke Test Cleaning Up

Vagrant

Certifique que você possue vagrant instalado e funcional na sua estação de trabalho: https://www.vagrantup.com/docs/installation

Rodando comandos em paralelo com tmux

O tmux pode ser usado para executar comandos em várias sistemas ao mesmo tempo. Os laboratórios neste tutorial podem exigir a execução dos mesmos comandos em várias instâncias; nesses casos, considere o uso de tmux e a opção de enviar comandos ao mesmo tempo em instancias diferentes.

O uso do tmux é opcional e não obrigatório para concluir este tutorial.

Installing the Client Tools

Neste laboratório, você vai instalar as ferramentas de linha de comando necessárias para concluir este tutorial: cfssl, cfssljson e kubectl.

Linux

wget -q --show-progress --https-only --timestamping \
  https://storage.googleapis.com/kubernetes-the-hard-way/cfssl/1.4.1/linux/cfssl \
  https://storage.googleapis.com/kubernetes-the-hard-way/cfssl/1.4.1/linux/cfssljson
chmod +x cfssl cfssljson
sudo mv cfssl cfssljson /usr/local/bin/

Verification Verify cfssl and cfssljson version 1.4.1 or higher is installed:

cfssl version

output

Version: 1.4.1
Runtime: go1.12.12
cfssljson --version
Version: 1.4.1
Runtime: go1.12.12

Instalar kubectl O utilitário de linha de comando kubectl é usado para interagir com o servidor da API Kubernetes. Baixe e instale o kubectl dos binários de lançamento oficiais:

Linux wget https://storage.googleapis.com/kubernetes-release/release/v1.18.6/bin/linux/amd64/kubectl chmod +x kubectl sudo mv kubectl /usr/local/bin/

Verification Verify kubectl version 1.18.6 or higher is installed:

kubectl version --client

output

Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.6", GitCommit:"dff82dc0de47299ab66c83c626e08b245ab19037", GitTreeState:"clean", BuildDate:"2020-07-15T16:58:53Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}

Providenciando as maquinas virtuais:

Subindo as maquinas virtuais vagrant:

Name Role CPU Memory
controller-0 MASTER 2 2GB
controller-1 MASTER 2 2GB
controller-2 MASTER 2 2GB
worker-0 WORKER 2 1GB
worker-1 WORKER 2 1GB
worker-2 WORKER 2 1GB
loadbalance LOADBALANCER 2 1GB

Criar o ~/vagrant-vm/kubernetes-the-hard-way/Vagrantfile


Vagrant.configure("2") do |config|
  config.vm.provision "shell", inline: "echo Hello"

  config.vm.define "controller-0" do |controller0|                 
    controller0.vm.box = "generic/ubuntu2004"                       
    controller0.vm.hostname = "controller-0.lucio.k8s"       
    controller0.vm.provider :libvirt do |domain|                
      domain.cpus = 2                                       
      domain.memory = 2048                                     
  end                                                     
end

  config.vm.define "controller-1" do |controller1|                 
    controller1.vm.box = "generic/ubuntu2004"
    controller1.vm.hostname = "controller-1.lucio.k8s"
    controller1.vm.provider :libvirt do |domain|
      domain.cpus = 2
      domain.memory = 2048
  end
end

  config.vm.define "controller-2" do |controller2|
    controller2.vm.box = "generic/ubuntu2004"
    controller2.vm.hostname = "controller-2.lucio.k8s"
    controller2.vm.provider :libvirt do |domain|
      domain.cpus = 2
      domain.memory = 2048
  end
end

  config.vm.define "worker-0" do |worker0|
    worker0.vm.box = "generic/ubuntu2004"
    worker0.vm.hostname = "worker-0.lucio.k8s"
    worker0.vm.provider :libvirt do |domain|
      domain.cpus = 2
      domain.memory = 1024
  end
end

  config.vm.define "worker-1" do |worker1|
    worker1.vm.box = "generic/ubuntu2004"
    worker1.vm.hostname = "worker-1.lucio.k8s"
    worker1.vm.provider :libvirt do |domain|
      domain.cpus = 2
      domain.memory = 1024
  end
end

  config.vm.define "worker-2" do |worker2|
    worker2.vm.box = "generic/ubuntu2004"
    worker2.vm.hostname = "worker-2.lucio.k8s"
    worker2.vm.provider :libvirt do |domain|
      domain.cpus = 2
      domain.memory = 1024
  end
end

  config.vm.define "loadbalancer" do |loadbalancer|
    loadbalancer.vm.box = "generic/ubuntu2004"
    loadbalancer.vm.hostname = "loadbalancer.lucio.k8s"
    loadbalancer.vm.provider :libvirt do |domain|
      domain.cpus = 2
      domain.memory = 1024
  end
end

end

A partir de agora quase todos os nossos acessos vai ser feito dentro do diretório do projeto:

cd ~/vagrant-vm/kubernetes-the-hard-way

Subindo as maquinas vagrant:

sudo vagrant up

Uma vez que todas as maquinas já foram criadas, você pode testar o acesso:

sudo vagrant ssh controller-0

output

Last login: Sun Feb 28 23:51:59 2021 from 192.168.122.1
vagrant@controller-0:~$ 

Proximo: K8S The Hard Way 2/10 - Gerando Certificados