Flexvolume插件分批升级方案

简介: Flexvolume支持在线自动升级,您可以登陆控制台实现一键升级,参考:https://help.aliyun.com/document_detail/100605.html Flexvolume升级不会影响您的应用,但是建议您可以选择在业务低峰的时候进行升级。

Flexvolume支持在线自动升级,您可以登陆控制台实现一键升级,参考:https://help.aliyun.com/document_detail/100605.html

Flexvolume升级不会影响您的应用,但是建议您可以选择在业务低峰的时候进行升级。您也可以参考本文给出的给flexvolume执行分配升级方案:

Flexvolume分批升级原理:

Daemonset更新策略支持:OnDelete、RollingUpdate两中模式,其中:

OnDelete:表示对DaemonSet更新模板后,pod不会马上升级,而是等待Pod删除重建的时候升级;

RollingUpdate:表示更新了模板Pod就会马上执行升级操作;

默认情况下升级策略是RollingUpdate,为了实现分批升级功能,我们修改升级策略为OnDelete,然后手动升级一批节点,查看数据卷挂载状态,然后再一批一批的升级;

Flexvolume分批升级步骤:

记录升级前的Flexvolume版本:
# kubectl describe ds flexvolume -nkube-system | grep Image

给Flexvolume配置升级策略为OnDelete;
# kubectl patch ds flexvolume -p '{"spec":{"updateStrategy":{"type":"OnDelete"}}}' -nkube-system

检查Flexvolume升级策略更新是否成功;下面命令有输出即认为成功;
# kubectl get ds flexvolume -nkube-system -oyaml | grep "type: OnDelete"

部署新版本Flexvolume
# kubectl apply -f flexvolume.yaml

检查Flexvolume DaemonSet镜像已经更新,到这一步pod还没有更新;
# kubectl describe ds flexvolume -nkube-system | grep Image
Image:      registry.cn-beijing.aliyuncs.com/acs/flexvolume:v1.14.6.15-8d3b7e7-aliyun

列出所有Flexvolume Pod;
# kubectl get pod -nkube-system -nkube-system -owide | grep flexvolume

分批升级:删除那个pod,pod重启后就会使用新镜像和配置;
# kubectl delete pod ** -nkube-system

检查所有pod是否已经是最新版本;
# for podname in `kubectl get pod -nkube-system | grep flexvolume | awk '{print $1}'`; do kubectl describe pod $podname -nkube-system | grep Image: ;done

将Flexvolume的更新策略修改为RollingUpdate;完成升级;
# kubectl patch ds flexvolume -p '{"spec":{"updateStrategy":{"type":"RollingUpdate"}}}' -nkube-system

Flexvolume部署模板:

把下面模板的{ {.Region}}字段换成您的集群region名。

apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  name: flexvolume
  namespace: kube-system
  labels:
    k8s-volume: flexvolume
spec:
  selector:
    matchLabels:
      name: acs-flexvolume
  template:
    metadata:
      labels:
        name: acs-flexvolume
    spec:
      hostPID: true
      hostNetwork: true
      tolerations:
      - operator: "Exists"
      priorityClassName: system-node-critical
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: type
                operator: NotIn
                values:
                - virtual-kubelet
      nodeSelector:
        beta.kubernetes.io/os: linux
      containers:
      - name: acs-flexvolume
        image: registry-vpc.{
  {.Region}}.aliyuncs.com/acs/flexvolume:v1.14.6.15-8d3b7e7-aliyun
        imagePullPolicy: Always
        securityContext:
          privileged: true
        env:
        - name: ACS_DISK
          value: "true"
        - name: ACS_NAS
          value: "true"
        - name: ACS_OSS
          value: "true"
        - name: ACS_CPFS
          value: "false"
        resources:
          limits:
            cpu: 1000m
            memory: 1000Mi
          requests:
            cpu: 100m
            memory: 100Mi
        livenessProbe:
          exec:
            command:
            - sh
            - -c
            - ps -ef |grep /acs/flexvolume | grep monitoring | grep -v grep
          failureThreshold: 8
          initialDelaySeconds: 15
          periodSeconds: 10
          successThreshold: 1
          timeoutSeconds: 15
        volumeMounts:
        - name: usrdir
          mountPath: /host/usr/
        - name: etcdir
          mountPath: /host/etc/
        - name: logdir
          mountPath: /var/log/alicloud/
      volumes:
      - name: usrdir
        hostPath:
          path: /usr/
      - name: etcdir
        hostPath:
          path: /etc/
      - name: logdir
        hostPath:
          path: /var/log/alicloud/
  updateStrategy:
    type: OnDelete
目录
相关文章
|
XML 安全 定位技术
无人船水下地形测量作业流程
无人船水下地形测量作业流程
996 0
|
存储 分布式计算 Hadoop
从“笨重大象”到“敏捷火花”:Hadoop与Spark的大数据技术进化之路
从“笨重大象”到“敏捷火花”:Hadoop与Spark的大数据技术进化之路
715 79
|
程序员 编译器 C语言
C中的 malloc 和C++中的 new 有什么区别
在C语言中,`malloc`函数用于在运行时分配内存,返回指向所分配内存的指针,需显式包含头文件 `<stdlib.h>`。而在C++中,`new`不仅分配内存,还对其进行构造初始化,且直接使用类型声明即可,无需额外包含头文件。`new`还支持数组初始化,能更好地融入C++的面向对象特性,而`malloc`仅作为内存分配工具。使用完毕后,`free`和`delete`分别用于释放`malloc`和`new`分配的内存。
578 21
|
运维 负载均衡 安全
|
XML 前端开发 Java
SpringMVC入门指南
SpringMVC入门指南
282 0
|
人工智能 安全
为什么AI最终能让CIO们拥有决策权
为什么AI最终能让CIO们拥有决策权
为什么AI最终能让CIO们拥有决策权
|
存储 C语言
C语言 每日一题 PTA 11.7 day13
C语言 每日一题 PTA 11.7 day13
213 0
|
编译器 应用服务中间件 PHP
PHP具体如何使用编译器?具体步骤是怎样的?
PHP具体如何使用编译器?具体步骤是怎样的?
333 0
|
SQL Oracle 关系型数据库
SQL语言
由国际标准化组织(Iso)制定的,对 DBMs 的统一操作方式(例如相同的语句可以操作: mysql、oracle等)。1.DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;2.DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据)﹔***(Data Query Language):数据查询语言,用来查询记录(数据)。• 创建、删除、修改:库、表结构!dml:对表的记录进行更新(增、删、改)
303 0
|
Devops 持续交付 开发者
阿里云开发者杭州ACE同城会携手云效DevOps 4小时带你企业持续交付实践
研发负责人或技术总监们往往会在落地持续交付,提升团队工程效能等方面遇到较多问题。 为了帮助大家更好地解决这些问题,阿里云开发者社区ACE同城会联合阿里云云效DevOps免费开展了本次阿里高级技术专家的面对面授课。
1833 0
阿里云开发者杭州ACE同城会携手云效DevOps 4小时带你企业持续交付实践