nfs服務器的配置
參考: https://github.com/gregbkr/kubernetes-kargo-logging-monitoring#8-data-persistence
mkdir -p /export/centos
chmod -R 777 /export/centos
cat /etc/exports
/export/centos *(rw,insecure,sync,no_subtree_check,no_root_squash)
測試掛載
nfs作爲stateful存儲
- 參考:
https://github.com/kubernetes-incubator/external-storage/tree/master/nfs-client/deploy
根據這個一步一步走可以搞成功. 組件邏輯關係(code):
邏輯關係圖解
最終效果
nfs服務端目錄:
[root@node135 centos]# ll
total 0
drwxr-xr-x 2 root root 21 Sep 6 15:03 default-test-claim-pvc-2ba54d52-92ce-11e7-8612-6eed15cdfa93
創建nfs-client-provisioner,即deployment後:
[root@node131 ~]# kubectl get po
NAME READY STATUS RESTARTS AGE
nfs-client-provisioner-168516604-lwp9q 1/1 Running 0 36m
創建storageclass後
[root@node131 ~]# kubectl get sc
NAME TYPE
managed-nfs-storage fuseim.pri/ifs
創建test-claim pvc後:
[root@node131 ~]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESSMODES STORAGECLASS AGE
test-claim Bound default-test-claim-pvc-2ba54d52-92ce-11e7-8612-6eed15cdfa93 1Mi RWX managed-nfs-storage 35m
創建test-pod後:
[root@node131 ~]# kubectl get pv
NAME CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM STORAGECLASS REASON AGE
default-test-claim-pvc-2ba54d52-92ce-11e7-8612-6eed15cdfa93 1Mi RWX Delete Bound default/test-claim managed-nfs-storage 35m
操刀實戰
第一步創建nfs底層驅動來對接nfs server
本質:實際上是把pv掛載成class供應卷
[root@node131 nfs]# cat nfs-stateful.yaml
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: nfs-client-provisioner
spec:
replicas: 1
strategy:
type: Recreate
template:
metadata:
labels:
app: nfs-client-provisioner
spec:
serviceAccount: nfs-provisioner
containers:
- name: nfs-client-provisioner
image: quay.io/kubernetes_incubator/nfs-provisioner:latest
imagePullPolicy: IfNotPresent
volumeMounts:
- name: nfs-client-root
mountPath: /persistentvolumes
env:
- name: PROVISIONER_NAME
value: fuseim.pri/ifs
- name: NFS_SERVER
value: 192.168.6.135
- name: NFS_PATH
value: /export/centos
volumes:
- name: nfs-client-root
nfs:
server: 192.168.6.135
path: /export/centos
[root@node131 nfs]# cat nfs-class.yaml
apiVersion: storage.k8s.io/v1beta1
kind: StorageClass
metadata:
name: managed-nfs-storage
provisioner: fuseim.pri/ifs
[root@node131 nfs-client]# cat nfs-nginx.yaml
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
name: web
spec:
serviceName: "nginx1"
replicas: 2
volumeClaimTemplates:
- metadata:
name: test
annotations:
volume.beta.kubernetes.io/storage-class: "managed-nfs-storage"
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi
template:
metadata:
labels:
app: nginx1
spec:
serviceAccount: nfs-provisioner
containers:
- name: nginx1
image: nginx:latest
imagePullPolicy: IfNotPresent
volumeMounts:
- mountPath: "/mnt"
name: test
pod名字觀察
[root@node131 nfs-client]# kubectl get po
NAME READY STATUS RESTARTS AGE
nfs-client-provisioner-168516604-lwp9q 1/1 Running 0 41m
web-0 1/1 Running 0 37s
web-1 1/1 Running 0 35s
nfs服務器目錄觀察
[root@node135 centos]# ll
total 0
drwxr-xr-x 2 root root 21 Sep 6 15:03 archived-default-test-claim-pvc-2ba54d52-92ce-11e7-8612-6eed15cdfa93
drwxr-xr-x 2 root root 6 Sep 6 15:19 default-test-web-0-pvc-b479d66b-92d3-11e7-8612-6eed15cdfa93
drwxr-xr-x 2 root root 6 Sep 6 15:19 default-test-web-1-pvc-b5a7b634-92d3-11e7-8612-6eed15cdfa93