Instalación y despliegue de centos K8s, construcción de clústeres

Instalación y despliegue de K8

Prepare cuatro máquinas virtuales y use el sistema operativo centos7 para construir un sistema de clúster.

imagen-20220609104049893

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

imagen-20220609104311773

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

imagen-20220609104906146

Debido a que la operación de la máquina virtual es algo inconveniente, use xshell o fianlshell para conectarse

imagen-20220609105008915 imagen-20220609105026097

Configurar fuente yum

La conexión es exitosa y configura la fuente yum

  1. descargar el comando wget

    yum install wget -y  
    
  2. copia de seguridad de las fuentes antiguas del repositorio de yum

    cd  /etc/yum.repos.d
    mkdir  repobak  # 创建文件夹,保存备份文件
    mv *.repo   repobak  #备份repo文件到文件
    
  3. limpiar paquetes viejos

    ~yum clean all
    
  4. 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
    
  5. 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
    
  6. 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=0omitir 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

imagen-20220609110301026

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:

inserte la descripción de la imagen aquí

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

inserte la descripción de la imagen aquí

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

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

imagen-20220609151052051

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*

imagen

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

imagen-20220609173745304

¡é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

imagen-20220610092946989

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.

imagen-20220609104049893

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

imagen-20220609104311773

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

imagen-20220609104906146

Debido a que la operación de la máquina virtual es algo inconveniente, use xshell o fianlshell para conectarse

imagen-20220609105008915 imagen-20220609105026097

Configurar fuente yum

La conexión es exitosa y configura la fuente yum

  1. descargar el comando wget

    yum install wget -y  
    
  2. copia de seguridad de las fuentes antiguas del repositorio de yum

    cd  /etc/yum.repos.d
    mkdir  repobak  # 创建文件夹,保存备份文件
    mv *.repo   repobak  #备份repo文件到文件
    
  3. limpiar paquetes viejos

    ~yum clean all
    
  4. 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
    
  5. 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
    
  6. 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=0omitir 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

imagen-20220609110301026

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:

inserte la descripción de la imagen aquí

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

inserte la descripción de la imagen aquí

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

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

imagen-20220609151052051

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*

imagen

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

imagen-20220609173745304

¡é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

imagen-20220610092946989

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

Supongo que te gusta

Origin blog.csdn.net/qq_45473439/article/details/125355293
Recomendado
Clasificación