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

KubernetesKubernetesBeginner
今すぐ練習

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

はじめに

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/ClusterInformationGroup(["Cluster Information"]) kubernetes(("Kubernetes")) -.-> kubernetes/ConfigurationandVersioningGroup(["Configuration and Versioning"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicsGroup(["Basics"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["Troubleshooting and Debugging Commands"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("Initialization") kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/annotate("Annotate") kubernetes/BasicCommandsGroup -.-> kubernetes/cordon("Cordon") kubernetes/BasicCommandsGroup -.-> kubernetes/uncordon("Uncordon") kubernetes/BasicCommandsGroup -.-> kubernetes/taint("Taint") kubernetes/ClusterInformationGroup -.-> kubernetes/cluster_info("Cluster Info") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("Describe") kubernetes/ConfigurationandVersioningGroup -.-> kubernetes/label("Label") subgraph Lab Skills kubernetes/initialization -.-> lab-9790{{"kubectl を使ってノードを調べる"}} kubernetes/get -.-> lab-9790{{"kubectl を使ってノードを調べる"}} kubernetes/annotate -.-> lab-9790{{"kubectl を使ってノードを調べる"}} kubernetes/cordon -.-> lab-9790{{"kubectl を使ってノードを調べる"}} kubernetes/uncordon -.-> lab-9790{{"kubectl を使ってノードを調べる"}} kubernetes/taint -.-> lab-9790{{"kubectl を使ってノードを調べる"}} kubernetes/cluster_info -.-> lab-9790{{"kubectl を使ってノードを調べる"}} kubernetes/describe -.-> lab-9790{{"kubectl を使ってノードを調べる"}} kubernetes/label -.-> lab-9790{{"kubectl を使ってノードを調べる"}} end

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 クラスタ内のノードを調べる方法を学びました。ノードを一覧表示し、その状態を確認し、そのラベルを表示し、その容量とリソースの使用状況を調べる方法を学びました。また、保守やアップグレードのためにノードを排水してアンコードする方法も学びました。