k8s应用生命周期管理

k8s应用生命周期管理

    • 在K8S中部署应用流程
    • k8s应用部署过程
      • 创建deployment
      • 使用Service发布Pod
    • kubectl添加注解
      • 老版本的注解(变化注解)
      • 应用升级
        • 实验:升级nginx版本
      • 水平扩伸缩
      • 回滚
      • 滚动升级与回滚实现机制
    • 查看版本升级所使用的版本和镜像版本
    • 自动伸缩
    • 查看日志及资源监控
    • 删除资源
    • k8s节点调度

在K8S中部署应用流程

k8s应用生命周期管理_第1张图片
应用生命周期管理流程
在这里插入图片描述


k8s应用部署过程

https://kubernetes.io/zh-cn/docs/tasks/run-application/

回滚应用:
https://kubernetes.io/zh/docs/tasks/manage-daemon/rollback-daemon-set/


创建deployment

https://blog.csdn.net/omaidb/article/details/129527733


使用Service发布Pod

https://blog.csdn.net/omaidb/article/details/122112135

# 使用Service发布Pod
## port是service的端口
## --target-port是pod(中的容器)的端口
kubectl expose deployment web --port=80 --target-port=8080 --type=NodePort --name=web --save-config

# 查看service
kubect get svc

# 使用资源清单yaml文件部署
kubectl apply -f xxx.yaml

kubectl添加注解

--save-config参数会添加注解,老版的注解将被弃用.建议添加这个参数形成良好的习惯.
kubectl注解将在查询变更时非常有效.

# 执行kubectl时添加注解.
kubectl edit | kubectl patch --save-config

老版本的注解(变化注解)

--record=true会在升级记录中记录本条命令,建议使用新版注解参数--save-config

## 命令示例
kubectl set image deployment/应用名 -n 空间名 容器名=镜像名:版本号 --record=true

应用升级

更新镜像的三中方式,自动触发滚动升级.

滚动升级: K8S对pod升级的默认策略,通过使用新版本pod逐步更新旧版本pod,实现零停机发布,用户无感知

# 使用资源清单yaml文件进行升级
# 建议在原yaml文件中编辑image版本即可
kubectl apply -f xxx.yaml

# 使用set命令更新镜像
# 适用于简单的image变更.
## --save-config会在升级记录中记录本条命令,建议使用
kubectl set image deployment/应用名 -n 空间名 容器名=镜像名:版本号 --save-config
## 例如,更新nginx版本为1.17.0
kubectl set image deployment/nginx -n 空间名 nginx=nginx:1.17.0 --save-config

# 使用系统编辑器更新镜像
# 编辑完保存后即开始升级
kubectl edit deployment/应用名 -n 空间名
KUBE_EDITOR="nano" kubectl edit svc/docker-registry   # 使用指定编辑器更新svc

实验:升级nginx版本

# 编写死循环访问nginx服务器
## curl -I 访问服务端的响应头,方便查看nginx版本
## 查看nginx的变化,以及服务是否有中断
while true;do curl -I 192.168.31.72:31133;sleep 1;done

# 将nginx的镜像更新一个版本
kubectl apply -f nginx.yaml

# 查看版本升级的rs记录
kubectl get rs
[root@master k8syaml]# kubectl get rs
NAME               DESIRED   CURRENT   READY   AGE
nginx-6d4cf56db6   0         0         0       23h
nginx-844f997cc9   3         3         3       3m26s

# 检查Deployment的历史记录,包括版本
kubectl rollout history deployment/frontend

# 查看指定的deployment的升级记录
kubectl describe deploy 应用名

# 查询升级的镜像版本
kubectl describe rs nginx-844f997cc9|grep Image

水平扩伸缩

# 修改replicas值,再apply
## --replicas参数控制pod副本数量

# 对应用扩容或者缩容
## 副本数量加大就是扩容,副本数了减少就是缩容
## --save-config会在升级记录中记录本条命令
kubectl scale deploy 应用名 -n 空间名 --replicas=副本数 --save-config
kubectl scale deployment web -n 空间名 --replicas=10 --save-config

# 将名为 'foo' 的副本集伸缩到 3 副本
kubectl scale --replicas=3 rs/foo

# 将在 "foo.yaml" 中的特定资源伸缩到 3 个副本
kubectl scale --replicas=3 -f foo.yaml

# 如果名为 mysql 的 Deployment 的副本当前是 2,那么将它伸缩到 3
kubectl scale --current-replicas=2 --replicas=3 deployment/mysql

# 伸缩多个副本控制器
kubectl scale --replicas=5 rc/foo rc/bar rc/baz

回滚

项目升级失败恢复到正常版本

指定Deployment回滚到某个历史版本执行成功的过程中,ReplicaSet不会创建和销毁,Deployment期望数量不会变化.
k8s应用生命周期管理_第2张图片

# 查看历史发布版本
## 检查 Deployment 的历史记录,包括版本
kubectl rollout history deployment 应用名
[root@master k8syaml]# kubectl rollout history deployment nginx 
deployment.apps/nginx 
REVISION  CHANGE-CAUSE
1         <none>
2         <none>

# 回滚到上一个部署版本
kubectl rollout undo deployment 应用名
kubectl rollout undo deployment nginx

# 回滚到指定的部署版本
kubectl rollout undo deployment nginx --to-revision=版本号
kubectl rollout undo deployment nginx --to-revision=2

# 监视 "frontend" Deployment 的滚动升级状态直到完成
kubectl rollout status -w deployment/应用名

# 轮替重启 "前端" Deployment
kubectl rollout restart deployment/前端

# 强制替换,删除后重建资源。会导致服务不可用。
kubectl replace --force -f ./pod.json

滚动升级与回滚实现机制

k8s应用生命周期管理_第3张图片

k8s应用生命周期管理_第4张图片


查看版本升级所使用的版本和镜像版本

# 查看版本升级的rs记录
kubectl get rs
[root@master k8syaml]# kubectl get rs
NAME               DESIRED   CURRENT   READY   AGE
nginx-6d4cf56db6   0         0         0       23h
nginx-844f997cc9   3         3         3       3m26s

# 查看rs升级的是哪个版本
[root@master k8syaml]# kubectl describe rs nginx-844f997cc9|grep revision
                deployment.kubernetes.io/revision: 4
                deployment.kubernetes.io/revision-history: 2

# 查看rs升级所使用的镜像版本
[root@master k8syaml]# kubectl describe rs nginx-844f997cc9|grep -i image
    Image:        nginx:1.17.0

自动伸缩

 # 对名为mypod的pod添加标签
kubectl label pods my-pod new-label=awesome

# 添加注解
kubectl annotate pods my-pod icon-url=http://goo.gl/XXBTWq

# 对"foo" Deployment 自动伸缩容,最小2副本,最大10副本
kubectl autoscale deployment foo --min=2 --max=10

查看日志及资源监控

https://blog.csdn.net/omaidb/article/details/121855074


删除资源

https://blog.csdn.net/omaidb/article/details/121978091


k8s节点调度

https://blog.csdn.net/omaidb/article/details/121930341

你可能感兴趣的:(k8s,kubernetes,k8s发布应用)