Kubernetes之Deployment控制器
Pod与controllers的关系
- controllers:在集群上管理和运行容器的对象
- 通过label-selector相关联
- Pod通过控制器实现应用的运维,如伸缩,滚动升级等
Deployment功能与应用场景
- 部署无状态应用
- 管理Pod和ReplicaSet
- 具有上线部署,副本设定,滚动升级,回滚等功能
- 提供声明式更新,例如只更新一个新的Image
应用场景:Web服务,微服务
yaml字段解析
模板
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | apiVersion: apps / v1 kind: Deployment metadata: name: nginx - depolyment namespace: default spec: replicas: 3 selector: matchLables: app: nginx template: metadate: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80 |
创建deployment的yaml的文件
1 | kubectl create deployment web - - image = nginx - - dry - run - o 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 | apiVersion: apps / v1 kind: Deployment metadata: creationTimestamp: null labels: app: web name: web spec: replicas: 1 selector: matchLabels: app: web strategy: {} template: metadata: creationTimestamp: null labels: app: web spec: containers: - image: nginx name: nginx resources: {} status: {} |
重定向到一个文件
1 | kubectl create deployment web - - image = nginx - - dry - run - o yaml >web.yaml |
修改该yaml文档成测试的java-demo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | apiVersion: apps / v1 kind: Deployment metadata: creationTimestamp: null labels: app: web name: web spec: replicas: 3 selector: matchLabels: app: web strategy: {} template: metadata: creationTimestamp: null labels: app: web spec: containers: - image: lizhenliang / java - demo name: java resources: {} status: {} |
执行
1 | kubectl apply - f web.yaml |
查看
1 | kubectl get pods |
查看容器日志,显示端口已经启动
1 | kubectl logs web - 867dd4dcf - fsgq8 |
部署完应用怎么让应用暴露外部访问
service和ingress两种方法暴露
查看部署deploy
1 | kubectl get deploy |
应用发布
1 | kubectl expose - - name = web deployment web - - port = 80 - - target - port = 8080 - - type = NodePort |
指定资源的类型是deployment
指定资源的名称是web
指定service作为这一组的访问入口,负载均衡到后端的端口 指定为80
--target-port指定后端tomcat的端口
--name指定service的名称,如果不指定和deployment的名称是一样的
--type指定service的类型为NodePort分配一个随机的端口
想要产生一个yaml使用以下命令
1 | kubectl expose - - name = web deployment web - - port = 80 - - target - port = 8080 - - type = NodePort - - dry - run - o yaml |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | apiVersion: v1 kind: Service metadata: creationTimestamp: null labels: app: web name: web spec: ports: - port: 80 protocol: TCP targetPort: 8080 selector: app: web type : NodePort status: loadBalancer: {} |
查看创建的service
1 | kubectl get service |
使用node的ip加端口号可以访问
【推荐】国内首个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代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
2017-12-25 Python全栈day10(基础知识练习题)