Kubernetes ya no es compatible con Docker, se venia avisando desde hace tiempo pero si quieres usar docker con kubernetes solo podrás hacerlo hasta la versión 1.22. No es ninguna sorpresa pero después de tantos cluster con docker+kubernetes+Centos7.5 con excelente rendimiento me da nostalgia. ¿Pero porque migrarse entonces?. Pues aunque docker nos ha llevado a lo que ahora somos tiene carencias que han llevado a que kubernetes retire la compatibilidad con este runtine de contenedores y además a niveles prácticos de uso del cluster de kubernetes no nos va a suponer ningún cambio, es decir usaremos el cluster de kubernetes 1.23 exactamente igual que un cluster de kubernetes 1.22.

Partimos de que tenemos maquinas centos 7.9 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.30 k8s-master
192.168.1.31 node01
192.168.1.32 node02
192.168.1.33 node03
192.168.1.34 node04

Instalar Ansible

yum install epel-release -y
yum install yum-utils -y
yum install ansible -y

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]
192.168.1.30  ansible_hostname=k8s-master
[nodes]
192.168.1.31 ansible_hostname=node01
192.168.1.32 ansible_hostname=node02
192.168.1.33 ansible_hostname=node03
192.168.1.34 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
for NODE in node01 node02 node03 node04; do scp /etc/hosts root@${NODE}:/etc/hosts; done

Para probar que ansible funciona usamos el modulo ping

ansible all -m ping
- hosts: all
  tasks:
  - name: Disable SELinux
    selinux:
      state: disabled
  - name: Disable SWAP
    shell: swapoff -a
  - name: Create disable swap fstab
    shell: line=$(grep -n -m 1 swap /etc/fstab | cut -d ":" -f 1) && sed -e "${line}s/^/#/" /etc/fstab > /etc/fstab.bk
  - name: Disabled Swap
    shell: cp /etc/fstab.bk /etc/fstab
  - name: Active netfiter
    shell: modprobe br_netfilter
  - name: Test netfilter config
    shell: if grep -q "^net.ipv4.ip_forward = 1" /etc/sysctl.conf; then echo false; else echo true;  fi
    register: test_grep
  - name: enable netfiler
    lineinfile:
      dest: /etc/sysctl.conf
      line: net.ipv4.ip_forward = 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','wget']
  - 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=0
        repo_gpgcheck=0
        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-1.23.2-0"
        - "kubelet-1.23.2-0"
        - "kubectl-1.23.2-0"
      state: present
  - name: Enable br_netfilter
    shell: |
      cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
      br_netfilter
      EOF
  - name: Enable bridge nf call k8s.conf
    shell: |
      cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
      net.bridge.bridge-nf-call-ip6tables = 1
      net.bridge.bridge-nf-call-iptables = 1
      EOF
  - name: sysctl
    shell: sudo sysctl --system
  - name: Download containers-common
    shell: wget https://rpmfind.net/linux/centos/7.9.2009/extras/x86_64/Packages/containers-common-0.1.40-11.el7_8.x86_64.rpm
  - name: Install package.
    yum:
      name: containers-common-0.1.40-11.el7_8.x86_64.rpm
      state: present
  - name: enable Kubelet
    shell: systemctl enable --now kubelet
  - name: Adding 10-kubeadm.conf
    blockinfile:
     path: /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
     block: |
      # Note: This dropin only works with kubeadm and kubelet v1.11+
      [Service]
      Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
      Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
      # This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET_KUBEADM_ARGS variable dynamically
      EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
      # This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user should use
      # the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sourced from this file.
      ## The following line to be added for CRI-O
      Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=systemd"
      EnvironmentFile=-/etc/sysconfig/kubelet
      ExecStart=
      ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS $KUBELET_CGROUP_ARGS
  - name: Adding repository details in Kubernetes-devlevel repo file.
    shell: |
      cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes-devlevel.repo
      [devel_kubic_libcontainers_stable]
      name=Stable Releases of Upstream github.com/containers packages (CentOS_7)
      type=rpm-md
      baseurl=https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/CentOS_7/
      gpgcheck=1
      gpgkey=https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/CentOS_7/repodata/repomd.xml.key
      enabled=1
      EOF
  - name: Download containers-common rpm
    shell: wget https://rpmfind.net/linux/centos/7.9.2009/extras/x86_64/Packages/containers-common-0.1.40-11.el7_8.x86_64.rpm
  - name: Install containers-common.
    yum:
      name: ./containers-common-0.1.40-11.el7_8.x86_64.rpm
      state: present
  - name: Install cri-o repos
    shell: |
      VERSION=1.23
      OS=CentOS_7
      sudo curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable.repo https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/devel:kubic:libcontainers:stable.repo
      sudo curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable:cri-o:$VERSION.repo https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$VERSION/$OS/devel:kubic:libcontainers:stable:cri-o:$VERSION.repo
  - name: Install cri-o 
    yum:
      name:
        - "cri-o "
        - "cri-tools"
      state: present
  - name: Start cri-o 
    shell: |
      systemctl daemon-reload
      systemctl enable crio --now
      systemctl enable kubelet --now
  - name: Start kubelet
    shell: systemctl enable kubelet
  - name: reboot
    reboot:
ansible-playbook install.yml

Despues del reinicio en el master ya podemos iniciar el cluster.

kubeadm init --apiserver-advertise-address=192.168.1.30 --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
export KUBECONFIG=/etc/kubernetes/admin.conf

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

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 *