目次
序文
前の2つの記事の伏線を通して、
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
kubeadm
Kubernetes
最小限の使用可能なクラスターを構築して起動するために必要な基本的な手順を実行する専用の展開ツールです。2 つの操作コマンドを提供するとkubeadm init
、 Kubernetes クラスターをすばやくデプロイできます。kubeadm join
kubeadm
これは、Kubernetes
クラスターのライフサイクル全体の管理ツールであり、クラスターの展開、アップグレード、ダウングレード、および削除を実装するために使用できます。kubeadm
クラスターをデプロイすると、ほとんどKubernetes
のリソースがpod
モードで実行されます。たとえば、( kube-proxy
、kube-controller-manager
、kube-scheduler
、) すべてがモードで実行されます。kube-apiserver
flannel
pod
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
およびkubelet
のkubectl
バージョンは対応している必要があります。
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-flannel
flannel のポッドの起動ステータスを確認できます. 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をサポートし、この記事をより多くの友人と共有してください。あなたのシンプルなサポート、私の無限の創造力