K8s のインストールと展開
4 つの仮想マシンを用意し、オペレーティング システム centos7 を使用してクラスター システムを構築します。
最初に仮想マシンの環境をセットアップし、他のマシンのクローンを作成します。
仮想マシンを起動する
仮想マシンのパラメーター:
- ネットワークは NAT モードを使用します
- メモリ 2g 以上
- 2cpu (それ以外の場合は後でエラーが報告されます)
- 私が持っているハードディスクは30gです
ネットワーク接続に失敗した場合は、このブログを構成して試すことができます https://blog.csdn.net/duyuanjun123/article/details/119833105
初めて、システムの初期化時にネットワーク接続をオンにしなかったため、ネットワークに接続できませんでした OS の初期化時に注意してください。
仮想マシンで ip addr コマンドを使用して、仮想マシンの IP を表示します。
仮想マシンの操作がやや不便なので、xshell や fianlshell を使って接続する
yum ソースの構成
接続が成功し、yum ソースを構成します
-
wgetコマンドをダウンロード
yum install wget -y
-
古い yum リポジトリ ソースのバックアップ
cd /etc/yum.repos.d mkdir repobak # 创建文件夹,保存备份文件 mv *.repo repobak #备份repo文件到文件
-
古いパッケージをクリーンアップする
~yum clean all
-
新しい Ali の yum ソース ウェアハウス、Ali のオープン ソース ミラーをダウンロードします: https://developer.aliyun.com/mirror/
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
-
2 つ目の倉庫をダウンロードし続ける epel Warehouse
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
-
yum ソース キャッシュの生成と yum ソースの更新
yum makecache yum update
ドッカーをダウンロード
# 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
Kubernetes をインストールする
インストール元アドレスの構成
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
以下のようにエラーが発生します
[Errno -1] repomd.xml signature could not be verified for kubernetes
これは、レポの gpg 検証の失敗が原因であり、検証をスキップするように変更できますrepo_gpgcheck=0
。
最後に、Kubernetes の主要コンポーネントをインストールします。
setenforce o
yum install -y kubelet kubeadm kubectl
# 启动kubelet、kubeadm、kubectl服务 kubeadm将使用kubelet服务以容器的方式部署和启动Kubernetes的主要服务,所以需要先启动kubelet服务。
systemctl enable kubelet && systemctl start kubelet
仮想マシンのクローン
node1 ノードのクローンを作成します
マスターのインストールと構成
すべてのノードが Selinux、iptables、swap パーティションを閉じる
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
kubernetes のデフォルト構成をプルする
kubeadm config print init-defaults > init-config.yaml
ファイルを開いて表示し、構成されたミラー ウェアハウスが次のようになっていることを確認します。
imageRepository: k8s.gcr.io
ミラー リポジトリに接続できない場合は、代わりに国内のミラーを使用できます: imageRepository: registry.aliyuncs.com/google_containers
init-config.yaml を開き、対応する変更を加えます。kubernetesVersion のバージョン、ポッド サイトの選択アクセスなどを指定できます。
kubernetes イメージのプル
kubeadm config images pull --config=init-config.yaml
国内のミラーリング ソリューションを使用すると、coredns のラベルの問題により、coredns:v1.8.4 のプルが失敗しますが、この時点では手動でプルして自分でラベルを付けることができます。障害情報は次のとおりです。
**解決策: **画像を手動でプルする
Docker ハブからイメージを手動でプルします。
docker pull registry.aliyuncs.com/google_containers/coredns:1.8.4
タグを変更する:
# 重命名
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
ミラーのデフォルト ラベルは次のとおりです: v1.8.4。ミラーのラベルは 1.8.4 であるため、プルは失敗します。
kubeadm init を実行してマスター ノードをインストールします。
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
以下エラー解決
- 仮想マシンの CPU 数は、CPU 数を 2 に設定できます。
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"
解決:
rm /etc/containerd/config.toml
systemctl restart containerd
kubeadm init のインストールが失敗した後、もう一度実行する必要があります.この場合、最初にkubeadm resetコマンドを実行する必要があります.
以下の問題が発生した場合
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")
解決
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
再インストールしようとすると、次の問題が発生します
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.
systemctl status kubelet を介して、kubelet がダウンしていることを確認できます。
● 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)
インターネット上にはさまざまな種類のバイドゥの問題があります
最初のタイプの docker ドライバーと kubelet ドライバーに一貫性がない
ドッカードライバーを表示
docker info|grep Driver
cgroup ドライバー: cgroupfs
kubelet ドライバーを表示
systemctl show *--property=Environment kubelet |cat*
docker ドライバーを修正し、/etc/docker/daemon.json ファイルを確認し、そうでない場合は手動で作成し、次の内容を追加します。
{
"registry-mirrors": ["https://ogeydad1.mirror.aliyuncs.com"], "exec-opts": ["native.cgroupdriver=systemd"]
}
ドッカーを再起動する
systemctl daemon-reload
systemctl restart docker
kubelet を再起動します
systemctl daemon-reload
systemctl restart kubelet
2 番目のスワップ パーティションが閉じていない
swapoff -a
コマンドですべてのパーティションをシャットダウンします
ファイアウォールがオフになっていない可能性もあります。
systemctl stop firewalld
systemctl disable firewalld
その後、初期化しようとすると、次のエラーが発生します
[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
次に、ログを見て、kubelet がエラーを報告していることを確認します。
master kubelet[15135]: E0521 21:07:57.697075 15135 kubelet.go:2419] "Error getting node" err="node
ブログを確認したところ、バージョンが高すぎるはずであることがわかりました.v1.24はdockershimを放棄し、v1.23.0に置き換えました. 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
成功!! !
# 根据提示创建文件夹,执行命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
ノード ノードのインストールと構成
-
ノードノードが配置されているマシンも、事前環境の手順に従う必要があります (以前にスナップショットを作成し、スナップショットに従ってノードを直接コピーしました)。
-
マスターのような kubernetes を追加する yum ソースをインストールします
kubelet と kubeadm をインストールする
yum install -y kubeadm-1.23.0-0 kubelet-1.23.0-0 --disableexcludes=kubernetes
次のコマンドを実行し、起動時に開始するように設定します。
systemctl enable docker && systemctl start docker
systemctl enable kubelet && systemctl start kubelet
結合コマンドを実行します。
# 该命令来自master安装成功后的最后两行信息
kubeadm join 192.168.10.3:6443 --token 7adbpw.vph00nljcfvjf3t0 \
--discovery-token-ca-cert-hash sha256:d28a79426cf1f5e92edcb8f48a9bd70d4a9ff9f1e231519f28600cfeaa91452a
バグがあります
kubetcl *join* ノード ノードがクラスターに参加 *スタック*、応答なし
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
デフォルトのトークンは 24 時間有効で、有効期限が切れると、トークンは使用できなくなります。この時点で、トークンを再作成する必要があります。これは、次のコマンドを使用して直接生成できます。
kubeadm token create --print-join-command
別のバグがあります
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
解決策を見つけるために長い間検索しました
# 回到kubernees-maser 依次输入列命令
systemctl stop kubelet
systemctl stop docker
iptables --flush
iptables -tnat --flush
systemctl start kubelet
systemctl start docker
別のバグがあります
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.
これは以前のバグです。docker と Kubernetes の間でドライバーの不一致を構成するのを忘れていました。
それでも動かないのですが、スワップがオフになっていないような気がしたので、swapoff -a を試してみたところ、やっと成功しました。
この時点で、マスター ノードでkubectl get nodes を実行すると、ノード node が成功し、ステータスがまだNOT Readyであることがわかります。
ネットワークプラグインをインストールする
# 安装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')"
ステータスを再度確認し、containerCreating 状態にまだ 2 つあることを確認します
コマンドを使用して詳細情報を表示します 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
問題があります
ブログを検索すると、実行後のkubeadm resetコマンドの出力が見つかりました。
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.
次に、上記のプロンプトに従って /etc/cni/net.d ディレクトリを削除し、再度 kubeadm init コマンドを実行します。
k8s クラスターがインストールされていることを確認する
- == kubectl get pods --all-namespaces == を実行して、ポッドのステータスが正しいかどうかを確認します
- エラー状態の Pod が見つかった場合は、 == kubectl --namespace=kube-system describe pod <pod_name> == を実行して、エラーの原因を表示できます。
添付:
ワーカー ノードを削除します。kubectl delete nodes k8s-node1
ホスト名の変更:hostnamectl set-hostname newname
kubelet ログを確認します。journalctl -xefu kubelet## K8s のインストールとデプロイ
4 つの仮想マシンを用意し、オペレーティング システム centos7 を使用してクラスター システムを構築します。
最初に仮想マシンの環境をセットアップし、他のマシンのクローンを作成します。
仮想マシンを起動する
仮想マシンのパラメーター:
- ネットワークは NAT モードを使用します
- メモリ 2g 以上
- 2cpu (それ以外の場合は後でエラーが報告されます)
- 私が持っているハードディスクは30gです
ネットワーク接続に失敗した場合は、このブログを構成して試すことができます https://blog.csdn.net/duyuanjun123/article/details/119833105
初めて、システムの初期化時にネットワーク接続をオンにしなかったため、ネットワークに接続できませんでした OS の初期化時に注意してください。
仮想マシンで ip addr コマンドを使用して、仮想マシンの IP を表示します。
仮想マシンの操作がやや不便なので、xshell や fianlshell を使って接続する
yum ソースの構成
接続が成功し、yum ソースを構成します
-
wgetコマンドをダウンロード
yum install wget -y
-
古い yum リポジトリ ソースのバックアップ
cd /etc/yum.repos.d mkdir repobak # 创建文件夹,保存备份文件 mv *.repo repobak #备份repo文件到文件
-
古いパッケージをクリーンアップする
~yum clean all
-
新しい Ali の yum ソース ウェアハウス、Ali のオープン ソース ミラーをダウンロードします: https://developer.aliyun.com/mirror/
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
-
2 つ目の倉庫をダウンロードし続ける epel Warehouse
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
-
yum ソース キャッシュの生成と yum ソースの更新
yum makecache yum update
ドッカーをダウンロード
# 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
Kubernetes をインストールする
インストール元アドレスの構成
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
以下のようにエラーが発生します
[Errno -1] repomd.xml signature could not be verified for kubernetes
これは、レポの gpg 検証の失敗が原因であり、検証をスキップするように変更できますrepo_gpgcheck=0
。
最後に、Kubernetes の主要コンポーネントをインストールします。
setenforce o
yum install -y kubelet kubeadm kubectl
# 启动kubelet、kubeadm、kubectl服务 kubeadm将使用kubelet服务以容器的方式部署和启动Kubernetes的主要服务,所以需要先启动kubelet服务。
systemctl enable kubelet && systemctl start kubelet
仮想マシンのクローン
node1 ノードのクローンを作成します
マスターのインストールと構成
すべてのノードが Selinux、iptables、swap パーティションを閉じる
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
kubernetes のデフォルト構成をプルする
kubeadm config print init-defaults > init-config.yaml
ファイルを開いて表示し、構成されたミラー ウェアハウスが次のようになっていることを確認します。
imageRepository: k8s.gcr.io
ミラー リポジトリに接続できない場合は、代わりに国内のミラーを使用できます: imageRepository: registry.aliyuncs.com/google_containers
init-config.yaml を開き、対応する変更を加えます。kubernetesVersion のバージョン、ポッド サイトの選択アクセスなどを指定できます。
kubernetes イメージのプル
kubeadm config images pull --config=init-config.yaml
国内のミラーリング ソリューションを使用すると、coredns のラベルの問題により、coredns:v1.8.4 のプルが失敗しますが、この時点では手動でプルして自分でラベルを付けることができます。障害情報は次のとおりです。
**解決策: **画像を手動でプルする
Docker ハブからイメージを手動でプルします。
docker pull registry.aliyuncs.com/google_containers/coredns:1.8.4
タグを変更する:
# 重命名
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
ミラーのデフォルト ラベルは次のとおりです: v1.8.4。ミラーのラベルは 1.8.4 であるため、プルは失敗します。
kubeadm init を実行してマスター ノードをインストールします。
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
以下エラー解決
- 仮想マシンの CPU 数は、CPU 数を 2 に設定できます。
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"
解決:
rm /etc/containerd/config.toml
systemctl restart containerd
kubeadm init のインストールが失敗した後、もう一度実行する必要があります.この場合、最初にkubeadm resetコマンドを実行する必要があります.
以下の問題が発生した場合
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")
解決
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
再インストールしようとすると、次の問題が発生します
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.
systemctl status kubelet を介して、kubelet がダウンしていることを確認できます。
● 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)
インターネット上にはさまざまな種類のバイドゥの問題があります
最初のタイプの docker ドライバーと kubelet ドライバーに一貫性がない
ドッカードライバーを表示
docker info|grep Driver
cgroup ドライバー: cgroupfs
kubelet ドライバーを表示
systemctl show *--property=Environment kubelet |cat*
docker ドライバーを修正し、/etc/docker/daemon.json ファイルを確認し、そうでない場合は手動で作成し、次の内容を追加します。
{
"registry-mirrors": ["https://ogeydad1.mirror.aliyuncs.com"], "exec-opts": ["native.cgroupdriver=systemd"]
}
ドッカーを再起動する
systemctl daemon-reload
systemctl restart docker
kubelet を再起動します
systemctl daemon-reload
systemctl restart kubelet
2 番目のスワップ パーティションが閉じていない
swapoff -a
コマンドですべてのパーティションをシャットダウンします
ファイアウォールがオフになっていない可能性もあります。
systemctl stop firewalld
systemctl disable firewalld
その後、初期化しようとすると、次のエラーが発生します
[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
次に、ログを見て、kubelet がエラーを報告していることを確認します。
master kubelet[15135]: E0521 21:07:57.697075 15135 kubelet.go:2419] "Error getting node" err="node
ブログを確認したところ、バージョンが高すぎるはずであることがわかりました.v1.24はdockershimを放棄し、v1.23.0に置き換えました. 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
成功!! !
# 根据提示创建文件夹,执行命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
ノード ノードのインストールと構成
-
ノードノードが配置されているマシンも、事前環境の手順に従う必要があります (以前にスナップショットを作成し、スナップショットに従ってノードを直接コピーしました)。
-
マスターのような kubernetes を追加する yum ソースをインストールします
kubelet と kubeadm をインストールする
yum install -y kubeadm-1.23.0-0 kubelet-1.23.0-0 --disableexcludes=kubernetes
次のコマンドを実行し、起動時に開始するように設定します。
systemctl enable docker && systemctl start docker
systemctl enable kubelet && systemctl start kubelet
結合コマンドを実行します。
# 该命令来自master安装成功后的最后两行信息
kubeadm join 192.168.10.3:6443 --token 7adbpw.vph00nljcfvjf3t0 \
--discovery-token-ca-cert-hash sha256:d28a79426cf1f5e92edcb8f48a9bd70d4a9ff9f1e231519f28600cfeaa91452a
バグがあります
kubetcl *join* ノード ノードがクラスターに参加 *スタック*、応答なし
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
デフォルトのトークンは 24 時間有効で、有効期限が切れると、トークンは使用できなくなります。この時点で、トークンを再作成する必要があります。これは、次のコマンドを使用して直接生成できます。
kubeadm token create --print-join-command
別のバグがあります
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
解決策を見つけるために長い間検索しました
# 回到kubernees-maser 依次输入列命令
systemctl stop kubelet
systemctl stop docker
iptables --flush
iptables -tnat --flush
systemctl start kubelet
systemctl start docker
別のバグがあります
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.
これは以前のバグです。docker と Kubernetes の間でドライバーの不一致を構成するのを忘れていました。
それでも動かないのですが、スワップがオフになっていないような気がしたので、swapoff -a を試してみたところ、やっと成功しました。
この時点で、マスター ノードでkubectl get nodes を実行すると、ノード node が成功し、ステータスがまだNOT Readyであることがわかります。
ネットワークプラグインをインストールする
# 安装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')"
ステータスを再度確認し、containerCreating 状態にまだ 2 つあることを確認します
コマンドを使用して詳細情報を表示します 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
問題があります
ブログを検索すると、実行後のkubeadm resetコマンドの出力が見つかりました。
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.
次に、上記のプロンプトに従って /etc/cni/net.d ディレクトリを削除し、再度 kubeadm init コマンドを実行します。
k8s クラスターがインストールされていることを確認する
- == kubectl get pods --all-namespaces == を実行して、ポッドのステータスが正しいかどうかを確認します
- エラー状態の Pod が見つかった場合は、 == kubectl --namespace=kube-system describe pod <pod_name> == を実行して、エラーの原因を表示できます。
添付:
ワーカー ノードを削除します。kubectl delete nodes k8s-node1
ホスト名の変更:hostnamectl set-hostname newname
kubelet ログを確認します: journalctl -xefu kubelet