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
https://youtu.be/VX0tvpEipXc

0 comentarios

Deja una respuesta

Marcador de posición del avatar

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *