[[354882]] 著者は、正確にスケジュールされたタスクと遅延キュー処理機能を備えた、高同時実行シナリオ向けのシンプルで安定したスケーラブルな遅延メッセージ キュー フレームワークを個人的に開発しました。半年以上前にオープンソース化されて以来、10 社を超える中小企業に正確でタイムリーなスケジューリング ソリューションを提供することに成功し、実稼働環境でのテストにも耐えてきました。より多くの人々の利益のために、オープンソース フレームワークのアドレスが次のように提供されます。 https://github.com/sunshinelyz/mykit-delay PS: ソース コードにスターを付けていただくことも歓迎します。また、素晴らしいコードを PR することもできます。 序文 私はしばらくの間K8Sを勉強してきました。 K8S を学び始めた当初は、オンライン チュートリアルに従って K8S 環境をインストールすると常にエラーが発生しました。そこで、私は学習戦略を変更し、最初に環境を設定することをやめました。まず、公式ウェブサイトを通じて K8S の全体的なアーキテクチャと基本原理について学び、次に K8S のソースコードを読みました。なぜこのように学ぶのかは聞かないでください。私個人としては、このように学習することで、クラウド ネイティブ システム全体をより深く理解できるのではないかと考えています。今回は、K8S クラスターを一発でうまくインストールする方法をまとめてみました。マスター 2 スレーブ モデルに基づいて K8S クラスターを構築する方法について説明します。後ほど、落とし穴なく K8S 高可用性クラスターを構築する方法について説明します。 環境を構築するために必要な記事と yml ファイルは、https://github.com/sunshinelyz/technology-binghe と https://gitee.com/binghe001/technology-binghe に含まれています。ファイルが役に立った場合は、星を付けてください。 クラスター計画 IP | ホスト名 | ノード | オペレーティング システムのバージョン |
---|
192.168.175.101 | ビンヘ101 | マスター | セントOS8.0.1905 | 192.168.175.102 | ビンヘ102 | ワーカー | セントOS8.0.1905 | 192.168.175.103 | ビンヘ103 | ワーカー | セントOS8.0.1905 |
基本設定 3 台のサーバーの /etc/hosts ファイルに次の構成項目を追加します。 - 192.168.175.101ビンヘ101
- 192.168.175.102 ビンヘ102
- 192.168.175.103 ビンヘ103
システム環境を確認する 3 つのサーバーのシステム環境をそれぞれ確認します。 1. サーバーのオペレーティングシステムのバージョンを確認する - cat /etc/redhat-release
Docker および K8S クラスターをインストールするためのサーバー オペレーティング システムのバージョンは、CentOS 7 以降である必要があります。 2. サーバーのホスト名を確認する - ホスト名
注意: クラスター内のサーバーのホスト名は localhost にできません。 3. サーバーのCPUコア数を確認する - lscp
注意: クラスター内のサーバーの CPU コアの数は 2 未満であってはなりません。 4. サーバーネットワークを確認する binghe101 (マスター) サーバーを例に挙げます。以下に示すように、サーバー上で ip route show コマンドを実行して、サーバーのデフォルトのネットワーク カードを表示します。 - [root@binghe101 ~]# ipルート表示
- デフォルト192.168.175.2 dev ens33 proto静的メトリック 100
- 172.17.0.0/16 dev docker0 proto カーネルスコープ リンク src 172.17.0.1 リンクダウン
- 192.168.175.0/24 dev ens33 proto カーネル スコープ リンク src 192.168.175.101 メトリック 100
上記の出力情報には、binghe101 サーバーが使用するデフォルトのネットワーク カードをマークする行があります。 - デフォルト192.168.175.2 dev ens33 proto静的メトリック 100
binghe101 サーバーが使用するデフォルトのネットワーク カードは ens33 であることがわかります。 次に、以下に示すように ip address コマンドを使用してサーバーの IP アドレスを表示します。 - [root@binghe101 ~]# IPアドレス
- 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue 状態 UNKNOWNグループ デフォルトのqlen 1000
- リンク/ループバック 00:00:00:00:00:00 brd 00:00:00:00:00:00
- inet 127.0.0.1/8 スコープ ホスト lo
- valid_lft 永久に preferred_lft 永久に
- inet6 ::1/128 スコープホスト
- valid_lft 永久に preferred_lft 永久に
- 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel 状態 UPグループ デフォルトのqlen 1000
- リンク/イーサ 00:0c:29:68:06:63 brd ff:ff:ff:ff:ff:ff
- inet 192.168.175.101/24 brd 192.168.175.255 スコープグローバルnoprefixroute ens33
- valid_lft 永久に preferred_lft 永久に
- inet6 fe80::890f:5a92:4171:2a11/64 スコープ リンク noprefixroute
- valid_lft 永久に preferred_lft 永久に
ご覧のとおり、binghe101 サーバーのデフォルトのネットワーク カードの IP アドレスは 192.168.175.101 です。 K8S はこの IP アドレスを使用してクラスター内の他のノードと通信します。クラスター内のすべての K8S で使用される IP アドレスは相互運用可能である必要があります。 Dockerのインストール 3 台のサーバーに Docker をインストールし、Alibaba Cloud Image Accelerator を構成します。 1. Dockerをインストールする 新しいauto_install_docker.shスクリプトファイルを作成する - vim 自動インストール docker.sh
ファイルの内容は以下の通りです。 - REGISTRY_MIRROR=https://registry.cn-hangzhou.aliyuncs.com をエクスポートします
- dnf インストール yum*
- yum install -y yum-utils デバイスマッパー永続データ lvm2
- yum-config-manager
- https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.13-3.1.el7.x86_64.rpm をインストールします
- yum install docker-ce docker-ce-cli -y
- systemctl で docker.service を有効にする
- systemctl で docker.service を起動します。
- docker バージョン
または、インストールする Docker のバージョンを指定します。 auto_install_docker.sh スクリプトファイルの内容は次のとおりです。 - REGISTRY_MIRROR=https://registry.cn-hangzhou.aliyuncs.com をエクスポートします
- dnf インストール yum*
- yum install -y yum-utils デバイスマッパー永続データ lvm2
- yum-config-manager
- yum install -y docker-ce-19.03.8 docker-ce-cli-19.03.8containerd.io
- systemctl で docker.service を有効にする
- systemctl で docker.service を起動します。
- docker バージョン
次のコマンドを実行して、auto_install_docker.sh ファイルに実行権限を付与します。 - chmod a+x ./auto_install_docker.sh
次に、auto_install_docker.sh スクリプト ファイルを実行して Docker をインストールします。 - ./auto_install_docker.sh
2. Alibaba Cloud Image Acceleratorを構成する 新しいスクリプト ファイル aliyun_docker_images.sh を作成します。 - vim aliyun_docker_images.sh
ファイルの内容は次のとおりです。 - mkdir -p /etc/docker
- tee /etc/docker/daemon.json <<- 'EOF'
- {
- 「レジストリミラー」 : [ "https://zz3sblpi.mirror.aliyuncs.com" ]
- }
- 終了
- systemctlデーモンリロード
- systemctl dockerを再起動します
以下に示すように、aliyun_docker_images.sh スクリプト ファイルに実行権限を付与します。 - chmod a+x ./aliyun_docker_images.sh
aliyun_docker_images.sh スクリプト ファイルを実行して、Alibaba Cloud Image Accelerator を構成します。 - ./aliyun_docker_images.sh
システム設定 3 台のサーバーでそれぞれシステム設定を実行します。 1. nfs-utilsをインストールする - yum インストール -y nfs-utils
- yum インストール -y wget
2. ファイアウォールをオフにする - systemctl 停止 ファイアウォール
- systemctl ファイアウォールを無効にする
3. SeLinuxを無効にする - 強制0を設定する
- sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
4. スワップをオフにする - スワップオフ -a
- はい | cp /etc/fstab /etc/fstab_bak
- cat /etc/fstab_bak |grep -v swap > /etc/fstab
5. /etc/sysctl.confを変更する 新しい sys_config.sh スクリプト ファイルを作成します。 - vim sys_config.sh
sys_config.shスクリプトファイルの内容は次のとおりです。 - # 設定がある場合は変更する
- sed -i "s#^net.ipv4.ip_forward.*#net.ipv4.ip_forward=1#g" /etc/sysctl.conf
- sed -i "s#^net.bridge.bridge-nf-call-ip6tables.*#net.bridge.bridge-nf-call-ip6tables=1#g" /etc/sysctl.conf
- sed -i "s#^net.bridge.bridge-nf-call-iptables.*#net.bridge.bridge-nf-call-iptables=1#g" /etc/sysctl.conf
- sed -i "s#^net.ipv6.conf.all.disable_ipv6.*#net.ipv6.conf.all.disable_ipv6=1#g" /etc/sysctl.conf
- sed -i "s#^net.ipv6.conf.default.disable_ipv6.*#net.ipv6.conf.default.disable_ipv6=1#g" /etc/sysctl.conf
- sed -i "s#^net.ipv6.conf.lo.disable_ipv6.*#net.ipv6.conf.lo.disable_ipv6=1#g" /etc/sysctl.conf
- sed -i "s#^net.ipv6.conf.all.forwarding.*#net.ipv6.conf.all.forwarding=1#g" /etc/sysctl.conf
- # そうでないかもしれない、追加
- エコー"net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
- echo "net.bridge.bridge-nf-call-ip6tables = 1" >> /etc/sysctl.conf
- echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf
- エコー"net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
- エコー"net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf
- エコー"net.ipv6.conf.lo.disable_ipv6 = 1" >> /etc/sysctl.conf
- エコー"net.ipv6.conf.all.forwarding = 1" >> /etc/sysctl.conf
- # 適用するコマンドを実行する
- sysctl -p
次のコマンドを実行して、sys_config.sh ファイルに実行権限を付与します。 - chmod a+x ./sys_config.sh
sys_config.sh スクリプト ファイルを実行します。 - ./sys_config.sh
K8Sをインストールする 3 台のサーバーにそれぞれ K8S をインストールします。 1. K8S yumソースを設定する 新しい k8s_yum.sh スクリプト ファイルを作成します。 - vim k8s_yum.sh
ファイルの内容は以下の通りです。 - cat <<EOF > /etc/yum.repos.d/kubernetes.repo
- [Kubernetes]
- 名前= Kubernetes
- ベースURL=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
- 有効=1
- gpgcheck=0
- リポジトリ_gpgcheck=0
- gpgkey =http : //mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
- http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
- 終了
k8s_yum.sh スクリプト ファイルに実行権限を付与します。 - chmod a+x ./k8s_yum.sh
k8s_yum.sh ファイルを実行します。 - ./k8s_yum.sh
2. K8Sの古いバージョンをアンインストールする - yum 削除 -y kubelet kubeadm kubectl
3. kubelet、kubeadm、kubectlをインストールする - yum install -y kubelet-1.18.2 kubeadm-1.18.2 kubectl-1.18.2
4. docker Cgroupドライバーをsystemdに変更する - sed -i "s#^ExecStart=/usr/bin/dockerd.*#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdriver=systemd#g" /usr/lib/systemd/system/docker.service
5. dockerを再起動してkubeletを起動する - systemctlデーモンリロード
- systemctl dockerを再起動します
- systemctl kubelet を有効にする && systemctl kubelet を開始する
包括的なインストールスクリプト まとめると、Docker のインストール、システムのセットアップ、K8S のインストールという上記の操作は、auto_install_docker_k8s.sh スクリプトに統合できます。スクリプトの内容を以下に示します。 - #Docker 19.03.8 をインストール
- REGISTRY_MIRROR=https://registry.cn-hangzhou.aliyuncs.com をエクスポートします
- dnf インストール yum*
- yum インストール -y yum-utils デバイスマッパー永続データ lvm2
- yum-config-manager
- yum install -y docker-ce-19.03.8 docker-ce-cli-19.03.8containerd.io
- systemctl で docker.service を有効にする
- systemctl で docker.service を起動します。
- docker バージョン
-
- #Alibaba Cloud Image Accelerator を構成する
- mkdir -p /etc/docker
- tee /etc/docker/daemon.json <<- 'EOF'
- {
- 「レジストリミラー」 : [ "https://zz3sblpi.mirror.aliyuncs.com" ]
- }
- 終了
- systemctlデーモンリロード
- systemctl dockerを再起動します
-
- #nfs-utilsをインストールする
- yum インストール -y nfs-utils
- yum インストール -y wget
-
- #ファイアウォールをオフにする
- systemctl 停止 ファイアウォール
- systemctl ファイアウォールを無効にする
-
- #SeLinuxを無効にする
- 強制0を設定する
- sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
-
- # スワップを無効にする
- スワップオフ -a
- はい | cp /etc/fstab /etc/fstab_bak
- cat /etc/fstab_bak |grep -v swap > /etc/fstab
-
- #/etc/sysctl.conf を変更する
- # 設定がある場合は変更する
- sed -i "s#^net.ipv4.ip_forward.*#net.ipv4.ip_forward=1#g" /etc/sysctl.conf
- sed -i "s#^net.bridge.bridge-nf-call-ip6tables.*#net.bridge.bridge-nf-call-ip6tables=1#g" /etc/sysctl.conf
- sed -i "s#^net.bridge.bridge-nf-call-iptables.*#net.bridge.bridge-nf-call-iptables=1#g" /etc/sysctl.conf
- sed -i "s#^net.ipv6.conf.all.disable_ipv6.*#net.ipv6.conf.all.disable_ipv6=1#g" /etc/sysctl.conf
- sed -i "s#^net.ipv6.conf.default.disable_ipv6.*#net.ipv6.conf.default.disable_ipv6=1#g" /etc/sysctl.conf
- sed -i "s#^net.ipv6.conf.lo.disable_ipv6.*#net.ipv6.conf.lo.disable_ipv6=1#g" /etc/sysctl.conf
- sed -i "s#^net.ipv6.conf.all.forwarding.*#net.ipv6.conf.all.forwarding=1#g" /etc/sysctl.conf
- # そうでないかもしれない、追加
- エコー"net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
- echo "net.bridge.bridge-nf-call-ip6tables = 1" >> /etc/sysctl.conf
- echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf
- エコー"net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
- エコー"net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf
- エコー"net.ipv6.conf.lo.disable_ipv6 = 1" >> /etc/sysctl.conf
- エコー"net.ipv6.conf.all.forwarding = 1" >> /etc/sysctl.conf
- # 適用するコマンドを実行する
- sysctl -p
-
- # K8Sのyumソースを設定する
- cat <<EOF > /etc/yum.repos.d/kubernetes.repo
- [Kubernetes]
- 名前= Kubernetes
- ベースURL=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
- 有効=1
- gpgcheck=0
- リポジトリ_gpgcheck=0
- gpgkey =http : //mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
- http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
- 終了
-
- # K8Sの古いバージョンをアンインストールする
- yum 削除 -y kubelet kubeadm kubectl
-
- #kubelet、kubeadm、kubectl をインストールします。ここではバージョン1.18.2をインストールしました。バージョン1.17.2をインストールすることもできます
- yum install -y kubelet-1.18.2 kubeadm-1.18.2 kubectl-1.18.2
-
- # docker Cgroup ドライバーを systemd に変更する
- # # /usr/lib/systemd/system/docker.service ファイルのこの行を変更します ExecStart=/usr/bin/dockerd -H fd://
- # # ExecStart=/usr/bin/dockerd -H fd:// 変更します
- # 変更しないと、ワーカーノードを追加するときに次のエラーが発生する可能性があります
- # [警告 IsDockerSystemdCheck]: 「cgroupfs」が検出されました Docker cgroup ドライバーとして。推奨ドライバーは 「systemd」 。
- # https://kubernetes.io/docs/setup/cri/のガイドに従ってください。
- sed -i "s#^ExecStart=/usr/bin/dockerd.*#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdriver=systemd#g" /usr/lib/systemd/system/docker.service
-
- # Dockerイメージのダウンロード速度と安定性を向上させるためにDockerイメージを設定します
- # https://hub.docker.io へのアクセス速度が非常に安定している場合は、この手順をスキップできます。
- # curl -sSL https://kuboard.cn/install-script/set_mirror.sh | sh -s ${REGISTRY_MIRROR}
-
- # dockerを再起動してkubeletを起動します
- systemctlデーモンリロード
- systemctl dockerを再起動します
- systemctl kubelet を有効にする && systemctl kubelet を開始する
-
- docker バージョン
注: 私がインストールした K8S のバージョンは 1.18.2 です。 K8S をインストールするときに、インストールする他のバージョンを選択することもできます。 auto_install_docker_k8s.sh スクリプト ファイルに実行権限を付与します。 - chmod a+x ./auto_install_docker_k8s.sh
auto_install_docker_k8s.sh スクリプト ファイルを実行します。 - ./auto_install_docker_k8s.sh
注意: auto_install_docker_k8s.sh スクリプト ファイルは各サーバーで実行する必要があります。 マスターノードを初期化する 操作はbinghe101 サーバー上でのみ実行されます。 1. マスターノードのネットワーク環境を初期化する - # マスターノードでのみ実行されます
- # エクスポート コマンドは現在のシェル セッションでのみ有効です。新しいシェルウィンドウを開いた後、インストールプロセスを続行する場合は、ここでエクスポートコマンドを再実行してください。
- エクスポート MASTER_IP=192.168.175.101
- # k8s.masterを希望のdnsNameに置き換えます
- APISERVER_NAME=k8s.master をエクスポートします。
- # Kubernetes コンテナ グループが配置されているネットワーク セグメント。このネットワーク セグメントは、インストール後に Kubernetes によって作成され、物理ネットワークには事前に存在しません。
- エクスポート POD_SUBNET=172.18.0.1/16
- echo "${MASTER_IP} ${APISERVER_NAME}" >> /etc/hosts
2. マスターノードを初期化する binghe101 サーバーに init_master.sh スクリプト ファイルを作成します。ファイルの内容は次のとおりです。 - #!/bin/bash
- # エラーが発生した場合はスクリプトを終了します
- セット-e
-
- [ ${#POD_SUBNET} -eq 0 ] の場合 || [ ${#APISERVER_NAME} -eq 0 ];それから
- echo -e "\033[31;1m環境変数POD_SUBNETとAPISERVER_NAMEが設定されていることを確認してください\033[0m"
- 現在の POD_SUBNET=$POD_SUBNET をエコーします
- 現在の APISERVER_NAME=$APISERVER_NAME をエコーします
- 出口1
- フィ
-
-
- # 完全な設定オプションを見る https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta2
- rm -f ./kubeadm-config.yaml
- 猫 <<EOF > ./kubeadm-config.yaml
- APIバージョン: kubeadm.k8s.io/v1beta2
- 種類: ClusterConfiguration
- kubernetesバージョン: v1.18.2
- イメージリポジトリ: registry.cn-hangzhou.aliyuncs.com/google_containers
- コントロールプレーンエンドポイント: "${APISERVER_NAME}:6443"
- ネットワーキング:
- サービスサブネット: "10.96.0.0/16"
- ポッドサブネット: "${POD_SUBNET}"
- dnsDomain: "cluster.local"
- 終了
-
- # kubeadm を初期化する
- # サーバーの速度に応じて、3〜10分待つ必要があります
- kubeadm init
-
- # kubectl を設定する
- rm -rf /root/.kube/
- mkdir /root/.kube/
- cp -i /etc/kubernetes/admin.conf /root/.kube/config
-
- # calicoネットワークプラグインをインストールする
- # 参照ドキュメント https://docs.projectcalico.org/v3.13/getting-started/kubernetes/self-managed-onprem/onprems
- echo "calico-3.13.1 をインストール"
- rm -f カリコ-3.13.1.yaml
- https://kuboard.cn/install-script/calico/calico-3.13.1.yaml を取得します。
- kubectl を適用 -f calico-3.13.1.yaml
init_master.sh スクリプト ファイルに実行権限を付与します。 - chmod a+x ./init_master.sh
init_master.sh スクリプト ファイルを実行します。 - ./init_master.sh
3. マスターノードの初期化結果を確認する (1)すべてのコンテナグループが実行状態であることを確認する - # 次のコマンドを実行し、すべてのコンテナ グループが実行状態になるまで 3 ~ 10 分間待機します。
- kubectl get pod -n kube-system -o Wide を監視します
下記の通りです。 - [root@binghe101 ~]# watch kubectl get pod -n kube-system -o Wide
- 2.0秒ごとに: kubectl get pod -n kube-system -o wide binghe101: 2020年5月2日土曜日 23:40:33
-
- 名前準備完了 ステータス 再起動 年齢 IP ノード 指名ノード 準備完了 ゲート
- calico-kube-controllers-5b8b769fcd-l2tmm 1/1 実行中 0 3分59秒 172.18.203.67 binghe101 <なし> <なし>
- calico-node-8krsl 1/1 実行中 0 3分59秒 192.168.175.101 binghe101 <なし> <なし>
- coredns-546565776c-rd2zr 1/1 実行中 0 3分59秒 172.18.203.66 binghe101 <なし> <なし>
- coredns-546565776c-x8r7l 1/1 実行中 0 3分59秒 172.18.203.65 binghe101 <なし> <なし>
- etcd-binghe101 1/1 実行中 0 4分14秒 192.168.175.101 binghe101 <なし> <なし>
- kube-apiserver-binghe101 1/1 実行中 0 4分14秒 192.168.175.101 binghe101 <なし> <なし>
- kube-controller-manager-binghe101 1/1 実行中 0 4分14秒 192.168.175.101 binghe101 <なし> <なし>
- kube-proxy-qnffb 1/1 実行中 0 3分59秒 192.168.175.101 binghe101 <なし> <なし>
- kube-scheduler-binghe101 1/1 実行中 0 4分14秒 192.168.175.101 binghe101 <なし> <なし>
(2)マスターノードの初期化結果を表示する - kubectl ノードを取得 -o ワイド
下記の通りです。 - [root@binghe101 ~]# kubectl get nodes -o wide
- 名前ステータス 役割 年齢 バージョン 内部 IP 外部 IP OS イメージ カーネル バージョン コンテナ ランタイム
- binghe101 マスター準備完了 5m43s v1.18.2 192.168.175.101 <なし> CentOS Linux 8 (Core) 4.18.0-80.el8.x86_64 docker://19.3.8
ワーカーノードの初期化 1. 参加コマンドのパラメータを取得する マスター ノードで次のコマンドを実行して、参加コマンドのパラメータを取得します。 - kubeadm トークン作成
具体的な実装は以下のとおりです。 - [root@binghe101 ~]# kubeadm トークン作成
- W0502 23:44:55.218947 59318 configset.go:202] 警告: kubeadm は API グループのコンポーネント構成を検証できません[kubelet.config.k8s.io kubeproxy.config.k8s.io]
- kubeadm は、k8s.master:6443に参加します
その中に、次のような出力行があります。 - kubeadm は、k8s.master:6443に参加します
このコード行は取得された結合コマンドです。 注: join コマンドのトークンは 2 時間有効です。 2 時間以内に、このトークンを使用して任意の数のワーカーノードを初期化できます。 2. ワーカーノードを初期化する すべてのワーカー ノード (ここでは、binghe102 サーバーと binghe103 サーバー) で実行します。 init_worker.sh スクリプト ファイルを作成します。ファイルの内容は次のとおりです。 - # ワーカーノードでのみ実行されます
- # 192.168.175.101 はマスターノードのイントラネット IP です
- エクスポート MASTER_IP=192.168.175.101
- #k8s.masterをマスターノードの初期化時に使用したAPISERVER_NAMEに置き換えます
- APISERVER_NAME=k8s.master をエクスポートします。
- echo "${MASTER_IP} ${APISERVER_NAME}" >> /etc/hosts
-
- # マスターノード上のkubeadm token createコマンドのjoin出力に置き換えます
- kubeadm は、k8s.master:6443に参加します
このうち、kubeadm join... は、マスターノード上の kubeadm token create コマンドによる join 出力です。 init_worker.sh スクリプト ファイルに実行権限を付与し、init_worker.sh スクリプト ファイルを実行します。 - chmod a+x ./init_worker.sh
- ./init_worker.sh
3. 初期化結果を表示する 初期化結果を表示するには、マスターノードで次のコマンドを実行します。 - kubectl ノードを取得 -o ワイド
下記の通りです。 - [root@binghe101 ~]# kubectl ノードを取得する
- 名前ステータス 役割 年齢 バージョン
- binghe101 レディマスター 20m v1.18.2
- binghe102 準備完了 <なし> 2分46秒 v1.18.2
- binghe103 準備完了 <なし> 2分46秒 v1.18.2
注: kubectl get nodes コマンドの後に -o wide パラメータを追加すると、より多くの情報が出力されます。 K8S クラスターの再起動によって発生する問題 1. ワーカーノードに障害が発生し、起動できない マスターノードの IP アドレスが変更され、ワーカーノードの起動に失敗します。 K8S クラスターを再インストールし、すべてのノードに固定のイントラネット IP アドレスがあることを確認する必要があります。 2. ポッドがクラッシュするか、正常にアクセスできない サーバーを再起動した後、次のコマンドを使用して Pod の実行ステータスを確認します。 - kubectl ポッドを取得
多くのポッドが実行状態ではないことがわかりました。このとき、正常に動作していない Pod を削除するには、次のコマンドを使用する必要があります。 - kubectl delete pod <ポッド名> -n <ポッド名スペック>
注: Deployment や StatefulSet などのコントローラーを使用して Pod が作成された場合、K8S は代わりに新しい Pod を作成し、再起動された Pod は通常は正常に動作します。 この記事はWeChatの公開アカウント「Glacier Technology」から転載したものです。下のQRコードからフォローできます。この記事を転載する場合は、Glacier Technology 公式アカウントまでご連絡ください。 |