Installation et déploiement de K8s centos, construction de cluster

Installation et déploiement de K8

Préparez quatre machines virtuelles et utilisez le système d'exploitation centos7 pour créer un système de cluster.

image-20220609104049893

Configurez d'abord l'environnement d'une machine virtuelle, puis clonez les autres machines.

Démarrer la machine virtuelle

Paramètres de la machine virtuelle :

  • Le réseau utilise le mode NAT
  • Mémoire 2g ou plus
  • 2cpu (sinon une erreur sera signalée plus tard)
  • Le disque dur que j'ai fait 30g

image-20220609104311773

Si la connexion réseau échoue, vous pouvez configurer et essayer ce blog https://blog.csdn.net/duyuanjun123/article/details/119833105

La première fois, je n'ai pas pu me connecter au réseau car je n'ai pas activé la connexion réseau lors de l'initialisation du système. Faites attention lors de l'initialisation du système d'exploitation.

Utilisez la commande ip addr dans la machine virtuelle pour afficher l'adresse IP de la machine virtuelle

image-20220609104906146

Étant donné que le fonctionnement de la machine virtuelle est quelque peu gênant, utilisez xshell ou fianlshell pour vous connecter

image-20220609105008915 image-20220609105026097

Configurer la source yum

La connexion est réussie et configurez la source yum

  1. télécharger la commande wget

    yum install wget -y  
    
  2. sauvegarder les anciennes sources du référentiel yum

    cd  /etc/yum.repos.d
    mkdir  repobak  # 创建文件夹,保存备份文件
    mv *.repo   repobak  #备份repo文件到文件
    
  3. nettoyer les anciens paquets

    ~yum clean all
    
  4. Téléchargez le nouvel entrepôt source d'Ali's yum, le miroir open source d'Ali : https://developer.aliyun.com/mirror/

    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    
  5. Continuer à télécharger le deuxième entrepôt epel entrepôt

    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    
  6. Générer le cache source yum et mettre à jour la source yum

    yum makecache
    yum update
    

télécharger docker

# 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

Installer Kubernetes

Configurer l'adresse de la source d'installation

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

Une erreur se produit comme suit

[Errno -1] repomd.xml signature could not be verified for kubernetes

Cela est dû à l'échec de la vérification gpg du dépôt, qui peut être modifiée pour repo_gpgcheck=0ignorer la vérification.

Enfin, installez les composants clés de Kubernetes.

setenforce o

yum install -y kubelet kubeadm kubectl
# 启动kubelet、kubeadm、kubectl服务 kubeadm将使用kubelet服务以容器的方式部署和启动Kubernetes的主要服务,所以需要先启动kubelet服务。
systemctl enable kubelet && systemctl start kubelet

cloner une machine virtuelle

image-20220609110301026

Cloner le nœud node1

Installation et configuration du maître

Tous les nœuds ferment Selinux, iptables, swap partition

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

Extraire la configuration par défaut de Kubernetes

kubeadm config print init-defaults > init-config.yaml

Ouvrez le fichier pour afficher et constater que l'entrepôt miroir configuré est le suivant :

imageRepository: k8s.gcr.io

Si le référentiel miroir ne peut pas être connecté, vous pouvez utiliser un miroir domestique à la place : imageRepository : register.aliyuncs.com/google_containers

Ouvrez init-config.yaml , puis apportez les modifications correspondantes, vous pouvez spécifier la version de kubernetesVersion, l'accès à la sélection du site de pod, etc.

extraction d'image kubernetes

kubeadm config images pull --config=init-config.yaml

En utilisant la solution de mise en miroir domestique, en raison du problème d'étiquette de coredns, l'extraction de coredns:v1.8.4 échouera. À ce stade, nous pouvons l'extraire manuellement et l'étiqueter nous-mêmes. Les informations de panne sont les suivantes :

insérez la description de l'image ici

**Solution : **Retirez manuellement l'image

Extrayez manuellement l'image du docker hub :

docker pull registry.aliyuncs.com/google_containers/coredns:1.8.4

Modifier les balises :

# 重命名
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

Voici l'étiquette par défaut du miroir : v1.8.4, et l'étiquette dans le miroir est 1.8.4, donc l'extraction échouera.

insérez la description de l'image ici

Exécutez kubeadm init pour installer le nœud maître

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 solution d'erreur suivante

  1. Le nombre de CPU peut être défini sur 2 pour le nombre de CPU dans la machine virtuelle
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"

solution:

rm /etc/containerd/config.toml
systemctl restart containerd

Après l'échec de l'installation de kubeadm init , il faut l'exécuter à nouveau. Dans ce cas, la commande kubeadm reset doit être exécutée en premier.

Si les problèmes suivants surviennent

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")

Solution

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

Essayer d'installer à nouveau a le problème suivant

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.

image-20220609151052051

Grâce à systemctl status kubelet, vous pouvez voir que le kubelet est en panne.

● 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)

Il existe de nombreux types de problèmes Baidu sur Internet

Le premier type de pilotes docker et kubelet est incohérent

Afficher le pilote docker

docker info|grep Driver

​ Pilote Cgroup : cgroupfs

Afficher le pilote kubelet

systemctl show *--property=Environment kubelet |cat*

image

Modifiez le pilote docker, vérifiez le fichier /etc/docker/daemon.json, sinon, créez-le manuellement et ajoutez le contenu suivant

{
    
    
  "registry-mirrors": ["https://ogeydad1.mirror.aliyuncs.com"], "exec-opts": ["native.cgroupdriver=systemd"]
}

redémarrer le menu fixe

systemctl daemon-reload
 
systemctl restart docker

redémarrer kubelet

systemctl daemon-reload
 
systemctl restart kubelet

La deuxième partition de swap n'est pas fermée

Arrêtez toutes les partitions avec swapoff -a la commande

Il est également possible que le pare-feu ne soit pas désactivé.

systemctl stop firewalld
systemctl disable firewalld

Essayez ensuite d'initialiser, l'erreur suivante se produit

[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

Ensuite, regardez le journal et constatez que kubelet signale une erreur

master kubelet[15135]: E0521 21:07:57.697075   15135 kubelet.go:2419] "Error getting node" err="node

J'ai vérifié le blog et j'ai appris que la version devait être trop élevée. La v1.24 a abandonné dockershim et l'a remplacée par la v1.23.0. Essayez 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

image-20220609173745304

succès! ! !

# 根据提示创建文件夹,执行命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Installation et configuration de nœud de nœud

  • La machine où se trouve le node node doit également suivre les étapes du pré-environnement (j'ai créé un snapshot avant, et copié un node directement en fonction du snapshot)

  • Installez la source yum d'ajout de kubernetes comme maître

Installer kubelet et kubeadm

yum install -y kubeadm-1.23.0-0  kubelet-1.23.0-0 --disableexcludes=kubernetes

Exécutez la commande suivante et configurez-la pour qu'elle démarre au démarrage :

systemctl enable docker && systemctl start docker
systemctl enable kubelet && systemctl start kubelet

Exécutez la commande de jointure :

# 该命令来自master安装成功后的最后两行信息
kubeadm join 192.168.10.3:6443 --token 7adbpw.vph00nljcfvjf3t0 \
	--discovery-token-ca-cert-hash sha256:d28a79426cf1f5e92edcb8f48a9bd70d4a9ff9f1e231519f28600cfeaa91452a

il y a un bogue

kubetcl *join* nœud nœud rejoignant le cluster *bloqué*, ne répond pas

Ajouter un paramètre à la fin 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

Le jeton par défaut est valide pendant 24 heures et lorsqu'il expire, le jeton n'est plus disponible. À ce stade, le jeton doit être recréé, ce qui peut être généré directement à l'aide de la commande :

kubeadm token create --print-join-command

il y a un autre bug

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

J'ai cherché longtemps pour trouver une solution

# 回到kubernees-maser  依次输入列命令
systemctl stop kubelet
systemctl stop docker
iptables --flush
iptables -tnat --flush
systemctl start kubelet
systemctl start docker

il y a un autre bug

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.

Il s'agit d'un bug précédent, j'ai oublié de configurer l'incohérence du pilote entre docker et Kubernetes

Cela ne fonctionnait toujours pas, mais j'avais l'impression que l'échange n'était pas désactivé. J'ai essayé swapoff -a et j'ai finalement réussi.

À ce stade, exécutez kubectl get nodes sur le nœud maître et vous pouvez voir que le nœud de nœud a réussi et que le statut est toujours NOT Ready .

Installer le plug-in réseau

  # 安装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')"

Vérifiez à nouveau l'état et constatez qu'il y en a encore deux dans l'état containerCreating

image-20220610092946989

Utilisez la commande pour afficher des informations détaillées 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

il ya un problème

Une recherche sur le blog a trouvé la sortie de la commande kubeadm reset après exécution :

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.

Supprimez ensuite le répertoire /etc/cni/net.d conformément à l'invite ci-dessus, puis exécutez à nouveau la commande kubeadm init.

Vérifiez que le cluster k8s est installé

  • Exécutez == kubectl get pods --all-namespaces == pour voir si le statut du pod est correct
  • Si vous trouvez un pod dans un état d'erreur, vous pouvez exécuter == kubectl --namespace=kube-system describe pod <pod_name> == pour afficher la cause de l'erreur.

Ci-joint:

Supprimez les noeuds worker :kubectl delete nodes k8s-node1

Modifier le nom d'hôte :hostnamectl set-hostname newname

Vérifiez le journal kubelet : journalctl -xefu kubelet## Installation et déploiement de K8

Préparez quatre machines virtuelles et utilisez le système d'exploitation centos7 pour créer un système de cluster.

image-20220609104049893

Configurez d'abord l'environnement d'une machine virtuelle, puis clonez les autres machines.

Démarrer la machine virtuelle

Paramètres de la machine virtuelle :

  • Le réseau utilise le mode NAT
  • Mémoire 2g ou plus
  • 2cpu (sinon une erreur sera signalée plus tard)
  • Le disque dur que j'ai fait 30g

image-20220609104311773

Si la connexion réseau échoue, vous pouvez configurer et essayer ce blog https://blog.csdn.net/duyuanjun123/article/details/119833105

La première fois, je n'ai pas pu me connecter au réseau car je n'ai pas activé la connexion réseau lors de l'initialisation du système. Faites attention lors de l'initialisation du système d'exploitation.

Utilisez la commande ip addr dans la machine virtuelle pour afficher l'adresse IP de la machine virtuelle

image-20220609104906146

Étant donné que le fonctionnement de la machine virtuelle est quelque peu gênant, utilisez xshell ou fianlshell pour vous connecter

image-20220609105008915 image-20220609105026097

Configurer la source yum

La connexion est réussie et configurez la source yum

  1. télécharger la commande wget

    yum install wget -y  
    
  2. sauvegarder les anciennes sources du référentiel yum

    cd  /etc/yum.repos.d
    mkdir  repobak  # 创建文件夹,保存备份文件
    mv *.repo   repobak  #备份repo文件到文件
    
  3. nettoyer les anciens paquets

    ~yum clean all
    
  4. Téléchargez le nouvel entrepôt source d'Ali's yum, le miroir open source d'Ali : https://developer.aliyun.com/mirror/

    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    
  5. Continuer à télécharger le deuxième entrepôt epel entrepôt

    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    
  6. Générer le cache source yum et mettre à jour la source yum

    yum makecache
    yum update
    

télécharger docker

# 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

Installer Kubernetes

Configurer l'adresse de la source d'installation

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

Une erreur se produit comme suit

[Errno -1] repomd.xml signature could not be verified for kubernetes

Cela est dû à l'échec de la vérification gpg du dépôt, qui peut être modifiée pour repo_gpgcheck=0ignorer la vérification.

Enfin, installez les composants clés de Kubernetes.

setenforce o

yum install -y kubelet kubeadm kubectl
# 启动kubelet、kubeadm、kubectl服务 kubeadm将使用kubelet服务以容器的方式部署和启动Kubernetes的主要服务,所以需要先启动kubelet服务。
systemctl enable kubelet && systemctl start kubelet

cloner une machine virtuelle

image-20220609110301026

Cloner le nœud node1

Installation et configuration du maître

Tous les nœuds ferment Selinux, iptables, swap partition

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

Extraire la configuration par défaut de Kubernetes

kubeadm config print init-defaults > init-config.yaml

Ouvrez le fichier pour afficher et constater que l'entrepôt miroir configuré est le suivant :

imageRepository: k8s.gcr.io

Si le référentiel miroir ne peut pas être connecté, vous pouvez utiliser un miroir domestique à la place : imageRepository : register.aliyuncs.com/google_containers

Ouvrez init-config.yaml , puis apportez les modifications correspondantes, vous pouvez spécifier la version de kubernetesVersion, l'accès à la sélection du site de pod, etc.

extraction d'image kubernetes

kubeadm config images pull --config=init-config.yaml

En utilisant la solution de mise en miroir domestique, en raison du problème d'étiquette de coredns, l'extraction de coredns:v1.8.4 échouera. À ce stade, nous pouvons l'extraire manuellement et l'étiqueter nous-mêmes. Les informations de panne sont les suivantes :

insérez la description de l'image ici

**Solution : **Retirez manuellement l'image

Extrayez manuellement l'image du docker hub :

docker pull registry.aliyuncs.com/google_containers/coredns:1.8.4

Modifier les balises :

# 重命名
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

Voici l'étiquette par défaut du miroir : v1.8.4, et l'étiquette dans le miroir est 1.8.4, donc l'extraction échouera.

insérez la description de l'image ici

Exécutez kubeadm init pour installer le nœud maître

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 solution d'erreur suivante

  1. Le nombre de CPU peut être défini sur 2 pour le nombre de CPU dans la machine virtuelle
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"

solution:

rm /etc/containerd/config.toml
systemctl restart containerd

Après l'échec de l'installation de kubeadm init , il faut l'exécuter à nouveau. Dans ce cas, la commande kubeadm reset doit être exécutée en premier.

Si les problèmes suivants surviennent

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")

Solution

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

Essayer d'installer à nouveau a le problème suivant

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.

image-20220609151052051

Grâce à systemctl status kubelet, vous pouvez voir que le kubelet est en panne.

● 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)

Il existe de nombreux types de problèmes Baidu sur Internet

Le premier type de pilotes docker et kubelet est incohérent

Afficher le pilote docker

docker info|grep Driver

​ Pilote Cgroup : cgroupfs

Afficher le pilote kubelet

systemctl show *--property=Environment kubelet |cat*

image

Modifiez le pilote docker, vérifiez le fichier /etc/docker/daemon.json, sinon, créez-le manuellement et ajoutez le contenu suivant

{
    
    
  "registry-mirrors": ["https://ogeydad1.mirror.aliyuncs.com"], "exec-opts": ["native.cgroupdriver=systemd"]
}

redémarrer le menu fixe

systemctl daemon-reload
 
systemctl restart docker

redémarrer kubelet

systemctl daemon-reload
 
systemctl restart kubelet

La deuxième partition de swap n'est pas fermée

Arrêtez toutes les partitions avec swapoff -a la commande

Il est également possible que le pare-feu ne soit pas désactivé.

systemctl stop firewalld
systemctl disable firewalld

Essayez ensuite d'initialiser, l'erreur suivante se produit

[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

Ensuite, regardez le journal et constatez que kubelet signale une erreur

master kubelet[15135]: E0521 21:07:57.697075   15135 kubelet.go:2419] "Error getting node" err="node

J'ai vérifié le blog et j'ai appris que la version devait être trop élevée. La v1.24 a abandonné dockershim et l'a remplacée par la v1.23.0. Essayez 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

image-20220609173745304

succès! ! !

# 根据提示创建文件夹,执行命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Installation et configuration de nœud de nœud

  • La machine où se trouve le node node doit également suivre les étapes du pré-environnement (j'ai créé un snapshot avant, et copié un node directement en fonction du snapshot)

  • Installez la source yum d'ajout de kubernetes comme maître

Installer kubelet et kubeadm

yum install -y kubeadm-1.23.0-0  kubelet-1.23.0-0 --disableexcludes=kubernetes

Exécutez la commande suivante et configurez-la pour qu'elle démarre au démarrage :

systemctl enable docker && systemctl start docker
systemctl enable kubelet && systemctl start kubelet

Exécutez la commande de jointure :

# 该命令来自master安装成功后的最后两行信息
kubeadm join 192.168.10.3:6443 --token 7adbpw.vph00nljcfvjf3t0 \
	--discovery-token-ca-cert-hash sha256:d28a79426cf1f5e92edcb8f48a9bd70d4a9ff9f1e231519f28600cfeaa91452a

il y a un bogue

kubetcl *join* nœud nœud rejoignant le cluster *bloqué*, ne répond pas

Ajouter un paramètre à la fin 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

Le jeton par défaut est valide pendant 24 heures et lorsqu'il expire, le jeton n'est plus disponible. À ce stade, le jeton doit être recréé, ce qui peut être généré directement à l'aide de la commande :

kubeadm token create --print-join-command

il y a un autre bug

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

J'ai cherché longtemps pour trouver une solution

# 回到kubernees-maser  依次输入列命令
systemctl stop kubelet
systemctl stop docker
iptables --flush
iptables -tnat --flush
systemctl start kubelet
systemctl start docker

il y a un autre bug

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.

Il s'agit d'un bug précédent, j'ai oublié de configurer l'incohérence du pilote entre docker et Kubernetes

Cela ne fonctionnait toujours pas, mais j'avais l'impression que l'échange n'était pas désactivé. J'ai essayé swapoff -a et j'ai finalement réussi.

À ce stade, exécutez kubectl get nodes sur le nœud maître et vous pouvez voir que le nœud de nœud a réussi et que le statut est toujours NOT Ready .

Installer le plug-in réseau

  # 安装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')"

Vérifiez à nouveau l'état et constatez qu'il y en a encore deux dans l'état containerCreating

image-20220610092946989

Utilisez la commande pour afficher des informations détaillées 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

il ya un problème

Une recherche sur le blog a trouvé la sortie de la commande kubeadm reset après exécution :

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.

Supprimez ensuite le répertoire /etc/cni/net.d conformément à l'invite ci-dessus, puis exécutez à nouveau la commande kubeadm init.

Vérifiez que le cluster k8s est installé

  • Exécutez == kubectl get pods --all-namespaces == pour voir si le statut du pod est correct
  • Si vous trouvez un pod dans un état d'erreur, vous pouvez exécuter == kubectl --namespace=kube-system describe pod <pod_name> == pour afficher la cause de l'erreur.

Ci-joint:

Supprimez les noeuds worker :kubectl delete nodes k8s-node1

Modifier le nom d'hôte :hostnamectl set-hostname newname

Vérifiez le journal kubelet : journalctl -xefu kubelet

Je suppose que tu aimes

Origine blog.csdn.net/qq_45473439/article/details/125355293
conseillé
Classement