kubernetes 实战 使用 nfs 作为动态 storageClass 存储
kubernetes 實(shí)戰(zhàn) 使用 nfs 作為動(dòng)態(tài) storageClass 存儲(chǔ)
概述
之前有介紹過(guò) Kubernetes 實(shí)戰(zhàn) pv and pvc, 相信使用過(guò)的pv和pvc的同學(xué)或者有過(guò)虛擬化經(jīng)驗(yàn)的人來(lái)說(shuō)肯定會(huì)想到很多問題,比如每次申請(qǐng) pvc 都需要手動(dòng)添加pv,這豈不是太不方便了。那我們?nèi)绾螌?shí)現(xiàn)類似于公有云或者私有云的共享存儲(chǔ)模式呢?kubernetes 提供了 storageclass 的概念,接下來(lái)我們來(lái)一探究竟。
本文通過(guò) nfs 來(lái)講解,首先需要注意的是 nfs默認(rèn)不支持動(dòng)態(tài)存儲(chǔ),使用了第三方的NFS插件 external-storage, kubernetes
官網(wǎng)也有會(huì)叫詳細(xì)的解析。
先上一張圖大家就比較清楚了:
基礎(chǔ)環(huán)境
nfs 存儲(chǔ)
pv、pvc 的基礎(chǔ)
kubernetes 集群
操作步驟
保證基礎(chǔ)環(huán)境部分就緒
1. 準(zhǔn)備
clone external-storage
git clone https://github.com/kubernetes-incubator/external-storage.git
部署 rbac
cd external-storage/nfs-client/deploy
kubectl apply -f rbac.yaml
1
2
2. 部署 nfs client 插件
修改deployment.yml配置, 修改 nfs 配置信息。
? spec:
? ? ? serviceAccountName: nfs-client-provisioner
? ? ? containers:
? ? ? ? - name: nfs-client-provisioner
? ? ? ? ? image: quay.io/external_storage/nfs-client-provisioner:latest
? ? ? ? ? volumeMounts:
? ? ? ? ? ? - name: nfs-client-root
? ? ? ? ? ? ? mountPath: /persistentvolumes
? ? ? ? ? env:
? ? ? ? ? ? - name: PROVISIONER_NAME
? ? ? ? ? ? ? value: fuseim.pri/ifs
? ? ? ? ? ? - name: NFS_SERVER
? ? ? ? ? ? ? value: 192.168.8.220 # nfs 服務(wù)器ip
? ? ? ? ? ? - name: NFS_PATH?
? ? ? ? ? ? ? value: /root/work/storage/nfs # 存儲(chǔ)地址
? ? ? volumes:
? ? ? ? - name: nfs-client-root
? ? ? ? ? nfs:
? ? ? ? ? ? server: 192.168.8.220 ?# nfs 服務(wù)器ip?
? ? ? ? ? ? path: /root/work/storage/nfs ?# 存儲(chǔ)地址
創(chuàng)建客戶端
kubectl apply -f deployment.yaml
創(chuàng)建storage class
kubectl apply -f class.yaml
查看 nfs 客戶端 和 storage class:
客戶端
[root@node3 deploy]# kubectl ?get pod
NAME ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?READY ? STATUS ? ?RESTARTS ? AGE
nfs-client-provisioner-7695c66c6b-56sbw ? 1/1 ? ? Running ? 0 ? ? ? ? ?10m
storage class
[root@node3 deploy]# kubectl ?get sc
NAME ? ? ? ? ? ? ? ? ?PROVISIONER ? ? ?AGE
managed-nfs-storage ? fuseim.pri/ifs ? 10m
3. 創(chuàng)建pvc
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
? name: test-claim
? annotations:
? ? volume.beta.kubernetes.io/storage-class: "managed-nfs-storage"
spec:
? accessModes: # 策略
? ? - ReadWriteMany
? resources:?
? ? requests:
? ? ? storage: 1Mi # 請(qǐng)求空間大小
創(chuàng)建
kubectl ?apply -f test-claim.yaml
查看 pvc
[root@node3 deploy]# kubectl ?get pvc
NAME ? ? ? ? STATUS ? VOLUME ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? CAPACITY ? ACCESS MODES ? STORAGECLASS ? ? ? ? ?AGE
test-claim ? Bound ? ?pvc-2febc25a-d2b0-11e9-9623-000c29b3776e ? 1Mi ? ? ? ?RWX ? ? ? ? ? ?managed-nfs-storage ? 14s
4. 部署測(cè)試pod
kind: Pod
apiVersion: v1
metadata:
? name: test-pod
spec:
? containers:
? - name: test-pod
? ? image: nginx
? ? command:
? ? ? - "/bin/sh"
? ? args:
? ? ? - "-c"
? ? ? - "touch /mnt/SUCCESS && exit 0 || exit 1"
? ? volumeMounts:
? ? ? - name: nfs-pvc # 綁定pvc
? ? ? ? mountPath: "/mnt"
? restartPolicy: "Never"
? volumes:
? ? - name: nfs-pvc #pvc 通過(guò)pvc 動(dòng)態(tài)創(chuàng)建pv
? ? ? persistentVolumeClaim:
? ? ? ? claimName: test-claim
創(chuàng)建 測(cè)試 pod
kubectl ?apply -f test-pod.yaml
1
查看pod
[root@node3 deploy]# kubectl ?get pod | grep pod
test-pod ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?0/1 ? ? Completed ? 0 ? ? ? ? ?81s
1
2
查看 pv 是否動(dòng)態(tài)創(chuàng)建:
[root@node3 deploy]# kubectl ?get pv
NAME ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? CAPACITY ? ACCESS MODES ? RECLAIM POLICY ? STATUS ? CLAIM ? ? ? ? ? ? ? ?STORAGECLASS ? ? ? ? ?REASON ? AGE
pvc-e78d0817-d2b0-11e9-9623-000c29b3776e ? 1Mi ? ? ? ?RWX ? ? ? ? ? ?Delete ? ? ? ? ? Bound ? ?default/test-claim ? managed-nfs-storage ? ? ? ? ? ?22m
1
2
3
好了是不是用起來(lái)很方便,還有其他的很多存儲(chǔ)可以測(cè)試自己搞一套試試。
github 地址
總結(jié)
以上是生活随笔為你收集整理的kubernetes 实战 使用 nfs 作为动态 storageClass 存储的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: idea连接sqlserver及数据库操
- 下一篇: 使用Bazel编译报错ERROR: Un