この Kubeadm チュートリアルでは、Kubeadm コマンドについて知っておくべきことすべてと、それらを使用して (K8s) でクラスターを作成し、クラスター コンポーネントを管理する方法について説明します。 Kubernetes Kubeadm を使用して独自の Kubernetes クラスターを作成する方法を学ぶだけでなく、クラスター コンポーネントの管理方法を習得し、Kubeadm のベスト プラクティスを発見します。 Kubeadm の世界へのこのエキサイティングな旅に参加して、 力を解き放ちましょう。 コンテナを簡単にオーケストレーションする 一緒に Kubeadm のエキスパートになりましょう! について詳しく説明する前に、セルフホスト型 Kubernetes (K8s) とは正確には何でしょうか? kubeadm コンテンツの概要 セルフホスト型 Kubernetes とは何ですか? - メリットとデメリット クビーズムとは何ですか? Kubeadm の例 最も一般的な Kubeadm コマンドのトップ 20 Kubeadm を使用して Kubernetes クラスターを作成する方法 Kubeadm を使用してクラスター コンポーネントを管理する方法 Kubeadm のベスト プラクティス セルフホスト型 Kubernetes とは何ですか? - メリットとデメリット 「ベアメタル」または「オンプレミス」Kubernetes デプロイメントとも呼ばれるセルフホスト型 Kubernetes は、クラウドプロバイダー (AWS の EKS など) が提供するマネージド Kubernetes サービスに依存せずに、物理マシンまたは仮想マシン上で直接 Kubernetes を実行することを指します。 )。 セルフホスト型 Kubernetes の長所と短所をいくつか示します。 セルフホスト型 Kubernetes の長所 1. 完全な制御とカスタマイズ セルフホスト型 Kubernetes を使用すると、クラスター構成、ネットワーキング、インフラストラクチャーを完全に制御できます。これにより、特定の要件とインフラストラクチャ機能に応じてクラスターをカスタマイズおよび最適化できます。 2. コスト効率 セルフホスティング Kubernetes は、追加料金が発生することが多いマネージド Kubernetes サービスを使用する場合と比較して、特に長期的な展開の場合、コスト効率が高くなります。セルフホスティングにより、既存のハードウェア リソースを活用し、マネージド サービスのオーバーヘッド コストを回避できます。 (そして多額のお金を節約できます) 3. セキュリティとコンプライアンス セルフホスティング Kubernetes を使用すると、ネットワーク ポリシー、暗号化、アクセス制御、コンプライアンス要件などのセキュリティ対策を直接制御できます。これにより、組織のニーズと規制基準に合わせた を実装できます。 (log4j、ベルを鳴らしてください?) 最適な Kubernetes セキュリティ プラクティス 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、その他の重要なコンポーネントをセットアップします。 ` ` フラグは、クラスター内のポッド ネットワークの IP アドレス範囲を指定します。 --pod-network-cidr 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 上記の例では、コマンドはマスター ノード上のコントロール プレーンを初期化し、証明書を生成し、重要なコンポーネントをセットアップします。 ` ` フラグは、ポッド ネットワークの IP アドレス範囲を指定します。 --pod-network-cidr 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 このコマンドは、ワーカー ノード上の と をアップグレードして、コントロール プレーンのバージョンと一致させます。 kubelet kube-proxy Kubeadm を使用して Kubernetes クラスターを作成する方法 を使用して Kubernetes クラスターを作成するには、環境が必要な前提条件を満たしていることを確認する必要があります。 kubeadm ここでは、 を使用して Kubernetes クラスターを作成する方法に関するステップバイステップのガイドを示します。これには、前提条件、詳細な手順、例、コマンドが含まれます。 kubeadm 前提条件 Docker がインストールされ、サポートされている Linux ディストリビューション (Ubuntu、CentOS、または Red Hat Enterprise Linux など) を実行している 2 台以上のマシン。 マシンごとに 2 GiB 以上の RAM が推奨されます。それ以下のものでは、ソフトウェアの余地が限られてしまいます。 すべてのマシンのスワップ領域を無効にします。 各マシンに一意のホスト名、MAC アドレス、product_uuid を設定します。 クラスター内のすべてのマシンは完全なネットワーク接続を備えています。パブリックまたはプライベート ネットワークに接続できます。 ファイアウォールで必要なポート (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 おめでとう! 「 」を使用して Kubernetes クラスターが正常に作成されました。これで、クラスター上にアプリケーションをデプロイして管理できるようになりました。 kubeadm を使用してクラスター コンポーネントを管理する方法 kubeadm でクラスター コンポーネントを管理するには、さまざまなコマンドを使用して、クラスターのアップグレード、ノードの追加または削除、コントロール プレーンの管理などのタスクを実行できます。 kubeadm ここでは、コード コメント付きの詳細なコマンドを含む、 を使用してクラスター コンポーネントを管理する方法に関するステップバイステップ ガイドを示します。 kubeadm ステップ 1: クラスターのアップグレード コントロール プレーン ノード上の Kubernetes の現在のバージョンを確認します。 kubectl version --short すべてのノード上の ` `、` `、および ` ` を、目的の Kubernetes バージョンと一致するようにアップグレードします。 kubeadm kubelet kubectl # 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> 注: を使用してクラスター コンポーネントを管理する場合は、クラスターの安定性と可用性に影響を与える可能性があるため、注意が必要です。バックアップ計画があることを確認し、セットアップと要件に固有の詳細な手順については、Kubernetes の公式ドキュメントに従ってください。 kubeadm Kubeadm のベスト プラクティス Kubeadm は、意図された目的で使用すると優れたツールになります。ジョブに適切なツールを使用し、kubeadm を最大限に活用するために覚えておくべき 3 つのベスト プラクティスを次に示します。 自動スケーリングが必要な実稼働クラスターにのみ kubeadm を使用してください。 一般に、kubeadm にはノードとクラスターの自動スケーリング機能がないため、運用クラスターには使用しないでください。これは、ノードの自動スケーリングでは基盤となるインフラストラクチャとハードウェアの制御が必要になり、kubeadm が他のツールにそれを委任しているためです。 etcdを定期的にバックアップする Kubeadm には、クラスター状態を保存するためのマルチ etcd クラスターがデフォルトではありません。何か問題が発生した場合に備えて、etcd のバックアップを定期的に作成してください。 マシン/ノードを追跡する Kubeadm は、使用されていないマシンの電源をオフにすることはできません。 したがって、 を使用して には、外部ソリューションを使用してワーカー ノードとそのリソース使用率を追跡する必要があります。 kubeadm Kubernetes クラスターのコストを最適化する こちらでも公開しております。 この記事のリード画像は によってプロンプト「コンテナー」を通じて生成されました。 、HackerNoon の AI Image Generator