k8s 滚动部署学习总结

k8s 滚动部署学习总结

滚动发布

滚动发布配置总结

定义:
滚动升级(Rolling update) 就是指每次更新部分Pod,而不是在同一时刻将该Service下面的所有Pod shutdown,然后去更新逐个更新可以避免将业务中断

使用Deployments实现系统部署

主要配置:

minReadySeconds: 30
strategy:
   rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
   type: RollingUpdate

strategy.type

指定部署策略可以是"Recreate"或者是 “RollingUpdate”。"RollingUpdate"是默认值。

  • Recreate: 重建式更新,在创建新 Pod 之前,所有现有的 Pod 会被杀死
  • RollingUpdate:滚动更新,简单定义 更新期间pod最多有几个等。可以指定maxUnavailable 和 maxSurge 来控制 rolling update 进程
Recreate会导致站点的停机,Recreate策略适合:不面向用户,可接受少了停机时间
RollingUpdate 可以让服务在接受用户流量的情况下,部署新的版本不出现停机

minReadySeconds

minReadySeconds是一个可选字段,用于指定新创建的 Pod 在没有任意容器崩溃情况下的最小就绪时间, 只有超出这个时间 Pod 才被视为可用。(如果没有设置该值,Kubernetes会假设该容器启动起来后就提供服务了)默认值为 0

例如
minReadySeconds: 30 Pod就绪30秒后视为可用

可以结合readinessProbe 就绪探针一起使用,就绪探针可参考《k8s-故障转移 livenessProbe & readinessProbe 学习总结》

strategy.rollingUpdate.maxSurge

滚动升级过程中最多可以比原始Deployments中的replicas设置多出的POD数量(注意maxSurge值不能为0 默认值为 25%

例如:
maxSurage=1,replicas=2,则表示Kubernetes会先启动1一个新的Pod后才删掉一个旧的POD,
整个升级过程中最多会有2+1个POD。也可以使用百分比例如:10%

strategy.rollingUpdate.maxUnavaible

用来指定滚动升级过程中最多有多少个POD处于无法提供服务的状态,该值可以是绝对数字(例如,5),也可以是所需 Pod 的百分比(例如,10%)(注意maxUnavaible值不能为0 默认值为 25%

例如:maxUnavaible=1,则表示Kubernetes整个升级过程中最多会有1个POD处于无法服务的状态,
可以保证有足够的pod(或者认为是足够的性能)提供服务。

滚动发布实例

Deployment 配置文件如下

apiVersion: apps/v1
kind: Deployment
metadata:
   name: order-service-deployment

spec:
    replicas: 2
    selector:
       matchLabels: #定义匹配的标签,必须要设置 只能配置一个(template.metadata.labels 中的一个)
          app: order-service #匹配的目标标签,
    strategy:
       rollingUpdate:
          maxSurge: 1 #整个升级过程中最多会有2+1个POD replicas=2
          maxUnavailable: 1 #最多只能有一个Pod不能使用
       type: RollingUpdate     #指定策略为滚动升级
    template:
       metadata:
           labels:
              app: order-service 
              version: "2ffff22"  #注意version 可以实现apply -f 镜像latest
      
    #定义pod信息 
       spec:
            imagePullSecrets:
                - name: myaliyunsecret     
            containers:
                - name: order-service-runtime #容器名称(自定义)
                  image: registry.cn-hangzhou.aliyuncs.com/jimliu/order-service:latest
                  # 就绪探测  控制Pod是否就绪 Service是否能够使用Pod
                  readinessProbe:
                    # 会访问localhost:5555/startok 这个http请求
                    httpGet: 
                   #scheme: http https 默认http
                       path: /startok
                       port: 5555
                   # 可以自定义请求头
                       httpHeaders:
                         - name: Custom-Header
                           value: Awesome
                    initialDelaySeconds: 5 #延迟探测时间
                    timeoutSeconds: 1
                    periodSeconds: 5 #访问频率
                    failureThreshold: 3

注意给template添加一个version自定义label,这样可以使用helm或者其他模板方式更新此字段 否则如果镜像是latest apply -f 会提示 unchanged

在这里插入图片描述

开始部署前

在这里插入图片描述

当前版本
在这里插入图片描述

重新创建镜像并推送

docker build -t order-service .
docker tag order-service registry.cn-hangzhou.aliyuncs.com/jimliu/order-service
docker push registry.cn-hangzhou.aliyuncs.com/jimliu/order-service:latest

开始滚动部署

可以看到此时已经停掉了一个pod 并正在创建两个新的pod

  • 满足maxSurage=1,replicas=2整个升级过程中最多会有2+1=3个POD
  • 满足maxUnavaible=1 最多只能有1个POD不可用

在这里插入图片描述

访问 http://192.168.0.160:5555/version 系统整体还是可以访问,并未中断服务

在这里插入图片描述

使用 kubectl rollout status deployment order-service-deployment 可以看到滚动部署的状态

在这里插入图片描述

部署完成后可以看到原来的pod已经被替换为新的pod
在这里插入图片描述

访问 http://192.168.0.160:5555/version 版本已经更新

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java和Kubernetesk8s)之间的热部署是指在运行Java应用程序时,可以动态地更新和重新加载应用程序的代码和资源,而无需停止整个应用程序或重新启动容器。在使用Kubernetes部署Java应用程序时,可以通过以下几种方式实现热部署: 1. 使用Docker和Kubernetes结合的方式进行热部署。可以使用DockerFile来构建Java镜像,并在Kubernetes中定义相关的Deployment和Service来部署和管理应用程序。在DockerFile中,可以使用`java -jar`命令来运行Java应用程序,并通过`ADD`或`COPY`命令将应用程序的JAR文件添加到镜像中。在运行时,可以通过更新镜像或使用Kubernetes滚动更新机制,将新的代码和资源部署到运行中的容器中,实现热部署。 2. 使用Kubernetes的特性,如Deployment的滚动更新、Pod的重启策略等来实现热部署。通过定义Deployment对象的更新策略,可以在更新应用程序时保持高可用性。Kubernetes会自动创建新的Pod,并逐步替换旧的Pod,以实现无缝的热部署过程。 总结来说,Java和Kubernetes的热部署是通过使用Docker和Kubernetes的特性和机制,实现动态更新和重新加载Java应用程序的代码和资源,而无需停止整个应用程序或重新启动容器。这样可以提高应用程序的可用性和部署效率。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [K8S部署&DevOps](https://blog.csdn.net/weixin_43979341/article/details/124868927)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [【k8s】使用 Reloader 实现热部署](https://blog.csdn.net/qq_39218530/article/details/122982372)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寂寞的4角钱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值