第4章 应用程序声明周期管理(上)
应用程序声明周期管理
• 在Kubernetes中部署应用流程
• 服务编排(YAML)
• Deployment工作负载均衡器
• 介绍
• 应用生命周期管理流程
• 应用部署
• 应用升级
• 水平扩缩容
• 回滚
• 滚动升级与回滚实现机制
4.1 在Kubernetes部署应用程序流程
Dockfile —> Deployment service
StatefulSet Ingress
DaemonSet
4.2 使用Deployment部署java应用
0、制作镜像 1、使用Deployment控制器部署镜像 kubectl create deployment web --image=lizhenliang/java-demo kubectl get deployment,pods 2、使用Service发布Pod kubectl expose deployment web --port=80 --type=NodePort --target-port=8080 --name=web kubectl get service
4.3服务编排:YAML文件格式说明
K8s是一个容器编排引擎,使用YAML文件编排要部署应用,因此在学习之前,应先了解YAML语法格式: • 缩进表示层级关系 • 不支持制表符“tab”缩进,使用空格缩进 • 通常开头缩进 2 个空格 • 字符后缩进 1 个空格,如冒号、逗号等 • “---” 表示YAML格式,一个文件的开始 • “#”注释
4.4 服务编排:YAML文件创建资源对象
等同于:kubectl create deployment web --image=lizhenliang/java-demo --replicas=3 -n default
等同于:kubectl expose deployment web --port=80 --target-port=8080 --type=NodePort -n default
Deployment:
apiVersion: apps/v1 kind: Deployment metadata: name: web namespace: aliang-cka spec: replicas: 1 selector: matchLabels: project: demo app: java template: metadata: labels: project: demo app: java spec: containers: - name: web image: lizhenliang/java-demo
Service:
apiVersion: v1 kind: Service metadata: name: web namespace: aliang-cka spec: ports: - port: 80 protocol: TCP targetPort: 8080 selector: project: demo app: java type: NodePort
4.5服务编排:使用kubectl对YAML文件创建资源对象
将你需要创建的资源描述到YAML文件中
部署:kubectl apply -f xxx.yaml
卸载:kubectl delete -f xxx.yaml
4.6 服务编排:资源字段太多,记不住怎么办
• 用create命令生成 kubectl create deployment nginx --image=nginx:1.16 -o yaml --dry-run=client > my-deploy.yaml • 用get命令导出 kubectl get deployment nginx -o yaml > my-deploy.yaml • Pod容器的字段拼写忘记了 kubectl explain pods.spec.containers kubectl explain deploymen
4.6.1 MatchLables与lables的注意事项:
1) 两边标签保持一样
2) 标签可以写多个
3) 标签与其他应用保持唯一
4) 标签一般怎么写:一般根据应用程序属性写,例如应用名称、项目名称
Project: big
App: search
Service里的selector要与deployment中的matchLabels保持一样。
replicas:副本数量,即多少个Pod(多少个应用实例)
4.6.2 YAML检测语法(--dry-run=client/server):
kubectl create deployment web --image=lizhenliang/java-demo --replicas=3 -n alinag-cka --dry-run=client/server
客户端,例如kubectl(多个客户端同时提交一个请求,同时修改的是一个资源) -> 服务端API 1、提交一个yaml,这个yaml之前部署过,这次修改了内容,只关心更新哪些字段 2、同一时刻提交并进行合并应用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!