0.在K8S中部署应用流程

在这里插入图片描述
应用生命周期管理流程
在这里插入图片描述

k8s应用部署过程
https://kubernetes.io/zh-cn/docs/tasks/run-application/

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

生产发布示例

  1. 批量部署 K8s 环境;
  2. 构建集群中所使用的服务容器;
  3. 编写资源文件,部署容器;
  4. 编写 Pv、Pvc 文件使服务器挂载磁盘;
  5. 编写 Service 相关资源文件;
  6. 编写 Hpa 资源文件配置 业务 集群弹性扩缩容;
  7. 配置 Ingress 服务对外发布 Web

1.创建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

2.应用升级

更新镜像自动触发滚动升级.

滚动升级: 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

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

# 查看版本升级的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

实验:升级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

3.水平扩伸缩

# 修改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

4.回滚

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

指定Deployment回滚到某个历史版本执行成功的过程中,ReplicaSet不会创建和销毁,Deployment期望数量不会变化.
在这里插入图片描述

# 查看历史发布版本
## 检查 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

滚动升级与回滚实现机制

在这里插入图片描述

在这里插入图片描述


5.自动伸缩

 # 对名为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

6.查看日志及资源监控

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


7.k8s节点调度

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


8.k8s项目下线流程

删除资源
https://blog.csdn.net/omaidb/article/details/121978091

  1. 项目下线之前先备份数据
  2. 然后删除deploy,svc
# 删除deploy,svc
kubectl delete deploy,svc 项目名
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐