Configuración del entorno para Kubernetes 1.26
Definición de los hosts:
maestro-control 10.0.0.100
trabajador-alfa 10.0.0.101
trabajador-beta 10.0.0.102
Instalación de Docker y containerd. Ajuste del archivo config.toml.
1. Tareas iniciales
Deshabilitar firewall y SELinux
systemctl disable firewalld.service --now
setenforce 0
vi /etc/selinux/config
Desactivar swap
swapoff -a
Activar parámetros del kernel
vi /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
sysctl -p /etc/sysctl.d/k8s.conf
2. Configuración esencial
Establecre repositorios para Docker y Kubernetes
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.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
Instalar Docker CE
yum -y install docker-ce
systemctl enable docker --now
Editar el archivo config.toml
containerd config default > /etc/containerd/config.toml
vi config.toml
SystemdCgroup = true
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"
# Ajustar política de descarga de imágenes
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry.k8s.io"]
endpoint = ["https://registry-k8s-io.mirrors.sjtug.sjtu.edu.cn"]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://mi-espejo-configurado"]
systemctl restart containerd
systemctl enable containerd
Instalar kubelet, kubeadm y kubectl
yum -y install kubelet-1.26.0 kubeadm-1.26.0 kubectl-1.26.0
# Habilitar kubelet
systemctl enable kubelet --now
Configurar el runtime del contenedor
crictl config runtime-endpoint unix:///var/run/containerd/containerd.sock
crictl config image-endpoint unix:///var/run/containerd/containerd.sock
3. Pasos en el nodo maestro
Inicializar el clúster de Kubernetes
kubeadm init --apiserver-advertise-address=10.0.0.100 \
--kubernetes-version=v1.26.0 \
--pod-network-cidr=10.244.0.0/16 \
--image-repository=registry.aliyuncs.com/google_containers
Explicación de opciones:
- --image-repository: Almacén para imágenes del plano de control.
- --apiserver-advertise-address: Dirección IP del nodo maestro.
- --pod-network-cidr: Rango de subred para los pods.
Incorproar nodos trabajadores
En trabajador-alfa y trabajador-beta, ejecutar:
kubeadm join 10.0.0.100:6443 --token xyzabc.9876543210xyzabc --discovery-token-ca-cert-hash sha256:789def456...
Los nodos permanecerán en estado notready hasta que se despliegue un plugin de red.
Implementar el plugin de red Calico
Obtener los manifiestos YAML de Calico v3.25.
kubectl create -f tigera-operator.yaml
# Ajustar custom-resources.yaml con el rango de red deseado para pods
kubectl create -f custom-resources.yaml
Comprobar los pods en ejecución:
kubectl get pods -A
4. Validación de nodos y prueba de red
kubectl get nodes
Crear y verificar un pod:
kubectl run demo-pod --image=httpd --restart=Never
kubectl exec -ti demo-pod -- /bin/bash
curl http://www.ejemplo.com
5. Habilitar autocompletado
echo 'source <(kubectl completion bash)' >> /root/.bashrc
source /root/.bashrc
6. Desplegar metrics-server
Descargar la versión 0.6.3 de metrics-server.
# Modificar el archivo de despliegue para incluir --kubelet-insecure-tls
kubectl apply -f metrics-server.yaml
# Utilizar el comando
kubectl top nodes
Arquitectura de componentes de Kubernetes
1. API Server
Punto de acceso único para todas las operaciones del clúster, procesando solicitudes RESTful.
2. Cliente kubectl
Interfaz de línea de comandos que traduce comandos en llamadas a la API.
3. Scheduler
Asigna pods a nodos según recursos disponibles y restricciones definidas.
4. etcd
Almacén de datos clave-valor distribuido que mantiene el estado persistente del clúster.
5. Controller Manager
Ejecuta bucles de control para reconciliar el estado actual con el deseado.
6. kubelet
Agente en cada nodo que gestiona el ciclo de vida de los pods y reporta métricas.
7. kube-proxy
Mantiene reglas de red para facilitar la comunicación entre pods y servicios externos.
Recursos fundamentales en Kubernetes
1. Pod
Unidad de despliegue atómica que encapsula uno o más contenedores que comparten recursos.