将pod 指定部署到特定節點(master)上的一種方法記錄 -nodeSelector
需求是這樣的,我要搭一個叢集,這個叢集要走 CI/CD 流程,還要管理 CI/CD 流程的産出物,将其儲存在 Harbor 中,讓後讓産出物在另外兩個節點上運作起來。咨詢了我司 DevOps 大佬,大佬建議将 Jenkins 部署到 Master 節點,可以避免各種證書相關的問題。
那麼問題來了, pod 部署一般都是 k8s 來配置設定,怎麼将 Jenkins 部署到特定 master 節點呢?
接下來對我的操作做一個記錄。
為master 節點打标簽
[root@master ~]# kubectl label nodes master labelName=master
編寫yaml
部署文檔如下
apiVersion: apps/v1
kind: Deployment
metadata:
name: jenkins-deployment
labels:
app: jenkins
spec:
replicas: 1
selector:
matchLabels:
app: jenkins
template:
metadata:
labels:
app: jenkins
spec:
containers:
- name: jenkins
image: jenkins:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
name: web
protocol: TCP
- containerPort: 50000
name: agent
protocol: TCP
volumeMounts:
- name: jenkins-home
mountPath: /var/jenkins_home
volumes:
- name: jenkins-home
hostPath:
path: /root/jenkins-home
nodeSelector:
labelName: master
---
apiVersion: v1
kind: Service
metadata:
name: jenkins-service
labels:
app: jenkins
spec:
ports:
- port: 8080
targetPort: 8080
name: web
nodePort: 32019
- port: 50000
targetPort: 50000
name: agent
selector:
app-name: jenkins
type: NodePort
正是由于 Demployment 中spec 中制定了 nodeSelecter 的 label 為 labelName:master, Jenkins 會自動選在 master 節點進行部署。