K8S無脳シリーズ(7) - NFSストレージ(ダイナミックメモリ)
1.なぜ我々は動的メモリが必要なのです
おそらく正しいとは限らない、それについて話します。一つは、それは常に良いことだと思うようになりました。用途は、自然に恩恵を感謝しています。
各店舗のニーズの製造のための太陽光発電資源、PVCは非常に面倒。
リクエストの同じタイプ、ソリューション素早くダイナミックなアプリケーションを制御を実装するための緊急の必要性がたくさんあります。PVCアプリケーション、自動的にバインドされたPV
ストレージ再利用は、細かな制御が再利用できるが必要です。容量を確保するために、だけでなく、データのセキュリティを確保するために必要な
STORAGECLASSを理解する2。
2.1用語の基礎
- PV - 永続的なボリューム(永続ストレージ・ボリューム)
- PVC - 永続的なボリュームクレーム(永続ストレージ・ボリューム・リクエスト)
- PVP - 永続的なボリュームプロビジョニング(永続ストレージ・ボリューム・サプライヤー)
- クラスタの役割クラスタ操作の役割は、役割の直接翻訳役割は、意味が拡張されている役割と権限
2.1原理
管理者は、PV外部リクエスト(永続ストレージ・ボリューム)の例を提供する責任、プロビジョニング担当者(サプライヤー)を作成します
代わりに、PVCのSTORAGECLASS(永続ストレージ・ボリューム・リクエスト)がPV(永続ストレージ・ボリューム)Provistioner要求への結合の例を発行しました
ポッドは、インスタンスを格納することによって得られたPVC PVCをバインドPV
3.準備
マテリアル | コンテンツ | リマーク |
---|---|---|
NFSサービス | 192.168.56.4 | A |
ストアディレクトリ | /データ/ NFS / DB-SVCダイナミックボリューム | データを格納するために使用されます |
K8Sクラスタ | いいえ脳シリーズは導入されません | バージョン1.16.4 |
関与3.1 YAMLの概念
名前 | 説明 | リマーク |
---|---|---|
STORAGECLASS | K8S APIのドキュメント | |
ServiceAccount | サービスアカウント | |
役割/ ClusterRole | 役割/役割クラスタ | |
RoleBinding / ClusterRoleBinding | 役割とアカウントバインディング |
3.2定義サービスアカウントと権限を
クラスタへのリソースの適用のために責任があるサービスアカウントの定義、。
「クラスタの役割」、「役割」とのサービスアカウントを使用してバインドの定義。だから、YAMLは5つの部分になります。彼らは
- サービスアカウント
- クラスタの役割
- クラスタの役割とサービスアカウントのバインド
- 役割
- 役割とサービスアカウントのバインド
NFSストレージ-rbac.yaml
apiVersion: v1
# 定义服务账户
kind: ServiceAccount
metadata:
# 名字要知命达意,这个账户专门为数据库服务
# {用途}-svc-{卷类型}-account
name: db-svc-nfs-account
namespace: default
---
# 定义集群角色声明该角色的权限列表,可以看出全是存储相关
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
# 与 db-svc-nfs-account 相呼应
name: db-svc-nfs-cluster-role
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: ["create", "update", "patch"]
---
# 定义完角色后,就要将ServiceAccount与ClusterRole来绑定
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: db-svc-nfs-account-cluster-role-bind
subjects: # 这里用的数组结构,那么可以认为这一个“角色”可以被多个账户绑定
- kind: ServiceAccount
# 账户名字,见ServiceAccount的name
name: db-svc-nfs-account
namespace: default
roleRef:
kind: ClusterRole
# 角色的名字,见ClusterRole的name
name: db-svc-nfs-cluster-role
apiGroup: rbac.authorization.k8s.io
---
# 专门用来操作pvc与pv绑定时,ServiceAccount可以使用的权限
kind: Role # 角色
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: db-svc-nfs-role
namespace: default
rules:
- apiGroups: [""]
resources: ["endpoints"]
verbs: ["get", "list", "watch", "create", "update", "patch"]
---
# 与角色绑定的ServiceAccount
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: db-svc-nfs-account-role-bind
subjects:
- kind: ServiceAccount
# 账户名字,见ServiceAccount的name
name: db-svc-nfs-account
namespace: default
roleRef:
kind: Role
# 角色名字,见role
name: db-svc-nfs-role
apiGroup: rbac.authorization.k8s.io
$kubectl create -f nfs-storage-rbac.yaml
serviceaccount/db-svc-nfs-account created
clusterrole.rbac.authorization.k8s.io/db-svc-nfs-cluster-role created
clusterrolebinding.rbac.authorization.k8s.io/db-svc-nfs-account-cluster-role-bind created
role.rbac.authorization.k8s.io/db-svc-nfs-role created
rolebinding.rbac.authorization.k8s.io/db-svc-nfs-account-role-bind created
3.3 STORAGECLASSを作成します
NFSストレージ-class.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: db-svc-nfs-storage-class
# 这个名字要记住
provisioner: db-svc-nfs-provistioner
parameters:
archiveOnDelete: "false"
reclaimPolicy: Retain
NFSプロビジョニングの作成3.4
NFS provisioner.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: db-svc-nfs-provisioner
labels:
app: db-svc-nfs-provisioner
namespace: default
spec:
replicas: 1
strategy:
type: Recreate
selector:
matchLabels:
app: db-svc-nfs-provisioner
template:
metadata:
labels:
app: db-svc-nfs-provisioner
spec:
# 这里说明,用上面创建的service account来创建pv
serviceAccountName: db-svc-nfs-account
containers:
- name: nfs-client-provisioner
image: quay.io/external_storage/nfs-client-provisioner:latest
volumeMounts:
- name: nfs-client-root
mountPath: /persistentvolumes
env: #------ 这里是有学问的,见3.7
- name: PROVISIONER_NAME
value: db-svc-nfs-provistioner
- name: NFS_SERVER
value: 192.168.56.4
- name: NFS_PATH
value: /data/nfs/db-svc-dynamic-volume
volumes:
- name: db-svc-dynamic-volume
nfs: #----- 这里是有学问的,见3.7
server: 192.168.56.4
path: /data/nfs/db-svc-dynamic-volume
$kubectl create -f nfs-provisioner.yaml
3.5永続的なボリュームクレームを作成します
NFSダイナミックpvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
namespace: default
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: db-svc-nfs-storage-class
$kubectl create -f nfs-dynamic-pvc.yaml
*注:システムが報告された場合、次のエラーは、あなたが脳シリーズの他の部分を読んでいないことを示します
Error from server (AlreadyExists): error when creating "nfs-dynamic-pvc.yaml": persistentvolumeclaims "mysql-pvc" already exists
削除するには、次のコマンドを呼び出してください。
$kubectl delete pvc mysql-pvc
システムが正常に動作しているかどうかをチェック3.6
$kubectl get pv,pvc
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/pvc-e95e6bfb-aeba-4a96-b8eb-90c0db607ad9 1Gi RWO Retain Bound default/mysql-pvc db-svc-nfs-storage-class 17m
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/mysql-pvc Bound pvc-e95e6bfb-aeba-4a96-b8eb-90c0db607ad9 1Gi RWO db-svc-nfs-storage-class 17m
出演ersistentvolume / PVC-e95e6bfb-aeba-4a96-b8eb-90c0db607ad9なPV
- 「バウンド」のmysql-PVCステータス表示
システムの稼働時間!
以上の3.7なぜ尋ねます
なぜプロビジョニングは、NFS、それの内容を繰り返すように設定登場しますか?
NFSクライアント・プロビジョニングこの画像についての話
内のコードの画像Githubに、締結コードを見
そして、クラスタApiServerユニコム、およびPVの作成を完了します。
作成プロセスにおけるPV、NFS_SERVERとNFS_PATHにこれらの2つの変数を使用する必要があり、新しいPVに渡されます
$kubectl describe pv pvc-e95e6bfb-aeba-4a96-b8eb-90c0db607ad9 Name: pvc-e95e6bfb-aeba-4a96-b8eb-90c0db607ad9 Labels: <none> Annotations: pv.kubernetes.io/provisioned-by: db-svc-nfs-provistioner Finalizers: [kubernetes.io/pv-protection] StorageClass: db-svc-nfs-storage-class Status: Bound Claim: default/mysql-pvc Reclaim Policy: Retain Access Modes: RWO VolumeMode: Filesystem Capacity: 1Gi Node Affinity: <none> Message: Source: Type: NFS (an NFS mount that lasts the lifetime of a pod) Server: 192.168.56.4 <--------这里 Path: /data/nfs/db-svc-dynamic-volume/default-mysql-pvc-pvc-e95e6bfb-aeba-4a96-b8eb-90c0db607ad9 ReadOnly: false Events: <none>
コードはreclaimPolicy PVがクラスタに発行された命令を完了するのに必要なので、必要性が、ミラーボリュームをマウントする理由、および特定の動作が完了する