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>
- 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.
- 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.
- 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
- 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
- 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
- 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.
- 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.
- 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>.
- 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.