ボーエンによるボリュームKubernetesの保存あなたはKubernetsデータの永続化プロセスがある学ぶことができます。
基礎となるNFSストレージを構築する- > PVを作成します。 - > PVCを作成します。 - >ポッドを作成し
、最終的にデータの永続化のための容器にポッドう!
上記のプロセスから、一見問題はないが、慎重に検討を見つける:PVCは、ときPVアプリケーションのストレージ容量、PVがPV、アクセス、容量の大きさのモードの名前を指定するに応じて、特定のアプリケーション空間を決定することです。
例を挙げ:PV容量は20G、WROがアクセス(読み出しおよび書き込みマウントする単一のノードのみを許可する)を定義し、ストレージアプリケーションはPVCが一度上記PVすることであることを、図10G PVCである場合それが唯一の単一のノードを実装することができますので、PVはスペースの10Gは、無駄にされたされた宇宙アプリケーション、。これは非常に深刻な問題です。でも、この問題を考慮せずに、私たちは手動で各PVはもっと面倒なことで作成する必要があり、これはPVを作成し、私たちをバックアップするための自動化されたプログラムを使用する必要があります。この自動化されたソリューションは、--storageクラス(ストレージクラス)にあります!
ストレージクラス(ストレージクラス)の概要
ストレージクラス(ストレージクラス)は、パフォーマンス、サービス品質、バックアップポリシー、などとストレージ・システムのレベルに応じて、論理的なグループを容易にPVの管理者によって管理され、作成されたKubernetesリソースタイプ、です。しかしKubernetesカテゴリ自体は最終的に、これはそれの簡単な説明であることが何であるかを知りません!
ストレージ・クラスの利点の一つは、ユーザーが永続ストレージを使用する場合、非常に便利な、PVの前進を作成するのではなく、直接にPVCを作成する必要はありません、PVを動的に作成をサポートすることです。スペースの無駄を避けながら!
三つの重要な概念ストレージクラス(ストレージ・クラス):
。1)プロビジョニング(ドナープロバイダ):ストレージ・システムのストレージリソース。複数の内部Kubernetes供給側は、これらの名前の供給側は、接頭辞として「kubernetes.io」にあります。また、カスタマイズすることができる;
2)パラメータ(パラメータ):ストレージ・クラス・パラメータは、ストレージボリューム、異なるドナーのパラメータが異なっていることに注意してくださいに関連することが記載さ;
3)ReclaimPlicy:回復戦略PVは、利用可能な値は削除されている(デフォルト)と保持。
以下は、自動的に特定の使用ストレージクラスのさらなる理解のPVケース持続性のnginxベースのデータによって作成されます!
1)NFS設定は、共有ストレージ
便宜上、マスターノードアップに直接NFSストレージを展開!
[root@master ~]# yum -y install nfs-utils rpcbind
[root@master ~]# vim /etc/exports
/nfsdata *(rw,sync,no_root_squash)
[root@master ~]# systemctl start nfs-server
[root@master ~]# systemctl start rpcbind
[root@master ~]# showmount -e
Export list for master:
/nfsdata *
2)RBAC承認を作成します。
RBAC認証機構の認証機構に関連したこの自動作成PV、RBACの方法は、まずここでは詳細に続い更新手順を記載されていません。
[root@master ~]# vim rbac-rolebind.yaml
kind: Namespace #创建一个名称空间,名称为xiaojiang-test
apiVersion: v1
metadata:
name: xiaojiang-test
---
apiVersion: v1 #创建一个用于认证的服务账号
kind: ServiceAccount
metadata:
name: nfs-provisioner
namespace: xiaojiang-test
---
apiVersion: rbac.authorization.k8s.io/v1 #创建群集规则
kind: ClusterRole
metadata:
name: nfs-provisioner-runner
namespace: xiaojiang-test
rules:
- apiGroups: [""]
resources: ["persistentvolumes"]
verbs: ["get", "list", "watch", "create", "delete"]
- apiGroups: [""]
resources: ["persistentvolumeclaims"]
verbs: ["get", "list", "watch", "update"]
- apiGroups: ["storage.k8s.io"]
resources: ["storageclasses"]
verbs: ["get", "list", "watch"]
- apiGroups: [""]
resources: ["events"]
verbs: ["watch", "create", "update", "patch"]
- apiGroups: [""]
resources: ["services", "endpoints"]
verbs: ["get","create","list", "watch","update"]
- apiGroups: ["extensions"]
resources: ["podsecuritypolicies"]
resourceNames: ["nfs-provisioner"]
verbs: ["use"]
---
kind: ClusterRoleBinding #将服务认证用户与群集规则进行绑定
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: run-nfs-provisioner
subjects:
- kind: ServiceAccount
name: nfs-provisioner
namespace: xiaojiang-test
roleRef:
kind: ClusterRole
name: nfs-provisioner-runner
apiGroup: rbac.authorization.k8s.io
[root@master ~]# kubectl apply -f rbac-rolebind.yaml #执行yaml文件
3)NFS-展開を作成します。リソースを
役割のNFS-展開は:実際には、それは、NFSクライアントです。その内蔵の遠位端(容器内の)ローカルディレクトリをマウントするK8S NFS、NFSサーバを駆動し、次に自体ストレージプロバイダ、関連するストレージクラスとして。
[root@master ~]# vim nfs-deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nfs-client-provisioner
namespace: xiaojiang-test
spec:
replicas: 1 #指定副本数量为1
strategy:
type: Recreate #指定策略类型为重置
template:
metadata:
labels:
app: nfs-client-provisioner
spec:
serviceAccount: nfs-provisioner #指定rbac yanl文件中创建的认证用户账号
containers:
- name: nfs-client-provisioner
image: registry.cn-hangzhou.aliyuncs.com/open-ali/nfs-client-provisioner #使用的镜像
volumeMounts:
- name: nfs-client-root
mountPath: /persistentvolumes #指定容器内挂载的目录
env:
- name: PROVISIONER_NAME #容器内的变量用于指定提供存储的名称
value: lzj-test
- name: NFS_SERVER #容器内的变量用于指定nfs服务的IP地址
value: 192.168.1.1
- name: NFS_PATH #容器内的变量指定nfs服务器对应的目录
value: /nfsdata
volumes: #指定挂载到容器内的nfs的路径及IP
- name: nfs-client-root
nfs:
server: 192.168.1.1
path: /nfsdata
[root@master ~]# kubectl apply -f nfs-deployment.yaml #执行yaml文件
[root@master ~]# kubectl get pod -n xiaojiang-test
NAME READY STATUS RESTARTS AGE
nfs-client-provisioner-7cf975c58b-sc2qc 1/1 Running 0 6s
4)作成SC(ストレージクラス)
[root@master ~]# vim test-storageclass.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: stateful-nfs
namespace: xiaojiang-test
provisioner: lzj-test #这个要和nfs-client-provisioner的env环境变量中的PROVISIONER_NAME的value值对应。
reclaimPolicy: Retain #指定回收策略为Retain(手动释放)
[root@master ~]# kubectl apply -f test-storageclass.yaml
5)PVCを作成します。
[root@master ~]# vim test-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: test-claim
namespace: xiaojiang-test
spec:
storageClassName: stateful-nfs #定义存储类的名称,需与SC的名称对应
accessModes:
- ReadWriteMany #访问模式为RWM
resources:
requests:
storage: 100Mi
[root@master ~]# kubectl apply -f test-pvc.yaml
[root@master ~]# kubectl get pvc -n xiaojiang-test
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
test-claim Bound pvc-267b880d-5e0a-4e8e-aaff-3af46f21c6eb 100Mi RWX stateful-nfs 14s
#保证pvc的状态为Bound,表示关联成功
[root@master ~]# ls /nfsdata/ #可以看出用于nfs存储的目录下生成了一个对应的目录
xiaojiang-test-test-claim-pvc-267b880d-5e0a-4e8e-aaff-3af46f21c6eb
この場所に、我々は自動的に実装されているPVC PVのアプリケーションストレージスペースを作成する(ローカルNFSはディレクトリが非常に長いディレクトリ名を生成した共有、PV + PVC名が定義されているディレクトリ名です)、PVCアプリケーションとしてスペースは、もはや有効であったポッドに使用することです!
6)ポッドnginxの上のミラーを作成します。
[root@master ~]# vim nginx-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: myweb
namespace: xiaojiang-test
spec:
containers:
- name: myweb
image: nginx:latest
volumeMounts:
- name: myweb-persistent-storage
mountPath: /usr/share/nginx/html/
volumes:
- name: myweb-persistent-storage
persistentVolumeClaim:
claimName: test-claim #指定使用的PVC名称
[root@master ~]# kubectl apply -f nginx-pod.yaml
[root@master ~]# kubectl get pod -n xiaojiang-test
NAME READY STATUS RESTARTS AGE
myweb 1/1 Running 0 38s
nfs-client-provisioner-7cf975c58b-sc2qc 1/1 Running 0 60m
7)試験と認定
[root@master ~]# kubectl exec -it myweb -n xiaojiang-test /bin/bash
root@myweb:/# cd /usr/share/nginx/html/
root@myweb:/usr/share/nginx/html# echo "hello world" > index.html
#进入容器插入数据进行测试
[root@master ~]# cat /nfsdata/xiaojiang-test-test-claim-pvc-267b880d-5e0a-4e8e-aaff-3af46f21c6eb/index.html
hello world
#本地目录测试没有问题
[root@master ~]# kubectl exec -it nfs-client-provisioner-7cf975c58b-sc2qc -n xiaojiang-test /bin/sh
/ # ls nfs-client-provisioner
nfs-client-provisioner #自动创建pv的可执行程序
/ # cat /persistentvolumes/xiaojiang-test-test-claim-pvc-267b880d-5e0a-4e8e-aaff-3af46f21c6eb/index.html
hello world
#nfs-client容器对应的目录数据也是存在的
上記のテストから見ることができます。ページディレクトリにnginxのコンテナに、すべてのコンテナ上のローカル共有ディレクトリのNFS、NFSクライアントのディレクトリが仲間。
------------この記事の最後に、読んでくれてありがとう----------------