使用glusterfs爲k8s提供動態pv供給

1、創建glusterfs集羣

(1)部署glusterfs集羣

        由於虛擬機機器限制,所以使用k8s集羣的兩臺node節點創建glusterfs集羣。具體環境如下:

主機ip

主機名

使用的磁盤

Heketi節點

192.168.16.130

heketi

/dev/sdb

192.168.16.197

node01

/dev/sdb

192.168.16.198

node02

/dev/sdb

# 在三臺節點上安裝glusterfs-server程序包,並啓動glusterfs服務
~]# yum install centos-release-gluster -y
~]# yum install glusterfs-server
~]# systemctl start glusterd.service
# 通過一個節點發現其他節點
~]# gluster peer probe node01
~]# gluster peer probe node02
~]# gluster peer status
Number of Peers: 2

Hostname: node01
Uuid: 1e1d86ff-8a23-468c-ae43-f9f3b989be21
State: Peer in Cluster (Connected)

Hostname: node02
Uuid: 10ad6c06-d006-4577-a147-5aec9e32eff2
State: Peer in Cluster (Connected)
Other names:
192.168.16.198

(2)部署Heketi(在heketi主機上)

        heketi爲管理clusterfs存儲卷的生命週期提供了一個restful管理接口。Heketi能夠自動確定整個集羣的brick位置,並確保將brick及其副本放置在不同的故障域中。同時,Heketi還支持任意數量的cluster存儲集羣,並支持雲服務提供網絡文件存儲。不過在heketi中註冊的任何磁盤都必須以原始格式提供。

1)安裝設置heketi

# 安裝啓動heketi服務
~]# yum install heketi heketi-client
# 配置heketi通過ssh祕鑰的方式連接至集羣中clusterfs節點
~]# ssh-keygen -f /etc/heketi/heketi_key -t rsa -N ''
~]# chown heketi:heketi /etc/heketi/heketi_key*
~]# ssh-copy-id -i /etc/heketi/heketi_key.pub root@node01
~]# ssh-copy-id -i /etc/heketi/heketi_key.pub root@node02 

2)配置heketi

       heketi的默認配置文件爲/etc/heketi/heketi.json,默認的配置即可使用,如果需要連接heketi的認證,則需要將“use_auth”的參數設置爲“true”,並在“jwt{}”配置段中爲各用戶設定相應的密碼,用戶名和密碼都可以自定義。配置實例如下:

~]# cat /etc/heketi/heketi.json
{
  "port": "8080",
  "use_auth": false,
  "jwt": {
    "admin": {
      "key": "admin Secret"
    },
    "user": {
      "key": "user Secret"
    }
  },
  "glusterfs": {
    "executor": "ssh",
    "sshexec": {
      "keyfile": "/etc/heketi/heketi_key",
      "user": "root",
      "port": "22",
      "fstab": "/etc/fstab"
    },
    "db": "/var/lib/heketi/heketi.db",
    "loglevel" : "debug"
  }
}

3)啓動驗證heketi服務

# 啓動heketi
~]# systemctl enable heketi
~]# systemctl start heketi
# 驗證heketi
~]# curl http://heketi:8080/hello
Hello from Heketi

(3)設置heketi的系統拓撲

        拓撲信息用於讓heketi確認可使用的節點、磁盤和集羣,管理員必須自行確定節點故障域和節點集羣。通過命令行的客戶端”hekcti-cli”可以加載預定義的集羣拓撲,從而添加節點到集羣中,以及將磁盤關聯到節點上。加載拓撲文件的命令爲:

# export HEKETL_CLI_SERVER=http://<heketi_server:port>
# heketi-cli topology load --json=<topology_file>

        設置heketi系統拓撲時需要一個使用於當前配置環境的配置文件,它將根據gluster存儲的實際環境把各節點定義在同一個集羣中,並指明各節點上可用於提供存儲空間的磁盤設備。

# 定義當前環境的配置文件
~]# cat /etc/heketi/topology_demo.json 
~]# cat /etc/heketi/topology_demo.json 
{
  "clusters": [
    {
      "nodes": [
        {
          "node": {
            "hostnames": {
              "manage": [
                "192.168.16.197"
              ],
              "storage": [
                "192.168.16.197"
              ]
            },
            "zone": 1
          },
          "devices": [
             "/dev/sdb"
           ]
        },
        {
          "node": {
            "hostnames": {
              "manage": [
                "192.168.16.198"
              ],
              "storage": [
                "192.168.16.198"
              ]
            },
            "zone": 1
          },
          "devices": [
             "/dev/sdb"
           ]
        },
        {
          "node": {
            "hostnames": {
              "manage": [
                "192.168.16.130"
              ],
              "storage": [
                "192.168.16.130"
              ]
            },
            "zone": 1
          },
          "devices": [
             "/dev/sdb"
           ]
        }
      ]
    }
  ]
}

配置文件定義好之後需要通過命令加載拓撲信息,從而完成集羣的配置。

# 加載拓撲信息
~]# export HEKETI_CLI_SERVER=http://heketi:8080
~]# heketi-cli topology load --json=/etc/heketi/topology_demo.json
Creating cluster ... ID: a8e652ea255c6d129a5b8900cdadbf4e
  Allowing file volumes on cluster.
  Allowing block volumes on cluster.
  Creating node 192.168.16.197 ... ID: 534fe718a31481aa625c0cec6e7a715e
          Adding device /dev/sdb ... OK
  Creating node 192.168.16.198 ... ID: 9b8354c51092cca16ccb27998e3a7b00
          Adding device /dev/sdb ... OK
  Creating node 192.168.16.130 ... ID: b4decebd4ecb257835ac7c652e067564
          Adding device /dev/sdb ... OK 
# 查看集羣的狀態信息
~]# heketi-cli cluster info a8e652ea255c6d129a5b8900cdadbf4e
Cluster id: a8e652ea255c6d129a5b8900cdadbf4e
Nodes:
534fe718a31481aa625c0cec6e7a715e
9b8354c51092cca16ccb27998e3a7b00
b4decebd4ecb257835ac7c652e067564

(4)存儲卷的管理

        存儲卷的創建通過“heketi-cli volume create --size=<size in Gb> [options]”命令創建。存存儲卷的使用則需要在使用該存儲卷的節點上安裝GlusterFS和glusterfs-fuse程序包。

2、使用glusterfs動態pv供給

(1)存儲類

      存儲類支持pv的動態創建,創建存儲類時,除了名稱之外,還需要定義以下字段:

        1)provisioner:供給方,提供存儲資源的存儲系統,該字段用來判定要使用的存儲插件以便適配到目標存儲系統。

        2)parameters:該參數用來描述要關聯到的存儲卷

       3)reclaimPolicy:爲當前存儲類動態創建的pv指定回收策略,可用值爲delete和retain

       4)volumeBindMode:定義如何爲PVC完成供給和綁定,默認值爲“VolumeBindingImmediate”.

       5)mountOptions:由當前類動態創建的pv的掛載選項列表

# 定義一個基於glusterfs的存儲類
]# cat glusteerfs-storageclass.yaml 
kind: StorageClass
apiVersion: storage.k8s.io/v1beta1
metadata:
  name: glusterfs
provisioner: kubernetes.io/glusterfs
parameters:
  resturl: "http://192.168.17.130:8080"
  restauthenabled: "false"
# 創建並查看該存儲類
]# kubectl apply -f glusteerfs-storageclass.yaml 
storageclass.storage.k8s.io/glusterfs created
]# kubectl get StorageClass
NAME        PROVISIONER               AGE
glusterfs   kubernetes.io/glusterfs   16s

(2)動態pv供給

        動態pv的供給至少需要一個存儲類,有了存儲類就可以進行pv的動態供給。在pvc中定義使用指定的存儲類資源的方式有兩種,一種是通過spec. storageClassName字段定義,另一種方式是通過” volume.beta.kubernetes.io/storage-class”註解信息指定。

# 創建一個pvc並動態請求pv
~]# cat pvc-glusterfs.yaml 
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-glusterfs
  annotations:
    volume.beta.kubernetes.io/storage-class: glusterfs
spec:
  # storageClassName: "glusterfs"
  accessModes: 
  - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi
# 創建並查看創建的pvc
~]# kubectl apply -f pvc-glusterfs.yaml 
persistentvolumeclaim/pvc-glusterfs created
 ~]# kubectl get pvc
NAME            STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
pvc-glusterfs   Bound    pvc-20fdbad8-7acf-11e9-8957-000c29063a23   2Gi        RWO            glusterfs      25s

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章