如果需要限制Pod到指定的Node上運行,則可以給Node打標簽並給Pod配置NodeSelector。
給節點添加標簽
首先查看節點信息
[root@k8s-master ~]# kubectl get nodes
NAME STATUS AGE
k8s-slave01 Ready 4d
k8s-slave02 Ready 4d
選擇一個節點,給這個節點添加一個標簽
[root@k8s-master ~]# kubectl label nodes k8s-slave01 disktype=abc
node "k8s-slave01" labeled
查看標簽信息
[root@k8s-master ~]# kubectl get nodes --show-labels
NAME STATUS AGE LABELS
k8s-slave01 Ready 4d beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,disktype=abc,kubernetes.io/hostname=k8s-slave01
k8s-slave02 Ready 4d beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=k8s-slave02
向指定節點上創建pod
mysql-rc-xxx.yaml文件示例
kind: ReplicationController
metadata:
name: mysql-master
namespace: default
labels:
name: mysql-master
version: v1
spec:
replicas: 1
selector:
name: mysql-master-pod
version: v1
template:
metadata:
labels:
name: mysql-master-pod
version: v1
spec:
containers:
- image: docker.io/mysql
name: master
ports:
- containerPort: 3306
nodeSelector: disktype: abc
env:
- name: MYSQL_ROOT_PASSWORD
value: "123456"
volumeMounts:
- name: mysql-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-storage
hostPath:
path: /data/mysql_master
創建pod
[root@k8s-master k8s_yamls]# kubectl create -f mysql-rc-master.yaml
replicationcontroller "mysql-master" created
mysql-svc-xxx.yaml示例
apiVersion: v1
kind: Service
metadata:
name: mysql-master-svc
namespace: default
labels:
name: mysql-master-svc
spec:
externalIPs:
- 192.168.44.61
type: NodePort
ports:
- port: 3306
protocol: TCP
targetPort: 3306
name: http
nodePort: 30006
selector:
name: mysql-master-pod
創建svc
[root@k8s-master k8s_yamls]# kubectl create -f mysql-svc-master.yaml
service "mysql-master-svc" created
查看是否在slave01上
[root@k8s-master ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
mysql-master-5h2kg 1/1 Running 0 42m 172.17.25.2 k8s-slave01