您在ACK叢集中使用alicloud-nas-controller時,如果安裝的版本較低,可以通過如下方式更新元件:
目前叢集狀态:
如果您使用的nas controller是早期版本,如下:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
app: alicloud-nas-controller
name: alicloud-nas-controller
namespace: kube-system
spec:
selector:
matchLabels:
app: alicloud-nas-controller
template:
metadata:
labels:
app: alicloud-nas-controller
spec:
containers:
- env:
- name: PROVISIONER_NAME
value: alicloud/nas
- name: NFS_SERVER
value: 2564f49129-**.cn-shenzhen.nas.aliyuncs.com
- name: NFS_PATH
value: /
image: registry.cn-hangzhou.aliyuncs.com/acs/alicloud-nas-controller:v3.1.0-k8s1.11
imagePullPolicy: IfNotPresent
name: alicloud-nas-controller
volumeMounts:
- mountPath: /persistentvolumes
name: nfs-client-root
serviceAccount: admin
serviceAccountName: admin
tolerations:
- effect: NoSchedule
key: node-role.kubernetes.io/master
operator: Exists
- effect: NoSchedule
key: node.cloudprovider.kubernetes.io/uninitialized
operator: Exists
volumes:
- flexVolume:
driver: alicloud/nas
options:
path: /
server: 2564f49129-**.cn-shenzhen.nas.aliyuncs.com
vers: "4.0"
name: nfs-client-root
StorageClass配置如下:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: alicloud-nas
mountOptions:
- vers=4.0
provisioner: alicloud/nas
reclaimPolicy: Retain
叢集中有應用使用上述controller配置建立了pvc/pv,并挂載到pod中使用:
# kubectl describe pod web-nas-1 | grep ClaimName
ClaimName: html-web-nas-1
# kubectl get pvc html-web-nas-1
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
html-web-nas-1 Bound pvc-2612b272-14e7-11ea-a9b7-00163e084110 2Gi RWO alicloud-nas 85m
這時pv的配置為v4版本;
# kubectl get pv pvc-2612b272-14e7-11ea-a9b7-00163e084110 -oyaml | grep mountOptions -A 6
mountOptions:
- vers=4.0
nfs:
path: /default-html-web-nas-1-pvc-2612b272-14e7-11ea-a9b7-00163e084110
server: 2564f49129-**.cn-shenzhen.nas.aliyuncs.com
persistentVolumeReclaimPolicy: Retain
storageClassName: alicloud-nas
PV新訴求
登陸Pod所在節點,檢視挂載nas的參數為:
# mount | grep nfs
2564f49129-**.cn-shenzhen.nas.aliyuncs.com:/default-html-web-nas-1-pvc-2612b272-14e7-11ea-a9b7-00163e084110 on /var/lib/kubelet/pods/32222e36-14f2-11ea-a9b7-00163e084110/volumes/kubernetes.io~nfs/pvc-2612b272-14e7-11ea-a9b7-00163e084110 type nfs4 (rw,relatime,vers=4.0,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.25,local_lock=none,addr=192.168.1.152)
如果你希望更新nas挂載參數,期望修改pv的mountOptions參數,例如配置為下面參數:
- nolock,tcp,noresvport
- vers=3
執行編輯指令:
# kubectl edit pv pvc-2612b272-14e7-11ea-a9b7-00163e084110
将mountOptions參數更新為:
mountOptions:
- nolock,tcp,noresvport
- vers=3
重新開機Pod:
# kubectl delete pod web-nas-1
登陸Pod所在節點插件nas挂載參數:可見已經配置了noresvport等參數;
# mount | grep nfs
2564f49129-**.cn-shenzhen.nas.aliyuncs.com:/default-html-web-nas-1-pvc-2612b272-14e7-11ea-a9b7-00163e084110 on /var/lib/kubelet/pods/ba374a37-14f3-11ea-a9b7-00163e084110/volumes/kubernetes.io~nfs/pvc-2612b272-14e7-11ea-a9b7-00163e084110 type nfs (rw,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,nolock,noresvport,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.1.152,mountvers=3,mountport=4002,mountproto=tcp,local_lock=all,addr=192.168.1.152)
通過上面方法,可以對目前已經生成的NAS PV進行更新,并通過重新開機Pod使其生效。(注意:noresvport參數生效有其特殊性,咨詢nas技術支援。)
更新Nas Controller:
上面的文檔隻是把老版本生成的pv更新挂載參數,隻有更新了nas controller版本後才能使後續生成的pv自動使用新挂載參數。
新Controller模闆:
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: alicloud-nas-controller
namespace: kube-system
spec:
strategy:
type: Recreate
template:
metadata:
labels:
app: alicloud-nas-controller
spec:
tolerations:
- operator: Exists
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: node-role.kubernetes.io/master
operator: Exists
priorityClassName: system-node-critical
serviceAccount: admin
hostNetwork: true
containers:
- name: nfs-provisioner
image: registry.cn-hangzhou.aliyuncs.com/acs/alicloud-nas-controller:v1.14.3.8-58bf821-aliyun
env:
- name: PROVISIONER_NAME
value: alicloud/nas
securityContext:
privileged: true
volumeMounts:
- mountPath: /var/log
name: log
volumes:
- hostPath:
path: /var/log
name: log
通過下面指令重建Nas Controller:
# kubectl delete deploy alicloud-nas-controller
# kubectl create -f controller.yaml
StorageClass更新:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: alicloud-nas
mountOptions:
- nolock,tcp,noresvport
- vers=3
parameters:
server: "2564f49129-**.cn-shenzhen.nas.aliyuncs.com:/"
driver: nfs
provisioner: alicloud/nas
reclaimPolicy: Retain
通過下面指令更新StorageClass:
# kubectl delete sc alicloud-nas
# kubectl create -f stroageclass.yaml
驗證:
擴容應用Pod數量,生成新PVC、PV:
# kubectl get pv default-html-web-nas-5-pvc-91f37aa0-14f6-11ea-a9b7-00163e084110 -oyaml| grep mountOptions -A 6
mountOptions:
- nolock,tcp,noresvport
- vers=3
nfs:
path: /default-html-web-nas-5-pvc-91f37aa0-14f6-11ea-a9b7-00163e084110
server: 2564f49129-**.cn-shenzhen.nas.aliyuncs.com
persistentVolumeReclaimPolicy: Retain
檢視Pod挂載資訊,noresvport等參數均已配置成功:
2564f49129-**.cn-shenzhen.nas.aliyuncs.com:/default-html-web-nas-5-pvc-91f37aa0-14f6-11ea-a9b7-00163e084110 on /var/lib/kubelet/pods/4bc4bb3e-14f7-11ea-a9b7-00163e084110/volumes/kubernetes.io~nfs/default-html-web-nas-5-pvc-91f37aa0-14f6-11ea-a9b7-00163e084110 type nfs (rw,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,nolock,noresvport,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.1.152,mountvers=3,mountport=4002,mountproto=tcp,local_lock=all,addr=192.168.1.152)