kubernetes 部署 heketi+ glusterfs + mongodb 问题排坑

首先声明, 这个是我在看kubernetes指南时,根据书本做实验时遇到的问题。 有经验的大佬请随便看一下,因为这并不一定是解决你的问题的方法。
这个问题烦了我一下午,国内没有搜到解决这个问题的方法。科学上网后参考其他人贴出的一些方法,解决了此问题。这里贴出我的解决方法和思路。


搭建过程就不说了, 网上有很多。
这是我的topology.json

{
  "clusters": [
    {
      "nodes": [
        {
          "node": {
            "hostnames": {
              "manage": [
                "k8s-slave-0"
              ],
              "storage": [
                "192.168.96.129"
              ]
            },
            "zone": 1
          },
          "devices": [
            "/dev/sdb"
          ]
        },
        {
          "node": {
            "hostnames": {
              "manage": [
                "k8s-slave-1"
              ],
              "storage": [
                "192.168.96.130"
              ]
            },
            "zone": 1
          },
          "devices": [
            "/dev/sdb"
          ]
        },
        {
          "node": {
            "hostnames": {
              "manage": [
                "k8s-slave-2"
              ],
              "storage": [
                "192.168.96.131"
              ]
            },
            "zone": 1
          },
          "devices": [
            "/dev/sdb"
          ]
        }
      ]
    }
  ]
}


执行添加gluster节点时报错如下

Creating cluster ... ID: 7675c678602c6907d4c6c259b74f732e
	Allowing file volumes on cluster.
	Allowing block volumes on cluster.
	Creating node k8s-slave-0 ... Unable to create node: New Node doesn't have glusterd running
	Creating node k8s-slave-1 ... Unable to create node: New Node doesn't have glusterd running
	Creating node k8s-slave-2 ... Unable to create node: New Node doesn't have glusterd running

查看 pod日志 kubectl logs deploy-heketi-68d4457cd-2wzfz -f 。
日志显示无法获取pod list

[kubeexec] ERROR 2019/01/20 13:24:12 heketi/pkg/remoteexec/kube/target.go:134:kube.TargetDaemonSet.GetTargetPod: pods is forbidden: User "system:serviceaccount:default:heketi-service-account" cannot list resource "pods" in API group "" in the namespace "default"

查阅资料发现, heketi需要对k8s集群做一些操作, 而这些操作需要放权, 书上仅添加ServiceAccount是不够的,还需要添加对应的role。
创建role 并绑定到 ServiceAccount

kubectl create clusterrole foo --verb=get,list,watch --resource=pods,pods/status,pods/exec

再次执行gluster添加命令,观察日志

[kubeexec] ERROR 2019/01/20 13:27:12 heketi/pkg/remoteexec/kube/exec.go:85:kube.ExecCommands: Failed to run command [systemctl status glusterd] on [pod:glusterfs-rfslk c:glusterfs ns:default (from host:k8s-slave-0 selector:glusterfs-node)]: Err[pods "glusterfs-rfslk" is forbidden: User "system:serviceaccount:default:heketi-service-account" cannot create resource "pods/exec" in API group "" in the namespace "default"]: Stdout []: Stderr []

日志中提示 cannot create resource “pods/exec” , 尝试添加create权限

kubectl create clusterrole foo --verb=get,list,watch,create --resource=pods,pods/status,pods/exec

再次执行gluster添加命令, 成功添加

[root@deploy-heketi-68d4457cd-2wzfz heketi]# heketi-cli topology load --json=topology.json 
Creating cluster ... ID: b78e39219263f7838f58a5652275ab34
	Allowing file volumes on cluster.
	Allowing block volumes on cluster.
	Creating node k8s-slave-0 ... ID: c82ddde257c4a6fa61c01969ff82b77a
		Adding device /dev/sdb ... OK
	Creating node k8s-slave-1 ... ID: c1fc07eb7f25fe9e1f10f55fb15ae01d
		Adding device /dev/sdb ... OK
	Creating node k8s-slave-2 ... ID: a350e7a4055785789844fdb685ad8536
		Adding device /dev/sdb ... OK

需要pv的pod一直申请不成功,

查看 该pod绑定的 pvc事件 , 显示 failed to create volume: failed to create volume: sed: can’t read /var/lib/heketi/fstab: No such file or directory 需要pv的pod一直申请不成功, 查看 该pod绑定的 pvc事件 , 显示 failed to create volume: failed to create volume: sed: can’t read /var/lib/heketi/fstab: No such file or directory

failed to create volume: failed to create volume: sed: can't read /var/lib/heketi/fstab: No such file or directory

解决: 导致这个问题的根本原因没有找到, 我的解决方法是添加提示确实的文件,即/var/lib/heketi/fstab。 注意 ,这个文件是添加到部署 glusterfs的机器上, 不是heketi的容器中。


pvc 申请不成功显示没有空间或其他错误(这里楼主没有保存错误信息), 手动申请pvc, 执行命令

#到heketi的容器中
kuberctl exec -ti heketi bash
#执行申请卷的命令,查看报错
[root@deploy-heketi-68d4457cd-8q742 heketi]# heketi-cli volume create  --size 1
Error: /usr/sbin/modprobe failed: 1
  thin: Required device-mapper target(s) not detected in your kernel.
  Run `lvcreate --help' for more information.

提示缺少必要的模块,手动为所有部署 glusterfs的节点加载模块

[root@k8s-slave-0 heketi-data]# modprobe dm_thin_pool
[root@k8s-slave-0 heketi-data]# lsmod  | grep thin
dm_thin_pool           69632  0 
dm_persistent_data     69632  1 dm_thin_pool
dm_bio_prison          20480  1 dm_thin_pool
dm_mod                126976  9 dm_thin_pool,dm_log,dm_mirror,dm_bufio

再次观察发现已经正常。 (参考这篇文章,https://www.jianshu.com/p/8ede72534a69)

mongodb集群添加不成功

查看sidecar的日志,报错如下

'failed to connect to server [10.44.0.3:27017] on first connect [MongoError: connect ECONNREFUSED 10.44.0.3:27017]' }

修改mongodb的 statefulset 文件, 将mongodb的启动命令加上 监听所有ip的参数

 containers:
      - name: mongo
        image: mongo
        command:
        - mongod
        - "--replSet"
        - rs0
        - "--smallfiles"
        - "--noprealloc"
        - "--bind_ip_all"

再次查看,问题解决。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用 Kubernetes 部署 GlusterFS,需要进行以下步骤: 1. 安装 GlusterFSKubernetes 集群中的每个节点上安装 GlusterFS,可以使用以下命令: ```shell $ sudo apt-get install software-properties-common -y $ sudo add-apt-repository ppa:gluster/glusterfs-7 -y $ sudo apt-get update $ sudo apt-get install glusterfs-server -y ``` 2. 创建 GlusterFS 卷 可以使用 GlusterFS 的命令行工具 `gluster` 创建卷。首先需要创建一个 GlusterFS 集群,可以使用以下命令: ```shell $ sudo gluster peer probe <node1> $ sudo gluster peer probe <node2> ``` 其中,`<node1>` 和 `<node2>` 是 Kubernetes 集群中的两个节点。然后可以使用以下命令创建 GlusterFS 卷: ```shell $ sudo gluster volume create <volume-name> replica 2 <node1>:/data/glusterfs <node2>:/data/glusterfs force ``` 其中,`<volume-name>` 是卷的名称,`<node1>` 和 `<node2>` 是 GlusterFS 集群中的两个节点,`/data/glusterfs` 是 GlusterFS 的存储目录。 3. 创建 Kubernetes 存储类 可以使用以下 YAML 文件创建 Kubernetes 存储类: ```yaml kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: glusterfs-storage provisioner: kubernetes.io/glusterfs parameters: resturl: "http://<node1>:24007" restauthenabled: "false" restuser: "" secretNamespace: "default" secretName: "heketi-secret" ``` 其中,`<node1>` 是 GlusterFS 集群中的一个节点。 4. 创建 Kubernetes PV 和 PVC 可以使用以下 YAML 文件创建 Kubernetes PV 和 PVC: ```yaml kind: PersistentVolume apiVersion: v1 metadata: name: glusterfs-pv spec: storageClassName: glusterfs-storage capacity: storage: 1Gi accessModes: - ReadWriteMany glusterfs: endpoints: glusterfs-cluster path: <volume-name> readOnly: false --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: glusterfs-pvc spec: storageClassName: glusterfs-storage accessModes: - ReadWriteMany resources: requests: storage: 1Gi ``` 其中,`<volume-name>` 是 GlusterFS 卷的名称。 5. 使用 PVC 创建 Pod 可以使用以下 YAML 文件创建 Kubernetes Pod: ```yaml apiVersion: v1 kind: Pod metadata: name: glusterfs-pod spec: containers: - name: glusterfs-container image: nginx volumeMounts: - name: glusterfs-volume mountPath: /var/www/html volumes: - name: glusterfs-volume persistentVolumeClaim: claimName: glusterfs-pvc ``` 这个 Pod 会自动挂载 GlusterFS 存储卷到 `/var/www/html` 目录。 以上就是使用 Kubernetes 部署 GlusterFS 的步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值