Instalación y despliegue de K8
Prepare cuatro máquinas virtuales y use el sistema operativo centos7 para construir un sistema de clúster.
Configure primero el entorno de una máquina virtual y clone otras máquinas.
Inicie la máquina virtual
Parámetros de la máquina virtual:
- La red usa el modo NAT
- Memoria 2g o más
- 2cpu (de lo contrario, se informará de un error más adelante)
- El disco duro que tengo es de 30g
Si la conexión de red no tiene éxito, puede configurar y probar este blog https://blog.csdn.net/duyuanjun123/article/details/119833105
La primera vez no pude conectarme a la red porque no encendí la conexión de red al inicializar el sistema, atención al inicializar el sistema operativo.
Use el comando ip addr en la máquina virtual para ver la ip de la máquina virtual
Debido a que la operación de la máquina virtual es algo inconveniente, use xshell o fianlshell para conectarse
Configurar fuente yum
La conexión es exitosa y configura la fuente yum
-
descargar el comando wget
yum install wget -y
-
copia de seguridad de las fuentes antiguas del repositorio de yum
cd /etc/yum.repos.d mkdir repobak # 创建文件夹,保存备份文件 mv *.repo repobak #备份repo文件到文件
-
limpiar paquetes viejos
~yum clean all
-
Descargue el nuevo almacén de fuente yum de Ali, el espejo de código abierto de Ali: https://developer.aliyun.com/mirror/
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
-
Continuar para descargar el segundo almacén epel warehouse
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
-
Genere la memoria caché de la fuente yum y actualice la fuente yum
yum makecache yum update
descargar ventana acoplable
# 1、卸载旧的版本
yum remove docker \
docker-client \
docker-client-lastest \
docker-common \
docker-latest \
docker-latest-logrotate \
docekr-engine
# 2、需要的安装包
yum install -y yum-utils
# 3、设置镜像仓库 (阿里云镜像)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 更新yum软件包索引
yum makecache fast
# 4、安装docker相关的内容 docker-ce 社区办 ee企业版
yum install docker-ce docker-ce-cli containerd.io
# 5、启动docker
systemctl start docker
# 6、测试docker是否启动成功
docker -version
Instalar Kubernetes
Configurar la dirección de origen de la instalación
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
Se produce un error de la siguiente manera
[Errno -1] repomd.xml signature could not be verified for kubernetes
Es causado por la falla de la verificación gpg del repositorio, que se puede modificar para repo_gpgcheck=0
omitir la verificación.
Finalmente, instale los componentes clave de Kubernetes.
setenforce o
yum install -y kubelet kubeadm kubectl
# 启动kubelet、kubeadm、kubectl服务 kubeadm将使用kubelet服务以容器的方式部署和启动Kubernetes的主要服务,所以需要先启动kubelet服务。
systemctl enable kubelet && systemctl start kubelet
clonar maquina virtual
Clonar el nodo node1
Instalación y configuración maestra
Todos los nodos cierran Selinux, iptables, partición de intercambio
systemctl stop firewalld
systemctl disable firewalld
iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat
iptables -P FORWARD ACCEPT
swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
Extraiga la configuración predeterminada de Kubernetes
kubeadm config print init-defaults > init-config.yaml
Abra el archivo para ver y encuentre que el almacén espejo configurado es el siguiente:
imageRepository: k8s.gcr.io
Si el repositorio espejo no se puede conectar, puede usar un espejo doméstico en su lugar: imageRepository: registration.aliyuncs.com/google_containers
Abra init-config.yaml y luego realice las modificaciones correspondientes, puede especificar la versión de kubernetesVersion, el acceso a la selección del sitio del módulo, etc.
extracción de imágenes de kubernetes
kubeadm config images pull --config=init-config.yaml
Con la solución de duplicación doméstica, debido al problema de la etiqueta de coredns, la extracción de coredns:v1.8.4 fallará. En este momento, podemos extraerla manualmente y etiquetarla nosotros mismos. La información de la falla es la siguiente:
**Solución: **Extraiga manualmente la imagen
Tire manualmente de la imagen desde el concentrador acoplable:
docker pull registry.aliyuncs.com/google_containers/coredns:1.8.4
Modificar etiquetas:
# 重命名
docker tag registry.aliyuncs.com/google_containers/coredns:1.8.4 registry.aliyuncs.com/google_containers/coredns:v1.8.4
# 删除原有镜像
docker rmi registry.aliyuncs.com/google_containers/coredns:1.8.4
La siguiente es la etiqueta predeterminada del espejo: v1.8.4, y la etiqueta en el espejo es 1.8.4, por lo que la extracción fallará.
Ejecute kubeadm init para instalar el nodo maestro
kubeadm init --apiserver-advertise-address 192.168.10.3 --apiserver-bind-port=6443 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --kubernetes-version=1.24.1 --image-repository registry.aliyuncs.com/google_containers
La siguiente solución de error
- La cantidad de CPU se puede establecer en 2 para la cantidad de CPU en la máquina virtual
the number of available CPUs 1 is less than the required 2
[ERROR CRI]: container runtime is not running: output: time="2021-08-17T22:43:15+08:00" level=fatal msg="getting status of runtime: rpc error: code = Unimplemented desc = unknown service runtime.v1alpha2.RuntimeService"
solución:
rm /etc/containerd/config.toml
systemctl restart containerd
Después de que falla la instalación de kubeadm init , debe ejecutarse nuevamente. En este caso, el comando kubeadm reset debe ejecutarse primero.
Si ocurren los siguientes problemas
Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")
Solución
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Intentando instalar de nuevo tiene el siguiente problema
The HTTP call equal to ‘curl -sSL http://localhost:10248/healthz’ failed with error: Get “http://localhost:10248/healthz”: dial tcp [::1]:10248: connect: connection refused.
A través de systemctl status kubelet, puede ver que el kubelet está inactivo.
● kubelet.service - kubelet: The Kubernetes Node Agent
Loaded: loaded (/usr/lib/systemd/system/kubelet.service; enabled; vendor preset: disabled)
Drop-In: /usr/lib/systemd/system/kubelet.service.d
└─10-kubeadm.conf
Active: activating (auto-restart) (Result: exit-code) since 四 2022-06-09 15:36:26 CST; 146ms ago
Docs: https://kubernetes.io/docs/
Process: 12064 ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS (code=exited, status=1/FAILURE)
Main PID: 12064 (code=exited, status=1/FAILURE)
Hay muchos tipos de problemas de Baidu en Internet
El primer tipo de controladores docker y kubelet son inconsistentes
Ver controlador de ventana acoplable
docker info|grep Driver
Controlador Cgroup: cgroupfs
Ver controlador de kubelet
systemctl show *--property=Environment kubelet |cat*
Modifique el controlador de la ventana acoplable, verifique el archivo /etc/docker/daemon.json, si no, créelo manualmente y agregue el siguiente contenido
{
"registry-mirrors": ["https://ogeydad1.mirror.aliyuncs.com"], "exec-opts": ["native.cgroupdriver=systemd"]
}
reiniciar ventana acoplable
systemctl daemon-reload
systemctl restart docker
reiniciar kubelet
systemctl daemon-reload
systemctl restart kubelet
La segunda partición de intercambio no está cerrada.
Cierra todas las particiones con swapoff -a
el comando
También es posible que el cortafuegos no esté desactivado.
systemctl stop firewalld
systemctl disable firewalld
Luego intente inicializar, ocurre el siguiente error
[kubelet-check] Initial timeout of 40s passed.
Unfortunately, an error has occurred:
timed out waiting for the condition
This error is likely caused by:
- The kubelet is not running
- The kubelet is unhealthy due to a misconfiguration of the node in some way (required cgroups disabled)
If you are on a systemd-powered system, you can try to troubleshoot the error with the following commands:
- 'systemctl status kubelet'
- 'journalctl -xeu kubelet'
Additionally, a control plane component may have crashed or exited when started by the container runtime.
To troubleshoot, list all containers using your preferred container runtimes CLI.
Here is one example how you may list all running Kubernetes containers by using crictl:
- 'crictl --runtime-endpoint unix:///var/run/containerd/containerd.sock ps -a | grep kube | grep -v pause'
Once you have found the failing container, you can inspect its logs with:
- 'crictl --runtime-endpoint unix:///var/run/containerd/containerd.sock logs CONTAINERID'
error execution phase wait-control-plane: couldn't initialize a Kubernetes cluster
To see the stack trace of this error execute with --v=5 or higher
Luego mire el registro y descubra que kubelet informa un error
master kubelet[15135]: E0521 21:07:57.697075 15135 kubelet.go:2419] "Error getting node" err="node
Revisé el blog y descubrí que la versión debería ser demasiado alta. v1.24 ha abandonado dockershim y lo reemplazó con v1.23.0. Pruebe https://blog.csdn.net/weixin_66536807/article/details/124903478
# 删除kubeadm、kubelet、kubectl
yum remove kubeadm、kubelet、kubectl
# 安装1.23.0 版本
yum install -y kubeadm-1.23.0-0 kubelet-1.23.0-0 kubectl-1.23.0-0 --disableexcludes=kubernetes
kubeadm init --apiserver-advertise-address 192.168.10.3 --apiserver-bind-port=6443 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --kubernetes-version=1.23.0 --image-repository registry.aliyuncs.com/google_containers
¡éxito! ! !
# 根据提示创建文件夹,执行命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Instalación y configuración de nodos de nodos
-
La máquina donde se encuentra el nodo del nodo también debe seguir los pasos del entorno previo (creé una instantánea antes y copié un nodo directamente de acuerdo con la instantánea)
-
Instale la fuente yum de agregar kubernetes como maestro
Instalar kubelet y kubeadm
yum install -y kubeadm-1.23.0-0 kubelet-1.23.0-0 --disableexcludes=kubernetes
Ejecute el siguiente comando y configúrelo para que se inicie en el arranque:
systemctl enable docker && systemctl start docker
systemctl enable kubelet && systemctl start kubelet
Ejecute el comando de unión:
# 该命令来自master安装成功后的最后两行信息
kubeadm join 192.168.10.3:6443 --token 7adbpw.vph00nljcfvjf3t0 \
--discovery-token-ca-cert-hash sha256:d28a79426cf1f5e92edcb8f48a9bd70d4a9ff9f1e231519f28600cfeaa91452a
hay un error
kubetcl *join* node nodo que se une al clúster *atascado*, no responde
Agregar un parámetro al final de kubectl join xxxx--v=2
# 该命令来自master安装成功后的最后两行信息
kubeadm join 192.168.10.3:6443 --token 7adbpw.vph00nljcfvjf3t0 \
--discovery-token-ca-cert-hash sha256:d28a79426cf1f5e92edcb8f48a9bd70d4a9ff9f1e231519f28600cfeaa91452a -- v=2
El token predeterminado es válido durante 24 horas y, cuando caduca, el token ya no está disponible. En este momento, se debe volver a crear el token, que se puede generar directamente con el comando:
kubeadm token create --print-join-command
hay otro error
k8s.io/dns/pkg/dns/dns.go:150: Failed to list *v1.Service: Get https://10.96.0.1:443/api/v1/services?resourceVersion=0: dial tcp 10.96.0.1:443: getsockopt: no route to host
Busqué durante mucho tiempo para encontrar una solución.
# 回到kubernees-maser 依次输入列命令
systemctl stop kubelet
systemctl stop docker
iptables --flush
iptables -tnat --flush
systemctl start kubelet
systemctl start docker
hay otro error
The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error: Get "http://localhost:10248/healthz": dial tcp [::1]:10248: connect: connection refused.
Este es un error anterior, olvidé configurar la inconsistencia del controlador entre docker y Kubernetes
Todavía no funcionó, pero sentí que el intercambio no estaba desactivado. Intenté swapoff -a y finalmente tuve éxito.
En este punto, ejecute kubectl get nodes en el nodo maestro, y podrá ver que el nodo del nodo es exitoso y el estado aún NO es Ready .
Instalar el complemento de red
# 安装Calico CNI插件
kubectl apply -f "https://docs.projectcalico.org/manifests/calico.yaml"
# 安装weave插件
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
Verifique el estado nuevamente y descubra que todavía hay dos en el estado containerCreating
Use el comando para ver información detallada kubectl describe pod coredns-6d8c4cb4d-qmp6g --namespace=kube-system
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 20m default-scheduler Successfully assigned kube-system/coredns-6d8c4cb4d-qmp6g to master
Warning FailedCreatePodSandBox 20m kubelet Failed to create pod sandbox: rpc error: code = Unknown desc = [failed to set up sandbox container "bf1732938b8edbad4c1e768934e616f50e1496e933efd0880b80226645d3e627" network for pod "coredns-6d8c4cb4d-qmp6g": networkPlugin cni failed to set up pod "coredns-6d8c4cb4d-qmp6g_kube-system" network: error getting ClusterInformation: Get "https://[10.96.0.1]:443/apis/crd.projectcalico.org/v1/clusterinformations/default": x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes"), failed to clean up sandbox container "bf1732938b8edbad4c1e768934e616f50e1496e933efd0880b80226645d3e627" network for pod "coredns-6d8c4cb4d-qmp6g": networkPlugin cni failed to teardown pod "coredns-6d8c4cb4d-qmp6g_kube-system" network: error getting ClusterInformation: Get "https://[10.96.0.1]:443/apis/crd.projectcalico.org/v1/clusterinformations/default": x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")]
Normal SandboxChanged 4m55s (x71 over 20m) kubelet Pod sandbox changed, it will be killed and re-created
Hay un problema
Al buscar en el blog, se encontró el resultado del comando de restablecimiento de kubeadm después de la ejecución:
The reset process does not clean CNI configuration. To do so, you must remove /etc/cni/net.d
The reset process does not reset or clean up iptables rules or IPVS tables.
If you wish to reset iptables, you must do so manually by using the "iptables" command.
If your cluster was setup to utilize IPVS, run ipvsadm --clear (or similar)
to reset your system's IPVS tables.
The reset process does not clean your kubeconfig files and you must remove them manually.
Please, check the contents of the $HOME/.kube/config file.
Luego, elimine el directorio /etc/cni/net.d de acuerdo con el mensaje anterior y luego ejecute el comando kubeadm init nuevamente.
Verifique que el clúster k8s esté instalado
- Ejecute == kubectl get pods --all-namespaces == para ver si el estado del pod es correcto
- Si encuentra un pod en un estado de error, puede ejecutar == kubectl --namespace=kube-system describe pod <pod_name> == para ver la causa del error.
Adjunto:
Eliminar nodos trabajadores:kubectl delete nodes k8s-node1
Modificar nombre de host:hostnamectl set-hostname newname
Verifique el registro de kubelet: journalctl -xefu kubelet## Instalación e implementación de K8s
Prepare cuatro máquinas virtuales y use el sistema operativo centos7 para construir un sistema de clúster.
Configure primero el entorno de una máquina virtual y clone otras máquinas.
Inicie la máquina virtual
Parámetros de la máquina virtual:
- La red usa el modo NAT
- Memoria 2g o más
- 2cpu (de lo contrario, se informará de un error más adelante)
- El disco duro que tengo es de 30g
Si la conexión de red no tiene éxito, puede configurar y probar este blog https://blog.csdn.net/duyuanjun123/article/details/119833105
La primera vez no pude conectarme a la red porque no encendí la conexión de red al inicializar el sistema, atención al inicializar el sistema operativo.
Use el comando ip addr en la máquina virtual para ver la ip de la máquina virtual
Debido a que la operación de la máquina virtual es algo inconveniente, use xshell o fianlshell para conectarse
Configurar fuente yum
La conexión es exitosa y configura la fuente yum
-
descargar el comando wget
yum install wget -y
-
copia de seguridad de las fuentes antiguas del repositorio de yum
cd /etc/yum.repos.d mkdir repobak # 创建文件夹,保存备份文件 mv *.repo repobak #备份repo文件到文件
-
limpiar paquetes viejos
~yum clean all
-
Descargue el nuevo almacén de fuente yum de Ali, el espejo de código abierto de Ali: https://developer.aliyun.com/mirror/
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
-
Continuar para descargar el segundo almacén epel warehouse
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
-
Genere la memoria caché de la fuente yum y actualice la fuente yum
yum makecache yum update
descargar ventana acoplable
# 1、卸载旧的版本
yum remove docker \
docker-client \
docker-client-lastest \
docker-common \
docker-latest \
docker-latest-logrotate \
docekr-engine
# 2、需要的安装包
yum install -y yum-utils
# 3、设置镜像仓库 (阿里云镜像)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 更新yum软件包索引
yum makecache fast
# 4、安装docker相关的内容 docker-ce 社区办 ee企业版
yum install docker-ce docker-ce-cli containerd.io
# 5、启动docker
systemctl start docker
# 6、测试docker是否启动成功
docker -version
Instalar Kubernetes
Configurar la dirección de origen de la instalación
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
Se produce un error de la siguiente manera
[Errno -1] repomd.xml signature could not be verified for kubernetes
Es causado por la falla de la verificación gpg del repositorio, que se puede modificar para repo_gpgcheck=0
omitir la verificación.
Finalmente, instale los componentes clave de Kubernetes.
setenforce o
yum install -y kubelet kubeadm kubectl
# 启动kubelet、kubeadm、kubectl服务 kubeadm将使用kubelet服务以容器的方式部署和启动Kubernetes的主要服务,所以需要先启动kubelet服务。
systemctl enable kubelet && systemctl start kubelet
clonar maquina virtual
Clonar el nodo node1
Instalación y configuración maestra
Todos los nodos cierran Selinux, iptables, partición de intercambio
systemctl stop firewalld
systemctl disable firewalld
iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat
iptables -P FORWARD ACCEPT
swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
Extraiga la configuración predeterminada de Kubernetes
kubeadm config print init-defaults > init-config.yaml
Abra el archivo para ver y encuentre que el almacén espejo configurado es el siguiente:
imageRepository: k8s.gcr.io
Si el repositorio espejo no se puede conectar, puede usar un espejo doméstico en su lugar: imageRepository: registration.aliyuncs.com/google_containers
Abra init-config.yaml y luego realice las modificaciones correspondientes, puede especificar la versión de kubernetesVersion, el acceso a la selección del sitio del módulo, etc.
extracción de imágenes de kubernetes
kubeadm config images pull --config=init-config.yaml
Con la solución de duplicación doméstica, debido al problema de la etiqueta de coredns, la extracción de coredns:v1.8.4 fallará. En este momento, podemos extraerla manualmente y etiquetarla nosotros mismos. La información de la falla es la siguiente:
**Solución: **Extraiga manualmente la imagen
Tire manualmente de la imagen desde el concentrador acoplable:
docker pull registry.aliyuncs.com/google_containers/coredns:1.8.4
Modificar etiquetas:
# 重命名
docker tag registry.aliyuncs.com/google_containers/coredns:1.8.4 registry.aliyuncs.com/google_containers/coredns:v1.8.4
# 删除原有镜像
docker rmi registry.aliyuncs.com/google_containers/coredns:1.8.4
La siguiente es la etiqueta predeterminada del espejo: v1.8.4, y la etiqueta en el espejo es 1.8.4, por lo que la extracción fallará.
Ejecute kubeadm init para instalar el nodo maestro
kubeadm init --apiserver-advertise-address 192.168.10.3 --apiserver-bind-port=6443 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --kubernetes-version=1.24.1 --image-repository registry.aliyuncs.com/google_containers
La siguiente solución de error
- La cantidad de CPU se puede establecer en 2 para la cantidad de CPU en la máquina virtual
the number of available CPUs 1 is less than the required 2
[ERROR CRI]: container runtime is not running: output: time="2021-08-17T22:43:15+08:00" level=fatal msg="getting status of runtime: rpc error: code = Unimplemented desc = unknown service runtime.v1alpha2.RuntimeService"
solución:
rm /etc/containerd/config.toml
systemctl restart containerd
Después de que falla la instalación de kubeadm init , debe ejecutarse nuevamente. En este caso, el comando kubeadm reset debe ejecutarse primero.
Si ocurren los siguientes problemas
Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")
Solución
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Intentando instalar de nuevo tiene el siguiente problema
The HTTP call equal to ‘curl -sSL http://localhost:10248/healthz’ failed with error: Get “http://localhost:10248/healthz”: dial tcp [::1]:10248: connect: connection refused.
A través de systemctl status kubelet, puede ver que el kubelet está inactivo.
● kubelet.service - kubelet: The Kubernetes Node Agent
Loaded: loaded (/usr/lib/systemd/system/kubelet.service; enabled; vendor preset: disabled)
Drop-In: /usr/lib/systemd/system/kubelet.service.d
└─10-kubeadm.conf
Active: activating (auto-restart) (Result: exit-code) since 四 2022-06-09 15:36:26 CST; 146ms ago
Docs: https://kubernetes.io/docs/
Process: 12064 ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS (code=exited, status=1/FAILURE)
Main PID: 12064 (code=exited, status=1/FAILURE)
Hay muchos tipos de problemas de Baidu en Internet
El primer tipo de controladores docker y kubelet son inconsistentes
Ver controlador de ventana acoplable
docker info|grep Driver
Controlador Cgroup: cgroupfs
Ver controlador de kubelet
systemctl show *--property=Environment kubelet |cat*
Modifique el controlador de la ventana acoplable, verifique el archivo /etc/docker/daemon.json, si no, créelo manualmente y agregue el siguiente contenido
{
"registry-mirrors": ["https://ogeydad1.mirror.aliyuncs.com"], "exec-opts": ["native.cgroupdriver=systemd"]
}
reiniciar ventana acoplable
systemctl daemon-reload
systemctl restart docker
reiniciar kubelet
systemctl daemon-reload
systemctl restart kubelet
La segunda partición de intercambio no está cerrada.
Cierra todas las particiones con swapoff -a
el comando
También es posible que el cortafuegos no esté desactivado.
systemctl stop firewalld
systemctl disable firewalld
Luego intente inicializar, ocurre el siguiente error
[kubelet-check] Initial timeout of 40s passed.
Unfortunately, an error has occurred:
timed out waiting for the condition
This error is likely caused by:
- The kubelet is not running
- The kubelet is unhealthy due to a misconfiguration of the node in some way (required cgroups disabled)
If you are on a systemd-powered system, you can try to troubleshoot the error with the following commands:
- 'systemctl status kubelet'
- 'journalctl -xeu kubelet'
Additionally, a control plane component may have crashed or exited when started by the container runtime.
To troubleshoot, list all containers using your preferred container runtimes CLI.
Here is one example how you may list all running Kubernetes containers by using crictl:
- 'crictl --runtime-endpoint unix:///var/run/containerd/containerd.sock ps -a | grep kube | grep -v pause'
Once you have found the failing container, you can inspect its logs with:
- 'crictl --runtime-endpoint unix:///var/run/containerd/containerd.sock logs CONTAINERID'
error execution phase wait-control-plane: couldn't initialize a Kubernetes cluster
To see the stack trace of this error execute with --v=5 or higher
Luego mire el registro y descubra que kubelet informa un error
master kubelet[15135]: E0521 21:07:57.697075 15135 kubelet.go:2419] "Error getting node" err="node
Revisé el blog y descubrí que la versión debería ser demasiado alta. v1.24 ha abandonado dockershim y lo reemplazó con v1.23.0. Pruebe https://blog.csdn.net/weixin_66536807/article/details/124903478
# 删除kubeadm、kubelet、kubectl
yum remove kubeadm、kubelet、kubectl
# 安装1.23.0 版本
yum install -y kubeadm-1.23.0-0 kubelet-1.23.0-0 kubectl-1.23.0-0 --disableexcludes=kubernetes
kubeadm init --apiserver-advertise-address 192.168.10.3 --apiserver-bind-port=6443 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --kubernetes-version=1.23.0 --image-repository registry.aliyuncs.com/google_containers
¡éxito! ! !
# 根据提示创建文件夹,执行命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Instalación y configuración de nodos de nodos
-
La máquina donde se encuentra el nodo del nodo también debe seguir los pasos del entorno previo (creé una instantánea antes y copié un nodo directamente de acuerdo con la instantánea)
-
Instale la fuente yum de agregar kubernetes como maestro
Instalar kubelet y kubeadm
yum install -y kubeadm-1.23.0-0 kubelet-1.23.0-0 --disableexcludes=kubernetes
Ejecute el siguiente comando y configúrelo para que se inicie en el arranque:
systemctl enable docker && systemctl start docker
systemctl enable kubelet && systemctl start kubelet
Ejecute el comando de unión:
# 该命令来自master安装成功后的最后两行信息
kubeadm join 192.168.10.3:6443 --token 7adbpw.vph00nljcfvjf3t0 \
--discovery-token-ca-cert-hash sha256:d28a79426cf1f5e92edcb8f48a9bd70d4a9ff9f1e231519f28600cfeaa91452a
hay un error
kubetcl *join* node nodo que se une al clúster *atascado*, no responde
Agregar un parámetro al final de kubectl join xxxx--v=2
# 该命令来自master安装成功后的最后两行信息
kubeadm join 192.168.10.3:6443 --token 7adbpw.vph00nljcfvjf3t0 \
--discovery-token-ca-cert-hash sha256:d28a79426cf1f5e92edcb8f48a9bd70d4a9ff9f1e231519f28600cfeaa91452a -- v=2
El token predeterminado es válido durante 24 horas y, cuando caduca, el token ya no está disponible. En este momento, se debe volver a crear el token, que se puede generar directamente con el comando:
kubeadm token create --print-join-command
hay otro error
k8s.io/dns/pkg/dns/dns.go:150: Failed to list *v1.Service: Get https://10.96.0.1:443/api/v1/services?resourceVersion=0: dial tcp 10.96.0.1:443: getsockopt: no route to host
Busqué durante mucho tiempo para encontrar una solución.
# 回到kubernees-maser 依次输入列命令
systemctl stop kubelet
systemctl stop docker
iptables --flush
iptables -tnat --flush
systemctl start kubelet
systemctl start docker
hay otro error
The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error: Get "http://localhost:10248/healthz": dial tcp [::1]:10248: connect: connection refused.
Este es un error anterior, olvidé configurar la inconsistencia del controlador entre docker y Kubernetes
Todavía no funcionó, pero sentí que el intercambio no estaba desactivado. Intenté swapoff -a y finalmente tuve éxito.
En este punto, ejecute kubectl get nodes en el nodo maestro, y podrá ver que el nodo del nodo es exitoso y el estado aún NO es Ready .
Instalar el complemento de red
# 安装Calico CNI插件
kubectl apply -f "https://docs.projectcalico.org/manifests/calico.yaml"
# 安装weave插件
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
Verifique el estado nuevamente y descubra que todavía hay dos en el estado containerCreating
Use el comando para ver información detallada kubectl describe pod coredns-6d8c4cb4d-qmp6g --namespace=kube-system
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 20m default-scheduler Successfully assigned kube-system/coredns-6d8c4cb4d-qmp6g to master
Warning FailedCreatePodSandBox 20m kubelet Failed to create pod sandbox: rpc error: code = Unknown desc = [failed to set up sandbox container "bf1732938b8edbad4c1e768934e616f50e1496e933efd0880b80226645d3e627" network for pod "coredns-6d8c4cb4d-qmp6g": networkPlugin cni failed to set up pod "coredns-6d8c4cb4d-qmp6g_kube-system" network: error getting ClusterInformation: Get "https://[10.96.0.1]:443/apis/crd.projectcalico.org/v1/clusterinformations/default": x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes"), failed to clean up sandbox container "bf1732938b8edbad4c1e768934e616f50e1496e933efd0880b80226645d3e627" network for pod "coredns-6d8c4cb4d-qmp6g": networkPlugin cni failed to teardown pod "coredns-6d8c4cb4d-qmp6g_kube-system" network: error getting ClusterInformation: Get "https://[10.96.0.1]:443/apis/crd.projectcalico.org/v1/clusterinformations/default": x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")]
Normal SandboxChanged 4m55s (x71 over 20m) kubelet Pod sandbox changed, it will be killed and re-created
Hay un problema
Al buscar en el blog, se encontró el resultado del comando de restablecimiento de kubeadm después de la ejecución:
The reset process does not clean CNI configuration. To do so, you must remove /etc/cni/net.d
The reset process does not reset or clean up iptables rules or IPVS tables.
If you wish to reset iptables, you must do so manually by using the "iptables" command.
If your cluster was setup to utilize IPVS, run ipvsadm --clear (or similar)
to reset your system's IPVS tables.
The reset process does not clean your kubeconfig files and you must remove them manually.
Please, check the contents of the $HOME/.kube/config file.
Luego, elimine el directorio /etc/cni/net.d de acuerdo con el mensaje anterior y luego ejecute el comando kubeadm init nuevamente.
Verifique que el clúster k8s esté instalado
- Ejecute == kubectl get pods --all-namespaces == para ver si el estado del pod es correcto
- Si encuentra un pod en un estado de error, puede ejecutar == kubectl --namespace=kube-system describe pod <pod_name> == para ver la causa del error.
Adjunto:
Eliminar nodos trabajadores:kubectl delete nodes k8s-node1
Modificar nombre de host:hostnamectl set-hostname newname
Compruebe el registro de kubelet: journalctl -xefu kubelet