介绍
在本实验中,我们将首先创建一个简单的部署(deployment),然后为其分配节点选择器(Node Selectors)。接着,我们将进入更复杂的场景,使用不同的选择器将 Pod 调度到特定的节点上。
启动 Minikube 集群
在创建资源之前,你需要一个正在运行的 Kubernetes 集群。Minikube 是一个轻量级的 Kubernetes 环境,可以在你的本地机器上运行。
导航到工作目录:
打开终端并导航到默认的项目文件夹:
cd /home/labex/project启动 Minikube:
启动 Minikube 以初始化一个 Kubernetes 集群:
minikube start- 此命令将在你的本地机器上设置一个单节点的 Kubernetes 集群。
- 根据系统性能,Minikube 可能需要几分钟才能启动。
验证 Minikube 是否正在运行:
检查 Minikube 集群的状态:
minikube status- 查找
kubelet和apiserver等组件是否显示为Running。 - 如果集群未运行,请重新运行
minikube start。
- 查找
如果启动 Minikube 时遇到问题,可以使用 minikube delete 重置环境(如有需要)。
创建一个简单的 Deployment
在这一步中,我们将创建一个包含单个 Pod 的简单 Deployment。
- 创建一个名为
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创建 Deployment:
kubectl apply -f simple-deployment.yaml
- 验证 Deployment 是否已创建:
kubectl get deployments
为 Deployment 分配节点选择器
在这一步中,我们将为在第一步中创建的 Deployment 分配一个节点选择器(Node Selector)。
- 为节点添加标签:
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
- 验证 Pod 是否已调度到带有
disk=ssd标签的节点上:
kubectl get pods -o wide | grep selector-deployment
使用不同的节点选择器
在这一步中,我们将使用不同的节点选择器(Node Selector),根据分配给节点的标签将 Pod 调度到特定节点上。
- 创建三个带有不同标签的节点:
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
- 验证 Pod 是否已调度到带有相应标签的节点上:
kubectl get pods -o wide | grep multi-selector-deployment
总结
在本实验中,我们学习了如何使用节点选择器(Node Selector)和节点亲和性(Node Affinity)将 Pod 调度到特定节点上。我们从简单的部署开始,然后逐步进入更复杂的场景,使用不同的选择器和亲和性规则,根据分配给节点的标签将 Pod 调度到特定节点上。
恭喜!你已成功完成本实验。


