• 准备节点
  • 预备工作
    • 配置 root 登录
    • 修改 hosts 文件
    • 配置 SSH 免密登录
  • 开始安装
    • 安装 Glusterfs
    • 加载内核模块
  • 创建 Glusterfs 集群
    • 验证安装结果
  • 安装 Hekeit
    • 配置 Heketi
    • 启动Heketi
    • 编辑拓扑文件
    • 载入拓扑文件
  • 验证 Heketi 安装

    GlusterFS 是一个开源的分布式文件系统,本指南将介绍如何在 Ubuntu 系统部署一个节点数为 2 的 GlusterFS (v3.12.12) 存储服务端集群和 Heketi,Heketi 用来管理 GlusterFS,并提供 RESTful API 接口供 Kubernetes 调用。本指南仅供测试 KubeSphere 存储服务端的搭建,正式环境搭建 GlusterFS 集群请参考 GlusterFS 官方网站,搭建 Heketi 请参考 官方文档。

    准备节点

    主机规格

    Hostname IP OS CPU RAM Device
    glusterfs-server1 172.20.1.5 Ubuntu 16.04.4 4 Core 4 GB /dev/vda 100GiB, /dev/vdc 300GiB
    glusterfs-server2 172.20.1.6 Ubuntu 16.04.4 4 Core 4 GB /dev/vda 100GiB, /dev/vdc 300GiB

    注:

    • glusterfs-server1 作为集群的管理主机,用来执行安装任务。
    • 如需创建更大容量 GlusterFS 存储服务端,可挂载更大容量块存储磁盘至主机。
    • 两个节点的 Hostname 需要与主机规格的列表中一致,因为后续步骤的命令行中有匹配到 Hostname,若与以上列表不一致请注意在后续的命令中对应修改成实际的 Hostname。
    • GlusterFS 服务端将数据存储至 /dev/vdc 块设备中,/dev/vdc 必须是未经分区格式化的原始块设备。

    集群架构

    1. +-----------------------+ +-----------------------+
    2. | | | |
    3. | glusterfs-server1 |_______________| glusterfs-server2 |
    4. | heketi | | |
    5. | | | |
    6. +-----------------------+ +-----------------------+

    预备工作

    配置 root 登录

    1、参考如下步骤分别为 glusterfs-server1 和 glusterfs-server2 配置 root 用户登录:

    • 1.1. ubuntu 用户登录主机后切换 root 用户:
    1. ubuntu@glusterfs-server1:~$ sudo -i
    2. [sudo] password for ubuntu:
    3. root@glusterfs-server1:~#
    • 1.2. 设置 root 用户登录密钥:
    1. root@glusterfs-server1:~# passwd
    2. Enter new UNIX password:
    3. Retype new UNIX password:
    4. passwd: password updated successfully
    • 同上,在 glusterfs-server2 修改 root 密码。

    修改 hosts 文件

    2、参考如下步骤修改 glusterfs-server1 和 glusterfs-server2 的 hosts 文件:

    1. root@glusterfs-server1:~# vi /etc/hosts
    2. ...
    3. # hostname loopback address
    4. 172.20.1.5 glusterfs-server1
    5. 172.20.1.6 glusterfs-server2
    • 同上,在 glusterfs-server2 执行以上命令并修改 hosts。

    配置 SSH 免密登录

    3、以下为 glusterfs-server1 的 root 用户配置无密码登录至 glusterfs-server1 与 glusterfs-server2。

    • 3.1. 创建密钥,提示 “Enter passphrase” 时,直接回车键,口令即为空:
    1. root@glusterfs-server1:~# ssh-keygen
    2. ...
    • 3.2. 拷贝密钥到各个 GlusterFS 节点,按照提示输入密钥:
    1. root@glusterfs-server1:~# ssh-copy-id root@glusterfs-server1
    2. ...
    3. root@glusterfs-server1:~# ssh-copy-id root@glusterfs-server2
    4. ...
    • 3.3. 验证免密登录,即 glusterfs-server1 无需输入密码可以登录 glusterfs-server1 和 glusterfs-server2:
    1. root@glusterfs-server1:~# ssh root@glusterfs-server1
    2. root@glusterfs-server1:~# ssh root@glusterfs-server2

    开始安装

    安装 Glusterfs

    4、以下用 apt-get 软件包管理工具在 glusterfs-server1 安装 GlusterFS:

    1. root@glusterfs-server1:~# apt-get install software-properties-common
    2. root@glusterfs-server1:~# add-apt-repository ppa:gluster/glusterfs-3.12
    3. root@glusterfs-server1:~# apt-get update
    4. root@glusterfs-server1:~# apt-get install glusterfs-server -y
    • 同上,在 glusterfs-server2 执行以上命令安装 GlusterFS。待安装完成后分别在两个节点检查安装的 GlusterFS 版本:
    1. $ glusterfs -V
    2. glusterfs 3.12.12
    3. ...

    加载内核模块

    5、执行以下命令为 glusterfs-server1 加载必需的三个内核模块:

    1. root@glusterfs-server1:~# echo dm_thin_pool | sudo tee -a /etc/modules
    2. dm_thin_pool
    3. root@glusterfs-server1:~# echo dm_snapshot | sudo tee -a /etc/modules
    4. dm_snapshot
    5. root@glusterfs-server1:~# echo dm_mirror | sudo tee -a /etc/modules
    6. dm_mirror
    1. root@glusterfs-server1:~# apt-get -y install thin-provisioning-tools
    • 同上,在 glusterfs-server2 执行以上命令。

    创建 Glusterfs 集群

    6、参考如下步骤创建 GlusterFS 集群:

    1. root@glusterfs-server1:~# gluster peer probe glusterfs-server2
    2. peer probe: success.
    1. root@glusterfs-server2:~# gluster peer probe glusterfs-server1
    2. peer probe: success. Host glusterfs-server1 port 24007 already in peer list

    验证安装结果

    • 分别在 glusterfs-server1 和 glusterfs-server2 检查 GlusterFS 集群节点间的连接状态,若 State 显示 Peer in Cluster (Connected) 则说明 GlusterFS 集群已成功搭建:
    1. $ gluster peer status

    安装 Hekeit

    7、Heketi 是用来管理 GlusterFS 卷的生命周期的,并提供了一个 RESTful API 接口供 Kubernetes 调用,因为 GlusterFS 没有提供 API 调用的方式,所以我们借助 heketi,通过 Heketi,Kubernetes 可以动态配置 GlusterFS 卷。以下将介绍如何在 glusterfs-server1 安装 Heketi(v7.0.0)。

    • 7.1. 下载 Hekeit Installer:
    1. root@glusterfs-server1:~# wget https://github.com/heketi/heketi/releases/download/v7.0.0/heketi-v7.0.0.linux.amd64.tar.gz
    • 7.2. 解压并安装 Heketi:
    1. root@glusterfs-server1:~# tar -xf heketi-v7.0.0.linux.amd64.tar.gz
    2. root@glusterfs-server1:~# cd heketi/
    3. root@glusterfs-server1:~/heketi# cp heketi /usr/bin/
    4. root@glusterfs-server1:~/heketi# cp heketi-cli /usr/bin

    配置 Heketi

    8、参考如下步骤配置 Heketi:

    • 8.1. 将 Heketi 纳入 systemd 管理:
    1. root@glusterfs-server1:~# vi /lib/systemd/system/heketi.service
    2. [Unit]
    3. Description=Heketi Server
    4. [Service]
    5. Type=simple
    6. WorkingDirectory=/var/lib/heketi
    7. ExecStart=/usr/bin/heketi --config=/etc/heketi/heketi.json
    8. Restart=on-failure
    9. StandardOutput=syslog
    10. StandardError=syslog
    11. [Install]
    12. WantedBy=multi-user.target
    • 8.2. 创建文件夹:
    1. root@glusterfs-server1:~# mkdir -p /var/lib/heketi
    2. root@glusterfs-server1:~# mkdir -p /etc/heketi
    • 8.3. 创建 Heketi 配置文件:
    1. root@glusterfs-server1:~# vim /etc/heketi/heketi.json
    2. {
    3. "_port_comment": "Heketi Server Port Number",
    4. "port": "8080",
    5. "_use_auth": "Enable JWT authorization. Please enable for deployment",
    6. "use_auth": false,
    7. "_jwt": "Private keys for access",
    8. "jwt": {
    9. "_admin": "Admin has access to all APIs",
    10. "admin": {
    11. "key": "123456"
    12. },
    13. "_user": "User only has access to /volumes endpoint",
    14. "user": {
    15. "key": "123456"
    16. }
    17. },
    18. "_glusterfs_comment": "GlusterFS Configuration",
    19. "glusterfs": {
    20. "_executor_comment": [
    21. "Execute plugin. Possible choices: mock, ssh",
    22. "mock: This setting is used for testing and development.",
    23. " It will not send commands to any node.",
    24. "ssh: This setting will notify Heketi to ssh to the nodes.",
    25. " It will need the values in sshexec to be configured.",
    26. "kubernetes: Communicate with GlusterFS containers over",
    27. " Kubernetes exec api."
    28. ],
    29. "executor": "ssh",
    30. "_sshexec_comment": "SSH username and private key file information",
    31. "sshexec": {
    32. "keyfile": "/root/.ssh/id_rsa",
    33. "user": "root"
    34. },
    35. "_kubeexec_comment": "Kubernetes configuration",
    36. "kubeexec": {
    37. "host" :"https://kubernetes.host:8443",
    38. "cert" : "/path/to/crt.file",
    39. "insecure": false,
    40. "user": "kubernetes username",
    41. "password": "password for kubernetes user",
    42. "namespace": "OpenShift project or Kubernetes namespace",
    43. "fstab": "Optional: Specify fstab file on node. Default is /etc/fstab"
    44. },
    45. "_db_comment": "Database file name",
    46. "db": "/var/lib/heketi/heketi.db",
    47. "brick_max_size_gb" : 1024,
    48. "brick_min_size_gb" : 1,
    49. "max_bricks_per_volume" : 33,
    50. "_loglevel_comment": [
    51. "Set log level. Choices are:",
    52. " none, critical, error, warning, info, debug",
    53. "Default is warning"
    54. ],
    55. "loglevel" : "debug"
    56. }
    57. }

    启动Heketi

    9、在 glusterfs-server1 安装 Heketi 后,需要启动 Heketi,Heketi 的状态 “Active” 显示 active (running) ... 则说明成功启动:

    1. root@glusterfs-server1:~# systemctl start heketi
    2. root@glusterfs-server1:~# systemctl status heketi
    3. heketi.service - Heketi Server
    4. Loaded: loaded (/lib/systemd/system/heketi.service; disabled; vendor preset: enabled)
    5. Active: active (running) since Tue 2018-08-14 13:50:18 CST; 9ms ago
    6. Main PID: 6854 (heketi)
    7. Tasks: 4
    8. Memory: 1.3M
    9. CPU: 3ms
    10. CGroup: /system.slice/heketi.service
    11. └─6854 /usr/bin/heketi --config=/etc/heketi/heketi.json
    12. Aug 14 13:50:18 glusterfs-server1 systemd[1]: Started Heketi Server.
    1. root@glusterfs-server1:~# systemctl enable heketi
    2. Created symlink from /etc/systemd/system/multi-user.target.wants/heketi.service to /lib/systemd/system/heketi.service.

    编辑拓扑文件

    10、参考如下步骤编辑 Heketi 的拓扑文件,以下所有 IP 地址应替换为您安装环境的实际主机 IP 地址。GlusterFS 服务端将数据存储至 /dev/vdc 块设备中,以下 "/dev/vdc" 可按实际情况修改:

    1. root@glusterfs-server1:~# vim /etc/heketi/topology.json
    2. {
    3. "clusters": [
    4. {
    5. "nodes": [
    6. {
    7. "node": {
    8. "hostnames": {
    9. "manage": [
    10. "172.20.1.5"
    11. ],
    12. "storage": [
    13. "172.20.1.5"
    14. ]
    15. },
    16. "zone": 1
    17. },
    18. "devices": [
    19. "/dev/vdc"
    20. ]
    21. },
    22. {
    23. "node": {
    24. "hostnames": {
    25. "manage": [
    26. "172.20.1.6"
    27. ],
    28. "storage": [
    29. "172.20.1.6"
    30. ]
    31. },
    32. "zone": 1
    33. },
    34. "devices": [
    35. "/dev/vdc"
    36. ]
    37. }
    38. ]
    39. }
    40. ]
    41. }

    载入拓扑文件

    11、执行以下命令为 Heketi 载入拓扑文件:

    1. root@glusterfs-server1:~# export HEKETI_CLI_SERVER=http://localhost:8080
    2. root@glusterfs-server1:~# heketi-cli topology load --json=/etc/heketi/topology.json

    验证 Heketi 安装

    12、执行以下命令查看 Heketi 的安装信息:

    1. heketi-cli volume list --secret 123456 --user admin