Despliegue de un clúster de Kubernetes mediante kubeadm

kubeadm es una herramienta oficial de la comunidad de Kubernetes diseñada para agilizar la configuración de clústeres. Con un par de comandos esenciales, se puede establecer un clúster y añadir nodos de forma eficiente.

Comandos fundamentales:


# Inicializar el nodo maestro
kubeadm init

# Incorporar un nodo worker al clúster existente
kubeadm join <dirección IP y puerto del maestro>
  1. Requisitos del sistema

Antes de iniciar, verifique que los equipos cumplan estas especificaciones:

  • Una o varias máquinas con sistema operativo CentOS 7.x o posterior, aqruitectura x86_64.
  • Recursos mínimos: 2 GB de RAM, 2 núcleos de CPU, y 30 GB de espacio en disco.
  • Conectividad de red entre todos los nodos del clúster.
  • Acceso a internet para descargar contenedores necesarios.
  • Partición swap desactivada.
  1. Metas del procedimiento

El despliegue abarca los siguientes pasos:

  • Instalar Docker y herramientas de kubeadm en cada nodo.
  • Configurar el nodo maestro de Kubernetes.
  • Implementar un plugin de red para contenedores (CNI).
  • Agregar nodos worker al clúster.
  • Desplegar la interfaz gráfica de Kubernetes para administración visual.
  1. Preparación del entorno

En todos los servidores, ejecute estos comandos para ajustar la configuración:


# Detener y deshabilitar el firewall
sudo systemctl stop firewalld
sudo systemctl disable firewalld

# Deshabilitar SELinux de manera persistente
sudo sed -i 's/enforcing/disabled/' /etc/selinux/config
sudo setenforce 0

# Desactivar swap temporalmente
sudo swapoff -a
# Para una desactivación permanente, edite /etc/fstab y comente la línea correspondiente

# Establecer nombres de host e IPs en /etc/hosts
echo -e "10.0.0.50 nodo-maestro\n10.0.0.51 nodo-trabajador1\n10.0.0.52 nodo-trabajador2" | sudo tee -a /etc/hosts

# Configurar el tráfico bridge para iptables
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system
  1. Instalación de paquetes en todos los nodos

Kubernetes utiliza Docker como motor de contenedores. Comience por instalar Docker.

4.1 Instalación de Docker


# Obtener el repositorio de Docker
sudo wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
sudo yum install -y docker-ce-18.06.1.ce-3.el7
sudo systemctl enable docker
sudo systemctl start docker
docker --version

4.2 Configurar el repositorio de Kubernetes


cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[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

4.3 Instalar herramientas de kubeadm


sudo yum install -y kubelet-1.15.0 kubeadm-1.15.0 kubectl-1.15.0
sudo systemctl enable kubelet
  1. Configuración del nodo maestro

En el nodo maestro (10.0.0.50), inicialice el clúster:


sudo kubeadm init \
--apiserver-advertise-address=10.0.0.50 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.15.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16

Una vez finalizado, configure kubectl localmente:


mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl get nodes
  1. Implementación del plugin de red CNI

Para la comunicación entre pods, instale Flannel:


kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml

Si hay problemas para acceder a quay.io, utilice una imagen alternativa como lizhenliang/flannel:v0.11.0-amd64.

  1. Adición de nodos worker

En los nodos worker (10.0.0.51 y 10.0.0.52), ejecute el comando de unión obetnido durante la inicialización del maestro:


kubeadm join 10.0.0.50:6443 --token <token_generado> \
--discovery-token-ca-cert-hash sha256:<hash_del_certificado>

Reemplace <token_generado> y <hash_del_certificado> con los valores proporcionados por la salida de kubeadm init.

  1. Validación del clúster

Despliegue una aplicación de ejemplo para confirmar el funcionamiento:


kubectl create deployment httpd --image=httpd
kubectl expose deployment httpd --port=80 --type=NodePort
kubectl get pods,svc

Acceda a la aplicación a través de http://<IP_del_nodo>:<puerto_exposed>.

  1. Instalación del Dashboard de Kubernetes

Despliegue la interfaz web de administración:


kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml

Modifique el servicio para permitir acceso externo cambiando su tipo a NodePort y asignando un puerto específico, por ejemplo 30001:


# Ejemplo de archivo kubernetes-dashboard.yaml modificado
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kube-system
spec:
  type: NodePort
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30001
  selector:
    k8s-app: kubernetes-dashboard

Aplique los cambios y cree una cuenta de servicio con privilegios administrativos:


kubectl apply -f kubernetes-dashboard.yaml
kubectl create serviceaccount admin-user -n kube-system
kubectl create clusterrolebinding admin-user --clusterrole=cluster-admin --serviceaccount=kube-system:admin-user
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/admin-user/{print $1}')

Use el token obtenido para iniciar sesión en el Dashboard en http://<IP_del_nodo>:30001.

Etiquetas: Kubernetes kubeadm Docker flannel kubernetes-dashboard

Publicado el 6-9 05:44