はじめに
この実験では、まず単純なデプロイを作成し、それにノードセレクタを割り当てます。次に、より複雑なシナリオに移行し、特定のノードにポッドをスケジュールするために異なるセレクタを使用します。
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を使用して環境をリセットします。
単純なデプロイの作成
このステップでは、単一のポッドを持つ単純なデプロイを作成します。
- 次の内容で
simple-deployment.yamlという名前のファイルを作成します。
apiVersion: apps/v1
kind: Deployment
metadata:
name: simple-deployment
spec:
replicas: 1
selector:
matchLabels:
app: simple-app
template:
metadata:
labels:
app: simple-app
spec:
containers:
- name: simple-container
image: nginx:latest
kubectlを使用してデプロイを作成します。
kubectl apply -f simple-deployment.yaml
- デプロイが作成されたことを確認します。
kubectl get deployments
デプロイにノードセレクタを割り当てる
このステップでは、ステップ 1 で作成したデプロイにノードセレクタを割り当てます。
- ラベル付きのノードを作成する:
kubectl label nodes minikube disk=ssd
node-selector-deployment.yamlファイルを編集し、spec.template.specセクションの下にnodeSelectorフィールドを追加する:
apiVersion: apps/v1
kind: Deployment
metadata:
name: selector-deployment
spec:
replicas: 1
selector:
matchLabels:
app: selector-app
template:
metadata:
labels:
app: selector-app
spec:
nodeSelector:
disk: ssd
containers:
- name: selector-container
image: nginx:latest
kubectlを使用して変更を適用する:
kubectl apply -f node-selector-deployment.yaml
- ポッドが
disk=ssdというラベル付きのノードにスケジュールされたことを確認する:
kubectl get pods -o wide | grep selector-deployment
異なるノードセレクタを使用する
このステップでは、ノードに割り当てられたラベルに基づいて、特定のノードにポッドをスケジュールするために、異なるノードセレクタを使用します。
- 異なるラベル付きの 3 つのノードを作成する:
kubectl label nodes minikube resigon=labex
kubectl label nodes minikube gpu=true
- 次の内容で
multi-selector-deployment.yamlという名前のファイルを作成する:
apiVersion: apps/v1
kind: Deployment
metadata:
name: multi-selector-deployment
spec:
replicas: 3
selector:
matchLabels:
app: multi-selector-app
template:
metadata:
labels:
app: multi-selector-app
spec:
containers:
- name: multi-selector-container
image: nginx:latest
nodeSelector:
resigon: labex
gpu: "true"
- 変更を適用する:
kubectl apply -f multi-selector-deployment.yaml
- 適切なラベル付きのノードにポッドがスケジュールされたことを確認する:
kubectl get pods -o wide | grep multi-selector-deployment
まとめ
この実験では、ノードセレクタとノードアフィニティを使用して、特定のノードにポッドをスケジュールする方法を学びました。単純なデプロイから始め、その後、異なるセレクタとアフィニティルールを使用して、ノードに割り当てられたラベルに基づいて特定のノードにポッドをスケジュールするより複雑なシナリオに移行しました。
おめでとうございます!この実験を無事に完了しました。


