广元市利州区建设局网站龙海网站制作
- 作者: 五速梦信息网
- 时间: 2026年04月20日 11:04
当前位置: 首页 > news >正文
广元市利州区建设局网站,龙海网站制作,阆中市建设局网站首页,wordpress ck一#xff0c;前言
上一篇#xff0c;介绍了灰度发布和流量切分的集中方式#xff0c;以及如何实现 k8s 的灰度发布#xff1b;
本篇#xff0c;介绍滚动发布的实现#xff1b; 二#xff0c;滚动发布简介
滚动发布
滚动发布#xff0c;则是我们一般所说的无宕机发…一前言
上一篇介绍了灰度发布和流量切分的集中方式以及如何实现 k8s 的灰度发布
本篇介绍滚动发布的实现 二滚动发布简介
滚动发布
滚动发布则是我们一般所说的无宕机发布。其发布方式如同名称一样一次取出一台/多台服务器看策略配置进行新版本更新。当取出的服务器新版确保无问题后接着采用同等方式更新后面的服务器k8s创建副本应用程序的最佳方法就是部署(Deployment)部署自动创建副本集(ReplicaSet)副本集可以精确地控制每次替换的Pod数量从而可以很好的实现滚动更新k8s每次使用一个新的副本控制器(replication controller)来替换已存在的副本控制器从而始终使用一个新的Pod模板来替换旧的pod模板 创建一个新的 replication controller增加或减少 pod 副本数量直到满足当前批次期望的数量删除掉旧的 replication controller
发布流程和策略 优点 不需要停机更新无感知平滑更新版本更新成本小,不需要新旧版本共存 缺点 更新时间长每次只更新一个/多个镜像需要频繁连续等待服务启动缓冲旧版本环境无法得到备份始终只有一个环境存在回滚版本异常如果滚动发布到一半出了问题回滚时需要使用同样的滚动策略回滚旧版本 三、环境初始化
由于 k8s-node 资源问题先清理一下 k8s-node 上的资源占用
查看资源情况
[rootk8s-master deployment]# kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 0/3 3 0 2d1h
pay-v1 0/3 3 0 6h52m
user-v1 0/3 3 0 8m11s
user-v2 0/3 3 0 5h11m[rootk8s-master deployment]# kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 none 443/TCP 2d16h
nginx NodePort 10.107.223.32 none 80:32117/TCP 2d1h
service-pay-v1 NodePort 10.106.98.218 none 80:30872/TCP 6h32m
service-user-v1 NodePort 10.104.13.40 none 80:31071/TCP 28h
service-user-v2 NodePort 10.100.196.142 none 80:30289/TCP 5h12m[rootk8s-master deployment]# kubectl get pods
NAME READY STATUS RESTARTS AGE
mysql-g2zst 0/1 CrashLoopBackOff 53 2d
nginx-6799fc88d8-2wvl2 1⁄1 Running 1 2d1h
nginx-6799fc88d8-lkct4 1⁄1 Running 1 2d1h
nginx-6799fc88d8-pktqq 1⁄1 Running 1 2d1h
pay-v1-655587b6f5-lpft2 1⁄1 Running 1 6h41m
pay-v1-655587b6f5-pcnrp 1⁄1 Running 2 6h42m
pay-v1-655587b6f5-spj85 1⁄1 Running 1 6h41m
user-v1-5895c69847-8tkm9 0/1 Pending 0 9m18s
user-v1-5895c69847-swp52 0/1 Pending 0 9m18s
user-v1-5895c69847-xr4r8 0/1 Pending 0 9m18s
user-v2-fc9d84585-2zztd 1⁄1 Running 2 5h13m
user-v2-fc9d84585-ss2ss 1⁄1 Running 1 5h13m
user-v2-fc9d84585-xrvnf 1⁄1 Running 1 5h13m删除无用 pod 注意想要删除 pod需要删除掉 deployment否则副本依然还在 以 nginx 为例目前的有 3 个正在运行的 nginx 副本
[rootk8s-master deployment]# kubectl get pods
NAME READY STATUS RESTARTS AGE
mysql-4nq2q 0/1 Pending 0 4m19s
nginx-6799fc88d8-2wvl2 1⁄1 Running 1 2d1h
nginx-6799fc88d8-lkct4 1⁄1 Running 1 2d2h
nginx-6799fc88d8-pktqq 1⁄1 Running 1 2d1h
pay-v1-655587b6f5-lpft2 1⁄1 Running 1 6h53m
pay-v1-655587b6f5-pcnrp 1⁄1 Running 2 6h53m
pay-v1-655587b6f5-spj85 1⁄1 Running 1 6h53m
user-v1-5895c69847-8tkm9 0/1 Pending 0 20m
user-v1-5895c69847-swp52 0/1 Pending 0 20m
user-v1-5895c69847-xr4r8 0/1 Pending 0 20m
user-v2-fc9d84585-2zztd 1⁄1 Running 2 5h24m
user-v2-fc9d84585-ss2ss 1⁄1 Running 1 5h24m
user-v2-fc9d84585-xrvnf 1⁄1 Running 1 5h24m[rootk8s-master deployment]# kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 0/3 3 0 2d2h
pay-v1 0/3 3 0 7h8m
user-v1 0/3 3 0 23m
user-v2 0/3 3 0 5h27m删除 nginx 的 deploy 后pod 状态变为 Terminating
[rootk8s-master deployment]# kubectl delete deployment nginx
deployment.apps nginx deleted[rootk8s-master deployment]# kubectl get pods
NAME READY STATUS RESTARTS AGE
mysql-4nq2q 0/1 Pending 0 9m50s
nginx-6799fc88d8-2wvl2 1⁄1 Terminating 1 2d1h
nginx-6799fc88d8-lkct4 1⁄1 Terminating 1 2d2h
nginx-6799fc88d8-pktqq 1⁄1 Terminating 1 2d1h
pay-v1-655587b6f5-lpft2 1⁄1 Terminating 1 6h58m
pay-v1-655587b6f5-pcnrp 1⁄1 Terminating 2 6h59m
pay-v1-655587b6f5-spj85 1⁄1 Terminating 1 6h58m
user-v1-5895c69847-8tkm9 0/1 Pending 0 26m
user-v1-5895c69847-swp52 0/1 Pending 0 26m
user-v1-5895c69847-xr4r8 0/1 Pending 0 26m
user-v2-fc9d84585-2zztd 1⁄1 Terminating 2 5h30m
user-v2-fc9d84585-ss2ss 1⁄1 Terminating 1 5h30m
user-v2-fc9d84585-xrvnf 1⁄1 Terminating 1 5h30m继续再删除 pod
[rootk8s-master deployment]# kubectl delete pod nginx-6799fc88d8-2wvl2 –force
warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely.
pod nginx-6799fc88d8-2wvl2 force deleted[rootk8s-master deployment]# kubectl get pods
NAME READY STATUS RESTARTS AGE
mysql-4nq2q 0/1 Pending 0 14m
nginx-6799fc88d8-lkct4 1⁄1 Terminating 1 2d2h
nginx-6799fc88d8-pktqq 1⁄1 Terminating 1 2d1h
pay-v1-655587b6f5-lpft2 1⁄1 Terminating 1 7h3m
pay-v1-655587b6f5-pcnrp 1⁄1 Terminating 2 7h3m
pay-v1-655587b6f5-spj85 1⁄1 Terminating 1 7h3m
user-v1-5895c69847-8tkm9 0/1 Pending 0 30m
user-v1-5895c69847-swp52 0/1 Pending 0 30m
user-v1-5895c69847-xr4r8 0/1 Pending 0 30m
user-v2-fc9d84585-2zztd 1⁄1 Terminating 2 5h34m
user-v2-fc9d84585-ss2ss 1⁄1 Terminating 1 5h34m
user-v2-fc9d84585-xrvnf 1⁄1 Terminating 1 5h34m重复操作删除全部无用 pod
这个 mysql 删除不掉
[rootk8s-master deployment]# kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
user-v1 0/3 3 0 33m[rootk8s-master deployment]# kubectl get pods
NAME READY STATUS RESTARTS AGE
mysql-xqsgz 0/1 Pending 0 13s
user-v1-5895c69847-8tkm9 0/1 Pending 0 35m
user-v1-5895c69847-swp52 0/1 Pending 0 35m
user-v1-5895c69847-xr4r8 0/1 Pending 0 35m删除 Service
kubectl delete service service-pay-v1 service-user-v2 nginx[rootk8s-master deployment]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 none 443/TCP 2d16h
service-user-v1 NodePort 10.104.13.40 none 80:31071/TCP 28h重启阿里云服务
[rootk8s-master deployment]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane,master 2d16h v1.20.4
k8s-node Ready none 2d16h v1.20.4[rootk8s-master deployment]# kubectl get pods
NAME READY STATUS RESTARTS AGE
user-v1-5895c69847-8zs9n 1⁄1 Running 0 20m
user-v1-5895c69847-tdkhj 1⁄1 Running 0 20m
user-v1-5895c69847-xcdwl 1⁄1 Running 0 20m测试连接
[rootk8s-master deployment]# curl http://172.17.178.106:31071
user-v1
[rootk8s-master deployment]# curl http://172.17.178.105:31071
user-v1四实现滚动更新
重新做一下用 user-v1 测试滚动更新
目前基于 deployment-user-v1.yaml 创建了 deployment 部署实例
基于 user-service-v1.yaml 创建了 service并创建了 3 个 pod 副本
修改 deployment 配置实现滚动更新
将 v1 升级成 v3原始 deployment-user-v1.yaml
[rootk8s-master deployment]# cat deployment-user-v1.yaml apiVersion: apps/v1 #API版本号
kind: Deployment #资源类型部署
metadata:name: user-v1 #资源名称
spec:selector:matchLabels:app: user-v1 #告诉deployment根据规则匹配相应的Pod进行控制和管理matchLabels字段匹配Pod的label值replicas: 3 #声明Pod副本的数量template:metadata:labels:app: user-v1 #Pod名称spec: #描述Pod内的容器信息containers:- name: nginx #容器的名称image: nginx:user-v1 #镜像ports:- containerPort: 80 #容器内映射的端口修改 deployment-user-v1.yaml
apiVersion: apps/v1 #API 配置版本
kind: Deployment #资源类型
metadata:name: user-v1 #资源名称
spec:minReadySeconds: 1strategy:type: RollingUpdaterollingUpdate:maxSurge: 1maxUnavailable: 0selector:matchLabels:app: user-v1 #告诉deployment根据规则匹配相应的Pod进行控制和管理matchLabels字段匹配Pod的label值replicas: 10 #声明一个 Pod,副本的数量template:metadata:labels:app: user-v1 #Pod的名称spec: #组内创建的 Pod 信息containers:- name: nginx #容器的名称image: nginx:user-v3 #使用哪个镜像ports:- containerPort: 80 #容器内映射的端口相关参数介绍
参数含义备注minReadySeconds容器接受流量延缓时间单位为秒默认为0。如果没有设置的话k8s会认为容器启动成功后就可以用了。设置该值可以延缓容器流量切分容器启动好了并不代表服务启动好了比如还要去连接数据库初始化缓存等服务初始化工作strategy.type RollingUpdateReplicaSet 发布类型声明为滚动发布默认也为滚动发布strategy.rollingUpdate.maxSurge最多Pod数量为数字类型/百分比。如果 maxSurge 设置为1replicas 设置为10则在发布过程中pod数量最多为10 1个多出来的为旧版本pod平滑期不可用状态。maxUnavailable 为 0 时该值也不能设置为0strategy.rollingUpdate.maxUnavailable升级中最多不可用pod的数量为数字类型/百分比。当 maxSurge 为 0 时该值也不能设置为0
扩容数量是不包括激增量的
pod 最大数量 容量 激增数
应用配置
[rootk8s-master deployment]# kubectl apply -f deployment-user-v1.yaml
deployment.apps/user-v1 configured分析更新过程
// 更新前
[rootk8s-master deployment]# kubectl get pods
NAME READY STATUS RESTARTS AGE
user-v1-5895c69847-9mdm8 1⁄1 Running 0 2m49s
user-v1-5895c69847-wjzfh 1⁄1 Running 0 2m51s
user-v1-5895c69847-x8n7z 1⁄1 Running 0 2m54s// 开始更新
[rootk8s-master deployment]# kubectl apply -f deployment-user-v1.yaml
deployment.apps/user-v1 configured// 更新中
[rootk8s-master deployment]# kubectl get pods
NAME READY STATUS RESTARTS AGE
user-v1-5895c69847-9mdm8 1⁄1 Terminating 0 3m27s
user-v1-5895c69847-wjzfh 1⁄1 Running 0 3m29s
user-v1-5895c69847-x8n7z 1⁄1 Running 0 3m32s
user-v1-8cc9f4fb5-52hmd 0/1 ContainerCreating 0 0s
user-v1-8cc9f4fb5-zqj2l 1⁄1 Running 0 3s// 更新完成
[rootk8s-master deployment]# kubectl get pods
NAME READY STATUS RESTARTS AGE
user-v1-8cc9f4fb5-52hmd 1⁄1 Running 0 48s
user-v1-8cc9f4fb5-6l7mz 1⁄1 Running 0 46s
user-v1-8cc9f4fb5-zqj2l 1⁄1 Running 0 51s验证使用镜像是否变更
[rootk8s-master deployment]# kubectl describe pod user-v1-8cc9f4fb5-zqj2l
Name: user-v1-8cc9f4fb5-zqj2l
Namespace: default
Priority: 0
Node: k8s-node/172.17.178.106
Start Time: Fri, 24 Dec 2021 18:30:57 0800
Labels: appuser-v1pod-template-hash8cc9f4fb5
Annotations: none
Status: Running
IP: 10.244.1.67
IPs:IP: 10.244.1.67
Controlled By: ReplicaSet/user-v1-8cc9f4fb5
Containers:nginx:Container ID: docker://436d2058c9a6a85000b2c32a3a87c1b7c892427894db1c7d851adb953ba01e88Image: nginx:user-v3Image ID: nginxsha256:c3826e7a5cd2abc9f0e92fe02fe4897ab4346539438ce4f6c811371677f7494bPort: 80/TCPHost Port: 0/TCPState: RunningStarted: Fri, 24 Dec 2021 18:30:58 0800Ready: TrueRestart Count: 0Environment: noneMounts:/var/run/secrets/kubernetes.io/serviceaccount from default-token-q4qxd (ro)
Conditions:Type StatusInitialized True Ready True ContainersReady True PodScheduled True
Volumes:default-token-q4qxd:Type: Secret (a volume populated by a Secret)SecretName: default-token-q4qxdOptional: false
QoS Class: BestEffort
Node-Selectors: none
Tolerations: node.kubernetes.io/not-ready:NoExecute opExists for 300snode.kubernetes.io/unreachable:NoExecute opExists for 300s
Events:Type Reason Age From Message—- —— —- —- ——-Normal Scheduled 7m8s default-scheduler Successfully assigned default/user-v1-8cc9f4fb5-zqj2l to k8s-nodeNormal Pulled 7m8s kubelet Container image nginx:user-v3 already present on machineNormal Created 7m8s kubelet Created container nginxNormal Started 7m8s kubelet Started container nginx是 nginx:user-v3说明应用已更新成功
访问 service-user-v1
curl http://172.17.178.105:31071
curl http://172.17.178.106:31071[rootk8s-master deployment]# curl http://172.17.178.105:31071
user-v3
[rootk8s-master deployment]# curl http://172.17.178.106:31071
user-v3五结尾
下一篇服务的可用性探针
相关文章
-
广元市规划和建设局网站wordpress 自适应 汉化
广元市规划和建设局网站wordpress 自适应 汉化
- 技术栈
- 2026年04月20日
-
广元建设厅官方网站一级造价工程师报名网站
广元建设厅官方网站一级造价工程师报名网站
- 技术栈
- 2026年04月20日
-
广元百度做网站多少钱网站建设 中企动力 顺德
广元百度做网站多少钱网站建设 中企动力 顺德
- 技术栈
- 2026年04月20日
-
广元网站建设价格家教辅导培训网站建设
广元网站建设价格家教辅导培训网站建设
- 技术栈
- 2026年04月20日
-
广元园区建设投资有限公司网站上线了免费建网站
广元园区建设投资有限公司网站上线了免费建网站
- 技术栈
- 2026年04月20日
-
广元做网站的公司免费做海报的网站
广元做网站的公司免费做海报的网站
- 技术栈
- 2026年04月20日
