如果需要限制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