[k8s] 3. k8s クラスタの初期化

目次

序文

環境計画

kubeadm kubelet kubectl

kubeadm をインストールする

マスターノードの初期化

ノード node の初期化によりクラスターに参加します

クラスタ ネットワークの初期化のための Flannel

エラーを報告する

kubeadm 初期化エラー

kubectl get nodes エラー

要約する

後ろに書いてある


序文

前の2つの記事の伏線を通して、

【k8s】 1. 基本的な実験環境の準備

【k8s】2.containerdのインストール

k8s クラスターを構築するために必要な基本的な環境を構築したので、次に k8s をデプロイして、独自の k8s クラスターを初期化します。今回インストールしたk8sのバージョンは1.24.3.

k8s をインストールするにはさまざまな方法がありますが、このチュートリアルでは、kubeadm を使用してインストールする最も簡単な方法を使用します。

環境計画

[k8s]では1.基本的な実験環境の準備では、この実験のすべてのノードのネットワークが計画されています。

マシーン

IPアドレス

物理マシン

192.168.137.99

k8s-マスター

192.168.137.200

k8s-node1

192.168.137.201

k8s-node2

192.168.137.202

kubeadm kubelet kubectl

kubeadmKubernetes最小限の使用可能なクラスターを構築して起動するために必要な基本的な手順を実行する専用の展開ツールです。2 つの操作コマンドを提供するkubeadm init、 Kubernetes クラスターをすばやくデプロイできます。kubeadm join

kubeadmこれは、Kubernetesクラスターのライフサイクル全体の管理ツールであり、クラスターの展開、アップグレード、ダウングレード、および削除を実装するために使用できます。kubeadmクラスターをデプロイすると、ほとんどKubernetesのリソースがpodモードで実行されます。たとえば、( kube-proxykube-controller-managerkube-scheduler) すべてがモードで実行されます。kube-apiserverflannelpod

kubectlこれは、クラスター自体を管理し、コンテナー化されたアプリケーションをクラスターにインストールしてデプロイできる、Kubernetes クラスター用のコマンドライン ツールですkubectl次に、よくkubectlコマンドを扱います

kubeadm をインストールする

マスター ノードとすべてのノード ノードは、このインストール手順を実行する必要があります。このうちkubectlはnodeノードにはインストールできませんが、初心者なら全部インストールしても問題ありません。

1. k8s の Alibaba Cloud yum ソースを追加します。

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

2. yum のインストールkubeadm kubelet kubectl

k8s デプロイメント ツールのバージョンは、構築する k8s クラスターのバージョンに対応している必要があります。今回はバージョン 1.24.3 をインストールしたため、、、、kubeadmおよびkubeletkubectlバージョンは対応している必要があります。

yum install kubelet-1.24.3 kubeadm-1.24.3 kubectl-1.24.3 -y

 kubelet を起動

systemctl enable kubelet.service

マスターノードの初期化

コマンドを使用してkubeadm init、マスター ノードをすばやく初期化できます。

次のコマンドを実行します。

kubeadm init --apiserver-advertise-address=192.168.137.200 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.24.3 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16 

このプロセスには少し時間がかかります。しばらくお待ちください。待っている間に、上記のコマンド パラメータの意味を見てみましょう。

パラメータ分析:

  • apiserver-advertise-address API サーバーのアドレス。ここではマスター ノードの IP
  • image-repository は、k8s イメージをプルするコンテナー ウェアハウスを構成します。アリのミラー ウェアハウスを構成します。
  • kubernetes-version は、k8s のバージョンを指定します。
  • service-cidr サービスの仮想 IP アドレスは、IP アドレス セグメントも指定します
  • pod-network-cidr ポッド ノード ネットワークが使用できる IP アドレス セグメント

service-cidrと の IP アドレス セグメントの設定は、pod-network-cidrサービスとポッドの容量に応じて決定されます。

IPコンピュータを介してネットワークセグメントの容量を計算できます

https://tool.520101.com/wangluo/ipjisuan/

サービス ネットワーク セグメントの容量を下図に示します。

Pod ネットワーク セグメントを次の図に示します。

しばらくすると、k8s コントロール プレーンがインストールされます。以下に示すように:

出力プロンプトによると、

次に、マスターノードを構成しましょう

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

同様に、後のプロンプトによると kubeadm init 、Node ノードがクラスターに参加するためのコマンドは次のとおりであることがわかります。

kubeadm join 192.168.137.200:6443 --token fm17us.mptry3ijamo9avr2 \
        --discovery-token-ca-cert-hash sha256:b87cda5b45265db24b29260060fe8e537abb5547604d865a957dc7a026eb36a6

ノード node の初期化によりクラスターに参加します

node1 ノードは上記のコマンドを入力してクラスターに参加します

node2 ノードは上記のコマンドを入力してクラスターに参加します

マスター ノードに戻り、kubectl get nodesコマンドを入力すると、3 つのノードがあることがわかります。

注意深い学生は、ノードがあることに気付くかもしれませんが、ノードのステータスは NotReady です。これは、クラスターのネットワークがまだ構成されていないためです。問題は大きくありません。先に進みましょう。

クラスタ ネットワークの初期化のための Flannel

クラスター ネットワークを初期化するには、マスター ノードで次のコマンドを実行します。

curl -O https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml && \
kubectl apply -f kube-flannel.yml

上記のコマンドでは、1 つ目は flannel の構成ファイルをダウンロードすることであり、2 つ目は kubectl を介してインストールすることです。

コマンドを使用してkubectl get pod -n kube-flannelflannel のポッドの起動ステータスを確認できます. flannel のポッドのステータスが Running に変わると、kubeclt get nodesコマンドを使用してすべてのノードのステータスが変更されたことがわかりますReady.

エラーを報告する

kubeadm 初期化エラー

kubeadm initエラーは次のように報告されます。

[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

 

 理由は次のとおりです。

1. kubelet がマスター ノードにのみインストールされていることが原因である可能性があります。

確認するとsystemctl status kubelet、kubelet がエラーを報告していることがわかります.ノードが 1 つしかない場合は、エラーが報告されます。この問題を再現したい場合は、1 台のマシンにのみインストールできますkubelet

 2. 上記のエラーが発生するもう 1 つの可能性は、kubeadm がイメージをプルできないことです. この時点で、containerd が k8s コントロール プレーンのイメージをプルできるかどうかを確認する必要があります. ファイルが正しく構成されていることを確認します/etc/containerd/config.toml

kubectl get nodes エラー

kubectl コマンドを使用すると、次のエラーが報告されます

The connection to the server localhost:8080 was refused - did you specify the right host or port?

これは、kubeadm init の後にマスター ノードが適切に構成されていないためです。

要約する

前の 2 つの記事の環境に基づいて、この記事では kubeadm を使用して k8s クラスターをデプロイする方法を紹介します。最初に、kubeadm、kubelet、および kubectl のインストールについて簡単に紹介します。次に、マスター ノードとノード ノードのインストールと初期化があります. これらの 3 つの記事の後、私たちに属する k8s クラスターが完全にセットアップされました. 次に、k8s の動作実験を楽しく実行できます。

余談ですが、今回の記事はお久しぶりで、最初は一気に終わらせたかったのですが、先延ばしにしてしまいました。

このチュートリアルを書こうと計画した時点では、1.24.3これが最新バージョンでした。今日、このブログを書き終えて公式サイトに行ってみたら1.25バージョンアップしていました。しかし、それは同じです。

後ろに書いてある

役に立つと思われる場合は、1 つのボタンと 3 つの連続したリンクでSiege Lion Baiyuをサポートし、この記事をより多くの友人と共有してください。あなたのシンプルなサポート、私の無限の創造力

おすすめ

転載: blog.csdn.net/zhh763984017/article/details/126863671