Kubernetes のタイントコマンド

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

はじめに

この実験では、Kubernetes においてノードにタイントを追加、変更、および削除するための強力なツールである kubectl taint コマンドの使い方を学びます。タイントは、ノードに特定の制限または要件があることを示すために使用され、これにより Kubernetes クラスター内のポッドのスケジューリングを制御するのに役立ちます。

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 を使用して環境をリセットします。

kubectl taint コマンドを調べる

kubectl taint コマンドは、Kubernetes ノードにタイントを追加、変更、または削除するために使用されます。タイントは、キーと値のペアで、特定のポッドが特定のノードに配置できるかどうかを制限することでポッドのスケジューリングに影響を与える効果を持っています。

kubectl taint の利用可能なオプションを表示するには、次のコマンドを実行します。

kubectl taint -h

次の出力が表示されます。

1つ以上のノードのタイントを更新します。

  * タイントは、キー、値、および効果で構成されます。ここでの引数としては、key=value:effect として表現されます。
  * キーは、英字または数字で始める必要があり、253 文字までの英字、数字、ハイフン、ドット、およびアンダースコアを含むことができます。
  * オプションとして、キーは DNS サブドメイン接頭辞と 1 つの '/' で始めることができます。たとえば、example.com/my-app のように。
  * 値は省略可能です。指定された場合、英字または数字で始める必要があり、63 文字までの英字、数字、ハイフン、ドット、およびアンダースコアを含むことができます。
  * 効果は、NoSchedule、PreferNoSchedule、または NoExecute でなければなりません。
  * 現在、タイントはノードにのみ適用できます。

例:
  ## キー 'dedicated' と値'special-user' および効果 'NoSchedule' のタイントでノード 'foo' を更新します
  ## そのキーと効果のタイントが既に存在する場合、その値は指定された通りに置き換えられます
  kubectl taint nodes foo dedicated=special-user:NoSchedule

  ## 存在する場合、ノード 'foo' からキー 'dedicated' と効果 'NoSchedule' のタイントを削除します
  kubectl taint nodes foo dedicated:NoSchedule-

  ## ノード 'foo' からキー 'dedicated' のすべてのタイントを削除します
  kubectl taint nodes foo dedicated-

  ## ラベル mylabel=X を持つノードにキー 'dedicated' のタイントを追加します
  kubectl taint node -l myLabel=X dedicated=foo:PreferNoSchedule

  ## ノード 'foo' にキー 'bar' で値のないタイントを追加します
  kubectl taint nodes foo bar:NoSchedule

ノードにタイントを追加する

このステップでは、kubectl taint コマンドを使用してノードにタイントを追加する方法を学びます。タイントは、特定の制限や要件を持つノードをマークするために使用され、そのノード上のポッドのスケジューリングに影響を与えることができます。

ノードにタイントを追加するには、次のコマンドを使用します。

kubectl taint nodes minikube app=prod:NoSchedule

これにより、キー app と値 prod のタイントが、効果 NoSchedule で、名前が minikube のノードに追加されます。これにより、ポッドがそのタイントを許容しない限り、そのノードにスケジュールされなくなります。

次に、kubectl describe node コマンドを使用して、現在 Kubernetes クラスター内のノードに適用されているタイントを表示することができます。

ノードのタイントを表示するには、次のコマンドを使用します。

kubectl describe node minikube

ノードに適用されているタイントは、出力の "Taints" セクションの下にリストされます。前のステップで追加したタイントがノードに適用されていることを確認するために、この情報を使用できます。

ノードからタイントを削除する

このステップでは、kubectl taint コマンドを使用してノードからタイントを削除する方法を学びます。ノードの制限や要件を更新する必要がある場合、または以前にタイントが付けられたノードにポッドをスケジュールできるようにする場合に役立ちます。

ノードからタイントを削除するには、次のコマンドを使用します。

kubectl taint nodes minikube app-

これにより、minikube ノードから app=prod:NoSchedule のタイントが削除されます。これにより、以前に適用されたタイントを許容する必要なく、そのノードにポッドをスケジュールできるようになります。

ノードのタイントを変更する

このステップでは、kubectl taint コマンドを使用してノードのタイントを変更する方法を学びます。ノードの制限や要件を更新する必要があり、既存のタイント キーと効果を維持したい場合に役立ちます。

  1. 次の内容の新しいタイントを追加します。
kubectl taint nodes minikube app=uat:NoSchedule
  1. 上書きを使用して強制的に更新します
kubectl taint nodes minikube app=dev:NoSchedule --overwrite=true

これにより、minikube ノードの app タイント値が prod から dev に更新されます。これにより、同じタイント キーと効果を維持しながらノードのタイントが更新されます。

まとめ

この実験では、Kubernetes で kubectl taint コマンドをどのように使用するかを学びました。最初に、特定のキー、値、および効果を持つ kubectl taint コマンドを使用してノードにタイントを追加しました。次に、kubectl describe node コマンドを使用してノードに適用されているタイントをどのように表示するかを学びました。