Kubernetes之使用Kubernetes部署Nginx服务
使用k8s部署Nginx服务,Nginx对外提供服务只希望部署在其中一台主机,该主机不提供其他服务
一.设置标签及污点
为了保证nginx之能分配到nginx服务器需要设置标签和污点,设置标签可以让Pod选择该服务器部署,设置污点可以使其他服务Pod无法部署在该服务器
本次部署nginx服务器IP为192.168.1.232
设置标签
1 2 3 4 5 6 | #设置标签 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 |
设置污点
1 2 3 | #给node192.168.1.232设置污点key为key值为nginx effec为NoSchedule永不调度 #除非在Pod里设置了对应的tolerations参数 kubectl taint node 192.168.1.232 key=nginx:NoSchedule |
查看污点
1 | kubectl describe node 192.168.1.232 |
二.设置Nginx-deployment的yaml文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | # 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" |
应用启动
1 | kubectl apply -f nginx-deployment.yaml |
查看已经调度到对应的服务器
1 2 3 | # 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挂载
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | # 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对外提供服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | # 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,修改端口范围
分类:
Kubernetes
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!