ホームページ >ウェブフロントエンド >jsチュートリアル >CKA フルコース 1 日の静的ポッド、手動スケジューリング、ラベル、Kubernetes のセレクター

CKA フルコース 1 日の静的ポッド、手動スケジューリング、ラベル、Kubernetes のセレクター

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-04 13:33:02926ブラウズ

CKA Full Course Day Static Pods, Manual Scheduling, Labels, and Selectors in Kubernetes

タスク: スケジューラーを使用せずにポッドを手動でスケジュールする

このタスクでは、クラスター内の特定のノードにポッドを直接割り当てることで、Kubernetes スケジューラーをバイパスする方法を検討します。これは、通常のスケジューリング プロセスを経ずにポッドを特定のノードで実行する必要がある特定のシナリオでは便利なアプローチとなります。

前提条件

以前の投稿で説明したものと同様の KIND (Kubernetes in Docker) 構成で作成された Kubernetes クラスターが実行されていると仮定します。ここでは、kind-cka-cluster:
という名前のクラスターを作成しました。

kind create cluster --name kind-cka-cluster --config config.yml

KIND を使用したクラスターの作成については以前の投稿ですでに説明したため、それらの詳細については再度説明しません。

ステップ 1: クラスター ノードを確認する

この新しいクラスターで使用可能なノードを確認するには、次のコマンドを実行します。

kubectl get nodes

次のような出力が表示されるはずです:

NAME                           STATUS   ROLES           AGE   VERSION
kind-cka-cluster-control-plane Ready    control-plane   7m   v1.31.0

このタスクでは、kind-cka-cluster-control-plane でポッドをスケジュールします。

ステップ 2: ポッドマニフェスト (node.yml) を定義する

次に、YAML 形式でポッド マニフェストを作成しましょう。ポッド構成の nodeName フィールドを使用すると、Kubernetes スケジューラーを完全にバイパスして、ポッドの正確なノードを指定できます。

node.yml:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx
  nodeName: kind-cka-cluster-control-plane

このマニフェストでは:

  • nodeName を kind-cka-cluster-control-plane に設定します。これは、スケジューラがノードの割り当てをスキップし、この特定のノード上の Kubelet が代わりに配置を処理することを意味します。

このアプローチはノード選択の直接的な方法であり、nodeSelector やアフィニティ ルールなどの他のメソッドをオーバーライドします。

Kubernetes ドキュメントによると:

「nodeName は、アフィニティや nodeSelector よりも直接的なノード選択形式です。nodeName は、Pod 仕様のフィールドです。nodeName フィールドが空でない場合、スケジューラは Pod を無視し、指定されたノード上の kubelet が配置を試みます。そのノード上のポッドでは、nodeName の使用は、nodeSelector またはアフィニティおよび反アフィニティ ルールの使用を無効にします。"

詳細については、ノード割り当てに関する Kubernetes ドキュメントを参照してください。

ステップ 3: ポッドマニフェストを適用する

マニフェストの準備ができたら、それをクラスターに適用します。

kubectl apply -f node.yml

このコマンドは、nginx ポッドを作成し、それを kind-cka-cluster-control-plane ノードに直接割り当てます。

ステップ 4: ポッドの配置を確認する

最後に、指定したノードでポッドが実行されていることを確認します。

kubectl get pods -o wide

出力により、nginx ポッドが kind-cka-cluster-control-plane:
で実際に実行されていることを確認できます。

kind create cluster --name kind-cka-cluster --config config.yml

これは、nodeName フィールドを設定することによって、Kubernetes スケジューラを正常にバイパスし、コントロール プレーン ノード上でポッドを直接スケジュールしたことを確認します。


タスク: コントロール プレーン ノードにログインし、デフォルトの静的ポッド マニフェストのディレクトリに移動し、コントロール プレーン コンポーネントを再起動してみます。

新しく作成したクラスターのコントロール プレーン ノードにアクセスするには、次のコマンドを使用します。

kubectl get nodes

静的ポッドマニフェストを含むディレクトリに移動します:

NAME                           STATUS   ROLES           AGE   VERSION
kind-cka-cluster-control-plane Ready    control-plane   7m   v1.31.0

現在のマニフェストを確認します:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx
  nodeName: kind-cka-cluster-control-plane

kube-controller-manager を再起動するには、そのマニフェスト ファイルを一時的に移動します。

kubectl apply -f node.yml

再起動を確認したら、マニフェスト ファイルを元の場所に戻します:

kubectl get pods -o wide

これらの手順により、コントロール プレーンにアクセスし、静的ポッド マニフェストを操作してコントロール プレーン コンポーネントのライフサイクルを管理する方法を実証できました。


kube-controller-managerの再起動の確認

kube-controller-manager.yaml マニフェスト ファイルを一時的に /tmp に移動した後、kube-controller-manager が再起動したことを確認できます。以前の投稿で述べたように、私は k9s を使用しています。これにより再起動が明確に表示されますが、k9s を使用していない読者の場合は、次のコマンドを試してください

イベントの検査:
さらに情報を収集するには、次を使用します:

NAME    READY   STATUS    RESTARTS   AGE   IP           NODE                             NOMINATED NODE   READINESS GATES
nginx   1/1     Running   0          28s   10.244.0.5   kind-cka-cluster-control-plane   <none>           <none>

出力の最後にあるイベントを探します。再起動が成功すると、次のようなイベントが表示されます:

docker exec -it kind-cka-cluster-control-plane bash

「Kill​​ing」、「Created」、および「Started」イベントの存在は、kube-controller-manager が停止され、その後正常に再起動されたことを示します。


掃除

タスクを完了し、ポッドの動作を確認したら、不要になったリソースをクリーンアップすることが重要です。これにより、整然とした環境が維持され、クラスター内のリソースが解放されます。

ポッドをリストする:
まず、クラスター内で実行されている現在のポッドを確認できます:

cd /etc/kubernetes/manifests

次のような出力が表示される場合があります:

ls

ポッドの説明:
特定のポッドに関する詳細情報を取得するには、describe コマンドを使用します。

mv kube-controller-manager.yaml /tmp

これにより、名前、名前空間、ノード、その他の構成など、ポッドに関する詳細が表示されます。

mv /tmp/kube-controller-manager.yaml /etc/kubernetes/manifests/

ポッドを削除します:
ポッドが不要になった場合は、次のコマンドを使用して安全に削除できます:

   kubectl describe pod kube-controller-manager-kind-cka-cluster-control-plane -n kube-system

削除の確認:
削除コマンドを実行した後、ポッドを再度リストすることで、ポッドが削除されたことを確認できます。

   Events:
     Type    Reason   Age                    From     Message
     ----    ------   ----                   ----     -------
     Normal  Killing  4m12s (x2 over 8m32s)  kubelet  Stopping container kube-controller-manager
     Normal  Pulled   3m6s (x2 over 7m36s)   kubelet  Container image "registry.k8s.io/kube-controller-manager:v1.31.0" already present on machine
     Normal  Created  3m6s (x2 over 7m36s)   kubelet  Created container kube-controller-manager
     Normal  Started  3m6s (x2 over 7m36s)   kubelet  Started container kube-controller-manager

nginx ポッドがリストに表示されなくなったことを確認します。

これらのクリーンアップ手順を実行すると、Kubernetes クラスターが整理され効率的に維持されるようになります。


特定のラベルを持つ複数のポッドの作成

このセクションでは、nginx イメージに基づいて 3 つのポッドを作成します。それぞれに一意の名前と、異なる環境を示す特定のラベル (env:test、env:dev、および env:prod) が付けられます。

ステップ 1: スクリプトを作成する

まず、ポッドを生成するコマンドを含むスクリプトを作成します。次のコマンドを使用してスクリプト ファイルを作成します:

kind create cluster --name kind-cka-cluster --config config.yml

次に、次のコードをファイルに貼り付けます:

kubectl get nodes

ステップ 2: スクリプトを実行可能にする

ファイルを保存した後、次のコマンドを使用してスクリプトを実行可能にします:

NAME                           STATUS   ROLES           AGE   VERSION
kind-cka-cluster-control-plane Ready    control-plane   7m   v1.31.0

ステップ 3: スクリプトを実行する

スクリプトを実行してポッドを作成します:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx
  nodeName: kind-cka-cluster-control-plane

ポッドの作成を示す出力が表示されます:

kubectl apply -f node.yml

ステップ 4: 作成されたポッドを確認する

スクリプトは、作成されたポッドのステータスを表示します。

kubectl get pods -o wide

この時点で、ラベルに基づいてポッドをフィルタリングできます。たとえば、env=dev ラベルを持つポッドを検索するには、次のコマンドを使用します。

NAME    READY   STATUS    RESTARTS   AGE   IP           NODE                             NOMINATED NODE   READINESS GATES
nginx   1/1     Running   0          28s   10.244.0.5   kind-cka-cluster-control-plane   <none>           <none>

ポッドが実行されていることを確認する出力が表示されるはずです。

docker exec -it kind-cka-cluster-control-plane bash

タグとメンション

  • @piyushsachdeva
  • 13 日目: ビデオチュートリアル

以上がCKA フルコース 1 日の静的ポッド、手動スケジューリング、ラベル、Kubernetes のセレクターの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。