はじめに
この実験では、Kubernetes クラスタ内のノードを調べるためにkubectlをどのように使用するかを学びます。基本的なノード情報から始めて、taint や toleration などの高度なトピックまで学んでいきます。この実験では、既に Kubernetes クラスタをセットアップし、kubectlをインストールしていることを前提としています。
Minikube クラスタを起動する
リソースを作成する前に、動作中の Kubernetes クラスタが必要です。Minikube は、ローカルマシン上で動作する軽量の Kubernetes 環境です。
作業ディレクトリに移動する:
ターミナルを開き、デフォルトのプロジェクトフォルダに移動します。
cd /home/labex/projectMinikube を起動する:
Minikube を起動して Kubernetes クラスタを初期化します。
minikube start- このコマンドは、ローカルマシン上に単一ノードの Kubernetes クラスタをセットアップします。
- Minikube の起動には、システムの性能に応じて数分かかる場合があります。
Minikube が動作していることを確認する:
Minikube クラスタの状態を確認します。
minikube statuskubeletやapiserverなどのコンポーネントがRunningと表示されていることを確認します。- クラスタが動作していない場合は、
minikube startを再度実行します。
Minikube の起動に問題がある場合は、必要に応じてminikube deleteを使用して環境をリセットします。
基本的なノード情報
まず最初に行うことは、クラスタ内のノードに関する基本情報を取得することです。
クラスタ内のノードの一覧を表示するには、次のコマンドを実行します。
kubectl get nodesこれにより、クラスタ内のすべてのノードの一覧とその状態が表示されます。
特定のノードに関する詳細情報を取得するには、次のコマンドを実行します。
kubectl describe node minikubeminikubeを調べたいノードの名前に置き換えます。これにより、ノードの状態、容量、使用状況に関する詳細情報が表示されます。
ラベルとアノテーション
ラベルとアノテーションを使用すると、クラスタ内のノードにメタデータを追加できます。このメタデータを使用して、特定のタスクに対するノードの選択や、特定の基準に基づくノードのフィルタリングを行うことができます。
特定のノードのラベルとアノテーションを表示するには、次のコマンドを実行します。
kubectl get node minikube --show-labels=trueこれにより、指定されたノードのラベルとアノテーションが表示されます。
ノードにラベルを追加するには、次のコマンドを実行します。
kubectl label node minikube org=labexノードにアノテーションを追加するには、次のコマンドを実行します。
kubectl annotate node minikube environment=productionノードのラベルを確認するには、次のコマンドを使用します。
kubectl get nodes --show-labelsこれにより、クラスタ内のすべてのノードの一覧とそのラベルが出力されます。ノードには、その目的や特性を識別するためにラベルを付けることができます。
テイントとトレラション
テイントとトレラションを使用すると、クラスタ内のどのポッドがどのノードにスケジュールされるかを制御できます。テイントは、特定の種類のポッドに不適切であることをノードにマークする特殊なラベルであり、トレラションは、一致するテイントが付いたノードにポッドをスケジュールすることを許可する設定です。
特定のノードのテイントを表示するには、次のコマンドを実行します。
kubectl describe node minikube | grep Taintsこれにより、指定されたノードのテイントが表示されます。
ノードにテイントを追加するには、次のコマンドを実行します。
kubectl taint node minikube app=backend:NoScheduleポッドにトレラションを作成するには、次のコマンドを実行します。
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 クラスタ内のノードを調べる方法を学びました。ノードを一覧表示し、その状態を確認し、そのラベルを表示し、その容量とリソースの使用状況を調べる方法を学びました。また、保守やアップグレードのためにノードを排水してアンコードする方法も学びました。


