ノードセレクタを使ったスケジューリング

KubernetesKubernetesBeginner
オンラインで実践に進む

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、まず単純なデプロイを作成し、それにノードセレクタを割り当てます。次に、より複雑なシナリオに移行し、特定のノードにポッドをスケジュールするために異なるセレクタを使用します。

これは Guided Lab です。学習と実践を支援するためのステップバイステップの指示を提供します。各ステップを完了し、実践的な経験を積むために、指示に注意深く従ってください。過去のデータによると、この 初級 レベルの実験の完了率は 100%です。学習者から 91% の好評価を得ています。

Minikube クラスタを起動する

リソースを作成する前に、動作中の Kubernetes クラスタが必要です。Minikube は、ローカルマシン上で動作する軽量の Kubernetes 環境です。

  1. 作業ディレクトリに移動する:

    ターミナルを開き、デフォルトのプロジェクトフォルダに移動します。

    cd /home/labex/project
  2. Minikube を起動する:

    Minikube を起動して Kubernetes クラスタを初期化します。

    minikube start
    • このコマンドは、ローカルマシン上に単一ノードの Kubernetes クラスタをセットアップします。
    • Minikube の起動には、システムの性能に応じて数分かかる場合があります。
  3. Minikube が動作していることを確認する:

    Minikube クラスタの状態を確認します。

    minikube status
    • kubeletapiserverなどのコンポーネントがRunningと表示されていることを確認します。
    • クラスタが動作していない場合は、minikube startを再度実行します。

Minikube の起動に問題がある場合は、必要に応じてminikube deleteを使用して環境をリセットします。

単純なデプロイを作成する

このステップでは、単一のポッドを持つ単純なデプロイを作成します。

  1. 次の内容で simple-deployment.yaml という名前のファイルを作成します。
apiVersion: apps/v1
kind: Deployment
metadata:
  name: simple-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: simple-app
  template:
    metadata:
      labels:
        app: simple-app
    spec:
      containers:
        - name: simple-container
          image: nginx:latest
  1. kubectl を使用してデプロイを作成します。
kubectl apply -f simple-deployment.yaml
  1. デプロイが作成されたことを確認します。
kubectl get deployments

デプロイにノードセレクタを割り当てる

このステップでは、ステップ 1 で作成したデプロイにノードセレクタを割り当てます。

  1. ラベル付きのノードを作成する:
kubectl label nodes minikube disk=ssd
  1. node-selector-deployment.yaml ファイルを編集し、spec.template.spec セクションの下に nodeSelector フィールドを追加する:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: selector-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: selector-app
  template:
    metadata:
      labels:
        app: selector-app
    spec:
      nodeSelector:
        disk: ssd
      containers:
        - name: selector-container
          image: nginx:latest
  1. kubectl を使用して変更を適用する:
kubectl apply -f node-selector-deployment.yaml
  1. ポッドが disk=ssd というラベル付きのノードにスケジュールされたことを確認する:
kubectl get pods -o wide | grep selector-deployment

異なるノードセレクタを使用する

このステップでは、ノードに割り当てられたラベルに基づいて、特定のノードにポッドをスケジュールするために、異なるノードセレクタを使用します。

  1. 異なるラベル付きの 3 つのノードを作成する:
kubectl label nodes minikube resigon=labex
kubectl label nodes minikube gpu=true
  1. 次の内容で multi-selector-deployment.yaml という名前のファイルを作成する:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: multi-selector-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: multi-selector-app
  template:
    metadata:
      labels:
        app: multi-selector-app
    spec:
      containers:
        - name: multi-selector-container
          image: nginx:latest
      nodeSelector:
        resigon: labex
        gpu: "true"
  1. 変更を適用する:
kubectl apply -f multi-selector-deployment.yaml
  1. 適切なラベル付きのノードにポッドがスケジュールされたことを確認する:
kubectl get pods -o wide | grep multi-selector-deployment

まとめ

この実験では、ノードセレクタとノードアフィニティを使用して、特定のノードにポッドをスケジュールする方法を学びました。単純なデプロイから始め、その後、異なるセレクタとアフィニティルールを使用して、ノードに割り当てられたラベルに基づいて特定のノードにポッドをスケジュールするより複雑なシナリオに移行しました。

おめでとうございます!この実験を無事に完了しました。