Kube-vip を使用して高可用性の Kubernetes クラスターを構築する (フル バージョン)

Kube-vip を使用して高可用性の Kubernetes クラスターを構築する (フル バージョン)

[[422792]]

前回のコースのクラスターはシングルマスター クラスターであり、実稼働環境にはリスクが大きすぎます。可用性の高いクラスターを作成することは非常に重要です。ここでの高可用性は、主に kube-apiserver、etcd、kube-controller-manager、kube-scheduler などのコントロール パネルを指します。 kube-controller-manager および kube-scheduler コンポーネントは可用性が高く、Kubernetes クラスター自体によって実装されます。複数のコンポーネントがある場合、サービスを提供するリーダーとして 1 つが自動的に選択されるため、高可用性を手動で実装する必要はありません。 apiserver と etcd は、高可用性クラスターを手動で構築する必要があります。一般的な haproxy + keepalived アーキテクチャや、プロキシ実装に nginx を使用するなど、高可用性アーキテクチャは多数あります。

環境の準備

4 つのノード、すべて Centos 7.6 システム、カーネル バージョン: 3.10.0-1062.4.1.el7.x86_64、各ノードにホスト情報を追加します。

  1. ➜ ~ cat /etc/hosts
  2. 192.168.31.10 api.k8s。ローカル# VIP
  3. 192.168.31.31 マスター1
  4. 192.168.31.32 マスター2
  5. 192.168.31.33 マスター3
  6. 192.168.31.100 ノード1

このうち、192.168.31.10 は VIP であり、ドメイン名 api.k8s.local がマッピングに使用されます。

  • ノードのホスト名には標準の DNS 命名規則を使用する必要があります。また、デフォルトの localhost ホスト名は使用しないでください。さまざまなエラーが発生します。 Kubernetes プロジェクトでは、マシン名と Etcd に保存されるすべての API オブジェクトに標準の DNS 命名規則 (RFC 1123) を使用する必要があります。ホスト名を変更するには、コマンド hostnamectl set-hostname node1 を使用できます。

ファイアウォールを無効にします。

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

SELINUXを無効にする:

  1. ➜ ~ 0 を設定する
  2. ➜ ~ cat /etc/selinux/config
  3. SELINUX=無効

カーネル IPv4 転送を有効にするには br_netfilter モジュールをロードする必要があるため、モジュールをロードします。

  1. ➜ ~ modprobe br_netfilter

/etc/sysctl.d/k8s.conf ファイルを作成し、次の内容を追加します。

  1. net.bridge.bridge-nf-call-ip6tables = 1
  2. net.bridge.bridge-nf-call-iptables = 1
  3. ネット.ipv4.ip_forward = 1

変更を有効にするには、次のコマンドを実行します。

  1. ➜ ~ sysctl -p /etc/sysctl.d/k8s.conf

ipvsをインストールします:

  1. ➜ ~ cat > /etc/sysconfig/modules/ipvs.modules <<EOF
  2. #!/bin/bash
  3. modprobe --ip_vs  
  4. modprobe --ip_vs_rr  
  5. modprobe --ip_vs_wrr  
  6. modprobe --ip_vs_sh  
  7. modprobe --nf_conntrack_ipv4  
  8. 終了
  9. ➜ ~ chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

上記のスクリプトによって作成された /etc/sysconfig/modules/ipvs.modules ファイルにより、ノードの再起動後に必要なモジュールが自動的にロードされるようになります。 lsmod を実行します | grep -e ip_vs -e nf_conntrack_ipv4 コマンドを実行して、必要なカーネル モジュールが正しくロードされているかどうかを確認します。

次に、各ノードに ipset パッケージがインストールされていることを確認する必要があります。

  1. ➜ ~ yum インストール ipset

ipvs のプロキシ ルールを表示するには、管理ツール ipvsadm をインストールするのが最適です。

  1. ➜ ~ yum インストール ipvsadm

サーバー時間を同期する

  1. ➜ ~ yum インストール chrony -y
  2. ➜ ~ systemctl chronyd を有効にする
  3. ➜ ~ systemctl chronyd を起動します
  4. ➜ ~ chronyc ソース
  5. 210 ソース= 4
  6. MS/IPアドレス 階層 ポーリング 到達 最終受信最終サンプル
  7. =======================================================================
  8. ^+ sv1.ggsrv.de 2 6 17 32 -823us[-1128us] +/- 98ms
  9. ^- montreal.ca.logiplex.net 2 6 17 32 -17ms[ -17ms] +/- 179ms
  10. ^- ntp6.flashdance.cx 2 6 17 32 -32ms[ -32ms] +/- 161ms
  11. ^* 119.28.183.184 2 6 33 32 +661us[ +357us] +/- 38ms
  12. ➜ ~日付 
  13. 2021年8月31日火曜日 14:36:14 CST

スワップパーティションを無効にします。

  1. ➜ ~ スワップオフ -a

/etc/fstab ファイルを変更し、SWAP の自動マウントをコメント アウトし、free -m を使用してスワップが無効になっていることを確認します。 swappiness パラメータを調整するには、/etc/sysctl.d/k8s.conf を変更し、次の行を追加します。

  1. vm.swappiness=0

変更を有効にするには、sysctl -p /etc/sysctl.d/k8s.conf を実行します。

Containerdをインストールする

コンテナ ランタイム containerd の基本的な使い方を学習したので、各ノードに Containerd をインストールしましょう。

containerd は runc を呼び出す必要があるため、最初に runc もインストールする必要があります。ただし、containerd は関連する依存関係を含む圧縮パッケージ cri-containerd-cni-${VERSION}.${OS}-${ARCH}.tar.gz を提供しており、これを直接インストールに使用できます。まず、リリース ページから圧縮パッケージの最新バージョン (現在はバージョン 1.5.5) をダウンロードします。

  1. ➜ ~ wget https://github.com/containerd/containerd/releases/download/v1.5.5/cri-containerd-cni-1.5.5-linux-amd64.tar.gz
  2. # 制限がある場合は、ダウンロードを高速化するために次のURLに置き換えることもできます
  3. # wget https://download.fastgit.org/containerd/containerd/releases/download/v1.5.5/cri-containerd-cni-1.5.5-linux-amd64.tar.gz

圧縮パッケージをシステムのさまざまなディレクトリに直接解凍します。

  1. ➜ ~ tar -C / -xzf cri-containerd-cni-1.5.5-linux-amd64.tar.gz

次に、~/.bashrc ファイルの PATH 環境変数に /usr/local/bin と /usr/local/sbin を追加します。

  1. エクスポート PATH=$PATH:/usr/ローカル/bin:/usr/ローカル/sbin

次に、次のコマンドを実行して、すぐに有効にします。

  1. ➜ ~ ソース ~/.bashrc

containerd のデフォルトの設定ファイルは /etc/containerd/config.toml です。次のコマンドを実行すると、デフォルト構成を生成できます。

  1. ➜ ~ mkdir -p /etc/containerd
  2. ➜ ~ containerd 設定デフォルト> /etc/containerd/config.toml

systemd を init システムとして使用する Linux ディストリビューションの場合、コンテナの cgroup ドライバーとして systemd を使用すると、リソースが不足しているときにノードがより安定するため、containerd の cgroup ドライバーを systemd に設定することをお勧めします。

以前に生成された設定ファイル /etc/containerd/config.toml を変更し、plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options 設定ブロックの下で SystemdCgroup を true に設定します。

  1. [プラグイン。 「io.containerd.grpc.v1.cri」 .containerd.runtimes.runc]
  2. ...
  3. [プラグイン。 「io.containerd.grpc.v1.cri」 .containerd.runtimes.runc.options]
  4. SystemdCgroup = true  
  5. ....

次に、イメージ リポジトリのアクセラレータを構成します。 cri 構成ブロックの下の registry 構成ブロックで registry.mirrors を構成する必要があります。

  1. [プラグイン。 [[io.containerd.grpc.v1.cri] ]
  2. ...
  3. # サンドボックスイメージ = "k8s.gcr.io/pause:3.5"  
  4. サンドボックスイメージ = "registry.aliyuncs.com/k8sxio/pause:3.5"  
  5. ...
  6. [プラグイン。 ["io.containerd.grpc.v1.cri" .レジストリ]
  7. [プラグイン。 ["io.containerd.grpc.v1.cri" .registry.mirrors]
  8. [プラグイン。 "io.containerd.grpc.v1.cri" .registry.mirrors. [[docker.io] ]
  9. エンドポイント = [ "https://bqr1dr1n.mirror.aliyuncs.com" ]
  10. [プラグイン。 "io.containerd.grpc.v1.cri" .registry.mirrors. [[ ... [
  11. エンドポイント = [ "https://registry.aliyuncs.com/k8sxio" ]

上記でダウンロードした containerd 圧縮パッケージには etc/systemd/system/containerd.service ファイルが含まれているため、systemd を使用して containerd をデーモン プロセスとして実行するように構成できます。これで、次のコマンドを直接実行して containerd を起動できます。

  1. ➜ ~ systemctlデーモンリロード
  2. ➜ ~ systemctl コンテナを有効にする--now  

起動が完了したら、containerd のローカル CLI ツール ctr や crictl などを使用してバージョンを確認できます。

  1. ➜ ~ ctr バージョン
  2. クライアント:
  3. バージョン: v1.5.5
  4. リビジョン: 72cec4be58a9eb6b2910f5d10f1c01ca47d231c0
  5. Goバージョン: go1.16.6
  6.  
  7. サーバ:
  8. バージョン: v1.5.5
  9. リビジョン: 72cec4be58a9eb6b2910f5d10f1c01ca47d231c0
  10. 識別子: cd2894ad-fd71-4ef7-a09f-5795c7eb4c3b
  11. ➜ ~ crictl バージョン
  12. バージョン: 0.1.0
  13. ランタイム名: containerd
  14. ランタイムバージョン: v1.5.5
  15. ランタイム API バージョン: v1alpha2

ロードバランサー

従来の haproxy+keepalived や nginx プロキシの使用など、apiserver にロード バランサを提供する方法は多数あります。ここでは比較的新しいツール kube-vip を使用します。

kube-vip (https://kube-vip.io/) は、コントロール プレーン ノード上で Kubernetes ネイティブの HA ロード バランシングを提供できます。クラスターの高可用性を実現するために、HAProxy と Keepalived を外部で設定する必要がなくなりました。

従来、プライベート環境で Kubernetes クラスターを作成する場合、マルチコントロールプレーン クラスターを作成するためにハードウェア/ソフトウェア ロードバランサーを準備する必要がありました。ほとんどの場合、この機能を実現するために HAProxy + Keepalived を使用することを選択します。通常は、2 つのロード バランサ仮想マシンを作成し、VIP を割り当て、VIP を使用してロード バランサにサービスを提供して、VIP を介してバックエンドの Kubernetes コントローラ プレーン ノードにトラフィックをリダイレクトします。

haproxy+キープアライブ

kube-vip を使用するとどうなるでしょうか?

kube-vip

kube-vip は、静的ポッドを介してコントロール プレーン ノード上で実行できます。これらのポッドは、ARP セッションを通じて各ノード上の他のホストを識別します。 Metal LB と同様に、ロード バランサーを設定するには BGP または ARP を選択できます。 ARP モードでは、リーダーが選出され、このノードは仮想 IP を継承してクラスター内の負荷分散のリーダーになりますが、BGP モードでは、すべてのノードが VIP アドレスを通知します。

クラスターのリーダーは VIP を割り当て、構成で宣言された選択されたインターフェースにバインドします。リーダーが変更されると、まず VIP が取り消されます。または、失敗した場合は、次に選出されたリーダーによって VIP が直接割り当てられます。 VIP がホスト間で移動すると、その VIP を使用するホストは、ARP が期限切れになるまで (通常 30 秒)、以前の VIP <-> MAC アドレス マッピングを保持し、新しい VIP <-> MAC マッピングを取得します。このマッピングは、Gratuitous ARP ブロードキャストを使用して最適化できます。

kube-vip は、Gratuitous arp (オプション) をブロードキャストするように構成できます。これにより、通常、vip <-> MAC アドレス マッピングが変更されたことがすべてのローカル ホストに直ちに通知されます。

kube-vip を使用してクラスターの高可用性を実現するには、まず master1 ノードで基本的な Kubernetes 静的 Pod リソース マニフェスト ファイルを生成します。

  1. ➜ ~ mkdir -p /etc/kubernetes/manifests/
  2. #VIPアドレスを設定する
  3. ➜ ~ エクスポート VIP=192.168.31.10
  4. # ネットワークカード名を設定する
  5. ➜ ~ エクスポート INTERFACE=ens33
  6. ➜ ~ ctr イメージをプル docker.io/plndr/kube-vip:v0.3.8
  7. # 静的なPodリソースリストを出力するには、次のコンテナを使用します
  8. ➜ ~ ctr 実行--rm --net-host docker.io/plndr/kube-vip:v0.3.8 vip \  
  9. /kube-vip マニフェストポッド \
  10. --インターフェース $INTERFACE \  
  11. --vip $VIP \  
  12. --コントロールプレーン \  
  13. --サービス\  
  14. --arp \  
  15. --リーダー選挙 | /etc/kubernetes/manifests/kube-vip.yaml を編集します。  
  16. APIバージョン: v1
  17. 種類: ポッド
  18. メタデータ:
  19. 作成タイムスタンプ: null  
  20. 名前: kube-vip
  21. 名前空間: kube-system
  22. 仕様:
  23. コンテナ:
  24. -引数:
  25. - マネージャー
  26. 環境:
  27. -名前: vip_arp
  28. 値: "true"  
  29. -名前: vip_interface
  30. 値: ens33
  31. -名前: ポート
  32. 値: "6443"  
  33. -名前: vip_cidr
  34. 値: "32"  
  35. -名前: cp_enable
  36. 値: "true"  
  37. -名前: cp_namespace
  38. 値: kube-system
  39. -名前: vip_ddns
  40. 値: "false"  
  41. -名前: svc_enable
  42. 値: "true"  
  43. -名前: vip_leaderelection
  44. 値: "true"  
  45. -名前: vip_leaseduration
  46. 値: "5"  
  47. -名前: vip_renewdeadline
  48. 値: "3"  
  49. -名前: vip_retryperiod
  50. 値: "1"  
  51. -名前: vip_address
  52. 値: 192.168.31.10
  53. イメージ: ghcr.io/kube-vip/kube-vip:v0.3.8
  54. imagePullPolicy: 常に
  55. 名前: kube-vip
  56. リソース: {}
  57. セキュリティコンテキスト:
  58. 機能:
  59. 追加
  60. -NET_ADMIN
  61. -NET_RAW
  62. -SYS_TIME
  63. ボリュームマウント:
  64. - マウントパス: /etc/kubernetes/admin.conf
  65. 名前: kubeconfig
  66. ホストネットワーク: true  
  67. ボリューム:
  68. - ホストパス:
  69. パス: /etc/kubernetes/admin.conf
  70. 名前: kubeconfig
  71. 状態: {}

ここでは、vip を 192.168.31.10 に設定します。まず、master1 ノードがリーダーとして選出されます。次に、この VIP を使用してコントローラー プラットフォームを初期化します。

コントロールプレーンを初期化する

上記の関連環境設定も完了です。これで Kubeadm をインストールできます。 yum ソースを指定してインストールします。

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

もちろん、上記の yum ソースには科学的なインターネット アクセスが必要です。科学的にインターネットにアクセスできない場合は、インストールに Alibaba Cloud ソースを使用できます。

  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. 終了

次に、kubeadm、kubelet、kubectl をインストールします。

  1. # --disableexcludes kubernetes以外のすべてのリポジトリを無効にします 
  2. ➜ ~ yum makecache 高速
  3. ➜ ~ yum インストール -y kubelet-1.22.1 kubeadm-1.22.1 kubectl-1.22.1 --disableexcludes=kubernetes  
  4. ➜ ~ kubeadm バージョン
  5. kubeadm バージョン: &version.Info{メジャー: "1" 、マイナー: "22" 、GitVersion: "v1.22.1" 、GitCommit: "632ed300f2c34f6d6d15ca4cef3d3c7073412212" 、GitTreeState: "clean" 、BuildDate: "2021-08-19T15:44:22Z" 、GoVersion: "go1.16.7" 、コンパイラ: "gc" 、プラットフォーム: "linux/amd64" }

ここではバージョン v1.22.1 がインストールされており、起動時にマスター ノードの kubelet が起動するように設定されていることがわかります。

  1. ➜ ~ systemctl enable --now kubelet  

上記のすべての操作は、すべてのノードで構成する必要があります。

kubelet --help コマンドを実行すると、ほとんどのコマンドライン パラメータが非推奨であることがわかります。これは、公式の推奨事項では、--config を使用して構成ファイルを指定し、構成ファイルでこれらのパラメータの構成を指定するためです。詳細については、公式ドキュメント「設定ファイルを使用して Kubelet パラメータを設定する」を参照してください。このようにして、Kubernetes は動的な Kubelet 構成 (Dynamic Kubelet Configuration) をサポートできます。「ライブ クラスターでノードの Kubelet を再構成する」を参照してください。

次に、次のコマンドを使用して、master1 ノードでのクラスター初期化に使用されるデフォルト構成を出力できます。

  1. ➜ ~ kubeadm config print init-defaults --component-configs KubeletConfiguration > kubeadm.yaml  

次に、クラスターの初期化時に Kubernetes が必要とするイメージのアドレスを指定するように imageRepository を変更し、kube-proxy のモードを ipvs にするなど、独自のニーズに応じて構成を変更します。さらに、ここでは flannel ネットワーク プラグインをインストールするので、networking.podSubnet を 10.244.0.0/16 に設定する必要があることに注意してください。

  1. # kubeadm.yaml
  2. APIバージョン: kubeadm.k8s.io/v1beta3
  3. ブートストラップトークン:
  4. - グループ:
  5. - システム:ブートストラップ:kubeadm:デフォルト-node-token
  6. トークン: abcdef.0123456789abcdef
  7. 終了時刻: 24h0m0s
  8. 使用法:
  9. - 署名
  10. - 認証
  11. 種類: InitConfiguration
  12. ローカルAPIエンドポイント:
  13. AdvertiseAddress: 192.168.31.31 #現在のノードのイントラネットIPを指定します
  14. バインドポート: 6443
  15. ノード登録:
  16. criSocket: /run/containerd/containerd.sock # containerd の Unix ソケット アドレスを使用する
  17. イメージプルポリシー: IfNotPresent
  18. 名前: マスター1
  19. taints: #マスターノードにtaintsを追加して、マスターノードがアプリケーションをスケジュールできないようにします
  20. - 効果: "NoSchedule"  
  21. キー: "node-role.kubernetes.io/master"  
  22. ---  
  23. APIバージョン: kubeproxy.config.k8s.io/v1alpha1
  24. 種類: KubeProxyConfiguration
  25. モード: ipvs # kube-proxy モード
  26. ---  
  27. APIバージョン: kubeadm.k8s.io/v1beta3
  28. 証明書ディレクトリ: /etc/kubernetes/pki
  29. クラスター名: kubernetes
  30. コントローラーマネージャー: {}
  31. ドメイン名: {}
  32. など:
  33. 地元
  34. データディレクトリ: /var/lib/etcd
  35. イメージリポジトリ: registry.aliyuncs.com/k8sxio
  36. 種類: ClusterConfiguration
  37. kubernetesバージョン: 1.22.1
  38. コントロールプレーンエンドポイント: api.k8s。 local :6443 # コントロールプレーンのエンドポイントアドレスを設定する
  39. apiサーバー:
  40. 追加引数:
  41. 認証モード: ノード、RBAC
  42. コントロールプレーンのタイムアウト: 4分0秒
  43. certSANs: # 他のマスターノードの関連情報を追加します
  44. - api.k8s.local  
  45. -マスター1
  46. -マスター2
  47. -マスター3
  48. - 192.168.31.30
  49. - 192.168.31.31
  50. - 192.168.31.32
  51. ネットワーキング:
  52. dnsドメイン: cluster.local  
  53. サービスサブネット: 10.96.0.0/12
  54. podSubnet: 10.244.0.0/16 # ポッドサブネットを指定します
  55. スケジューラ: {}
  56. ---  
  57. APIバージョン: kubelet.config.k8s.io/v1beta1
  58. 認証:
  59. 匿名:
  60. 有効: false  
  61. ウェブフック:
  62. キャッシュTTL: 0秒
  63. 有効: true  
  64. x509:
  65. クライアントCAファイル: /etc/kubernetes/pki/ca.crt
  66. 承認:
  67. モード: Webhook
  68. ウェブフック:
  69. キャッシュ承認TTL: 0秒
  70. キャッシュ未承認TTL: 0秒
  71. クラスターDNS:
  72. - 10.96.0.10
  73. クラスタードメイン: cluster.local  
  74. cpuManagerReconcilePeriod: 0秒
  75. 立ち退き圧力遷移期間: 0 秒
  76. ファイルチェック頻度: 0 秒
  77. healthzBindアドレス: 127.0.0.1
  78. ヘルスポート: 10248
  79. httpチェック頻度: 0秒
  80. 画像の最小GC年齢: 0秒
  81. 種類: KubeletConfiguration
  82. cgroupDriver: systemd # cgroup ドライバーを設定する
  83. ログ: {}
  84. メモリスワップ: {}
  85. ノードステータスレポート頻度: 0 秒
  86. ノードステータス更新頻度: 0 秒
  87. 証明書を回転: true  
  88. ランタイムリクエストタイムアウト: 0 秒
  89. シャットダウン猶予期間: 0 秒
  90. シャットダウン猶予期間クリティカルポッド: 0 秒
  91. 静的ポッドパス: /etc/kubernetes/manifests
  92. ストリーミング接続アイドルタイムアウト: 0 秒
  93. 同期周波数: 0秒
  94. ボリューム統計アグ期間: 0 秒
  • 上記のリソース リストのドキュメントは非常に複雑です。上記のリソース オブジェクトに対応するプロパティを完全に理解するには、対応する godoc ドキュメント (https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta3) を参照してください。

ここで注目すべきは、ClusterConfiguration ブロックの構成にコントロール プレーン アドレスを追加し、証明書の署名にドメイン名 api.k8s.local を追加して、vip にマッピングしたことです。

  1. コントロールプレーンエンドポイント: api.k8s。 local :6443 # コントロールプレーンのエンドポイントアドレスを設定する
  2. apiサーバー:
  3. 追加引数:
  4. 認証モード: ノード、RBAC
  5. コントロールプレーンのタイムアウト: 4分0秒
  6. certSANs: # 他のマスターノードの関連情報を追加します
  7. - api.k8s.local  
  8. -マスター1
  9. -マスター2
  10. -マスター3
  11. - 192.168.31.30
  12. - 192.168.31.31
  13. - 192.168.31.32

クラスターの初期化を開始する前に、kubeadm config images pull --config kubeadm.yaml を使用して、各サーバーノード上の k8s に必要なコンテナイメージを事前にプルすることができます。

設定ファイルが準備できたら、次のコマンドを使用してまず関連するイメージをプルできます。

  1. ➜ ~ kubeadm config イメージ pull --config kubeadm.yaml  
  2. [config/images] registry.aliyuncs.com/k8sxio/kube-apiserver:v1.22.1 をプルしました
  3. [config/images] registry.aliyuncs.com/k8sxio/kube-controller-manager:v1.22.1 をプルしました
  4. [config/images] registry.aliyuncs.com/k8sxio/kube-scheduler:v1.22.1 をプルしました
  5. [config/images] registry.aliyuncs.com/k8sxio/kube-proxy:v1.22.1 をプルしました
  6. [config/images] registry.aliyuncs.com/k8sxio/pause:3.5 をプルしました
  7. [config/images] registry.aliyuncs.com/k8sxio/etcd:3.5.0-0 をプルしました
  8. イメージ「registry.aliyuncs.com/k8sxio/coredns:v1.8.4」のプル失敗しました:出力:時刻= 「2021-08-31T15:09:13+08:00」  レベル= 致命的 メッセージ = "イメージをプルしています: RPC エラー: コード = NotFound 説明 = イメージ \"registry.aliyuncs.com/k8sxio/coredns:v1.8.4\" をプルして解凍できませんでした: 参照 \"registry.aliyuncs.com/k8sxio/coredns:v1.8.4\" を解決できませんでした: registry.aliyuncs.com/k8sxio/coredns:v1.8.4: 見つかりません"  
  9. エラー: 終了ステータス 1
  10. このエラースタックトレースを表示するには以下を実行します。    --v=5以上 

上記の coredns イメージをプルするときにエラーが発生しました。画像が見つかりませんでした。手動でイメージを取得し、イメージ アドレスに再度タグを付けることができます。

  1. ➜ ~ ctr -n k8s.io i をプルします docker.io/coredns/coredns:1.8.4
  2. ➜ ~ ctr -n k8s.io i タグ docker.io/coredns/coredns:1.8.4 registry.aliyuncs.com/k8sxio/coredns:v1.8.4

次に、上記の構成ファイルを使用して、master1 ノードを初期化できます。

  1. ➜ ~ kubeadm init --upload-certs --config kubeadm.yaml  
  2. [init] Kubernetesバージョンの使用: v1.22.1
  3. [プリフライト] プリフライトチェックの実行
  4. [事前準備] Kubernetes クラスターの設定必要なイメージを取得する
  5. ......
  6.  
  7. Kubernetes コントロールプレーンが正常に初期化されました。
  8.  
  9. クラスターの使用を開始するには通常のユーザーとして以下を実行する必要があります
  10.  
  11. mkdir -p $HOME/.kube
  12. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  13. sudo chown $(id -u):$(id -g) $HOME/.kube/config
  14.  
  15. あるいは、rootユーザーの場合は、次のコマンドを実行できます。
  16.  
  17. KUBECONFIG=/etc/kubernetes/admin.conf をエクスポートします。
  18.  
  19. ここで、クラスターポッド ネットワークをデプロイする必要があります。
  20. 「kubectl apply -f [podnetwork].yaml」を実行します。  以下にリストされているオプションいずれかを使用します
  21. https://kubernetes.io/docs/concepts/cluster-administration/addons/
  22.  
  23. 今すぐ参加できます 任意コントロール プレーン ノードで、それぞれに対して次のコマンドを rootとして実行します
  24.  
  25. kubeadm は api.k8sに参加しますローカル:6443 --token abcdef.0123456789abcdef \  
  26. --discovery-token-ca-cert-hash sha256:435fbc28490d1f897337923c19ec27bcf3639e9fe84e8448177777d23cae4176 \  
  27. --コントロールプレーン --証明書キー 7892cd62c5ab60b28b462af32c7e49aa73d5fd4f723352f3af6546a74e465abc  
  28.  
  29. 証明書キーによりクラスターの機密データアクセスできるようになるため、秘密にしておいてください。
  30. 安全対策として、アップロードされた証明書は2 時間以内に削除されます。必要に応じて、
  31. 「kubeadm init フェーズ upload-certs --upload-certs」  後で証明書を再読み込みします
  32.  
  33. 参加する 任意のワーカーノードで、各ワーカーノード次のコマンドをrootとして実行します
  34.  
  35. kubeadm は api.k8sに参加しますローカル:6443 --token abcdef.0123456789abcdef \  
  36. --ディスカバリートークンCA証明書ハッシュsha256:435fbc28490d1f897337923c19ec27bcf3639e9fe84e8448177777d23cae4176  

ここで初期化される --upload-certs フラグは、すべてのコントロール プレーン インスタンス間の共有証明書をクラスターにアップロードするために使用されます。次に、インストールプロンプトに従って kubeconfig ファイルをコピーします。

  1. ➜ ~ mkdir -p $HOME/.kube
  2. ➜ ~ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  3. ➜ ~ sudo chown $(id -u):$(id -g) $HOME/.kube/config

その後、上記のプロンプトに従って他のコントロール プレーン ノードを追加できます。

コントロールプレーンの追加

他の各コントロール プレーン ノードに対して、最初のノード master1 で以前に kubeadm init 出力によって提供された join コマンドを実行して、コントロール プレーン ノードを追加します。

  1. ➜ ~ kubeadm はapi.k8s に参加しますローカル:6443 --トークン abcdef.0123456789abcdef --ディスカバリトークンca証明書ハッシュ sha256:435fbc28490d1f897337923c19ec27bcf3639e9fe84e8448177777d23cae4176 --コントロールプレーン --証明書キー 7892cd62c5ab60b28b462af32c7e49aa73d5fd4f723352f3af6546a74e465abc  
  2. [プリフライト] プリフライトチェックの実行
  3. [プリフライト]クラスターから構成を読み取っています...
  4. [プリフライト] 参考までに:この設定ファイル  'kubectl -n kube-system get cm kubeadm-config -o yaml'  
  5. [preflight] 新しいコントロールプレーンインスタンスを初期化する前に事前チェックを実行する
  6. ......
  7. このノードはクラスターに参加し新しいコントロール プレーン インスタンスが作成されました。
  8.  
  9. * 証明書署名要求がapiserver送信され承認が受信されました。
  10. * Kubelet に新しい安全な接続の詳細通知されました
  11. * コントロール プレーン (マスター) ラベルテイントが新しいノード適用されました。
  12. * Kubernetes コントロール プレーン インスタンスがスケールアップされました。
  13. *ローカル/stacked etcd クラスター新しい etcd メンバーが追加されました。
  14.  
  15. このノードからクラスターの管理を開始するには通常のユーザーとして以下を実行する必要があります
  16.  
  17. mkdir -p $HOME/.kube
  18. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  19. sudo chown $(id -u):$(id -g) $HOME/.kube/config
  20.  
  21. 「kubectl get nodes」を実行します このノードがクラスターに参加すること確認します。

上記の join コマンドは、他の 2 つのノード (master2 と master3) でも実行する必要があることに注意してください。上記のコマンドの --control-plane は、kubeadm join に新しいコントロール プレーンを作成するように通知し、--certificate-key はクラスター内の kubeadm-certs Secret からコントロール プレーン証明書をダウンロードし、指定されたキーを使用して復号化します。

2 つのノードがクラスターに追加された後、ノード上で kube-vip を実行し、現在のノードを kube-vip のメンバーにする必要もあります。同様に、次のコマンドを実行します。

  1. #VIPアドレスを設定する
  2. ➜ ~ エクスポート VIP=192.168.31.10
  3. # ネットワークカード名を設定する
  4. ➜ ~ エクスポート INTERFACE=ens33
  5. ➜ ~ ctr イメージをプル docker.io/plndr/kube-vip:v0.3.8
  6. # 静的なPodリソースリストを出力するには、次のコンテナを使用します
  7. ➜ ~ ctr 実行--rm --net-host docker.io/plndr/kube-vip:v0.3.8 vip \  
  8. /kube-vip マニフェストポッド \
  9. --インターフェース $INTERFACE \  
  10. --vip $VIP \  
  11. --コントロールプレーン \  
  12. --サービス\  
  13. --arp \  
  14. --リーダー選挙 | /etc/kubernetes/manifests/kube-vip.yaml を編集します。  

kube-vip の静的 Pod マニフェストが作成されると、kube-vip の Pod が起動され、期待どおりに実行されていることを確認できます。

  1. ➜ ~ kubectl get pods -A | grep vip
  2. kube-system kube-vip-master1 1/1 実行中 1 7分42秒
  3. kube-system kube-vip-master2 1/1 実行中 0 4分24秒
  4. kube-system kube-vip-master3 1/1 実行中 0 14秒

この時点でコントロール プレーン ノードは準備完了です。

  1. ➜ ~ kubectl ノードを取得する
  2. 名前ステータス 役割 年齢 バージョン
  3. master1 コントロールプレーン準備完了、マスター 9 分 18 秒 v1.22.1
  4. master2 コントロールプレーン準備完了、マスター 7m11s v1.22.1
  5. master3 コントロールプレーン準備完了、マスター 5m9s v1.22.1

ワーカーノードの追加

次に、master1 の初期化後にプロンプ​​ト表示される join コマンドを使用して、node1 作業ノードをクラスターに追加できます。マスター 1 ノードの $HOME/.kube/config ファイルをノード 1 の対応するファイルにコピーし、kubeadm、kubelet、および kubectl (オプション) をインストールして、上記の初期化が完了した後に表示される join コマンドを実行することを忘れないでください。

  1. ➜ ~ kubeadm はapi.k8s に参加しますローカル:6443 --token abcdef.0123456789abcdef \  
  2. > --discovery-token-ca-cert-hash sha256:435fbc28490d1f897337923c19ec27bcf3639e9fe84e8448177777d23cae4176  
  3. [プリフライト] プリフライトチェックの実行
  4. [プリフライト]クラスターから構成を読み取っています...
  5. [プリフライト] 参考までに:この設定ファイル  'kubectl -n kube-system get cm kubeadm-config -o yaml'  
  6. [kubelet-start] kubelet 設定をファイル"/var/lib/kubelet/config.yaml"書き込みます 
  7. [kubelet-start]フラグ付きのkubelet 環境ファイルをファイル"/var/lib/kubelet/kubeadm-flags.env"書き込みます 
  8. [kubelet-start] kubeletの起動
  9. [kubelet-start] kubeletTLS ブートストラップを実行するのを待機しています...
  10.  
  11. このノードはクラスターに参加しました:
  12. * 証明書署名要求がapiserver送信され応答が受信されました。
  13. * Kubelet に新しい安全な接続の詳細通知されました
  14.  
  15. 「kubectl get nodes」を実行します コントロールプレーンこのノードがクラスターに参加することを確認します。
  • 上記の join コマンドを忘れた場合は、kubeadm token create --print-join-command コマンドを使用して再度取得できます。

実行が成功したら、get nodes コマンドを実行します。

  1. ➜ ~ kubectl ノードを取得する
  2. 名前ステータス 役割 年齢 バージョン
  3. master1 コントロールプレーン準備完了、マスター 9 分 18 秒 v1.22.1
  4. master2 コントロールプレーン準備完了、マスター 7m11s v1.22.1
  5. master3 コントロールプレーン準備完了、マスター 5m9s v1.22.1
  6. node1 NotReady <なし> 24s v1.22.1

NotReady 状態であることがわかります。これは、ネットワーク プラグインがインストールされていないためです。次に、ネットワーク プラグインをインストールします。ドキュメント https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/ で独自のネットワーク プラグインを選択できます。ここでフランネルをインストールします:

  1. ➜ ~ wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
  2. # ノードに複数のネットワークカードがある場合は、リソースリストファイルで内部ネットワークカードを指定する必要があります。
  3. # kube-flannelコンテナの下にあるkube-flannel-dsという名前のDaemonSetを検索します
  4. ➜ ~ vi kube-flannel.yml
  5. ......
  6. コンテナ:
  7. -名前: kube-flannel
  8. イメージ: quay.io/coreos/flannel:v0.14.0
  9. 指示:
  10. - /opt/bin/flanneld
  11. 引数:
  12. - --ip-masq  
  13. - --kube-サブネットマネージャー 
  14. - --iface=eth0 # 複数のネットワークカードがある場合は、内部ネットワークカードの名前を指定します 
  15. ......
  16. ➜ ~ kubectl apply -f kube-flannel.yml # flannelネットワークプラグインをインストールします

しばらくしてから Pod の実行ステータスを確認します。

  1. ➜ ~ kubectl get ポッド -n kube-system
  2. 名前準備完了 ステータス 再起動 年齢
  3. coredns-7568f67dbd-lvcd5 1/1 実行中 0 30m
  4. coredns-7568f67dbd-shfrk 1/1 実行中 0 30m
  5. etcd-master1 1/1 実行中 0 45分
  6. etcd-master2 1/1 実行中 0 45分
  7. etcd-master3 1/1 実行中 1 (46 分前) 54 分
  8. kube-apiserver-master1 1/1 実行中 4 (45 分前) 58 分
  9. kube-apiserver-master2 1/1 実行中 2 (45 分前) 56 分
  10. kube-apiserver-master3 1/1 実行中 1 (46 分前) 54 分
  11. kube-controller-manager-master1 1/1 実行中 15 (48 分前) 58 分
  12. kube-controller-manager-master2 1/1 実行中 1 (47 分前) 56 分
  13. kube-controller-manager-master3 1/1 実行中 0 54分
  14. kube-flannel-ds-4js7f 1/1 実行中 0 38分
  15. kube-flannel-ds-hch26 1/1 ランニング 0 38m
  16. kube-flannel-ds-l6xzv 1/1 ランニング 0 38m
  17. kube-flannel-ds-qpzqq 1/1 ランニング 0 38m
  18. kube-proxy-fpxp8 1/1 実行中 0 54分
  19. kube-proxy-qdsfq 1/1 実行中 0 56分
  20. kube-proxy-ww9b2 1/1 実行中 0 58分
  21. kube-proxy-zcw98 1/1 実行中 0 50m
  22. kube-scheduler-master1 1/1 実行中 15 (48 分前) 58 分
  23. kube-scheduler-master2 1/1 実行中 0 56分
  24. kube-scheduler-master3 1/1 実行中 1 (47 分前) 54 分
  25. kube-vip-master1 1/1 実行中 2 (48 分前) 58 分
  26. kube-vip-master2 1/1 実行中 1 (47分前) 55分
  27. kube-vip-master3 1/1 実行中 0 51分
  • ネットワーク プラグインを展開し、ifconfig コマンドを実行すると、通常、新しく追加された 2 つの仮想デバイス cni0 と flannel1 が表示されます。ただし、cni0 デバイスが表示されなくても、あまり心配する必要はありません。 /var/lib/cni ディレクトリが存在するかどうかを確認できます。存在しない場合は、デプロイメントに問題があるのではなく、ノード上でまだアプリケーションが実行されていないことを意味します。ディレクトリが作成され、cni0 デバイスも作成されることを確認するには、ノード上で Pod を実行するだけです。

ネットワーク プラグインは正常に実行され、ノードのステータスは正常です。

  1. ➜ ~ kubectl ノードを取得する
  2. 名前ステータス 役割 年齢 バージョン
  3. master1 コントロールプレーン準備完了、マスター 9 分 18 秒 v1.22.1
  4. master2 コントロールプレーン準備完了、マスター 7m11s v1.22.1
  5. master3 コントロールプレーン準備完了、マスター 5m9s v1.22.1
  6. node1 準備完了 <なし> 24s v1.22.1

高可用性のテスト

上記では、3 つのマスター ノードを持つ高可用性 Kubernetes クラスターを構築しました。次に、高可用性が有効かどうかをテストしてみましょう。

まず、kube-vip の Pod ログを確認します。

  1. ➜ ~ kubectl ログ -f kube-vip-master1 -n kube-system
  2. 時刻= "2021-09-07T08:53:24Z"  レベル=info msg= "サーバーが起動しました"  
  3. 時刻= "2021-09-07T08:53:24Z"  レベル=info msg= "ARP エンジンを使用して Kube-vip マネージャーを起動しています"  
  4. 時刻= "2021-09-07T08:53:24Z"  レベル=info msg= "名前空間 [kube-system]、ハイブリッド モード [true]"  
  5. 時刻= "2021-09-07T08:53:24Z"  レベル=info msg= "クラスター メンバーシップの開始、名前空間 [kube-system]、ロック名 [plndr-svcs-lock]、ID [master1]"  
  6. I0907 08:53:24.205669 1 leaderselection.go:243]リーダー リース kube-system/plndr-svcs-lock を取得しよとしています...
  7. 時刻= "2021-09-07T08:53:24Z"  レベル=info msg= "クラスターメンバーシップの開始、名前空間 [kube-system]、ロック名 [plndr-cp-lock]、ID [master1]"  
  8. I0907 08:53:24.206162 1 leaderselection.go:243]リーダー リース kube-system/plndr-cp-lock を取得しよとしています...
  9. ......
  10. 時刻= "2021-09-07T08:55:55Z"  レベル=info msg= "ノード [master3] がクラスターのリーダーシップを引き継いでいます"  
  11. 時刻= "2021-09-07T08:55:55Z"  レベル=info msg= "新しいリーダーが選出されました: master3"  

master3 がリーダーになったことがわかります。次に、master3 ノードをシャットダウンし、他の kube-vip のログの変更を確認します。

  1. ➜ ~ kubectl ログ -f kube-vip-master2 -n kube-system
  2. ......
  3. 時刻= "2021-09-07T08:55:55Z"  レベル=info msg= "ノード [master3] がクラスターのリーダーシップを引き継いでいます"  
  4. 時刻= "2021-09-07T08:55:55Z"  レベル=info msg= "新しいリーダーが選出されました: master3"  
  5. 時刻= "2021-09-07T10:28:58Z"  レベル=info msg= "ノード [master1] がクラスターのリーダーシップを引き受けます"  
  6. ......

master1 ノードが kube-vip のリーダーを取得したことがわかります。これは、この時点で vip が master1 ノードにバインドされており、クラスターに引き続き正常にアクセスできることを意味します。

ダッシュボード

v1.22.1 クラスターには、ダッシュボードの最新バージョン 2.0+ をインストールする必要があります。

  1. # 以下の方法を使用することをお勧めします
  2. ➜ ~ wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml
  3. ➜ ~ vi 推奨.yaml
  4. # サービスタイプをNodePortに変更する
  5. ......
  6. 種類: サービス
  7. APIバージョン: v1
  8. メタデータ:
  9. ラベル:
  10. k8s-app: kubernetes-ダッシュボード
  11. 名前: kubernetes-dashboard
  12. 名前空間: kubernetes-dashboard
  13. 仕様:
  14. ポート:
  15. - ポート: 443
  16. ターゲットポート: 8443
  17. セレクタ:
  18. k8s-app: kubernetes-ダッシュボード
  19. type: NodePort # type=NodePort を追加して NodePort タイプのサービスにします
  20. ......

直接作成:

  1. ➜ ~ kubectl apply -f 推奨.yaml

新しいバージョンのダッシュボードは、デフォルトで kubernetes-dashboard 名前空間にインストールされます。

  1. ➜ ~ kubectl get pods -n kubernetes-dashboard -o wide
  2. 名前準備完了 ステータス 再起動 年齢 IP ノード 指名ノード 準備完了 ゲート
  3. dashboard-metrics-scraper-856586f554-pllvt 1/1 実行中 0 24分 10.88.0.7 マスター <なし> <なし>
  4. kubernetes-dashboard-76597d7df5-82998 1/1 実行中 0 21m 10.88.0.2 node2 <なし> <なし>

よく見ると、上記の Pod に割り当てられた IP セグメントは、上記で自動的にインストールされた CoreDNS を含めて 10.88.xx.xx であることがわかります。 podSubnet を 10.244.0.0/16 に設定しませんでしたか?まずCNI構成ファイルを確認しましょう。

  1. ➜ ~ ls -la /etc/cni/net.d/
  2. 合計 8
  3. drwxr-xr-x 2 1001 docker 67 8月31日 16:45 .
  4. drwxr-xr-x。 3 1001 docker 19 7月 30 01:13 ..
  5. -rw-r --r-- 1 1001 docker 604 7月30日 01:13 10-containerd-net.conflist  
  6. -rw-r --r-- 1 ルート ルート 292 8月 31 16:45 10-flannel.conflist  

2 つの構成が含まれていることがわかります。1 つは 10-containerd-net.conflist で、もう 1 つは上記で作成した Flannel ネットワーク プラグインによって生成された構成です。ぜひこの構成のフランネルを使いたいですね。 containerd に付属する cni プラグインの設定を確認できます。

  1. ➜ ~ cat /etc/cni/net.d/10-containerd-net.conflist
  2. {
  3. "cniバージョン" : "0.4.0"
  4. 「名前」 : 「containerd-net」
  5. 「プラグイン」 : [
  6. {
  7. 「タイプ」 : 「ブリッジ」
  8. 「ブリッジ」 : 「cni0」
  9. "isGateway" : true
  10. "ipMasq" : true
  11. "promiscMode" : true
  12. 「ipam」 :{
  13. 「タイプ」 : 「ホストローカル」
  14. 「範囲」 : [
  15. [{
  16. 「サブネット」 : 「10.88.0.0/16」  
  17. }],
  18. [{
  19. 「サブネット」 : 「2001:4860:4860::/64」  
  20. }]
  21. ]、
  22. 「ルート」 : [
  23. { "dst" : "0.0.0.0/0" },
  24. { "dst" : "::/0" }
  25. ]
  26. }
  27. },
  28. {
  29. 「タイプ」 : 「ポートマップ」
  30. 「機能」 : { 「ポートマッピング」 : true }
  31. }
  32. ]
  33. }

上記の IP セグメントは正確に 10.88.0.0/16 ですが、cni プラグインのタイプはブリッジ ネットワークであり、ブリッジの名前は cni0 であることがわかります。

  1. ➜ ~ ip a
  2. ...
  3. 6: cni0: <BROADCAST、MULTICAST、PROMISC、UP、LOWER_UP> mtu 1500 qdisc noqueue 状態 UPグループ デフォルトのqlen 1000
  4. リンク/イーサ 9a:e7:eb:40:e8:66 brd ff:ff:ff:ff:ff:ff
  5. inet 10.88.0.1/16 brd 10.88.255.255 スコープグローバルcni0
  6. valid_lft 永久に preferred_lft 永久に
  7. inet6 2001:4860:4860::1/64 スコープグローバル 
  8. valid_lft 永久に preferred_lft 永久に
  9. inet6 fe80::98e7:ebff:fe40:e866/64 スコープ リンク
  10. valid_lft 永久に preferred_lft 永久に
  11. ...

ただし、ブリッジ ネットワークを使用するコンテナーは複数のホスト間で通信できません。クロスホスト通信には、フランネルやCalicoなどの他のCNIプラグインが必要です。上記でインストールしました。ここには2つのCNI構成があるため、10-Containerd-net.Conflist構成を削除する必要があります。

  1. ➜〜mv/etc/cni/net.d/10-containerd-net.conflist /etc/cni/net.d/10-containerd-net.conflist.bak
  2. ifconfig cni0 down && ip link delete cni0
  3. ➜〜SystemCtl Daemon-Reload
  4. ➜〜systemctl restart containerd kubelet

次に、CorednsとDashboard Podsを再構築することを忘れないでください。PODのIPアドレスは再構成後に正常になります。

  1. ➜〜kubectl get pods -n kubernetes -dashboard -o幅
  2. 名前準備完了 ステータス 再起動 年齢 IP ノード 指名ノード 準備完了 ゲート
  3. DashBoard-Metrics-Scraper-856586F554-TP8M5 1/1 RUNNIS 0 42S 10.244.1.6 node2 <NODE <NOE> <NOGNE>
  4. kubernetes-dashboard-76597d7d7df5-9rmbx 1/1 running 0 66S 10.244.1.5 node2 <newne> <negn <なし>
  5. ➜〜kubectl get pods -n kube -system -o wide -l k8s -app = kube -dns
  6. 名前準備完了 ステータス 再起動 年齢 IP ノード 指名ノード 準備完了 ゲート
  7. coredns-7568f67dbd-n7bfx 1/1 running 0 5m40s 10.244.1.2 node2 <newne> <なし>
  8. coredns-7568f67dbd-plrv8 1/1 running 0 3m47s 10.244.1.4 node2 <nea> <なし>

ダッシュボードのnodeportポートをご覧ください。

  1. ➜〜kubectl get svc -n kubernetes -dashboard
  2. 名前タイプ クラスター IP 外部 IP ポート 年齢
  3. DashBoard-Metrics-ScraperClusterip 10.99.37.172 <なし> 8000/TCP 25M
  4. Kubernetes-Dashboard nodePort 10.103.102.27 <None> 443:31050/TCP 25M

次に、上記のポート31050からダッシュボードにアクセスできます。HTTPSを使用することを忘れないでください。 Chromeが有効になっていない場合は、Firefoxを使用してテストできます。 Firefoxなしでページを以下に開くことができない場合は、次のページの信頼証明書をクリックできます。

信託証明書

信頼後、ダッシュボードのログインページにアクセスできます。

ダッシュボードログインページ

次に、グローバルなすべてのアクセス許可を持つユーザーを作成して、ダッシュボードにログインします。

  1. #admin.yaml
  2. 種類: ClusterRoleBinding
  3. apiバージョン: rbac。認証.k8s.io/v1
  4. メタデータ:
  5. 名前:管理者
  6. ロールリファレンス:
  7. 種類: ClusterRole
  8. 名前: クラスター管理者
  9. apiGroup : rbac.authorization.k8s.io
  10. 科目:
  11. - 種類: サービスアカウント
  12. 名前:管理者
  13. 名前空間: kubernetes-dashboard
  14. ---  
  15. APIバージョン: v1
  16. 種類: サービスアカウント
  17. メタデータ:
  18. 名前:管理者
  19. 名前空間: kubernetes-dashboard

直接作成:

  1. ➜〜kubectl apply -f admin.yaml
  2. ➜〜kubectl get secret -n kubernetes-dashboard | grep admin-token
  3. admin-token-lwmmx kubernetes.io/service-account-token 3 1d
  4. ➜〜kubectl Get Secret Admin -Token -Lwmmx -o Jsonpath = {。データ。Token} -n Kubernetes -Dashboard | base64 -d
  5. #base64の後に長い文字列が生成されます

次に、上記のbase64のデコードされた文字列をトークンとして使用して、ダッシュボードにログインします。新しいバージョンもダークモードを追加します:

K8Sダッシュボード

最後に、KubeAdMを使用して、Coredns、IPV、Flannel、Containd、およびKube-VIPコンポーネントを使用して、V1.22.1の非常に利用可能なKubernetesクラスターを構築しました。

クリーニング

クラスターのインストール中に他の問題に遭遇した場合、次のコマンドを使用してリセットできます。

  1. ➜〜kubeadmリセット
  2. ifconfig cni0 down && ip link delete cni0
  3. ifconfig flannel.1 down && ip link delete flannel.1
  4. ➜〜rm -rf/var/lib/cni/

<<:  Tencent がクラウド ネイティブ サービス ディスカバリーおよびガバナンス センターをオープンソース化 - Polaris

>>:  Kafka ベンダー向けのよくある面接の質問: 高パフォーマンスと高スループットを確保しながら高可用性を確保する

推薦する

モモはやり直す

ソーシャル分野における大手インターネット企業間の戦争は、いまだに終わっていない。しかし、数年にわたる...

記事のランキングに影響を与える8つの要素

口コミに加えて、最も重要なウェブサイトトラフィックはロングテールキーワードです。ロングテールキーワー...

役に立つ情報: Catalyst-Seattle/10G ポート/4T トラフィック開始

Catalyst、この製品は5年前から存在しており(ドメイン名の更新は2017年に終了しました)、パ...

適切なクラウド データベース サービスを選択するための 4 つのヒント

リレーショナル データベースは半世紀も前から存在しており、そのさまざまなサブカテゴリ (ドキュメント...

Hostsolutions: 著作権なし/苦情防止/1T 大容量ハードディスク VPS、年間わずか 35 ユーロ

hostsolutions、前回の大容量ハードディスク ストレージ VPS が在庫切れになってから長...

Crystoneホストの紹介

Crystone Host は 15 年の歴史を持つホスティング会社です。現在、30 万以上のウェブ...

ソーシャルメディア配信ガイド!

有名人に説得されて何か買ったことはありますか?答えが「はい」であれば、それは普通のことです。私たちは...

51.com の robots.txt に何か問題がありますか?

robots.txt ファイルとは何ですか?検索エンジンは、ロボット (スパイダーとも呼ばれる) と...

集中することが正解です。自分の「小さくて美しい」ウェブサイトを構築する方法についてお話ししましょう。

最近、「小さくて美しい」という言葉が流行っています。タオバオでは、この言葉の普及に力を入れており、多...

検索エンジンの変更に合わせてウェブサイトに微妙な変更を加えるにはどうすればよいでしょうか (パート 2)

一昨日、「検索エンジンの変化に直面して、ウェブサイトを微妙に変えるにはどうすればよいか(パート1)」...

kuroit: 月額 10 ドル、米国 VPS (ロサンゼルス/フェニックス)、8G メモリ/4 コア/50g NVMe/8T トラフィック/10Gbps 帯域幅

現在、Kuroit は米国西海岸のロサンゼルスとフェニックスでプロモーションを実施しています。いくつ...

教育ウェブサイトの分析と最適化の簡単な分析

最近、新しいウェブサイトの最適化分析を行いました。分析内容は以下のとおりです。不適切な点がありました...

ウェブマスターは、ランキングを取得するためにページの重さに影響を与える要因をどのように分析するのでしょうか?

今年が終わり、皆さんはそれぞれの持ち場に戻り、新たな一年の奮闘を始めたことと思います。そこで今日は、...

ウェブサイト制作によってウェブサイトの効果をどのように高めることができるでしょうか?

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています蘇州でウェ...