はじめに
この実験では、Kubernetesクラスタ内のノードを調べるためにkubectl
をどのように使用するかを学びます。基本的なノード情報から始めて、taintやtolerationなどの高度なトピックまで学んでいきます。この実験では、既にKubernetesクラスタをセットアップし、kubectl
をインストールしていることを前提としています。
この実験では、Kubernetesクラスタ内のノードを調べるためにkubectl
をどのように使用するかを学びます。基本的なノード情報から始めて、taintやtolerationなどの高度なトピックまで学んでいきます。この実験では、既にKubernetesクラスタをセットアップし、kubectl
をインストールしていることを前提としています。
リソースを作成する前に、動作中のKubernetesクラスタが必要です。Minikubeは、ローカルマシン上で動作する軽量のKubernetes環境です。
作業ディレクトリに移動する:
ターミナルを開き、デフォルトのプロジェクトフォルダに移動します。
cd /home/labex/project
Minikubeを起動する:
Minikubeを起動してKubernetesクラスタを初期化します。
minikube start
Minikubeが動作していることを確認する:
Minikubeクラスタの状態を確認します。
minikube status
kubelet
やapiserver
などのコンポーネントがRunning
と表示されていることを確認します。minikube start
を再度実行します。Minikubeの起動に問題がある場合は、必要に応じてminikube delete
を使用して環境をリセットします。
まず最初に行うことは、クラスタ内のノードに関する基本情報を取得することです。
クラスタ内のノードの一覧を表示するには、次のコマンドを実行します。
kubectl get nodes
これにより、クラスタ内のすべてのノードの一覧とその状態が表示されます。
特定のノードに関する詳細情報を取得するには、次のコマンドを実行します。
kubectl describe node minikube
minikube
を調べたいノードの名前に置き換えます。これにより、ノードの状態、容量、使用状況に関する詳細情報が表示されます。
ラベルとアノテーションを使用すると、クラスタ内のノードにメタデータを追加できます。このメタデータを使用して、特定のタスクに対するノードの選択や、特定の基準に基づくノードのフィルタリングを行うことができます。
特定のノードのラベルとアノテーションを表示するには、次のコマンドを実行します。
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 クラスタ内のノードを調べる方法を学びました。ノードを一覧表示し、その状態を確認し、そのラベルを表示し、その容量とリソースの使用状況を調べる方法を学びました。また、保守やアップグレードのためにノードを排水してアンコードする方法も学びました。