K8S クラスターを 1 回で正常にインストールする方法を説明します (マスター 1 つとスレーブ 2 つのモードに基づく)

K8S クラスターを 1 回で正常にインストールする方法を説明します (マスター 1 つとスレーブ 2 つのモードに基づく)

[[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 ファイルに次の構成項目を追加します。

  1. 192.168.175.101ビンヘ101
  2. 192.168.175.102 ビンヘ102
  3. 192.168.175.103 ビンヘ103

システム環境を確認する

3 つのサーバーのシステム環境をそれぞれ確認します。

1. サーバーのオペレーティングシステムのバージョンを確認する

  1. cat /etc/redhat-release

Docker および K8S クラスターをインストールするためのサーバー オペレーティング システムのバージョンは、CentOS 7 以降である必要があります。

2. サーバーのホスト名を確認する

  1. ホスト名

注意: クラスター内のサーバーのホスト名は localhost にできません。

3. サーバーのCPUコア数を確認する

  1. lscp

注意: クラスター内のサーバーの CPU コアの数は 2 未満であってはなりません。

4. サーバーネットワークを確認する

binghe101 (マスター) サーバーを例に挙げます。以下に示すように、サーバー上で ip route show コマンドを実行して、サーバーのデフォルトのネットワーク カードを表示します。

  1. [root@binghe101 ~]# ipルート表示
  2. デフォルト192.168.175.2 dev ens33 proto静的メトリック 100
  3. 172.17.0.0/16 dev docker0 proto カーネルスコープ リンク src 172.17.0.1 リンクダウン
  4. 192.168.175.0/24 dev ens33 proto カーネル スコープ リンク src 192.168.175.101 メトリック 100

上記の出力情報には、binghe101 サーバーが使用するデフォルトのネットワーク カードをマークする行があります。

  1. デフォルト192.168.175.2 dev ens33 proto静的メトリック 100

binghe101 サーバーが使用するデフォルトのネットワーク カードは ens33 であることがわかります。

次に、以下に示すように ip address コマンドを使用してサーバーの IP アドレスを表示します。

  1. [root@binghe101 ~]# IPアドレス
  2. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue 状態 UNKNOWNグループ デフォルトのqlen 1000
  3. リンク/ループバック 00:00:00:00:00:00 brd 00:00:00:00:00:00
  4. inet 127.0.0.1/8 スコープ ホスト lo
  5. valid_lft 永久に preferred_lft 永久に
  6. inet6 ::1/128 スコープホスト
  7. valid_lft 永久に preferred_lft 永久に
  8. 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel 状態 UPグループ デフォルトのqlen 1000
  9. リンク/イーサ 00:0c:29:68:06:63 brd ff:ff:ff:ff:ff:ff
  10. inet 192.168.175.101/24 brd 192.168.175.255 スコープグローバルnoprefixroute ens33
  11. valid_lft 永久に preferred_lft 永久に
  12. inet6 fe80::890f:5a92:4171:2a11/64 スコープ リンク noprefixroute
  13. 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スクリプトファイルを作成する

  1. vim 自動インストール docker.sh

ファイルの内容は以下の通りです。

  1. REGISTRY_MIRROR=https://registry.cn-hangzhou.aliyuncs.com をエクスポートします
  2. dnf インストール yum*
  3. yum install -y yum-utils デバイスマッパー永続データ lvm2
  4. yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo  
  5. https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.13-3.1.el7.x86_64.rpm をインストールします
  6. yum install docker-ce docker-ce-cli -y
  7. systemctl で docker.service を有効にする
  8. systemctl で docker.service を起動します。
  9. docker バージョン

または、インストールする Docker のバージョンを指定します。 auto_install_docker.sh スクリプトファイルの内容は次のとおりです。

  1. REGISTRY_MIRROR=https://registry.cn-hangzhou.aliyuncs.com をエクスポートします
  2. dnf インストール yum*
  3. yum install -y yum-utils デバイスマッパー永続データ lvm2
  4. yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo  
  5. yum install -y docker-ce-19.03.8 docker-ce-cli-19.03.8containerd.io
  6. systemctl で docker.service を有効にする
  7. systemctl で docker.service を起動します。
  8. docker バージョン

次のコマンドを実行して、auto_install_docker.sh ファイルに実行権限を付与します。

  1. chmod a+x ./auto_install_docker.sh

次に、auto_install_docker.sh スクリプト ファイルを実行して Docker をインストールします。

  1. ./auto_install_docker.sh

2. Alibaba Cloud Image Acceleratorを構成する

新しいスクリプト ファイル aliyun_docker_images.sh を作成します。

  1. vim aliyun_docker_images.sh

ファイルの内容は次のとおりです。

  1. mkdir -p /etc/docker
  2. tee /etc/docker/daemon.json <<- 'EOF'  
  3. {
  4. 「レジストリミラー」 : [ "https://zz3sblpi.mirror.aliyuncs.com" ]
  5. }
  6. 終了
  7. systemctlデーモンリロード
  8. systemctl dockerを再起動します

以下に示すように、aliyun_docker_images.sh スクリプト ファイルに実行権限を付与します。

  1. chmod a+x ./aliyun_docker_images.sh

aliyun_docker_images.sh スクリプト ファイルを実行して、Alibaba Cloud Image Accelerator を構成します。

  1. ./aliyun_docker_images.sh

システム設定

3 台のサーバーでそれぞれシステム設定を実行します。

1. nfs-utilsをインストールする

  1. yum インストール -y nfs-utils
  2. yum インストール -y wget

2. ファイアウォールをオフにする

  1. systemctl 停止 ファイアウォール
  2. systemctl ファイアウォールを無効にする

3. SeLinuxを無効にする

  1. 強制0を設定する
  2. sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

4. スワップをオフにする

  1. スワップオフ -a
  2. はい | cp /etc/fstab /etc/fstab_bak
  3. cat /etc/fstab_bak |grep -v swap > /etc/fstab

5. /etc/sysctl.confを変更する

新しい sys_config.sh スクリプト ファイルを作成します。

  1. vim sys_config.sh

sys_config.shスクリプトファイルの内容は次のとおりです。

  1. # 設定がある場合は変更する
  2. sed -i "s#^net.ipv4.ip_forward.*#net.ipv4.ip_forward=1#g" /etc/sysctl.conf
  3. sed -i "s#^net.bridge.bridge-nf-call-ip6tables.*#net.bridge.bridge-nf-call-ip6tables=1#g" /etc/sysctl.conf
  4. sed -i "s#^net.bridge.bridge-nf-call-iptables.*#net.bridge.bridge-nf-call-iptables=1#g" /etc/sysctl.conf
  5. sed -i "s#^net.ipv6.conf.all.disable_ipv6.*#net.ipv6.conf.all.disable_ipv6=1#g" /etc/sysctl.conf
  6. sed -i "s#^net.ipv6.conf.default.disable_ipv6.*#net.ipv6.conf.default.disable_ipv6=1#g" /etc/sysctl.conf
  7. sed -i "s#^net.ipv6.conf.lo.disable_ipv6.*#net.ipv6.conf.lo.disable_ipv6=1#g" /etc/sysctl.conf
  8. sed -i "s#^net.ipv6.conf.all.forwarding.*#net.ipv6.conf.all.forwarding=1#g" /etc/sysctl.conf
  9. # そうでないかもしれない、追加
  10. エコー"net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
  11. echo "net.bridge.bridge-nf-call-ip6tables = 1" >> /etc/sysctl.conf
  12. echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf
  13. エコー"net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
  14. エコー"net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf
  15. エコー"net.ipv6.conf.lo.disable_ipv6 = 1" >> /etc/sysctl.conf
  16. エコー"net.ipv6.conf.all.forwarding = 1" >> /etc/sysctl.conf
  17. # 適用するコマンドを実行する
  18. sysctl -p

次のコマンドを実行して、sys_config.sh ファイルに実行権限を付与します。

  1. chmod a+x ./sys_config.sh

sys_config.sh スクリプト ファイルを実行します。

  1. ./sys_config.sh

K8Sをインストールする

3 台のサーバーにそれぞれ K8S をインストールします。

1. K8S yumソースを設定する

新しい k8s_yum.sh スクリプト ファイルを作成します。

  1. vim k8s_yum.sh

ファイルの内容は以下の通りです。

  1. cat <<EOF > /etc/yum.repos.d/kubernetes.repo
  2. [Kubernetes]
  3. 名前= Kubernetes
  4. ベースURL=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
  5. 有効=1
  6. gpgcheck=0
  7. リポジトリ_gpgcheck=0
  8. gpgkey =http : //mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
  9. http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
  10. 終了

k8s_yum.sh スクリプト ファイルに実行権限を付与します。

  1. chmod a+x ./k8s_yum.sh

k8s_yum.sh ファイルを実行します。

  1. ./k8s_yum.sh

2. K8Sの古いバージョンをアンインストールする

  1. yum 削除 -y kubelet kubeadm kubectl

3. kubelet、kubeadm、kubectlをインストールする

  1. yum install -y kubelet-1.18.2 kubeadm-1.18.2 kubectl-1.18.2

4. docker Cgroupドライバーをsystemdに変更する

  1. 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を起動する

  1. systemctlデーモンリロード
  2. systemctl dockerを再起動します
  3. systemctl kubelet を有効にする && systemctl kubelet を開始する

包括的なインストールスクリプト

まとめると、Docker のインストール、システムのセットアップ、K8S のインストールという上記の操作は、auto_install_docker_k8s.sh スクリプトに統合できます。スクリプトの内容を以下に示します。

  1. #Docker 19.03.8 をインストール
  2. REGISTRY_MIRROR=https://registry.cn-hangzhou.aliyuncs.com をエクスポートします
  3. dnf インストール yum*
  4. yum インストール -y yum-utils デバイスマッパー永続データ lvm2
  5. yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo  
  6. yum install -y docker-ce-19.03.8 docker-ce-cli-19.03.8containerd.io
  7. systemctl で docker.service を有効にする
  8. systemctl で docker.service を起動します。
  9. docker バージョン
  10.  
  11. #Alibaba Cloud Image Accelerator を構成する
  12. mkdir -p /etc/docker
  13. tee /etc/docker/daemon.json <<- 'EOF'  
  14. {
  15. 「レジストリミラー」 : [ "https://zz3sblpi.mirror.aliyuncs.com" ]
  16. }
  17. 終了
  18. systemctlデーモンリロード
  19. systemctl dockerを再起動します
  20.  
  21. #nfs-utilsをインストールする
  22. yum インストール -y nfs-utils
  23. yum インストール -y wget
  24.  
  25. #ファイアウォールをオフにする
  26. systemctl 停止 ファイアウォール
  27. systemctl ファイアウォールを無効にする
  28.  
  29. #SeLinuxを無効にする
  30. 強制0を設定する
  31. sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
  32.  
  33. # スワップを無効にする
  34. スワップオフ -a
  35. はい | cp /etc/fstab /etc/fstab_bak
  36. cat /etc/fstab_bak |grep -v swap > /etc/fstab
  37.  
  38. #/etc/sysctl.conf を変更する
  39. # 設定がある場合は変更する
  40. sed -i "s#^net.ipv4.ip_forward.*#net.ipv4.ip_forward=1#g" /etc/sysctl.conf
  41. sed -i "s#^net.bridge.bridge-nf-call-ip6tables.*#net.bridge.bridge-nf-call-ip6tables=1#g" /etc/sysctl.conf
  42. sed -i "s#^net.bridge.bridge-nf-call-iptables.*#net.bridge.bridge-nf-call-iptables=1#g" /etc/sysctl.conf
  43. sed -i "s#^net.ipv6.conf.all.disable_ipv6.*#net.ipv6.conf.all.disable_ipv6=1#g" /etc/sysctl.conf
  44. sed -i "s#^net.ipv6.conf.default.disable_ipv6.*#net.ipv6.conf.default.disable_ipv6=1#g" /etc/sysctl.conf
  45. sed -i "s#^net.ipv6.conf.lo.disable_ipv6.*#net.ipv6.conf.lo.disable_ipv6=1#g" /etc/sysctl.conf
  46. sed -i "s#^net.ipv6.conf.all.forwarding.*#net.ipv6.conf.all.forwarding=1#g" /etc/sysctl.conf
  47. # そうでないかもしれない、追加
  48. エコー"net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
  49. echo "net.bridge.bridge-nf-call-ip6tables = 1" >> /etc/sysctl.conf
  50. echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf
  51. エコー"net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
  52. エコー"net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf
  53. エコー"net.ipv6.conf.lo.disable_ipv6 = 1" >> /etc/sysctl.conf
  54. エコー"net.ipv6.conf.all.forwarding = 1" >> /etc/sysctl.conf
  55. # 適用するコマンドを実行する
  56. sysctl -p
  57.  
  58. # K8Sのyumソースを設定する
  59. cat <<EOF > /etc/yum.repos.d/kubernetes.repo
  60. [Kubernetes]
  61. 名前= Kubernetes
  62. ベースURL=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
  63. 有効=1
  64. gpgcheck=0
  65. リポジトリ_gpgcheck=0
  66. gpgkey =http : //mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
  67. http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
  68. 終了
  69.  
  70. # K8Sの古いバージョンをアンインストールする
  71. yum 削除 -y kubelet kubeadm kubectl
  72.  
  73. #kubelet、kubeadm、kubectl をインストールします。ここではバージョン1.18.2をインストールしました。バージョン1.17.2をインストールすることもできます
  74. yum install -y kubelet-1.18.2 kubeadm-1.18.2 kubectl-1.18.2
  75.  
  76. # docker Cgroup ドライバーを systemd に変更する
  77. # # /usr/lib/systemd/system/docker.service ファイルのこの行を変更します ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock  
  78. # # ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdriver=systemd に変更します 
  79. # 変更しないと、ワーカーノードを追加するときに次のエラーが発生する可能性があります
  80. # [警告 IsDockerSystemdCheck]: 「cgroupfs」が検出されました  Docker cgroup ドライバーとして推奨ドライバー  「systemd」
  81. # https://kubernetes.io/docs/setup/cri/ガイドに従ってください。
  82. 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
  83.  
  84. # Dockerイメージのダウンロード速度と安定性を向上させるためにDockerイメージを設定します
  85. # https://hub.docker.io へのアクセス速度が非常に安定している場合は、この手順をスキップできます。
  86. # curl -sSL https://kuboard.cn/install-script/set_mirror.sh | sh -s ${REGISTRY_MIRROR}
  87.  
  88. # dockerを再起動してkubeletを起動します
  89. systemctlデーモンリロード
  90. systemctl dockerを再起動します
  91. systemctl kubelet を有効にする && systemctl kubelet を開始する
  92.  
  93. docker バージョン

注: 私がインストールした K8S のバージョンは 1.18.2 です。 K8S をインストールするときに、インストールする他のバージョンを選択することもできます。

auto_install_docker_k8s.sh スクリプト ファイルに実行権限を付与します。

  1. chmod a+x ./auto_install_docker_k8s.sh

auto_install_docker_k8s.sh スクリプト ファイルを実行します。

  1. ./auto_install_docker_k8s.sh

注意: auto_install_docker_k8s.sh スクリプト ファイルは各サーバーで実行する必要があります。

マスターノードを初期化する

操作はbinghe101 サーバー上でのみ実行されます。

1. マスターノードのネットワーク環境を初期化する

  1. # マスターノードでのみ実行されます
  2. # エクスポート コマンドは現在のシェル セッションでのみ有効です。新しいシェルウィンドウを開いた後、インストールプロセスを続行する場合は、ここでエクスポートコマンドを再実行してください。
  3. エクスポート MASTER_IP=192.168.175.101
  4. # k8s.masterを希望のdnsNameに置き換えます
  5. APISERVER_NAME=k8s.master をエクスポートします。
  6. # Kubernetes コンテナ グループが配置されているネットワーク セグメント。このネットワーク セグメントは、インストール後に Kubernetes によって作成され、物理ネットワークには事前に存在しません。
  7. エクスポート POD_SUBNET=172.18.0.1/16
  8. echo "${MASTER_IP} ${APISERVER_NAME}" >> /etc/hosts

2. マスターノードを初期化する

binghe101 サーバーに init_master.sh スクリプト ファイルを作成します。ファイルの内容は次のとおりです。

  1. #!/bin/bash
  2. # エラーが発生した場合はスクリプトを終了します
  3. セット-e
  4.  
  5. [ ${#POD_SUBNET} -eq 0 ] の場合 || [ ${#APISERVER_NAME} -eq 0 ];それから 
  6. echo -e "\033[31;1m環境変数POD_SUBNETとAPISERVER_NAMEが設定されていることを確認してください\033[0m"  
  7. 現在の POD_SUBNET=$POD_SUBNET をエコーし​​ます
  8. 現在の APISERVER_NAME=$APISERVER_NAME をエコーし​​ます
  9. 出口1
  10. フィ
  11.  
  12.  
  13. # 完全な設定オプションを見る https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta2
  14. rm -f ./kubeadm-config.yaml
  15. 猫 <<EOF > ./kubeadm-config.yaml
  16. APIバージョン: kubeadm.k8s.io/v1beta2
  17. 種類: ClusterConfiguration
  18. kubernetesバージョン: v1.18.2
  19. イメージリポジトリ: registry.cn-hangzhou.aliyuncs.com/google_containers
  20. コントロールプレーンエンドポイント: "${APISERVER_NAME}:6443"  
  21. ネットワーキング:
  22. サービスサブネット: "10.96.0.0/16"  
  23. ポッドサブネット: "${POD_SUBNET}"  
  24. dnsDomain: "cluster.local"  
  25. 終了
  26.  
  27. # kubeadm を初期化する
  28. # サーバーの速度に応じて、3〜10分待つ必要があります
  29. kubeadm init --config=kubeadm-config.yaml --upload-certs  
  30.  
  31. # kubectl を設定する
  32. rm -rf /root/.kube/
  33. mkdir /root/.kube/
  34. cp -i /etc/kubernetes/admin.conf /root/.kube/config
  35.  
  36. # calicoネットワークプラグインをインストールする
  37. # 参照ドキュメント https://docs.projectcalico.org/v3.13/getting-started/kubernetes/self-managed-onprem/onprems
  38. echo "calico-3.13.1 をインストール"  
  39. rm -f カリコ-3.13.1.yaml
  40. https://kuboard.cn/install-script/calico/calico-3.13.1.yaml を取得します。
  41. kubectl を適用 -f calico-3.13.1.yaml

init_master.sh スクリプト ファイルに実行権限を付与します。

  1. chmod a+x ./init_master.sh

init_master.sh スクリプト ファイルを実行します。

  1. ./init_master.sh

3. マスターノードの初期化結果を確認する

(1)すべてのコンテナグループが実行状態であることを確認する

  1. # 次のコマンドを実行し、すべてのコンテナ グループが実行状態になるまで 3 ~ 10 分間待機します。
  2. kubectl get pod -n kube-system -o Wide を監視します

下記の通りです。

  1. [root@binghe101 ~]# watch kubectl get pod -n kube-system -o Wide
  2. 2.0秒ごとに: kubectl get pod -n kube-system -o wide binghe101: 2020年5月2日土曜日 23:40:33
  3.  
  4. 名前準備完了 ステータス 再起動 年齢 IP ノード 指名ノード 準備完了 ゲート
  5. calico-kube-controllers-5b8b769fcd-l2tmm 1/1 実行中 0 3分59秒 172.18.203.67 binghe101 <なし> <なし>
  6. calico-node-8krsl 1/​​1 実行中 0 3分59秒 192.168.175.101 binghe101 <なし> <なし>
  7. coredns-546565776c-rd2zr 1/1 実行中 0 3分59秒 172.18.203.66 binghe101 <なし> <なし>
  8. coredns-546565776c-x8r7l 1/1 実行中 0 3分59秒 172.18.203.65 binghe101 <なし> <なし>
  9. etcd-binghe101 1/1 実行中 0 4分14秒 192.168.175.101 binghe101 <なし> <なし>
  10. kube-apiserver-binghe101 1/1 実行中 0 4分14秒 192.168.175.101 binghe101 <なし> <なし>
  11. kube-controller-manager-binghe101 1/1 実行中 0 4分14秒 192.168.175.101 binghe101 <なし> <なし>
  12. kube-proxy-qnffb 1/1 実行中 0 3分59秒 192.168.175.101 binghe101 <なし> <なし>
  13. kube-scheduler-binghe101 1/1 実行中 0 4分14秒 192.168.175.101 binghe101 <なし> <なし>

(2)マスターノードの初期化結果を表示する

  1. kubectl ノードを取得 -o ワイド

下記の通りです。

  1. [root@binghe101 ~]# kubectl get nodes -o wide
  2. 名前ステータス 役割 年齢 バージョン 内部 IP 外部 IP OS イメージ カーネル バージョン コンテナ ランタイム
  3. 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. 参加コマンドのパラメータを取得する

マスター ノードで次のコマンドを実行して、参加コマンドのパラメータを取得します。

  1. kubeadm トークン作成  --print-join-command  

具体的な実装は以下のとおりです。

  1. [root@binghe101 ~]# kubeadm トークン作成  --print-join-command  
  2. W0502 23:44:55.218947 59318 configset.go:202] 警告: kubeadm は API グループコンポーネント構成を検証できません[kubelet.config.k8s.io kubeproxy.config.k8s.io]
  3. kubeadm は、k8s.master:6443に参加します--token s0hoh1.2cwyf1fyyjl2h04a --discovery-token-ca-cert-hash sha256:6d78e360dc64d84762611ac6beec8ac0f0fe9f72a5c2cca008df949e07827c19  

その中に、次のような出力行があります。

  1. kubeadm は、k8s.master:6443に参加します--token s0hoh1.2cwyf1fyyjl2h04a --discovery-token-ca-cert-hash sha256:6d78e360dc64d84762611ac6beec8ac0f0fe9f72a5c2cca008df949e07827c19  

このコード行は取得された結合コマンドです。

注: join コマンドのトークンは 2 時間有効です。 2 時間以内に、このトークンを使用して任意の数のワーカーノードを初期化できます。

2. ワーカーノードを初期化する

すべてのワーカー ノード (ここでは、binghe102 サーバーと binghe103 サーバー) で実行します。

init_worker.sh スクリプト ファイルを作成します。ファイルの内容は次のとおりです。

  1. # ワーカーノードでのみ実行されます
  2. # 192.168.175.101 はマスターノードのイントラネット IP です
  3. エクスポート MASTER_IP=192.168.175.101
  4. #k8s.masterをマスターノードの初期化時に使用したAPISERVER_NAMEに置き換えます
  5. APISERVER_NAME=k8s.master をエクスポートします。
  6. echo "${MASTER_IP} ${APISERVER_NAME}" >> /etc/hosts
  7.  
  8. # マスターノード上のkubeadm token createコマンドjoin出力に置き換えます 
  9. kubeadm は、k8s.master:6443に参加します--token s0hoh1.2cwyf1fyyjl2h04a --discovery-token-ca-cert-hash sha256:6d78e360dc64d84762611ac6beec8ac0f0fe9f72a5c2cca008df949e07827c19  

このうち、kubeadm join... は、マスターノード上の kubeadm token create コマンドによる join 出力です。

init_worker.sh スクリプト ファイルに実行権限を付与し、init_worker.sh スクリプト ファイルを実行します。

  1. chmod a+x ./init_worker.sh
  2. ./init_worker.sh

3. 初期化結果を表示する

初期化結果を表示するには、マスターノードで次のコマンドを実行します。

  1. kubectl ノードを取得 -o ワイド

下記の通りです。

  1. [root@binghe101 ~]# kubectl ノードを取得する
  2. 名前ステータス 役割 年齢 バージョン
  3. binghe101 レディマスター 20m v1.18.2
  4. binghe102 準備完了 <なし> 2分46秒 v1.18.2
  5. binghe103 準備完了 <なし> 2分46秒 v1.18.2

注: kubectl get nodes コマンドの後に -o wide パラメータを追加すると、より多くの情報が出力されます。

K8S クラスターの再起動によって発生する問題

1. ワーカーノードに障害が発生し、起動できない

マスターノードの IP アドレスが変更され、ワー​​カーノードの起動に失敗します。 K8S クラスターを再インストールし、すべてのノードに固定のイントラネット IP アドレスがあることを確認する必要があります。

2. ポッドがクラッシュするか、正常にアクセスできない

サーバーを再起動した後、次のコマンドを使用して Pod の実行ステータスを確認します。

  1. kubectl ポッドを取得--all-namespaces  

多くのポッドが実行状態ではないことがわかりました。このとき、正常に動作していない Pod を削除するには、次のコマンドを使用する必要があります。

  1. kubectl delete pod <ポッド名> -n <ポッド名スペック>

注: Deployment や StatefulSet などのコントローラーを使用して Pod が作成された場合、K8S は代わりに新しい Pod を作成し、再起動された Pod は通常は正常に動作します。

この記事はWeChatの公開アカウント「Glacier Technology」から転載したものです。下のQRコードからフォローできます。この記事を転載する場合は、Glacier Technology 公式アカウントまでご連絡ください。

<<:  K8s 使用率が 72% に達する、CNCF 中国クラウドネイティブ調査が発表

>>:  ビジネス革新に欠かせないクラウドネイティブアーキテクチャへの道

推薦する

ダブルイレブンの背後にある見えない戦場: 電子商取引のバックエンドIT技術のレビュー

活気に溢れた「ダブル11」電子商取引戦争の背後には、IT技術というもう一つの戦場も無視できない。この...

マーケティングに使えるお金はたったの1ドル。PRには使わないで

少し前に、「マーケティングに使えるお金が1ドルしか残っていないので、PRに使います」という記事が、徐...

ハイブリッドクラウド?プライベートクラウド?パブリッククラウド?所により曇り?選び方

以前は、クラウド コンピューティングが存在するかどうかが議論されていましたが、現在はプライベート ク...

クラウドネイティブデータベースが必要な理由

データベースは常にアプリケーション開発の非常に重要な部分です。 MySQL から Amazon の ...

raksmartはどうですか?ロサンゼルス国際 BGP ライン VPS シンプルレビュー

raksmartはどうですか? raksmart の VPS はどうですか? raksmart ロサ...

xenspec: Netflix と HBO を視聴できる、月額 2.4 ドルで 1Gbps の無制限トラフィックを提供する KVM 仮想 VPS の簡単なレビュー

Xenspec は先月、自社のプラットフォームを最適化し、アップグレードしたと電子メールで述べ、ホス...

動画マーケティングを無視してはいけない9つの理由

はじめに:中国では何人の人が動画を視聴しているでしょうか? 関連統計によると、平均してインターネット...

#11.11# メガレイヤー: 最低 159 元/年、フィリピン VPS\香港 VPS\米国 VPS、20M 帯域幅、無制限トラフィック

メガレイヤーは、11 月 30 日まで、今年の Double Eleven VPS プロモーションを...

企業ウェブサイト向けのオリジナル記事リソースをより適切に見つける方法

最近、ウェブサイトの構築と最適化に忙しく、ブログの更新が遅くなってしまいました。この間、多くの企業サ...

不均一な業界パフォーマンスに合わせて最適化戦略を調整する方法

ウェブサイトの最適化は普遍的な技術でしょうか? ある程度の最適化作業経験を持つ人なら、それがすべての...

Baidu でオンライン ショッピングのキーワードを検索する際の不正防止のヒントの分析

今日、Taobaoサイトを設置しました。Taobaoインデックスの高い単語を探したところ、Taoba...

西海岸の人気データセンター、サンノゼのVirmachのAMD VPSのレビュー

virmachの米国VPSの西海岸で人気のデータセンターはロサンゼルスかサンノゼです。最近、virm...

マイクロソフトがWindows 8の価格を発表、予約注文受付開始

テンセントテクノロジーニュース(潮汇)北京時間10月13日、海外メディアの報道によると、マイクロソフ...