zoukankan      html  css  js  c++  java
  • 在Kubernetes中部署GlusterFS+Heketi

    简介

    在上一篇《独立部署GlusterFS+Heketi实现Kubernetes共享存储》中,我们说明了如何手动部署GlusterFS+Heketi来提供Kubernetes的共享存储。

    然而,因为Heketi无法集群部署,所以这种部署方式中,Heketi是一个单点。要尽可能的消除这个单点,一种方式是直接将Heketi部署到Kubernetes集群,复用Deployment的特性来确保heketi容器可用。

    Gluster-Kubernetes

    其实如果想直接将heketi和glusterfs直接部署到kubernetes中,已经有开源软件帮我们做了这些事情。这就是gluster-kuberntes项目。

    但是我们这篇文档并不打算展开来说Gluster-Kubernetes项目,如果对该项目有兴趣,可以自行查阅相关文档。本篇文档将通过手动在kubernetes集群中部署一个Glusterfs+Heketi来展示其是如何在kubernetes中运行的。

    部署

    环境准备

    主机名 系统 ip地址 角色
    ops-k8s-175 ubuntu16.04 192.168.75.175 k8s-node,glusterfs
    ops-k8s-176 ubuntu16.04 192.168.75.176 k8s-node,glusterfs
    ops-k8s-177 ubuntu16.04 192.168.75.177 k8s-node,glusterfs
    ops-k8s-178 ubuntu16.04 192.168.175.178 k8s-node,glusterfs

    下载相关文件

    其实heketi官方在其源码包及其heketi-client的二进制包中都包含了将glusterfs及heketi部署到kubernetes的相关示例文件。github上地址如下:https://github.com/heketi/heketi/tree/master/extras/kubernetes

    我们可以直接将其全部下载到本地:

    wget https://raw.githubusercontent.com/heketi/heketi/master/extras/kubernetes/glusterfs-daemonset.json
    wget https://raw.githubusercontent.com/heketi/heketi/master/extras/kubernetes/heketi-bootstrap.json
    wget https://raw.githubusercontent.com/heketi/heketi/master/extras/kubernetes/heketi-deployment.json
    wget https://raw.githubusercontent.com/heketi/heketi/master/extras/kubernetes/heketi-service-account.json
    wget https://raw.githubusercontent.com/heketi/heketi/master/extras/kubernetes/heketi-start.sh
    wget https://raw.githubusercontent.com/heketi/heketi/master/extras/kubernetes/heketi.json
    wget https://raw.githubusercontent.com/heketi/heketi/master/extras/kubernetes/topology-sample.json
    

    部署glusterfs

    在上面下载的文件中,glusterfs-daemonset.json就是用于部署glusterfs的配置文件,将glusterfs作为daemonset的方式运行。可以通过将指定stoargenode=glusterfs标签来选择用于部署glusterfs的节点:

    kubectl label node 192.168.75.175 storagenode=glusterfs
    kubectl label node 192.168.75.176 storagenode=glusterfs
    kubectl label node 192.168.75.177 storagenode=glusterfs
    kubectl label node 192.168.75.178 storagenode=glusterfs
    

    修改glusterfs-daemonset.json使用的image为gluster/gluster-centos:gluster4u0_centos7,然后执行该json文件:

    kubectl create -f glusterfs-daemonset.json
    

    即可完成glusterfs部署

    部署heketi server端

    部署heketi之前,需要先为heketi创建serviceaccount:

    kubectl create -f heketi-service-account.json
    

    然后为该serviceaccount授权,为其绑定相应的权限来控制gluster的pod,执行如下操作:

    kubectl create clusterrolebinding heketi-gluster-admin --clusterrole=edit --serviceaccount=default:heketi-service-account
    
    

    接着,创建一个Kubernetes secret来保存我们Heketi实例的配置。必须将配置文件的执行程序设置为 kubernetes才能让Heketi server控制gluster pod。

    heketi.json的配置修改如下:

    ......
    #打开认证
      "use_auth": true,
    ......
    #修改admin用户的key
          "key": "adminkey"
    ......
    #修改执行插件为kubernetes
        "executor": "kubernetes",
    ......
    #备份heketi数据库
        "backup_db_to_kube_secret": true
    

    执行如下操作,将heketi.json创建为kubernetes的secret:

    kubectl create secret generic heketi-config-secret --from-file=./heketi.json
    

    接着部署heketi的运行容器,配置文件为heketi-bootstrap.json,需要修改image为heketi/heketi:7

    kubectl create -f heketi-bootstrap.json
    

    通过创建ingress的方式将heketi暴露出来:

    # cat heketi.ingress.yaml 
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      annotations:
        kubernetes.io/ingress.class: traefik
      name: heketi
    spec:
      rules:
      - host: heketi.breezey.io
        http:
          paths:
          - path: /
            backend:
              serviceName: deploy-heketi
              servicePort: 8080
              
              
    # kubectl create -f hekti.ingress.yaml
    

    至此,完成heketi server端部署

    配置heketi client

    需要说明的是,heketi的客户端版本需要与server端对应,server端我们使用的是7.0,所以客户端也需要下载7.0版本:

    wget https://github.com/heketi/heketi/releases/download/v7.0.0/heketi-client-v7.0.0.linux.amd64.tar.gz
    

    修改topology-sample.json文件,如下:

    {
        "clusters": [
            {
                "nodes": [
                    {
                        "node": {
                            "hostnames": {
                                "manage": [
                                    "192.168.75.175"
                                ],
                                "storage": [
                                    "192.168.75.175"
                                ]
                            },
                            "zone": 1
                        },
                        "devices": [
                            "/dev/vda2"
                        ]
                    },
                    {
                        "node": {
                            "hostnames": {
                                "manage": [
                                    "192.168.75.176"
                                ],
                                "storage": [
                                    "192.168.75.176"
                                ]
                            },
                            "zone": 1
                        },
                        "devices": [
                            "/dev/vda2"
                        ]
                    },
                    {
                        "node": {
                            "hostnames": {
                                "manage": [
                                    "192.168.75.177"
                                ],
                                "storage": [
                                    "192.168.75.177"
                                ]
                            },
                            "zone": 1
                        },
                        "devices": [
                            "/dev/vda2"
                        ]
                    },
                    {
                        "node": {
                            "hostnames": {
                                "manage": [
                                    "192.168.75.178"
                                ],
                                "storage": [
                                    "192.168.75.178"
                                ]
                            },
                            "zone": 1
                        },
                        "devices": [
                            "/dev/vda2"
                        ]
                    }               
                ]
            }
        ]
    }
    

    创建集群:

    heketi-cli  topology load --json topology-sample.json
    
    

    至此,完成了glusterfs和heketi在kubernetes中的部署,具体的使用可参考《独立部署GlusterFS+Heketi实现Kubernetes共享存储》

  • 相关阅读:
    关于JAVA中RSA加签解签,私钥加密公钥解密和公钥加密私钥解密代码详解
    Vue使用总结
    使用ReflectionToStringBuilder实现toString方法
    vue 发送短信验证码倒计时
    个人信息打码
    Token注解防止表单的重复提交
    html选择图片后直接预览
    从分布式一致性谈到CAP理论、BASE理论
    node.js 下依赖Express 实现post 4种方式提交参数
    web前端学习笔记(CSS变化宽度布局)
  • 原文地址:https://www.cnblogs.com/breezey/p/9589047.html
Copyright © 2011-2022 走看看