Kubernetes配置默認存儲類


# Kubernetes配置默認存儲類

前言

今天在配置Kubesphere的時候,出現了下面的錯誤

image-20201123095552088

經過排查,發現是這個原因

image-20201123095637801

我通過下面命令,查看Kubernetes集群中的默認存儲類

kubectl get storageclass

發現空空如也,所以問題應該就出現在這里了~,下面我們給k8s集群安裝上默認的存儲類

安裝nfs

我們使用的是nfs來作為k8s的存儲類

首先找一台新的服務器,作為nfs服務端,然后進行 nfs的安裝 【服務器:192.168.177.141】

然后使用命令安裝nfs

yum install -y nfs-utils

首先創建存放數據的目錄

mkdir -p /data/k8s

設置掛載路徑

# 打開文件
vim /etc/exports
# 添加如下內容
/data/k8s *(rw,no_root_squash)

node節點上安裝

然后需要在k8s集群node節點上安裝nfs,這里需要在 node1 和 node2節點上安裝

yum install -y nfs-utils

執行完成后,會自動幫我們掛載上

啟動nfs

在node節點上配置完成后,我們就接着到剛剛nfs服務器,啟動我們的nfs

systemctl start nfs

配置StorageClass

要使用StorageClass,我們就得安裝對應的自動配置程序,比如上面我們使用的是nfs,那么我們就需要使用到一個 nfs-client 的自動配置程序,我們也叫它 Provisioner,這個程序使用我們已經配置的nfs服務器,來自動創建持久卷,也就是自動幫我們創建PV

自動創建的 PV 以${namespace}-${pvcName}-${pvName}這樣的命名格式創建在 NFS 服務器上的共享數據目錄中
而當這個 PV 被回收后會以archieved-${namespace}-${pvcName}-${pvName}這樣的命名格式存在 NFS 服務器上。

當然在部署nfs-client之前,我們需要先成功安裝上 nfs 服務器,上面已經安裝好了,服務地址是192.168.177.141,共享數據目錄是/data/k8s/,然后接下來我們部署 nfs-client 即可,我們也可以直接參考 nfs-client 文檔,進行安裝即可。

配置Deployment

首先配置 Deployment,將里面的對應的參數替換成我們自己的 nfs 配置(nfs-client.yaml)

kind: Deployment
apiVersion: apps/v1
metadata:
  name: nfs-client-provisioner
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nfs-client-provisioner
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: nfs-client-provisioner
    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.177.141
            - name: NFS_PATH
              value: /data/k8s
      volumes:
        - name: nfs-client-root
          nfs:
            server: 192.168.177.141
            path: /data/k8s

替換配置

將環境變量 NFS_SERVER 和 NFS_PATH 替換,當然也包括下面的 nfs 配置,我們可以看到我們這里使用了一個名為 nfs-client-provisioner 的serviceAccount,所以我們也需要創建一個 sa,然后綁定上對應的權限:(nfs-client-sa.yaml)

apiVersion: v1
kind: ServiceAccount
metadata:
  name: nfs-client-provisioner

---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: nfs-client-provisioner-runner
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: ["list", "watch", "create", "update", "patch"]
  - apiGroups: [""]
    resources: ["endpoints"]
    verbs: ["create", "delete", "get", "list", "watch", "patch", "update"]

---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: run-nfs-client-provisioner
subjects:
  - kind: ServiceAccount
    name: nfs-client-provisioner
    namespace: default
roleRef:
  kind: ClusterRole
  name: nfs-client-provisioner-runner
  apiGroup: rbac.authorization.k8s.io

我們這里新建的一個名為 nfs-client-provisioner 的ServiceAccount,然后綁定了一個名為 nfs-client-provisioner-runner 的ClusterRole,而該ClusterRole聲明了一些權限,其中就包括對persistentvolumes的增、刪、改、查等權限,所以我們可以利用該ServiceAccount來自動創建 PV。

創建StorageClass對象

nfs-client 的 Deployment 聲明完成后,我們就可以來創建一個StorageClass對象了:(nfs-client-class.yaml)

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: course-nfs-storage
provisioner: fuseim.pri/ifs # or choose another name, must match deployment's env PROVISIONER_NAME'

我們聲明了一個名為 course-nfs-storage 的StorageClass對象,注意下面的provisioner對應的值一定要和上面的Deployment下面的 PROVISIONER_NAME 這個環境變量的值一樣

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: course-nfs-storage
provisioner: fuseim.pri/ifs # or choose another name, must match deployment's env PROVISIONER_NAME'

創建資源對象

在我們准備好上述的配置文件后,我們就可以開始創建我們的資源對象了

kubectl create -f nfs-client.yaml
kubectl create -f nfs-client-sa.yaml
kubectl create -f nfs-client-class.yaml

創建完成后,使用下面命令來查看資源狀態

kubectl get pods
# 查看存儲類
kubectl get storageclass

image-20201123104358758

我們可以設置這個 course-nfs-storage 的 StorageClass 為 Kubernetes 的默認存儲后端,我們可以用 kubectl patch 命令來更新

kubectl patch storageclass course-nfs-storage -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

執行完命令后,我們默認存儲類就配置成功了~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM