容器服務中CPFS 更新包含兩部分:
Flexvolume-cpfs 插件更新;
CPFS-Client 驅動更新;
PS:flexvolume-cpfs插件隻支援cpfs-client驅動安裝,不支援驅動更新。是以需要先更新flexvolume-cpfs插件,再手動更新cpfs-client底層驅動;
下面提供兩種方法完成CPFS更新:
- 采用ECS的自動運維服務(OOS方式),在多個worker節點同時執行cpfs-client更新腳本;(此方法需要先将目标節點排水,然後在節點上執行更新腳本等操作;)
- 先将flexvolume-cpfs更新到目标版本,通過彈性運維(彈出新節點,業務遷移到新節點,舊節點縮掉);
推薦您使用方法2來實作更新過程;步驟如下:
步驟1:更新Flexvolume-cpfs;
将flexvolume的鏡像更新到目标版本(v1.14.8.96-0d85fd1-aliyun)版本。
配置flexvolume的container增加env變量,定義cpfs-client驅動版本:
- name: CPFS_VERSION
value: 2.10.8-202
- name: DKMS_VERSION
value: 1.0.0-208
- name: CPFS_URL_PREFIX
value: https://cpfs-client.oss-cn-beijing.aliyuncs.com/centos
CPFS_VERSION是cpfs-client的version;
DKMS_VERSION是cpfs-dkms-client的version;
CPFS_URL_PREFIX是下載下傳指定cpfs版本的url字首路徑;
flexvolume-cpfs的yaml模闆,執行更新指令:
$ kubectl apply -f flexvolume-cpfs.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: flexvolume-cpfs
namespace: kube-system
labels:
k8s-volume: flexvolume-cpfs
spec:
selector:
matchLabels:
name: flexvolume-cpfs
template:
metadata:
labels:
name: flexvolume-cpfs
spec:
hostPID: true
hostNetwork: true
tolerations:
- operator: "Exists"
priorityClassName: system-node-critical
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: type
operator: NotIn
values:
- virtual-kubelet
containers:
- name: flexvolume-cpfs
image: registry.cn-hangzhou.aliyuncs.com/acs/flexvolume:v1.14.8.96-0d85fd1-aliyun
imagePullPolicy: Always
securityContext:
privileged: true
env:
- name: ACS_CPFS
value: "true"
- name: FIX_ISSUES
value: "false"
- name: CPFS_VERSION
value: 2.10.8-202
- name: DKMS_VERSION
value: 1.0.0-208
- name: CPFS_URL_PREFIX
value: https://cpfs-client.oss-cn-beijing.aliyuncs.com/centos
livenessProbe:
exec:
command:
- sh
- -c
- ls /acs/flexvolume
failureThreshold: 8
initialDelaySeconds: 15
periodSeconds: 60
successThreshold: 1
timeoutSeconds: 15
volumeMounts:
- name: usrdir
mountPath: /host/usr/
- name: etcdir
mountPath: /host/etc/
- name: logdir
mountPath: /var/log/alicloud/
- mountPath: /var/lib/kubelet
mountPropagation: Bidirectional
name: kubeletdir
volumes:
- name: usrdir
hostPath:
path: /usr/
- name: etcdir
hostPath:
path: /etc/
- name: logdir
hostPath:
path: /var/log/alicloud/
- hostPath:
path: /var/lib/kubelet
type: Directory
name: kubeletdir
updateStrategy:
rollingUpdate:
maxUnavailable: 10%
type: RollingUpdate
步驟2:業務遷移
彈出新節點:flexvolume-cpfs更新完成後,新彈出的節點會自動安裝新版本的cpfs-client;
業務遷移:将老節點的pod排水到新彈出的節點上;
縮掉舊節點,完成業務遷移後,将老節點删除;