paint-brush
Kubeadm を使用した Kubernetes クラスターのセットアップと管理@humalect
2,141 測定値
2,141 測定値

Kubeadm を使用した Kubernetes クラスターのセットアップと管理

Humalect Inc11m2023/08/09
Read on Terminal Reader

長すぎる; 読むには

この Kubeadm チュートリアルでは、Kubeadm コマンドを使用して Kubernetes クラスターを作成および管理するための基本事項を説明します。セルフホスト型 Kubernetes、長所と短所について説明し、その後 Kubeadm の目的を詳しく説明します。ここでは、コントロール プレーンの初期化、ワーカー ノードへの参加、クラスターのリセット、バージョンのアップグレード、コンポーネントの管理など、上位 20 個の一般的な Kubeadm コマンドの例と詳細を示します。このチュートリアルでは、Kubeadm を使用した Kubernetes クラスターの作成、クラスター コンポーネントの処理についても概説し、本番クラスターの自動スケーリング、etcd の定期的なバックアップ、ノードの効果的な監視のための Kubeadm の使用などのベスト プラクティスを強調します。
featured image - Kubeadm を使用した Kubernetes クラスターのセットアップと管理
Humalect Inc HackerNoon profile picture
0-item
1-item

この Kubeadm チュートリアルでは、Kubeadm コマンドについて知っておくべきことすべてと、それらを使用してKubernetes (K8s) でクラスターを作成し、クラスター コンポーネントを管理する方法について説明します。

Kubeadm を使用して独自の Kubernetes クラスターを作成する方法を学ぶだけでなく、クラスター コンポーネントの管理方法を習得し、Kubeadm のベスト プラクティスを発見します。


Kubeadm の世界へのこのエキサイティングな旅に参加して、コンテナを簡単にオーケストレーションする力を解き放ちましょう。


一緒に Kubeadm のエキスパートになりましょう! kubeadmについて詳しく説明する前に、セルフホスト型 Kubernetes (K8s) とは正確には何でしょうか?


コンテンツの概要

  • セルフホスト型 Kubernetes とは何ですか? - メリットとデメリット
  • クビーズムとは何ですか?
  • Kubeadm の例
  • 最も一般的な Kubeadm コマンドのトップ 20
  • Kubeadm を使用して Kubernetes クラスターを作成する方法
  • Kubeadm を使用してクラスター コンポーネントを管理する方法
  • Kubeadm のベスト プラクティス


セルフホスト型 Kubernetes とは何ですか? - メリットとデメリット

「ベアメタル」または「オンプレミス」Kubernetes デプロイメントとも呼ばれるセルフホスト型 Kubernetes は、クラウドプロバイダー (AWS の EKS など) が提供するマネージド Kubernetes サービスに依存せずに、物理マシンまたは仮想マシン上で直接 Kubernetes を実行することを指します。 )。


セルフホスト型 Kubernetes の長所と短所をいくつか示します。


セルフホスト型 Kubernetes の長所

1. 完全な制御とカスタマイズ

セルフホスト型 Kubernetes を使用すると、クラスター構成、ネットワーキング、インフラストラクチャーを完全に制御できます。これにより、特定の要件とインフラストラクチャ機能に応じてクラスターをカスタマイズおよび最適化できます。

2. コスト効率

セルフホスティング Kubernetes は、追加料金が発生することが多いマネージド Kubernetes サービスを使用する場合と比較して、特に長期的な展開の場合、コスト効率が高くなります。セルフホスティングにより、既存のハードウェア リソースを活用し、マネージド サービスのオーバーヘッド コストを回避できます。 (そして多額のお金を節約できます)

3. セキュリティとコンプライアンス

セルフホスティング Kubernetes を使用すると、ネットワーク ポリシー、暗号化、アクセス制御、コンプライアンス要件などのセキュリティ対策を直接制御できます。これにより、組織のニーズと規制基準に合わせた最適な Kubernetes セキュリティ プラクティスを実装できます。 (log4j、ベルを鳴らしてください?)

4. リソースの割り当て

セルフホスト型 Kubernetes を使用すると、リソースを他のテナントと共有することなく、クラスターに独占的に割り当てることができます。これにより、リソースの使用率が向上し、共有環境でのリソースの競合によって発生する可能性のある潜在的なパフォーマンスの問題が回避されます。


セルフホスト型 Kubernetes の短所

1. インフラストラクチャ管理

セルフホスティング Kubernetes には、基盤となるインフラストラクチャの管理と保守に関する専門知識が必要です。


サーバー、ネットワーキング、ストレージ、およびクラスターのその他のコンポーネントのプロビジョニング、構成、および監視はお客様の責任です。これには時間がかかり、専用のリソースと追加雇用が必要になる場合があります。

2. スケーラビリティと弾力性

セルフホスト型 Kubernetes クラスターのスケーリングは、自動スケーリング機能を提供するマネージド サービスに比べて複雑になる場合があります。


ピーク負荷に対処するには、リソースを事前に計画してプロビジョニングする必要があり、ノードの追加または削除には手動介入が必要になる場合があります。

3. 運用の複雑さ

セルフホスト型 Kubernetes では、アップグレード、パッチ、バックアップ、高可用性の管理など、運用がさらに複雑になります。これらのタスクでは、クラスターとアプリケーションへの中断を最小限に抑え、本番ダウンタイムの増加を最小限に抑えるために、慎重な計画、テスト、調整が必要です。


クビーズムとは何ですか?

Kubeadm は、Kubernetes クラスターのセットアップと管理のプロセスを簡素化し、技術コミュニティのメンバーがコンテナ オーケストレーションの世界に簡単に参加できるようにするコマンド ライン ツールです。


kubeadmクラスターのセットアップの詳細を処理して、全体像に集中できるようにする信頼できるアシスタントであると考えてください。


必須コンポーネントの構成、証明書の生成、クラスターがベスト プラクティスに従っていることの確認など、複雑なタスクを自動化します。


Kubeadm の例

kubeadmどのように機能するかをよりよく理解するために、いくつかの例とコマンドを見てみましょう。

1. コントロールプレーンの初期化

コマンド例 #1: ` kubeadm init `

上記のコマンドの使用方法は次のとおりです。

kubeadm init --pod-network-cidr=192.168.0.0/16


このコマンドは、マスター ノード上のコントロール プレーンを初期化します。必要な証明書を生成し、API サーバー、etcd、その他の重要なコンポーネントをセットアップします。


` --pod-network-cidr ` フラグは、クラスター内のポッド ネットワークの IP アドレス範囲を指定します。

2. ワーカーノードへの参加

コマンド例 #2: ` kubeadm join `


kubeadm join <master-node-ip>:<master-node-port> --token <token> --discovery-token-ca-cert-hash <hash>


このコマンドは、ワーカー ノードをクラスターに参加させます。マスター ノードの IP とポート、およびトークンと検出トークン CA 証明書ハッシュを指定する必要があります。これらは、コントロール プレーンの初期化中に取得できます。

3. クラスターのリセット

コマンド: ` kubeadm reset `


kubeadm reset --force


このコマンドはクラスターをリセットし、インストールされているすべてのコンポーネントを削除し、ノードを Kubernetes 前の状態に戻します。 ` --force ` フラグにより、完全なリセットが保証されます。

4. Kubernetes バージョンのアップグレード

コマンド: ` kubeadm upgrade `


上記のkubeadmコマンドの使用方法は次のとおりです。

kubeadm upgrade plan


このコマンドは、Kubernetes バージョンをアップグレードするのに役立ちます。利用可能なアップグレードを確認し、コントロール プレーン コンポーネントのアップグレード計画を提供します。


最も一般的な Kubeadm コマンドのトップ 20

ここでは、一般的に使用される kubeadm コマンドのリストとそれに関連する例を示します。

1.kubeadm の初期化

kubeadm init --pod-network-cidr=192.168.0.0/16


上記の例では、コマンドはマスター ノード上のコントロール プレーンを初期化し、証明書を生成し、重要なコンポーネントをセットアップします。 ` --pod-network-cidr ` フラグは、ポッド ネットワークの IP アドレス範囲を指定します。

2.kubeadm に参加する

kubeadm join <master-node-ip>:<master-node-port> --token <token> --discovery-token-ca-cert-hash <hash>


上記のコマンドは、トークンと検出トークン CA 証明書ハッシュを使用して指定されたマスター ノードに接続することにより、ワーカー ノードをクラスターに参加させます。

3.kubeadmのリセット

kubeadm reset --force


上記のコマンドはノードをリセットし、インストールされているすべての Kubernetes コンポーネントを削除し、Kubernetes 前の状態に戻します。 ` --force ` フラグにより、完全なリセットが保証されます。

4.kubeadmのアップグレード

kubeadm upgrade plan


上記のコマンドは、コントロール プレーン コンポーネントの利用可能なアップグレードを確認して、アップグレード プランを提供します。

5.kubeadmトークン

kubeadm token create


この kubeadm コマンドは、ノードをクラスターに参加させるために使用される認証トークンを管理します。この例では、新しいトークンを生成します。

6.kubeadmの設定

kubeadm config print init-defaults


上記のコマンドは、kubeadm 構成ファイルを管理します。この例では、クラスター初期化のデフォルト構成を出力します。

7.kubeadmのバージョン

kubeadm version


上記のコマンドは、kubeadm のバージョンを出力します。

8. kubeadm 構成イメージ

kubeadm config images list


上記のコマンドを使用して、現在の Kubernetes バージョンに必要なイメージのリストを出力します。

このコマンドは、手動のコンテナ イメージ管理に必要なコンテナ イメージを決定するのに役立ちます。構成イメージをプルするには、` list ` を ` pull ` に置き換えます。

9.kubeadmトークンの作成

kubeadm token create --print-join-command


上記のコマンドは、ノードをクラスターに参加させるために使用できる新しいトークンを生成します。 ` --print-join-command ` フラグは、ワーカー ノードで実行される結合コマンドを表示します。

10. kubeadmトークンリスト

kubeadm token list


上記のコマンドは、アクティブなトークンを、それらに関連付けられた作成時間と有効期限とともに一覧表示します。

11.kubeadmトークンの削除

kubeadm token delete <token_value>


上記のコマンドを使用して特定のトークンを削除し、ノード結合に使用できなくします。

12. kubeadm 設定の移行

kubeadm config migrate --old-config kubeadm.conf --new-config kubeadm.yaml


上記のコマンドは、構成ファイルを古いバージョンから新しいバージョンに移行し、構成をスムーズにアップグレードできるようにします。

13.kubeadm 証明書


kubeadm certs check-expirationkubeadm certs certificate-key


上記のコマンドは、コントロール プレーン コンポーネントによって使用される証明書の有効期限ステータスを確認し、有効期限が近づいている証明書について警告を出します。 2 番目のコマンドはキーを生成します。

14. kubeadm の初期化フェーズ

kubeadm init phase kubelet-start --config config.yaml


上記のコマンドは、InitConfiguration ファイルから、kubelet フラグを含む動的環境ファイルを作成します。

15. kubeadm 参加フェーズ

kubeadm join phase control-plane-prepare


上記のコマンドは、ワーカー ノードがコントロール プレーンに参加する際に特定のフェーズを実行します。この例では、ワーカー ノードがコントロール プレーン ノードになるように準備する ` control-plane-prepare`フェーズを実行します。

16.kubeadm kubeconfig

kubeadm kubeconfig user --client-name=foo --config=bar

上記のコマンドを使用して、kubeadm config ファイル バーを使用してfooという名前の追加ユーザーのkubeconfigファイルを出力します。

17. kubeadm リセットフェーズ

kubeadm reset phase preflight


上記のコマンドは、ノードのリセット プロセス中に特定のフェーズを実行します。この例では、Kubernetes コンポーネントを削除する前にリセット前のチェックを実行する「 preflight 」フェーズを実行します。

18. kubeadm アップグレード計画

kubeadm upgrade plan


上記のコマンドは、コントロール プレーン コンポーネントのアップグレード プランを表示し、利用可能なバージョンとアップグレードに必要なアクションを示します。

19. kubeadm アップグレードの適用

kubeadm upgrade apply v1.22.2


上記のコマンドを使用して、特定の Kubernetes バージョンをコントロール プレーンに適用し、そのコンポーネントを指定されたバージョンにアップグレードします。

20. kubeadm アップグレード ノード

kubeadm upgrade node


このコマンドは、ワーカー ノード上のkubeletkube-proxyをアップグレードして、コントロール プレーンのバージョンと一致させます。


Kubeadm を使用して Kubernetes クラスターを作成する方法

kubeadmを使用して Kubernetes クラスターを作成するには、環境が必要な前提条件を満たしていることを確認する必要があります。

ここでは、 kubeadmを使用して Kubernetes クラスターを作成する方法に関するステップバイステップのガイドを示します。これには、前提条件、詳細な手順、例、コマンドが含まれます。

前提条件

  1. Docker がインストールされ、サポートされている Linux ディストリビューション (Ubuntu、CentOS、または Red Hat Enterprise Linux など) を実行している 2 台以上のマシン。

  2. マシンごとに 2 GiB 以上の RAM が推奨されます。それ以下のものでは、ソフトウェアの余地が限られてしまいます。

  3. すべてのマシンのスワップ領域を無効にします。

  4. 各マシンに一意のホスト名、MAC アドレス、product_uuid を設定します。

  5. クラスター内のすべてのマシンは完全なネットワーク接続を備えています。パブリックまたはプライベート ネットワークに接続できます。

  6. ファイアウォールで必要なポート (6443、2379 ~ 2380、10250、10251、10252 など) を開きます。


ステップ 1: Docker と Kubernetes ツールをインストールする

Linux ディストリビューションのDocker ガイドを使用して、すべてのマシンにDockerをインストールします。

次のコマンドを使用して、すべてのマシンに ` kubeadm `、` kubelet `、および ` kubectl ` をインストールします。


sudo apt-get update && sudo apt-get install -y apt-transport-https curlcurl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.listsudo apt-get updatesudo apt-get install -y kubelet kubeadm kubectlsudo apt-mark hold kubelet kubeadm kubectl


ステップ 2: Kubernetes コントロール プレーンを初期化する

目的のコントロール プレーン ノードで、` kubeadm init ` コマンドを使用してクラスターを初期化します。

sudo kubeadm init --pod-network-cidr=192.168.0.0/16


注: 別のポッド ネットワークを使用する予定がある場合は、` --pod-network-cidr ` フラグを調整します。

初期化が完了すると、コマンドはトークンとハッシュを含む ` kubeadm join ` コマンドを出力します。このコマンドは後でワーカー ノードをクラスターに参加させるために使用されるため、必ずコピーしてください。


ステップ 3: kubectlのクラスター構成をセットアップする

コントロール プレーン ノードで、必要なディレクトリを作成し、 kubeconfigファイルをコピーします。


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


ステップ 4: ポッド ネットワーク アドオンをデプロイする

コントロール プレーン ノードで、ポッド ネットワーク アドオンをデプロイします。たとえば、Calico を使用できます。

kubectl apply -f https://docs.projectcalico.org/v3.21/manifests/calico.yaml


ステップ 5: クラスター内のワーカー ノードに参加する

各ワーカー ノードで、コントロール プレーンの初期化中に (ステップ 2 から) 生成された ` kubeadm join ` コマンドを実行します。このコマンドは通常次のようになります。

sudo kubeadm join <control_plane_IP>:6443 --token <token> --discovery-token-ca-cert-hash <hash>


ステップ 6: クラスターを確認する

コントロール プレーン ノードで、` kubectl ` を使用してクラスターのステータスを確認します。

kubectl get nodes


おめでとう! 「 kubeadm 」を使用して Kubernetes クラスターが正常に作成されました。これで、クラスター上にアプリケーションをデプロイして管理できるようになりました。


kubeadmを使用してクラスター コンポーネントを管理する方法

kubeadmでクラスター コンポーネントを管理するには、さまざまなコマンドを使用して、クラスターのアップグレード、ノードの追加または削除、コントロール プレーンの管理などのタスクを実行できます。

ここでは、コード コメント付きの詳細なコマンドを含む、 kubeadmを使用してクラスター コンポーネントを管理する方法に関するステップバイステップ ガイドを示します。


ステップ 1: クラスターのアップグレード

コントロール プレーン ノード上の Kubernetes の現在のバージョンを確認します。

kubectl version --short


すべてのノード上の ` kubeadm `、` kubelet `、および ` kubectl ` を、目的の Kubernetes バージョンと一致するようにアップグレードします。

# Upgrade kubeadmsudo apt-get updatesudo apt-get install -y kubeadm=<desired_version># Upgrade kubelet and kubectlsudo apt-get updatesudo apt-get install -y kubelet=<desired_version> kubectl=<desired_version># Hold the packages to prevent automatic upgradessudo apt-mark hold kubeadm kubelet kubectl


コントロール プレーン ノードで、アップグレード プロセスを開始します。

sudo kubeadm upgrade plansudo kubeadm upgrade apply <desired_version>

Upgrade the kubelet configuration on all nodes:

sudo kubeadm upgrade node


アップグレードのステータスを確認します。

kubectl get nodeskubectl version --short


ステップ 2: ワーカー ノードの追加

コントロール プレーン ノードで、新しいkubeadm joinコマンドを生成します。

sudo kubeadm token create --print-join-command


ワーカー ノードでkubeadm joinコマンドを実行して、ワーカー ノードをクラスターに参加させます。

sudo kubeadm join <control_plane_IP>:6443 --token <token> --discovery-token-ca-cert-hash <hash>


新しいワーカー ノードのステータスを確認します。

kubectl get nodes


ステップ 3: ノードの削除

削除するノードをドレインします。

kubectl drain <node_name> --ignore-daemonsets


コントロール プレーン ノードで、ノードを削除します。

sudo kubeadm reset


コントロール プレーン ノードで、クラスターからノードを削除します。

kubectl delete node <node_name>


ステップ 4: コントロール プレーン コンポーネントの管理

コントロール プレーン ノードのコントロール プレーン コンポーネントをアップグレードします。

sudo apt-get update sudo apt-get install -y kubeadm=<desired_version> kubelet=<desired_version> kubectl=<desired_version> sudo kubeadm upgrade plan sudo kubeadm upgrade apply <desired_version> sudo systemctl restart kubelet


アップグレードのステータスを確認します。

kubectl get nodes kubectl version --short

Drain the control plane node you want to remove:

kubectl drain <control_plane_node> --ignore-daemonsets


コントロール プレーン ノードで、次のkubeadmコマンドを使用してコントロール プレーン コンポーネントを削除します。

sudo kubeadm reset


コントロール プレーン ノードで、クラスターからコントロール プレーン ノードを削除します。

kubectl delete node <control_plane_node>


注: kubeadmを使用してクラスター コンポーネントを管理する場合は、クラスターの安定性と可用性に影響を与える可能性があるため、注意が必要です。バックアップ計画があることを確認し、セットアップと要件に固有の詳細な手順については、Kubernetes の公式ドキュメントに従ってください。


Kubeadm のベスト プラクティス

Kubeadm は、意図された目的で使用すると優れたツールになります。ジョブに適切なツールを使用し、kubeadm を最大限に活用するために覚えておくべき 3 つのベスト プラクティスを次に示します。


自動スケーリングが必要な実稼働クラスターにのみ kubeadm を使用してください。

一般に、kubeadm にはノードとクラスターの自動スケーリング機能がないため、運用クラスターには使用しないでください。これは、ノードの自動スケーリングでは基盤となるインフラストラクチャとハードウェアの制御が必要になり、kubeadm が他のツールにそれを委任しているためです。


etcdを定期的にバックアップする

Kubeadm には、クラスター状態を保存するためのマルチ etcd クラスターがデフォルトではありません。何か問題が発生した場合に備えて、etcd のバックアップを定期的に作成してください。


マシン/ノードを追跡する

Kubeadm は、使用されていないマシンの電源をオフにすることはできません。

したがって、 kubeadmを使用してKubernetes クラスターのコストを最適化するには、外部ソリューションを使用してワーカー ノードとそのリソース使用率を追跡する必要があります。




こちらでも公開しております。


この記事のリード画像は、HackerNoon の AI Image Generatorによってプロンプト「コンテナー」を通じて生成されました。