Configuración de Kubernetes en CentOS 7

Este tutorial detalla los pasos para desplegar un clúster de Kubernetes (K8s) utilizando tres máquinas virtuales con CentOS 7. Se asume una configuración de red donde las máquinas pueden comunicarse entre sí y acceder a Internet.

Requisitos Previos

1. Configuración de las Máquinas Virtuales

Se necesitan tres VMs con las siguientes características:

  • Nombres de Host: master, node1, node2
  • Direcciones IP: 192.168.184.129 (master), 192.168.184.130 (node1), 192.168.184.131 (node2)
  • Recursos Mínimos: 2 CPUs, 4GB de RAM, 50GB de almacenamiento.

2. Verificación de Conectividad a Internet

Asegúrese de que cada máquina pueda acceder a Internet. Si no es así, verifique la configuración de la interfaz de red y reinicie el servicio de red:

ping www.baidu.com
# Si hay problemas, edite ifcfg-ens33:
# vi /etc/sysconfig/network-scripts/ifcfg-ens33
# Modifique ONBOOT=yes
# Reinicie la red:
systemctl restart network

3. Modificación de Nombres de Host

Asigne un nombre de host único a cada máquina:

# En master:
hostnamectl set-hostname master
# En node1:
hostnamectl set-hostname node1
# En node2:
hostnamectl set-hostname node2

4. Sincronización de Tiempo

Es crucial mentener la hora sincronizada en todos los nodos. Instale y active chrony:

# Instalar si no está presente
yum install -y chrony
# Iniciar y habilitar el servicio
systemctl start chronyd
systemctl enable chronyd

5. Desactivación del Firewall

Desactive el servicio firewalld en todas las máquinas:

systemctl disable firewalld

6. Desactivación de Swap

Desactive el uso de swap, ya que K8s lo prefiere desactivado. Edite /etc/fstab y comente la línea correspondiente a la partición swap:

# Edite /etc/fstab y comente la línea de swap
# Ejemplo: /dev/mapper/centos-swap swap

7. Configuración de Parámetros de Red (Sysctl)

Habilite el reenvío de IP y la configuración necesaria para el manejo de puentes de red:

cat > /etc/sysctl.d/kubernetes.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

# Aplicar los cambios
sysctl --system

Instalación de Docker

Docker es el contenedor runtime preferido. Instálelo y configure el driver cgroup.

1. Configuración del Daemon de Docker

Edite el archivo /etc/docker/daemon.json para especificar el driver systemd para cgroups y configure un mirror de registro para acelerar la descarga de imágenes:

{
    "exec-opts": ["native.cgroupdriver=systemd"],
    "registry-mirrors": ["https://kn0t2bca.mirror.aliyuncs.com"]
}

Reinicie el servicio Docker después de aplicar la configuración.

Despliegue de Kubernetes

1. Configuración del Repositorio Yum de Kubernetes

Cree un archivo de repositorio para acceder a los paquetes de Kubernetes:

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl= https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey= https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

2. Instalación de Componentes de K8s

Instale kubeadm, kubelet y kubectl. Asegúrese de que las versiones coincidan.

# Instalar versiones específicas (ajustar según disponibilidad)
yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0

# Habilitar el inicio automático de kubelet
systemctl enable kubelet

3. Inicialización del Nodo Master

Ejecute el siguiente comando en el nodo master:

kubeadm init \
  --apiserver-advertise-address=192.168.184.129 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.23.0 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16 \
  --ignore-preflight-errors=all

  • --apiserver-advertise-address: La IP del nodo master.
  • --image-repository: Especifica un registro de imágenes accesible desde su ubicación.
  • --kubernetes-version: La versión de Kubernetes a desplegar.
  • --service-cidr: Rango de IPs para los servicios de K8s.
  • --pod-network-cidr: Rango de IPs para los Pods.

Al finalizar, se proporcionará un comando kubeadm join para añadir los nodos trabajadores al clúster.

4. Configuración del Acceso a kubectl

Configure el archivo de configuración de kubectl para que el usuario actual pueda administrar el clúster:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

5. Unión de Nodos Trabajadores al Clúster

En cada nodo trabajador (node1 y node2), ejecute el comando kubeadm join obtenido tras la inicialización del master. El token tiene una validez limitada; para obtener uno nuevo:

# En el master, para generar un nuevo comando de join:
kubeadm token create --print-join-command

Tras unir los nodos, ejecute kubectl get nodes en el master. Los nodos aparecerán como 'NotReady' hasta que se instale una red CNI.

6. Instalación de la Red CNI (Calico)

Descargue la configuración de Calico y modifíquela para que coincida con su pod-network-cidr:

# Descargar el manifiesto de Calico
wget https://docs.projectcalico.org/manifests/calico.yaml
# Editar el archivo y buscar la línea:
# - name: CALICO_IPV4POOL_CIDR
#   value: "10.244.0.0/16"
# Asegúrese de que el valor coincida con su --pod-network-cidr.

Aplique el manifiesto:

kubectl apply -f calico.yaml

Verifique el estado de los pods de red y del sistema:

kubectl get pods -n kube-system

Una vez que los pods de red estén en ejecución, los nodos deberían pasar a estado 'Ready'.

Prueba del Clúster

1. Creación de un Despliegue de Ejemplo (Nginx)

Cree un archivo nginx-deployment.yaml con la siguiente definición:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80

Aplique el despliegue:

kubectl apply -f nginx-deployment.yaml

Verifique que los Pods de Nginx se estén ejecutando:

kubectl get pods

Debería ver tres instancias de Nginx creadas y en estado 'Running'.

Etiquetas: Kubernetes centos kubeadm Docker calico

Publicado el 7-14 17:13