Kubernetes Instalação
Vamos aprender a instalar o Kubernetes, e para isso precisaremos do vagrant:
# -*- mode: ruby -*-
# vi: set ft=ruby :
vms = {
'master' => {'memory' => '2048', 'cpus' => 2, 'ip' => '10', 'provision' => 'master.sh'},
'node1' => {'memory' => '1024', 'cpus' => 1, 'ip' => '20', 'provision' => 'node.sh'},
'node2' => {'memory' => '1024', 'cpus' => 1, 'ip' => '30', 'provision' => 'node.sh'},
'storage' => {'memory' => '512', 'cpus' => 1, 'ip' => '40', 'provision' => 'storage.sh'}
}
Vagrant.configure('2') do |config|
config.vm.box = 'debian/buster64'
config.vm.box_check_update = false
vms.each do |name, conf|
config.vm.define "#{name}" do |k|
k.vm.hostname = "#{name}.example.com"
k.vm.network 'private_network', ip: "172.27.11.#{conf['ip']}"
k.vm.provider 'virtualbox' do |vb|
vb.memory = conf['memory']
vb.cpus = conf['cpus']
end
k.vm.provider 'libvirt' do |lv|
lv.memory = conf['memory']
lv.cpus = conf['cpus']
lv.cputopology :sockets => 1, :cores => conf['cpus'], :threads => '1'
end
end
end
end
Crie um diretório chamado k8s na sua máquina, coloque o conteúdo acima no arquivo Vagrantfile e execute:
vagrant up
Espere as máquinas terminarem de serem criadas, liste-as:
vagrant status
Para acessar as máquinas digite:
vagrant ssh master # ou node1, node2 ...
Docker e Kubernetes
Instale o Docker e os pacotes do Kubernetes nas máquinas master, node1 e node2:
https://docs.docker.com/engine/install/debian/ https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
update-alternatives --set iptables /usr/sbin/iptables-legacy
update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
update-alternatives --set arptables /usr/sbin/arptables-legacy
update-alternatives --set ebtables /usr/sbin/ebtables-legacy
apt-get update
apt-get install -y apt-transport-https ca-certificates curl gnupg2 software-properties-common dirmngr vim telnet curl nfs-common
curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
echo 'deb https://apt.kubernetes.io/ kubernetes-xenial main' > /etc/apt/sources.list.d/kubernetes.list
echo "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list
apt-get update
apt-get install -y docker-ce docker-ce-cli containerd.io kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl
NFS
Instale um servidor NFS na máquina storage:
apt-get update && apt-get install -y nfs-kernel-server
E configure alguns volumes para serem utilizados pelo Kubernetes:
mkdir -p /volumes/v{0,1,2,3,4,5,6,7,8,9}
cat > /etc/exports <<EOF
/volumes/v0 172.27.11.0/24(rw,no_root_squash,no_subtree_check)
/volumes/v1 172.27.11.0/24(rw,no_root_squash,no_subtree_check)
/volumes/v2 172.27.11.0/24(rw,no_root_squash,no_subtree_check)
/volumes/v3 172.27.11.0/24(rw,no_root_squash,no_subtree_check)
/volumes/v4 172.27.11.0/24(rw,no_root_squash,no_subtree_check)
/volumes/v5 172.27.11.0/24(rw,no_root_squash,no_subtree_check)
/volumes/v6 172.27.11.0/24(rw,no_root_squash,no_subtree_check)
/volumes/v7 172.27.11.0/24(rw,no_root_squash,no_subtree_check)
/volumes/v8 172.27.11.0/24(rw,no_root_squash,no_subtree_check)
/volumes/v9 172.27.11.0/24(rw,no_root_squash,no_subtree_check)
EOF
exportfs -a
Configurações Pré-Cluster
Modificar o kubelet em todas as máquinas para escutar na interface correta:
echo "KUBELET_EXTRA_ARGS='--node-ip=172.27.11.10'" > /etc/default/kubelet
Desabilite o swap:
swapoff -a
Garanta que esteja desabilitado no /etc/fstab
.
Iniciando o cluster
Inicie a instalação do master, este processo é conhecido como bootstrap:
kubeadm init --apiserver-advertise-address=172.27.11.10 --pod-network-cidr=10.244.0.0/16
Uma vez que o master tenha terminado a inicialização, execute o comando exibido na tela nas máquinas node1 e node2:
# o comando tem a palavra join, cada instalação tem sua própria linha de execução
Configure um plugin de rede
Precisaremos de um plugin de rede para a comunicação entre os pods:
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml