使用k8s部署Nginx服務,Nginx對外提供服務只希望部署在其中一台主機,該主機不提供其他服務
一.設置標簽及污點
為了保證nginx之能分配到nginx服務器需要設置標簽和污點,設置標簽可以讓Pod選擇該服務器部署,設置污點可以使其他服務Pod無法部署在該服務器
本次部署nginx服務器IP為192.168.1.232
設置標簽
#設置標簽 key為typevalue為nginx kubectl label node 192.168.1.232 type=nginx #查看標簽 kubectl get node 192.168.1.232 --show-labels NAME STATUS ROLES AGE VERSION LABELS 192.168.1.232 Ready <none> 30h v1.17.4 kubernetes.io/arch=amd64,kubernetes.io/hostname=192.168.1.232,kubernetes.io/os=linux,type=nginx
設置污點
#給node192.168.1.232設置污點key為key值為nginx effec為NoSchedule永不調度 #除非在Pod里設置了對應的tolerations參數 kubectl taint node 192.168.1.232 key=nginx:NoSchedule
查看污點
kubectl describe node 192.168.1.232
二.設置Nginx-deployment的yaml文件
# cat nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx
name: nginx-deployment
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: nginx:1.14.0
name: nginx
#標簽選擇器
nodeSelector:
type: nginx
#設置污點可以調度到對應服務器
tolerations:
- key: "key"
operator: "Equal"
value: "nginx"
effect: "NoSchedule"
應用啟動
kubectl apply -f nginx-deployment.yaml
查看已經調度到對應的服務器
# kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-deployment-57f94c46b4-5whb5 1/1 Running 0 6h30m 172.17.97.3 192.168.1.232 <none> <none>
三.設置Nginx配置文件和程序根目錄掛載
啟動的Nginx使用默認的配置文件和默認的網站根目錄,需要使用volume掛載
# cat nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx
name: nginx-deployment
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: nginx:1.14.0
name: nginx
volumeMounts:
- name: conf
mountPath: /etc/nginx
- name: opt
mountPath: /opt
#標簽選擇器
nodeSelector:
type: nginx
#設置污點可以調度到對應服務器
tolerations:
- key: "key"
operator: "Equal"
value: "nginx"
effect: "NoSchedule"
volumes:
- name: conf
hostPath:
path: /etc/nginx
type: Directory
- name: opt
hostPath:
path: /opt
type: Directory
本次使用了本機掛載hostPath掛載配置文件及根目錄,生產環境最好使用pvc掛載
四.設置Service對外提供服務
# cat nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: nginx
name: nginx-deployment
spec:
ports:
- port: 80
name: nginx-service80
protocol: TCP
targetPort: 80
nodePort: 80
- port: 81
name: nginx-service81
protocol: TCP
targetPort: 81
nodePort: 81
selector:
app: nginx
type: NodePort
PS:使用NodePort啟用端口對外提供服務,如果對外映射多個端口需要在port參數下加參數name定義名稱,單個端口無需設置參數name
k8s默認使用NodePort對外映射端口為30000-50000如需要映射其他端口需要修改配置文件/opt/kubernetes/cfg/kube-apiserver,修改端口范圍

