- Sistema Operativo: CentOS Linux 7 (Core)
- Containerd: 1.6.33
- Kubernetes: 1.30.1
- Ejemplo con un solo nodo maestro (hostname: nodo1, puede variar según la configuración).
Cambio al repositorio YUM de Aliyun
No se puede usar yum update
yum update
Copia de seguridad del repositorio original y adición del repositorio de Aliyun
# Respaldo del repositorio original
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
# Crear archivo /etc/yum.repos.d/CentOS-Base.repo e insertar el contenido siguiente:
------------------------------------------------------------------------------------------------------------------------------
[base]
name=CentOS-$releasever - Base - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/os/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
[updates]
name=CentOS-$releasever - Updates - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/updates/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
[extras]
name=CentOS-$releasever - Extras - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/extras/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
[centosplus]
name=CentOS-$releasever - Plus - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/centosplus/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
[contrib]
name=CentOS-$releasever - Contrib - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/contrib/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/contrib/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
# Limpiar caché
yum clean all
# Generar nueva caché
yum makecache
Actualización del Kernel de Linux
Verificar la versión actual del kernel y descargar el nuevo kernel
# Verificar versión actual del kernel
uname -r
# Descargar paquetes del nuevo kernel
wget https://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-5.4.257-1.el7.elrepo.x86_64.rpm
wget https://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-devel-5.4.257-1.el7.elrepo.x86_64.rpm
wget https://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-doc-5.4.257-1.el7.elrepo.noarch.rpm
wget https://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-headers-5.4.257-1.el7.elrepo.x86_64.rpm
wget https://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-tools-5.4.257-1.el7.elrepo.x86_64.rpm
wget https://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-tools-libs-5.4.257-1.el7.elrepo.x86_64.rpm
wget https://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-tools-libs-devel-5.4.257-1.el7.elrepo.x86_64.rpm
Desinstalar versiones antiguas del kernel-tools y kernel-headers
yum remove -y kernel-tools* kernel-headers*
Instalar los paquetes descargados
yum install -y kernel*.rpm
Estabelcer el kernel recién instalado como predeterminado
# Configurar GRUB para arrancar por defecto el primer kernel
sed -i 's/^GRUB_DEFAULT=saved$/GRUB_DEFAULT=0/' /etc/default/grub
# Generar nueva configuración de GRUB
grub2-mkconfig -o /boot/grub2/grub.cfg
Reiniciar y verificar la versión del kernel actualizado
# Reiniciar el sistema
reboot
# Verificar versión del kernel
uname -r
Preparación para la instalación de Kubernetes
Deshabilitar el firewall
systemctl disable --now firewalld
systemctl stop firewalld
systemctl status firewalld
Deshabilitar SELinux
# Revisar estado de SELinux
getenforce
# Deshabilitar SELinux permanentemente
sed -i 's/enforcing/disabled/' /etc/selinux/config
# Deshabilitar SELinux en la sesión actual
setenforce 0
# Verificar que SELinux está deshabilitado
getenforce
Deshabilitar la partición swap
# Revisar si hay una partición swap activa
free -h
# Deshabilitar swap en la sesión actual
swapoff -a
# Deshabilitar swap permanentemente
sed -ri 's/.*swap.*/#&/' /etc/fstab
# Verificar que la partición swap está desactivada
free -h
Transmitir tráfico IPv4 de puentes a las cadenas de iptables
# Añadir configuraciones a /etc/sysctl.conf
echo -e "net.ipv4.ip_forward = 1\nnet.bridge.bridge-nf-call-ip6tables = 1\nnet.bridge.bridge-nf-call-iptables = 1\nnet.ipv6.conf.all.disable_ipv6 = 1\nnet.ipv6.conf.default.disable_ipv6 = 1\nnet.ipv6.conf.lo.disable_ipv6 = 1\nnet.ipv6.conf.all.forwarding = 1" >> /etc/sysctl.conf
# Cargar módulo br_netfilter
modprobe br_netfilter
# Aplicar cambios
sysctl -p
Instalación de Containerd
Configurar el repositorio de Docker
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
Instalar Containerd
yum install -y yum-utils device-mapper-persistent-data lvm2
yum install -y containerd.io containerd
Configurar archivo de Containerd
# Generar archivo de configuración
containerd config default > /etc/containerd/config.toml
# Reemplazar dirección de imagen por la de Aliyun
sed -i "s#registry.k8s.io/pause#registry.cn-hangzhou.aliyuncs.com/google_containers/pause#g" /etc/containerd/config.toml
# Habilitar SystemdCgroup
sed -i "s#SystemdCgroup = false#SystemdCgroup = true#g" /etc/containerd/config.toml
# Habilitar inicio automático de Containerd
systemctl enable --now containerd
systemctl status containerd
Verificar la versión de Containerd
ctr version
containerd --version
Instalar comando crictl
# Descargar crictl
wget https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.30.0/crictl-v1.30.0-linux-amd64.tar.gz
# Descomprimir en /usr/local/bin
tar zxvf crictl-v1.30.0-linux-amd64.tar.gz -C /usr/local/bin
# Configurar crictl
cat << EOF | sudo tee /etc/crictl.yaml
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
debug: false
pull-image-on-create: true
disable-pull-on-run: false
EOF
# Verificar instalación
crictl ps
Opcional: Configurar acelerador de imágenes para Containerd
# Configurar directorio para certificados
mkdir -p /etc/containerd/certs.d/docker.io
# Añadir configuración para Docker Hub
cat > /etc/containerd/certs.d/docker.io/hosts.toml << EOF
server = "https://docker.io"
[host."https://dockerpull.com"]
capabilities = ["pull", "resolve"]
[host."https://register.liberx.info"]
capabilities = ["pull", "resolve"]
[host."https://docker.m.daocloud.io"]
capabilities = ["pull", "resolve"]
[host."https://dockerproxy.cn"]
capabilities = ["pull", "resolve"]
EOF
# Configurar directorio para registry.k8s.io
mkdir -p /etc/containerd/certs.d/registry.k8s.io
# Añadir configuración para registry.k8s.io
tee /etc/containerd/certs.d/registry.k8s.io/hosts.toml << 'EOF'
server = "https://registry.k8s.io"
[host."https://k8s.m.daocloud.io"]
capabilities = ["pull", "resolve", "push"]
EOF
# Ejemplos de uso
# Con ctr
ctr i pull --hosts-dir=/etc/containerd/certs.d docker.io/nginx:latest
# Con crictl
crictl pull docker.io/nginx:latest
Instalación de Kubernetes
Añadir repositorio de Kubernetes de Aliyun
cat <<eof baseurl="https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/rpm/" enabled="1" eof="" gpgcheck="1" gpgkey="https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/rpm/repodata/repomd.xml.key" name="Kubernetes" tee=""></eof>
Instalar kubelet, kubeadm, kubectl
yum install -y kubelet-1.30.1 kubeadm-1.30.1 kubectl-1.30.1
Descargar imágenes necesarias
kubeadm config images pull --kubernetes-version=v1.30.1 --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers
Inicializar nodo maestro
kubeadm init --apiserver-advertise-address=172.16.14.132 --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --kubernetes-version=v1.30.1 --service-cidr=10.96.0.0/16 --pod-network-cidr=10.244.0.0/16
Configurar acceso a kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf
Implementar plugin de red Calico
kubectl apply -f https://projectcalico.docs.tigera.io/v3.25/manifests/calico.yaml
Verificar estado de los nodos
kubectl get pod -A
kubectl get node
Nodos trabajadores
Para nodos trabajadores, seguir pasos similares desde la descarga de imágenes. Utilizar el comando kubeadm join xxx para unirse al nodo maestro.