[k8s]kubenets基于rc滚动升级


本文讲的是使用rc滚动升级,



其他关于k8s的文字


一步一步学习k8syaml


k8s的command和args



k8s-proxy浅析



k8s高可用和ingress




https://kubernetes.io/docs/tasks/run-application/rolling-update-replication-controller/ 

你运行的是version 1.7.9 of nginx:

apiVersion: v1
kind: ReplicationController
metadata:
  name: my-nginx
spec:
  replicas: 5
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80

使用kubectl rolling-update --image 指定一个镜像升级:

$ kubectl rolling-update my-nginx --image=nginx:1.9.1
Created my-nginx-ccba8fbd8cc8160970f63f9a2696fc46
另开一个窗口观察升级过程:

$ kubectl get pods -l app=nginx -L deployment
NAME                                              READY     STATUS    RESTARTS   AGE       DEPLOYMENT
my-nginx-ccba8fbd8cc8160970f63f9a2696fc46-k156z   1/1       Running   0          1m        ccba8fbd8cc8160970f63f9a2696fc46
my-nginx-ccba8fbd8cc8160970f63f9a2696fc46-v95yh   1/1       Running   0          35s       ccba8fbd8cc8160970f63f9a2696fc46
my-nginx-divi2                                    1/1       Running   0          2h        2d1d7a8f682934a254002b56404b813e
my-nginx-o0ef1                                    1/1       Running   0          2h        2d1d7a8f682934a254002b56404b813e
my-nginx-q6all                                    1/1       Running   0          8m        2d1d7a8f682934a254002b56404b813e
注:新镜像的名字会有一个hash后缀,用来和原来的镜像区分

kubectl rolling-update 升级过程如下

Scaling up my-nginx-ccba8fbd8cc8160970f63f9a2696fc46 from 0 to 3, scaling down my-nginx from 3 to 0 (keep 3 pods available, don't exceed 4 pods)
Scaling my-nginx-ccba8fbd8cc8160970f63f9a2696fc46 up to 1
Scaling my-nginx down to 2
Scaling my-nginx-ccba8fbd8cc8160970f63f9a2696fc46 up to 2
Scaling my-nginx down to 1
Scaling my-nginx-ccba8fbd8cc8160970f63f9a2696fc46 up to 3
Scaling my-nginx down to 0
Update succeeded. Deleting old controller: my-nginx
Renaming my-nginx-ccba8fbd8cc8160970f63f9a2696fc46 to my-nginx
replicationcontroller "my-nginx" rolling updated

如果升级过程报错了,你可以用 --rollback:

尼玛,这里怎么会报错?是创建pod的过程,如果创建新pod报错,我估计新版的image问题吧,不应该到生产才发现啊.

$ kubectl rolling-update my-nginx --rollback
Setting "my-nginx" replicas to 1
Continuing update with existing controller my-nginx.
Scaling up nginx from 1 to 1, scaling down my-nginx-ccba8fbd8cc8160970f63f9a2696fc46 from 1 to 0 (keep 1 pods available, don't exceed 2 pods)
Scaling my-nginx-ccba8fbd8cc8160970f63f9a2696fc46 down to 0
Update succeeded. Deleting my-nginx-ccba8fbd8cc8160970f63f9a2696fc46
replicationcontroller "my-nginx" rolling updated
以上只是针对镜像的升级, 

如果相对镜像+启动参数+环境变量升级,那你应该新建一个配置

apiVersion: v1
kind: ReplicationController
metadata:
  name: my-nginx-v4
spec:
  replicas: 5
  selector:
    app: nginx
    deployment: v4
  template:
    metadata:
      labels:
        app: nginx
        deployment: v4
    spec:
      containers:
      - name: nginx
        image: nginx:1.9.2
        args: ["nginx", "-T"]
        ports:
        - containerPort: 80
然后开始升级

$ kubectl rolling-update my-nginx -f ./nginx-rc.yaml
Created my-nginx-v4
Scaling up my-nginx-v4 from 0 to 5, scaling down my-nginx from 4 to 0 (keep 4 pods available, don't exceed 5 pods)
Scaling my-nginx-v4 up to 1
Scaling my-nginx down to 3
Scaling my-nginx-v4 up to 2
Scaling my-nginx down to 2
Scaling my-nginx-v4 up to 3
Scaling my-nginx down to 1
Scaling my-nginx-v4 up to 4
Scaling my-nginx down to 0
Scaling my-nginx-v4 up to 5
Update succeeded. Deleting old controller: my-nginx
replicationcontroller "my-nginx-v4" rolling updated










  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 下面是一个简单的 k8s 滚动升级的 YAML 模板: ``` apiVersion: apps/v1 kind: Deployment metadata: name: myapp-deployment spec: replicas: 3 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: myapp image: myapp:v2 ports: - containerPort: 80 strategy: type: RollingUpdate rollingUpdate: maxUnavailable: 1 maxSurge: 1 ``` 这个模板定义了一个 Deployment,名为 `myapp-deployment`,它由 3 个副本组成,副本使用镜像 `myapp:v2`。滚动升级策略是,在升级过程中最多允许 1 个副本不可用,最多允许新副本数量达到 1 个。 请注意,这只是一个简单的模板,实际情况可能会有所不同。例如,您可能希望为 Deployment 设置更复杂的选择器,或者指定更多的容器选项(例如环境变量、卷挂载等)。 希望这个模板对您有帮助! ### 回答2: Kubernetes(简称k8s滚动升级模板是一种描述如何更新Kubernetes集群中的应用程序的计划。下面是一个滚动升级的模板示例: 1. 创建Deployment对象来管理应用程序的部署。 ``` apiVersion: extensions/v1beta1 kind: Deployment metadata: name: my-app spec: replicas: 3 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: my-app-container image: my-app:v1 ports: - containerPort: 8080 ``` 2. 执行滚动升级之前,在Deployment对象中更新镜像版本为新的版本。 ``` apiVersion: extensions/v1beta1 kind: Deployment metadata: name: my-app spec: replicas: 3 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: my-app-container image: my-app:v2 ports: - containerPort: 8080 ``` 3. 执行kubectl apply命令来应用新的Deployment配置文件,触发滚动升级操作。 ``` kubectl apply -f deployment.yaml ``` 4. Kubernetes将逐步替换集群中的旧Pod实例,并创建新的Pod实例,以确保应用程序在滚动升级过程中保持可用性。此过程根据定义的副本数和滚动升级策略逐步进行。 滚动升级模板为应用程序提供了平滑的升级方式,使得应用程序能够持续提供服务而无需中断。我们可以通过适当定义滚动升级策略,例如最大不可用性和最小可用时间,来控制升级的速度和方式,以最大程度减少对用户的影响。 ### 回答3: 在使用Kubernetes进行滚动升级时,你可以按照以下模板进行操作: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: your-deployment-name labels: app: your-app-label spec: replicas: 3 selector: matchLabels: app: your-app-label template: metadata: labels: app: your-app-label spec: containers: - name: your-container-name image: your-image:your-tag ports: - containerPort: your-port strategy: type: RollingUpdate rollingUpdate: maxUnavailable: 1 maxSurge: 1 ``` 解释: - `your-deployment-name`:你的Deployment的名称,自定义命名。 - `your-app-label`:你的应用的标签,用于选择器和部署中的Pod匹配。 - `your-container-name`:你的容器的名称,自定义命名。 - `your-image:your-tag`:你的容器镜像和标签,指定要使用的镜像及其版本。 - `your-port`:你的容器暴露的端口号,根据实际情况进行修改。 - `maxUnavailable`:在进行滚动升级过程中,最大不可用的Pod数量,这里设置为1。 - `maxSurge`:在进行滚动升级过程中,最大可增加的Pod数量,这里设置为1。 以上模板定义了一个Deployment,它会创建3个Pod,并通过选择器将它们与Deployment关联起来。每个Pod都会运行一个容器,该容器使用指定的镜像和端口号。滚动升级策略被设置为RollingUpdate,最大不可用数量和最大增加数量都为1,以确保在升级期间保持可用性。 你可以将以上模板保存为一个YAML文件,然后使用`kubectl apply -f your-file.yaml`命令进行部署。当你需要升级应用时,可以通过更新镜像和标签,并再次执行`kubectl apply`命令来触发滚动升级过程。Kubernetes会逐步更新Pod,保持应用的可用性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值