Helm se actualiza a la version 3 y retira el componente tiller, kubernetes 1.18 ya tiene release alfa. En pocos meses de uso de nuestro cluster se acumulan cambios, se deprecan y añaden features por lo que tenemos que realizar comprobaciones de estabilidad para nuestros sistemas.
Para desintalar e instalar y aplicar configuraciones de un conjunto de servidores nada como ansible, es una de esas cosas que una vez usas ya no vuelves a concebir no usarlo por todo lo que aporta.
Partimos de que tenemos maquinas centos que conforman nuestro cluster 1 master y 4 nodos y que ademas tienen ya configurado las ips staticas y el archivos hosts para que se reconozcan entre si.
192.168.1.88 k8s-master 192.168.1.41 node01 192.168.1.42 node02 192.168.1.43 node03 192.168.1.44 node04
Instalar Ansible
yum install epel-release yum install yum-utils yum install ansible
Con ansible instalado añadimos al final los nodos que vamos a usar, creamos un grupo «all» que incluye todas las maquinas incluido el master y otro «nodes» solo los nodos. Esto se define en el archivo «/etc/ansible/hosts»
vi /etc/ansible/hosts
[master] 127.0.0.1 ansible_hostname=k8s-master [nodes] 192.168.1.41 ansible_hostname=node01 192.168.1.42 ansible_hostname=node02 192.168.1.43 ansible_hostname=node03 192.168.1.44 ansible_hostname=node04
Tenemos que crear una clave ssh y añadir la clave publica en las maquinas que vayamos usar
ssh-keygen -t rsa -b 2048
for NODE in k8s-master node01 node02 node03 node04; do ssh-copy-id root@${NODE}; done
Para probar que ansible funciona usamos el modulo ping
ansible all -m ping
Descargar los playbooks
git clone https://github.com/Akaronte/kube-cluster-playbooks.git cd kube-cluster-playbooks
Añadir los repos
ansible-playbook addRepos.yml
Paver las versiones dispobles de los repos.
yum search --showduplicates docker | expand yum search --showduplicates kubernetes | expand
Dentro del archivo install.yml podemos especificar la version de Docker y kubernetes que queremos instalar.
ansible-playbook install.yml
- hosts: all
vars:
- docker_version: '20.10.9-3.el7.x86_64'
- kube_version: '1.22.2-0'
tasks:
- name: Disable SELinux
selinux:
state: disabled
- name: Disable SWAP
shell: swapoff -a
- name: disable swap fstab
replace:
path: /etc/fstab
regexp: '^([^#].*?\sswap\s+sw\s+.*)$'
replace: '# \1'
- name: Active netfiter
shell: modprobe br_netfilter
- name: Test netfilter config
shell: if grep -q "^net.bridge.bridge-nf-call-iptables = 1" /etc/sysctl.conf; then echo false; else echo true; fi
register: test_grep
- name: enable netfiler
lineinfile:
dest: /etc/sysctl.conf
line: net.bridge.bridge-nf-call-iptables = 1
when: test_grep.stdout == "true"
- name: disable firewall
shell: systemctl stop firewalld && systemctl disable firewalld && systemctl mask --now firewalld
- name: Add epel-release repo and utils
yum:
name: ['epel-release','yum-utils','device-mapper-persistent-data','lvm2']
state: present
- name: Add docker repository
shell: yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- name: Install docker
yum:
name:
- "docker-ce-{{ docker_version }}"
- "docker-ce-cli-{{ docker_version }}"
- containerd.io
state: present
#when: (docker_version != "")
- name: Start Docker
service:
name: docker
state: started
enabled: yes
- name: Copy docker daemon.json
copy:
src: ./daemon.json
dest: /etc/docker/daemon.json
follow: yes
- name: Creating a repository file for Kubernetes
file:
path: /etc/yum.repos.d/kubernetes.repo
state: touch
- name: Adding repository details in Kubernetes repo file.
blockinfile:
path: /etc/yum.repos.d/kubernetes.repo
block: |
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
- name: Install kubernetes
yum:
name:
- "kubeadm-{{ kube_version }}"
- "kubelet-{{ kube_version }}"
- "kubectl-{{ kube_version }}"
state: present
#when: (kube_version != "")
- name: Start kubelet
shell: systemctl enable kubelet
- name: reboot
reboot:
Despues del reinicio en el master ya podemos iniciar el cluster.
kubeadm init --apiserver-advertise-address=192.168.1.88 --pod-network-cidr=10.244.0.0/16
mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config
Desplegar flannel
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
Añadir los nodos con ansible
token=$(kubeadm token create --print-join-command) && ansible nodes -a "$token"
Para verificar
kubectl get nodes
0 comentarios