![Search icon](https://hackernoon.imgix.net/search-new.png?w=19&h=19)
この Kubeadm チュートリアルでは、Kubeadm コマンドについて知っておくべきことすべてと、それらを使用してKubernetes (K8s) でクラスターを作成し、クラスター コンポーネントを管理する方法について説明します。
Kubeadm を使用して独自の Kubernetes クラスターを作成する方法を学ぶだけでなく、クラスター コンポーネントの管理方法を習得し、Kubeadm のベスト プラクティスを発見します。
Kubeadm の世界へのこのエキサイティングな旅に参加して、コンテナを簡単にオーケストレーションする力を解き放ちましょう。
一緒に Kubeadm のエキスパートになりましょう! kubeadm
について詳しく説明する前に、セルフホスト型 Kubernetes (K8s) とは正確には何でしょうか?
「ベアメタル」または「オンプレミス」Kubernetes デプロイメントとも呼ばれるセルフホスト型 Kubernetes は、クラウドプロバイダー (AWS の EKS など) が提供するマネージド Kubernetes サービスに依存せずに、物理マシンまたは仮想マシン上で直接 Kubernetes を実行することを指します。 )。
セルフホスト型 Kubernetes の長所と短所をいくつか示します。
セルフホスト型 Kubernetes を使用すると、クラスター構成、ネットワーキング、インフラストラクチャーを完全に制御できます。これにより、特定の要件とインフラストラクチャ機能に応じてクラスターをカスタマイズおよび最適化できます。
セルフホスティング Kubernetes は、追加料金が発生することが多いマネージド Kubernetes サービスを使用する場合と比較して、特に長期的な展開の場合、コスト効率が高くなります。セルフホスティングにより、既存のハードウェア リソースを活用し、マネージド サービスのオーバーヘッド コストを回避できます。 (そして多額のお金を節約できます)
セルフホスティング Kubernetes を使用すると、ネットワーク ポリシー、暗号化、アクセス制御、コンプライアンス要件などのセキュリティ対策を直接制御できます。これにより、組織のニーズと規制基準に合わせた最適な Kubernetes セキュリティ プラクティスを実装できます。 (log4j、ベルを鳴らしてください?)
セルフホスト型 Kubernetes を使用すると、リソースを他のテナントと共有することなく、クラスターに独占的に割り当てることができます。これにより、リソースの使用率が向上し、共有環境でのリソースの競合によって発生する可能性のある潜在的なパフォーマンスの問題が回避されます。
セルフホスティング Kubernetes には、基盤となるインフラストラクチャの管理と保守に関する専門知識が必要です。
サーバー、ネットワーキング、ストレージ、およびクラスターのその他のコンポーネントのプロビジョニング、構成、および監視はお客様の責任です。これには時間がかかり、専用のリソースと追加雇用が必要になる場合があります。
セルフホスト型 Kubernetes クラスターのスケーリングは、自動スケーリング機能を提供するマネージド サービスに比べて複雑になる場合があります。
ピーク負荷に対処するには、リソースを事前に計画してプロビジョニングする必要があり、ノードの追加または削除には手動介入が必要になる場合があります。
セルフホスト型 Kubernetes では、アップグレード、パッチ、バックアップ、高可用性の管理など、運用がさらに複雑になります。これらのタスクでは、クラスターとアプリケーションへの中断を最小限に抑え、本番ダウンタイムの増加を最小限に抑えるために、慎重な計画、テスト、調整が必要です。
Kubeadm は、Kubernetes クラスターのセットアップと管理のプロセスを簡素化し、技術コミュニティのメンバーがコンテナ オーケストレーションの世界に簡単に参加できるようにするコマンド ライン ツールです。
kubeadm
クラスターのセットアップの詳細を処理して、全体像に集中できるようにする信頼できるアシスタントであると考えてください。
必須コンポーネントの構成、証明書の生成、クラスターがベスト プラクティスに従っていることの確認など、複雑なタスクを自動化します。
kubeadm
どのように機能するかをよりよく理解するために、いくつかの例とコマンドを見てみましょう。
コマンド例 #1: ` kubeadm init
`
上記のコマンドの使用方法は次のとおりです。
kubeadm init --pod-network-cidr=192.168.0.0/16
このコマンドは、マスター ノード上のコントロール プレーンを初期化します。必要な証明書を生成し、API サーバー、etcd、その他の重要なコンポーネントをセットアップします。
` --pod-network-cidr ` フラグは、クラスター内のポッド ネットワークの IP アドレス範囲を指定します。
コマンド例 #2: ` kubeadm join
`
kubeadm join <master-node-ip>:<master-node-port> --token <token> --discovery-token-ca-cert-hash <hash>
このコマンドは、ワーカー ノードをクラスターに参加させます。マスター ノードの IP とポート、およびトークンと検出トークン CA 証明書ハッシュを指定する必要があります。これらは、コントロール プレーンの初期化中に取得できます。
コマンド: ` kubeadm reset
`
kubeadm reset --force
このコマンドはクラスターをリセットし、インストールされているすべてのコンポーネントを削除し、ノードを Kubernetes 前の状態に戻します。 ` --force ` フラグにより、完全なリセットが保証されます。
コマンド: ` kubeadm upgrade
`
上記のkubeadm
コマンドの使用方法は次のとおりです。
kubeadm upgrade plan
このコマンドは、Kubernetes バージョンをアップグレードするのに役立ちます。利用可能なアップグレードを確認し、コントロール プレーン コンポーネントのアップグレード計画を提供します。
ここでは、一般的に使用される kubeadm コマンドのリストとそれに関連する例を示します。
kubeadm init --pod-network-cidr=192.168.0.0/16
上記の例では、コマンドはマスター ノード上のコントロール プレーンを初期化し、証明書を生成し、重要なコンポーネントをセットアップします。 ` --pod-network-cidr ` フラグは、ポッド ネットワークの IP アドレス範囲を指定します。
kubeadm join <master-node-ip>:<master-node-port> --token <token> --discovery-token-ca-cert-hash <hash>
上記のコマンドは、トークンと検出トークン CA 証明書ハッシュを使用して指定されたマスター ノードに接続することにより、ワーカー ノードをクラスターに参加させます。
kubeadm reset --force
上記のコマンドはノードをリセットし、インストールされているすべての Kubernetes コンポーネントを削除し、Kubernetes 前の状態に戻します。 ` --force ` フラグにより、完全なリセットが保証されます。
kubeadm upgrade plan
上記のコマンドは、コントロール プレーン コンポーネントの利用可能なアップグレードを確認して、アップグレード プランを提供します。
kubeadm token create
この kubeadm コマンドは、ノードをクラスターに参加させるために使用される認証トークンを管理します。この例では、新しいトークンを生成します。
kubeadm config print init-defaults
上記のコマンドは、kubeadm 構成ファイルを管理します。この例では、クラスター初期化のデフォルト構成を出力します。
kubeadm version
上記のコマンドは、kubeadm のバージョンを出力します。
kubeadm config images list
上記のコマンドを使用して、現在の Kubernetes バージョンに必要なイメージのリストを出力します。
このコマンドは、手動のコンテナ イメージ管理に必要なコンテナ イメージを決定するのに役立ちます。構成イメージをプルするには、` list ` を ` pull ` に置き換えます。
kubeadm token create --print-join-command
上記のコマンドは、ノードをクラスターに参加させるために使用できる新しいトークンを生成します。 ` --print-join-command ` フラグは、ワーカー ノードで実行される結合コマンドを表示します。
kubeadm token list
上記のコマンドは、アクティブなトークンを、それらに関連付けられた作成時間と有効期限とともに一覧表示します。
kubeadm token delete <token_value>
上記のコマンドを使用して特定のトークンを削除し、ノード結合に使用できなくします。
kubeadm config migrate --old-config kubeadm.conf --new-config kubeadm.yaml
上記のコマンドは、構成ファイルを古いバージョンから新しいバージョンに移行し、構成をスムーズにアップグレードできるようにします。
kubeadm certs check-expirationkubeadm certs certificate-key
上記のコマンドは、コントロール プレーン コンポーネントによって使用される証明書の有効期限ステータスを確認し、有効期限が近づいている証明書について警告を出します。 2 番目のコマンドはキーを生成します。
kubeadm init phase kubelet-start --config config.yaml
上記のコマンドは、InitConfiguration ファイルから、kubelet フラグを含む動的環境ファイルを作成します。
kubeadm join phase control-plane-prepare
上記のコマンドは、ワーカー ノードがコントロール プレーンに参加する際に特定のフェーズを実行します。この例では、ワーカー ノードがコントロール プレーン ノードになるように準備する ` control-plane-prepare`フェーズを実行します。
kubeadm kubeconfig user --client-name=foo --config=bar
上記のコマンドを使用して、kubeadm config ファイル バーを使用してfooという名前の追加ユーザーのkubeconfig
ファイルを出力します。
kubeadm reset phase preflight
上記のコマンドは、ノードのリセット プロセス中に特定のフェーズを実行します。この例では、Kubernetes コンポーネントを削除する前にリセット前のチェックを実行する「 preflight
」フェーズを実行します。
kubeadm upgrade plan
上記のコマンドは、コントロール プレーン コンポーネントのアップグレード プランを表示し、利用可能なバージョンとアップグレードに必要なアクションを示します。
kubeadm upgrade apply v1.22.2
上記のコマンドを使用して、特定の Kubernetes バージョンをコントロール プレーンに適用し、そのコンポーネントを指定されたバージョンにアップグレードします。
kubeadm upgrade node
このコマンドは、ワーカー ノード上のkubelet
とkube-proxyをアップグレードして、コントロール プレーンのバージョンと一致させます。
kubeadm
を使用して Kubernetes クラスターを作成するには、環境が必要な前提条件を満たしていることを確認する必要があります。
ここでは、 kubeadm
を使用して Kubernetes クラスターを作成する方法に関するステップバイステップのガイドを示します。これには、前提条件、詳細な手順、例、コマンドが含まれます。
Docker がインストールされ、サポートされている Linux ディストリビューション (Ubuntu、CentOS、または Red Hat Enterprise Linux など) を実行している 2 台以上のマシン。
マシンごとに 2 GiB 以上の RAM が推奨されます。それ以下のものでは、ソフトウェアの余地が限られてしまいます。
すべてのマシンのスワップ領域を無効にします。
各マシンに一意のホスト名、MAC アドレス、product_uuid を設定します。
クラスター内のすべてのマシンは完全なネットワーク接続を備えています。パブリックまたはプライベート ネットワークに接続できます。
ファイアウォールで必要なポート (6443、2379 ~ 2380、10250、10251、10252 など) を開きます。
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
目的のコントロール プレーン ノードで、` kubeadm init
` コマンドを使用してクラスターを初期化します。
sudo kubeadm init --pod-network-cidr=192.168.0.0/16
注: 別のポッド ネットワークを使用する予定がある場合は、` --pod-network-cidr ` フラグを調整します。
初期化が完了すると、コマンドはトークンとハッシュを含む ` kubeadm join
` コマンドを出力します。このコマンドは後でワーカー ノードをクラスターに参加させるために使用されるため、必ずコピーしてください。
kubectl
のクラスター構成をセットアップするコントロール プレーン ノードで、必要なディレクトリを作成し、 kubeconfig
ファイルをコピーします。
mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config
コントロール プレーン ノードで、ポッド ネットワーク アドオンをデプロイします。たとえば、Calico を使用できます。
kubectl apply -f https://docs.projectcalico.org/v3.21/manifests/calico.yaml
各ワーカー ノードで、コントロール プレーンの初期化中に (ステップ 2 から) 生成された ` kubeadm join
` コマンドを実行します。このコマンドは通常次のようになります。
sudo kubeadm join <control_plane_IP>:6443 --token <token> --discovery-token-ca-cert-hash <hash>
コントロール プレーン ノードで、` kubectl
` を使用してクラスターのステータスを確認します。
kubectl get nodes
おめでとう! 「 kubeadm
」を使用して Kubernetes クラスターが正常に作成されました。これで、クラスター上にアプリケーションをデプロイして管理できるようになりました。
kubeadm
を使用してクラスター コンポーネントを管理する方法kubeadm
でクラスター コンポーネントを管理するには、さまざまなコマンドを使用して、クラスターのアップグレード、ノードの追加または削除、コントロール プレーンの管理などのタスクを実行できます。
ここでは、コード コメント付きの詳細なコマンドを含む、 kubeadm
を使用してクラスター コンポーネントを管理する方法に関するステップバイステップ ガイドを示します。
コントロール プレーン ノード上の 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
コントロール プレーン ノードで、新しい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
削除するノードをドレインします。
kubectl drain <node_name> --ignore-daemonsets
コントロール プレーン ノードで、ノードを削除します。
sudo kubeadm reset
コントロール プレーン ノードで、クラスターからノードを削除します。
kubectl delete node <node_name>
コントロール プレーン ノードのコントロール プレーン コンポーネントをアップグレードします。
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 を最大限に活用するために覚えておくべき 3 つのベスト プラクティスを次に示します。
一般に、kubeadm にはノードとクラスターの自動スケーリング機能がないため、運用クラスターには使用しないでください。これは、ノードの自動スケーリングでは基盤となるインフラストラクチャとハードウェアの制御が必要になり、kubeadm が他のツールにそれを委任しているためです。
Kubeadm には、クラスター状態を保存するためのマルチ etcd クラスターがデフォルトではありません。何か問題が発生した場合に備えて、etcd のバックアップを定期的に作成してください。
Kubeadm は、使用されていないマシンの電源をオフにすることはできません。
したがって、 kubeadm
を使用してKubernetes クラスターのコストを最適化するには、外部ソリューションを使用してワーカー ノードとそのリソース使用率を追跡する必要があります。