K8S無脳シリーズ(7) - NFSストレージ(ダイナミックメモリ)

K8S無脳シリーズ(7) - NFSストレージ(ダイナミックメモリ)

1.なぜ我々は動的メモリが必要なのです

おそらく正しいとは限らない、それについて話します。一つは、それは常に良いことだと思うようになりました。用途は、自然に恩恵を感謝しています。

  1. 各店舗のニーズの製造のための太陽光発電資源、PVCは非常に面倒。

  2. リクエストの同じタイプ、ソリューション素早くダイナミックなアプリケーションを制御を実装するための緊急の必要性がたくさんあります。PVCアプリケーション、自動的にバインドされたPV

  3. ストレージ再利用は、細かな制御が再利用できるが必要です。容量を確保するために、だけでなく、データのセキュリティを確保するために必要な

STORAGECLASSを理解する2。

2.1用語の基礎

  • PV - 永続的なボリューム(永続ストレージ・ボリューム)
  • PVC - 永続的なボリュームクレーム(永続ストレージ・ボリューム・リクエスト)
  • PVP - 永続的なボリュームプロビジョニング(永続ストレージ・ボリューム・サプライヤー)
  • クラスタの役割クラスタ操作の役割は、役割の直接翻訳役割は、意味が拡張されている役割権限

2.1原理

回路図

  1. 管理者は、PV外部リクエスト(永続ストレージ・ボリューム)の例を提供する責任、プロビジョニング担当者(サプライヤー)を作成します

  2. 代わりに、PVCのSTORAGECLASS(永続ストレージ・ボリューム・リクエスト)がPV(永続ストレージ・ボリューム)Provistioner要求への結合の例を発行しました

  3. ポッドは、インスタンスを格納することによって得られた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つの部分になります。彼らは

  1. サービスアカウント
  2. クラスタの役割
  3. クラスタの役割とサービスアカウントのバインド
  4. 役割
  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
  1. 出演ersistentvolume / PVC-e95e6bfb-aeba-4a96-b8eb-90c0db607ad9なPV

  2. 「バウンド」のmysql-PVCステータス表示
  3. システムの稼働時間!

以上の3.7なぜ尋ねます

なぜプロビジョニングは、NFS、それの内容を繰り返すように設定登場しますか?

NFSクライアント・プロビジョニングこの画像についての話

内のコードの画像Githubに、締結コードを見

  1. そして、クラスタApiServerユニコム、およびPVの作成を完了します。

  2. 作成プロセスにおける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>
  3. コードはreclaimPolicy PVがクラスタに発行された命令を完了するのに必要なので、必要性が、ミラーボリュームをマウントする理由、および特定の動作が完了する

おすすめ

転載: www.cnblogs.com/smokelee/p/12445155.html