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.
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
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
Étant donné que le fonctionnement de la machine virtuelle est quelque peu gênant, utilisez xshell ou fianlshell pour vous connecter
Configurer la source yum
La connexion est réussie et configurez la source yum
-
télécharger la commande wget
yum install wget -y
-
sauvegarder les anciennes sources du référentiel yum
cd /etc/yum.repos.d mkdir repobak # 创建文件夹,保存备份文件 mv *.repo repobak #备份repo文件到文件
-
nettoyer les anciens paquets
~yum clean all
-
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
-
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
-
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=0
ignorer 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
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 :
**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.
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
- 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.
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*
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
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
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.
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
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
Étant donné que le fonctionnement de la machine virtuelle est quelque peu gênant, utilisez xshell ou fianlshell pour vous connecter
Configurer la source yum
La connexion est réussie et configurez la source yum
-
télécharger la commande wget
yum install wget -y
-
sauvegarder les anciennes sources du référentiel yum
cd /etc/yum.repos.d mkdir repobak # 创建文件夹,保存备份文件 mv *.repo repobak #备份repo文件到文件
-
nettoyer les anciens paquets
~yum clean all
-
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
-
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
-
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=0
ignorer 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
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 :
**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.
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
- 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.
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*
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
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
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