20250712-2-Kubernetes 应用程序生命周期管理-部署应用的流程_笔记
一、应用程序生命周期管理
1. 应用程序生命周期管理流程
1)在Kubernetes中部署应用流程
- 制作镜像
- 核心交付物:在容器化时代,镜像是项目交付的核心单元,取代了传统的程序文件
- 环境一致性:镜像能保持高度环境一致性,类似压缩包在任何环境解压内容不变
- 构建方式:
- 使用Dockerfile自定义构建镜像
- 从官方/私有镜像仓库拉取现成镜像
- 多环境适配:同一镜像可部署到开发、测试、生产等不同环境
- 使用控制器部署镜像
- 核心控制器:Deployment用于80%的常规应用部署场景
- 特殊场景控制器:
- StatefulSet:有状态应用
- DaemonSet:节点级守护进程
- 管理优势:Kubernetes通过高级对象管理容器,而非直接创建容器
- 部署命令:kubectl create deployment <名称> --image=<镜像>
- 对外暴露应用
- 暴露方式:
- Service:基础服务暴露
- Ingress:高级路由暴露
- 访问原理:Pod IP无法直接访问,必须通过服务暴露
- 端口映射:NodePort类型会随机分配30000-32767端口
- 暴露方式:
- 日常运维
- 运维范畴:
- 应用部署与配置
- 平台完善与工具集成
- 技术架构设计与应急预案
- 与传统运维区别:从管理虚拟机转向管理Kubernetes平台体系
- 运维范畴:
2)使用Deployment控制器部署Java应用
- 使用Deployment控制器部署镜像
- 部署命令:kubectl create deployment web --image=lisi/java-demo
- 验证命令:kubectl get deployment,pods 查看部署状态
- 查看Service状态
- 服务暴露:kubectl expose deployment web --port=80 --type=NodePort --target-port=8080 --name=web
- 服务验证:kubectl get service 查看分配的NodePort
- 私有镜像仓库的搭建与管理
- 最佳实践:搭建私有仓库集中管理业务镜像
- 镜像来源:
- 自定义构建推送
- 从厂商仓库拉取
- 访问部署的应用
- 访问方式:<任意节点IP>:<NodePort>(如192.168.31.72:30075)
- 服务转发:Service将请求转发到Pod的实际应用端口
- 部署流程总结与疑问解答
- 完整流程:镜像→Deployment→Service→访问
- 学习路径:随着课程深入会逐步理解底层转发机制
- 注意事项:确认镜像应用端口
- 端口确认:必须明确镜像内应用实际监听端口
- 官方镜像通常使用默认端口(如Nginx用80)
- 自定义镜像可能修改默认端口
- target-port:必须设置为容器内应用真实监听端口
- 端口确认:必须明确镜像内应用实际监听端口
3)YAML基础语法
- 层级关系:使用空格缩进表示层级(禁止用Tab)
- 基本规范:
- 通常开头缩进2个空格
- 字符后缩进1个空格(如冒号、逗号后)
- 特殊标记:
- ---表示YAML文件开始
- #用于注释
- 实践重要性:后续工作中主要使用YAML管理应用
4)服务编排
- K8s容器编排引擎
- 编排方式: Kubernetes(K8s)是一个容器编排引擎,使用YAML文件编排要部署的应用。
- YAML文件格式说明
- 基本语法规则
- 层级表示: 使用缩进表示层级关系,类似于Python的语法结构
- 缩进规范:
- 不支持制表符(
atab′′^{a}tab^{\prime\prime}atab′′
)缩进,必须使用空格缩进 - 通常开头缩进2个空格
- 字符后缩进1个空格(如冒号、逗号等)
- 不支持制表符(
- 文件标识: "---"表示YAML格式文件的开始
- 注释方式: 使用"#"进行注释
- 缩进关系示例
- 层级关系:
- 顶格编写的内容为一级
- 缩进2个空格为二级(如metadata下的name)
- 再缩进2个空格为三级(如labels下的k8s-app)
- 缩进技巧: 建议手动输入空格而非使用Tab键,确保缩进一致性
- 特殊符号使用
- 分隔符: 三个连字符"---"表示独立资源的开始,用于分隔多个资源定义
- 注释应用: 井号"#"后的内容为注释,常用于说明代码功能或临时禁用某段配置
- 实际应用技巧
- 资源组织: 可以将多个相关资源定义在同一个YAML文件中,用"---"分隔
- 格式验证: 编写时需特别注意缩进层级关系,错误的缩进会导致解析失败
- 开发建议: 复杂配置建议先分文件编写,验证无误后再合并到一个文件中
- 基本语法规则
二、知识小结
知识点 | 核心内容 | 考试重点/易混淆点 | 难度系数 |
生命周期概念 | 从生到死的全过程(如:人类生老病死、树木生长枯萎),在K8s中指应用从开发部署到维护下线的完整过程 | 区分生物生命周期与软件生命周期的类比关系 | ⭐⭐ |
K8s应用部署流程 | 1. 制作镜像(Dockerfile)→ 2. 使用Deployment部署 → 3. Service/Ingress暴露应用 → 4. 日常运维(监控/更新/架构优化) | 镜像与环境一致性是关键优势,需掌握Service与Pod的端口映射关系 | ⭐⭐⭐ |
核心资源对象 | - Deployment:高级控制器,自动管理Pod - Pod:最小调度单元(1或多个容器) - Service:负载均衡,暴露Pod服务 | Deployment与Pod的创建关系(非直接创建容器)是易混淆点 | ⭐⭐⭐⭐ |
YAML文件语法 | - 缩进表示层级(空格非Tab) - ---分隔多资源 - #注释 - 键值对冒号后需空格 | 缩进错误是常见报错原因,需注意符号后空格规则 | ⭐⭐⭐ |
实践案例 | 部署Nginx示例: 1. kubectl create deployment web --image=nginx 2. 通过Service暴露targetPort(镜像内应用端口,如80) | targetPort需匹配镜像内应用端口(非Service端口) | ⭐⭐⭐⭐ |
课程安排 | 后续重点讲解: - Deployment控制器 - Pod管理/调度 - Service配置 | Deployment是80%场景的部署核心 | ⭐⭐⭐ |