kubectl を使ってノードを調べる

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

はじめに

この実験では、Kubernetes クラスタ内のノードを調べるためにkubectlをどのように使用するかを学びます。基本的なノード情報から始めて、taint や toleration などの高度なトピックまで学んでいきます。この実験では、既に Kubernetes クラスタをセットアップし、kubectlをインストールしていることを前提としています。

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 get nodes
    

    これにより、クラスタ内のすべてのノードの一覧とその状態が表示されます。

  2. 特定のノードに関する詳細情報を取得するには、次のコマンドを実行します。

    kubectl describe node minikube
    

    minikubeを調べたいノードの名前に置き換えます。これにより、ノードの状態、容量、使用状況に関する詳細情報が表示されます。

ラベルとアノテーション

ラベルとアノテーションを使用すると、クラスタ内のノードにメタデータを追加できます。このメタデータを使用して、特定のタスクに対するノードの選択や、特定の基準に基づくノードのフィルタリングを行うことができます。

  1. 特定のノードのラベルとアノテーションを表示するには、次のコマンドを実行します。

    kubectl get node minikube --show-labels=true
    

    これにより、指定されたノードのラベルとアノテーションが表示されます。

  2. ノードにラベルを追加するには、次のコマンドを実行します。

    kubectl label node minikube org=labex
    
  3. ノードにアノテーションを追加するには、次のコマンドを実行します。

    kubectl annotate node minikube environment=production
    
  4. ノードのラベルを確認するには、次のコマンドを使用します。

    kubectl get nodes --show-labels
    

    これにより、クラスタ内のすべてのノードの一覧とそのラベルが出力されます。ノードには、その目的や特性を識別するためにラベルを付けることができます。

テイントとトレラション

テイントとトレラションを使用すると、クラスタ内のどのポッドがどのノードにスケジュールされるかを制御できます。テイントは、特定の種類のポッドに不適切であることをノードにマークする特殊なラベルであり、トレラションは、一致するテイントが付いたノードにポッドをスケジュールすることを許可する設定です。

  1. 特定のノードのテイントを表示するには、次のコマンドを実行します。

    kubectl describe node minikube | grep Taints
    

    これにより、指定されたノードのテイントが表示されます。

  2. ノードにテイントを追加するには、次のコマンドを実行します。

    kubectl taint node minikube app=backend:NoSchedule
    
  3. ポッドにトレラションを作成するには、次のコマンドを実行します。

    cat << EOF | kubectl apply -f -
    apiVersion: v1
    kind: Pod
    metadata:
      name: my-pod
    spec:
      containers:
        - name: my-container
          image: nginx
      tolerations:
        - key: app
          operator: Exists
          effect: NoSchedule
    EOF
    

    このポッドは、テイントの名前としてappを使用し、テイントが持つべき効果としてNoScheduleを使用しています。

ノードの容量とリソース使用状況を表示する

ノード上の利用可能なリソースを表示するには、次のコマンドを使用します。

kubectl describe node minikube | grep -A 8 "Allocated resources"

minikubeを調べたいノードの名前に置き換えます。

これにより、ノードの容量や現在のリソースの使用状況など、ノードに関する詳細情報が提供されます。

ノードイベントを表示する

Kubernetes では、特定のノードに関連するすべてのイベントをフィルタリングするには、次のコマンドを使用できます。

kubectl get events --field-selector involvedObject.kind=Node,involvedObject.name=minikube

minikube を、クエリしたいノードの名前に置き換えます。このコマンドは、再起動やアップグレードなど、そのノードに関連するすべてのイベントを一覧表示します。

ノードをコードンおよびアンコードする

場合によっては、保守やその他の理由でノードを回転から外す必要があるかもしれません。Kubernetes では、新しいポッドがそのノードにスケジュールされないように、ノードをスケジュール不可能にマークする方法が提供されています。これは「コードン」と呼ばれます。

ノードをコードンするには、次のコマンドを使用します。

kubectl cordon minikube

minikube をコードンしたいノードの名前に置き換えます。

次に、ノードの状態を確認するには、次のコマンドを使用します。

kubectl get node

ノードをアンコードして新しいポッドがそのノードにスケジュールされるようにするには、次のコマンドを使用します。

kubectl uncordon minikube

minikube をアンコードしたいノードの名前に置き換えます。

ノードをコードンすると、既存のポッドが自動的にノードから移動するわけではありません。ノードをコードンする前に、ポッドを手動で削除または移動する必要があります。これにより、障害を回避できます。

おめでとうございます。Kubernetes でノードをコードンおよびアンコードする方法を学びました。

まとめ

この実験では、kubectl を使用して Kubernetes クラスタ内のノードを調べる方法を学びました。ノードを一覧表示し、その状態を確認し、そのラベルを表示し、その容量とリソースの使用状況を調べる方法を学びました。また、保守やアップグレードのためにノードを排水してアンコードする方法も学びました。