K8s centos のインストールとデプロイ、クラスター構築

K8s のインストールと展開

4 つの仮想マシンを用意し、オペレーティング システム centos7 を使用してクラスター システムを構築します。

画像-20220609104049893

最初に仮想マシンの環境をセットアップし、他のマシンのクローンを作成します。

仮想マシンを起動する

仮想マシンのパラメーター:

  • ネットワークは NAT モードを使用します
  • メモリ 2g 以上
  • 2cpu (それ以外の場合は後でエラーが報告されます)
  • 私が持っているハードディスクは30gです

画像-20220609104311773

ネットワーク接続に失敗した場合は、このブログを構成して試すことができます https://blog.csdn.net/duyuanjun123/article/details/119833105

初めて、システムの初期化時にネットワーク接続をオンにしなかったため、ネットワークに接続できませんでした OS の初期化時に注意してください。

仮想マシンで ip addr コマンドを使用して、仮想マシンの IP を表示します。

画像-20220609104906146

仮想マシンの操作がやや不便なので、xshell や fianlshell を使って接続する

画像-20220609105008915 画像-20220609105026097

yum ソースの構成

接続が成功し、yum ソースを構成します

  1. wgetコマンドをダウンロード

    yum install wget -y  
    
  2. 古い yum リポジトリ ソースのバックアップ

    cd  /etc/yum.repos.d
    mkdir  repobak  # 创建文件夹,保存备份文件
    mv *.repo   repobak  #备份repo文件到文件
    
  3. 古いパッケージをクリーンアップする

    ~yum clean all
    
  4. 新しい 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
    
  5. 2 つ目の倉庫をダウンロードし続ける epel Warehouse

    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    
  6. 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

仮想マシンのクローン

画像-20220609110301026

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

以下エラー解決

  1. 仮想マシンの 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.

画像-2022060915105205​​1

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

画像-20220609173745304

成功!! !

# 根据提示创建文件夹,执行命令
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 つあることを確認します

画像-20220610092946989

コマンドを使用して詳細情報を表示します 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 を使用してクラスター システムを構築します。

画像-20220609104049893

最初に仮想マシンの環境をセットアップし、他のマシンのクローンを作成します。

仮想マシンを起動する

仮想マシンのパラメーター:

  • ネットワークは NAT モードを使用します
  • メモリ 2g 以上
  • 2cpu (それ以外の場合は後でエラーが報告されます)
  • 私が持っているハードディスクは30gです

画像-20220609104311773

ネットワーク接続に失敗した場合は、このブログを構成して試すことができます https://blog.csdn.net/duyuanjun123/article/details/119833105

初めて、システムの初期化時にネットワーク接続をオンにしなかったため、ネットワークに接続できませんでした OS の初期化時に注意してください。

仮想マシンで ip addr コマンドを使用して、仮想マシンの IP を表示します。

画像-20220609104906146

仮想マシンの操作がやや不便なので、xshell や fianlshell を使って接続する

画像-20220609105008915 画像-20220609105026097

yum ソースの構成

接続が成功し、yum ソースを構成します

  1. wgetコマンドをダウンロード

    yum install wget -y  
    
  2. 古い yum リポジトリ ソースのバックアップ

    cd  /etc/yum.repos.d
    mkdir  repobak  # 创建文件夹,保存备份文件
    mv *.repo   repobak  #备份repo文件到文件
    
  3. 古いパッケージをクリーンアップする

    ~yum clean all
    
  4. 新しい 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
    
  5. 2 つ目の倉庫をダウンロードし続ける epel Warehouse

    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    
  6. 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

仮想マシンのクローン

画像-20220609110301026

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

以下エラー解決

  1. 仮想マシンの 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.

画像-2022060915105205​​1

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

画像-20220609173745304

成功!! !

# 根据提示创建文件夹,执行命令
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 つあることを確認します

画像-20220610092946989

コマンドを使用して詳細情報を表示します 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

おすすめ

転載: blog.csdn.net/qq_45473439/article/details/125355293