- 3.1 在Kubernetes部署应用程序流程
- 3.2 使用Deployment部署Java应用
- 3.3 服务编排:YAML文件格式说明
- 3.4 服务编排:YAML文件创建资源对象
- 3.5 服务编排:YAML文件创建资源对象
- 3.6 服务编排:YAML文件创建资源对象
- 3.7 服务编排:资源字段太多,记不住怎么办
- 3.8 Deployment:介绍
- 3.9 Deployment:应用生命周期管理流程
- 3.10 Deployment:部署应用
- 3.11 Deployment:滚动升级
- 3.12 Deployment:滚动升级
- 3.13 Deployment:水平扩缩容
- 3.14 Deployment:回滚
- 3.15 Deployment:删除
- 3.16 Deployment:滚动升级与回滚实现机制
3.1 在Kubernetes部署应用程序流程
3.2 使用Deployment部署Java应用
# 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
3.3 服务编排:YAML文件格式说明
K8s是一个容器编排引擎,使用YAML文件编排要部署应用,因此在学习之前,应先了解YAML语法格式:
- 缩进表示层级关系
- 不支持制表符“tab”缩进,使用空格缩进
- 通常开头缩进 2 个空格
- 字符后缩进 1 个空格,如冒号、逗号等
- “—-” 表示YAML格式,一个文件的开始
- “#”注释
3.4 服务编排:YAML文件创建资源对象
- template:创建的标签会同事应用到pod和rs上(两个资源的标签会一模一样)
- svc:中既可以使用deploy的标签也可以使用rs或者pod的标签
3.5 服务编排:YAML文件创建资源对象
3.6 服务编排:YAML文件创建资源对象
将你需要创建的资源描述到YAML文件中。
- 部署:kubectl apply -f xxx.yaml
- 卸载:kubectl delete -f xxx.yaml
3.7 服务编排:资源字段太多,记不住怎么办
# 用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 deployment
3.8 Deployment:介绍
Deployment是最常见的k8s工作负载控制器(workload controllers),是k8s的一个抽象概念,用于更高级别层次对象,部署和管理pod。其他控制器还有:DaemonSet、statefulset等。
Deployment的主要功能:
- 管理Pod和ReplicaSet
- 具有上线部署、副本设定、滚动升级、回滚等功能
- 提供声明式更新,例如只更新一个新的Image
应用场景:网站、API、微服务
3.9 Deployment:应用生命周期管理流程
3.10 Deployment:部署应用
第一步:部署镜像
- kubectl apply -f xxx.yaml
- kubectl create deployment web —image=nginx:1.16 —replicas=3
apiVersion: apps/v1
kind: Deployment
metadata:
name: web
namespace: default
spec:
replicas: 3 # Pod副本预期数量
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web # Pod副本的标签
spec:
containers:
- name: web
image: nginx:1.16
3.11 Deployment:滚动升级
第二步:应用升级(更新镜像三种方式,自动触发滚动升级)
- kubectl apply -f xxx.yaml
- kubectl set image deployment/web nginx=nginx:1.17
- kubectl edit deployment/web #使用系统编辑器打开
3.12 Deployment:滚动升级
滚动升级在K8s中的实现:
- 1个Deployment
- 2个ReplicaSet
3.13 Deployment:水平扩缩容
第三步:水平扩缩容(启动多实例,提高并发)
- 修改yaml里replicas值,再apply
- kubectl scale deployment web —replicas=10
注:replicas参数控制Pod副本数量
3.14 Deployment:回滚
第四步:回滚(项目升级失败恢复到正常版本)
- kubectl rollout history deployment/web # 查看历史发布版本
- kubectl rollout undo deployment/web # 回滚上一个版本
- kubectl rollout undo deployment/web —to-revision=2 # 回滚历史指定版本
注:回滚是重新部署某一次部署时的状态,即当时版本所有配置
3.15 Deployment:删除
最后,项目下线:
- kubectl delete deploy/web
- kubectl delete svc/web
3.16 Deployment:滚动升级与回滚实现机制
ReplicaSet控制器用途:
- Pod副本数量管理,不断对比当前Pod数量与期望Pod数量
- Deployment每次发布都会创建一个RS作为记录,用于实现回滚
- kubectl get rs #查看RS记录
- kubectl rollout history deployment web #版本对应RS记录