タントとトレラション

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

はじめに

Kubernetes では、特定のポッドをスケジュールするために、どのノードが適しているかを指定するために、タント(taints)とトレラション(tolerations)が使用されます。タントはノードに適用されてポッドを排除し、トレラションはポッドに適用されて特定のノードに引き付けます。この実験では、タントとトレラションを使用して特定のノード上でポッドをスケジュールする方法を学びます。

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. ノードにカスタム ラベルを付ける:
kubectl label nodes minikube disk-type=ssd
  1. 次のコマンドでノードにタントを設定する:
kubectl taint nodes minikube disk-type=ssd:NoSchedule

NoSchedule エフェクトにより、トレラションがないポッドはこのノードにスケジュールされなくなります。

トレラションのないポッドを作成する

このステップでは、トレラションのないポッドを作成し、それがタント付きノードにスケジュールできないことを確認します。

  1. 次の内容で pod-without-toleration.yaml という名前のファイルを作成します。
apiVersion: v1
kind: Pod
metadata:
  name: pod-without-toleration
spec:
  containers:
    - name: nginx
      image: nginx:latest
  1. 変更を適用します。
kubectl apply -f pod-without-toleration.yaml
  1. ポッドがタント付きノードにスケジュールされていないことを確認します。
kubectl describe pod pod-without-toleration | grep -i taint

出力には、ポッドがタント付きノードにスケジュールされていないことが表示されるはずです。

トレラション付きポッドを作成する

このステップでは、トレラションを持つポッドを作成し、それがタント付きノードにスケジュールされるようにします。

  1. 次の内容で pod-with-toleration.yaml という名前のファイルを作成します。
apiVersion: v1
kind: Pod
metadata:
  name: pod-with-toleration
spec:
  containers:
    - name: nginx
      image: nginx:latest
  tolerations:
    - key: "disk-type"
      operator: "Equal"
      value: "ssd"
      effect: "NoSchedule"
  1. 変更を適用します。
kubectl apply -f pod-with-toleration.yaml
  1. ポッドがタント付きノードにスケジュールされていることを確認します。
kubectl get pod pod-with-toleration -o wide

複数のタントに対するトレラション

このステップでは、複数のタントがあるノードにスケジュールされるようにする複数のトレラションを持つポッドを作成します。

  1. 次の内容で pod-with-multiple-tolerations.yaml という名前のファイルを作成します。
apiVersion: v1
kind: Pod
metadata:
  name: pod-with-multiple-tolerations
spec:
  containers:
    - name: nginx
      image: nginx:latest
  tolerations:
    - key: "disk-type"
      operator: "Equal"
      value: "ssd"
      effect: "NoSchedule"
    - key: "gpu"
      operator: "Equal"
      value: "true"
      effect: "NoSchedule"
  1. 変更を適用します。
kubectl apply -f pod-with-multiple-tolerations.yaml
  1. ポッドが両方のタントがあるノードにスケジュールされていることを確認します。
kubectl get pod pod-with-multiple-tolerations -o wide

まとめ

この実験では、特定のノードにポッドをスケジュールするためにタントとトレラションをどのように使用するかを学びました。まず、タント付きノードを作成し、トレラションのないポッドがそのノードにスケジュールできないことを確認しました。次に、トレラションを持つポッドを作成し、それがタント付きノードにスケジュールできることを確認しました。最後に、複数のトレラションを持つポッドを作成し、複数のタントがあるノードにスケジュールできることを確認しました。

タントとトレラションは、特定のワークロードが特定のノードにのみスケジュールされるようにするために使用できる、Kubernetes の強力な機能です。