Bruce Blog Bruce Blog
首页
  • CentOS
  • Ubuntu-Debian
  • 系统网络
  • 系统辅助工具
  • MySQL
  • Redis
  • Mongodb
  • Docker基础
  • Container基础
  • Kubernetes

    • Kubernetes基础
    • Kubernetes辅助
  • Container-Network
  • Jenkins
  • Gitlab
  • ArgoCD
  • Ansible
  • Terraform
  • AWS
  • MQ
  • NGINX
  • JumpServer
  • 基础
  • 函数模块
  • 框架
  • 基础

    • Golang环境
    • 语法
    • 数据类型与运算符
    • 分支语句
    • 循环语句
    • 数组
    • 切片
    • Map
    • String
    • 函数
    • 包的管理
    • 指针
    • 结构体
    • Go语言中的OOP
    • 方法和接口
    • 错误处理
  • Go进阶

    • Go进阶
  • Go框架

    • Go框架
  • Golang辅助

    • Golang辅助
  • CSS
  • HTML
  • JavaScript
  • 前端辅助
  • 常用命令
  • 性能监控工具
  • Windows下Docker使用
  • 日常学习
  • 其他导航

Bruce Tao

运维界的该溜子
首页
  • CentOS
  • Ubuntu-Debian
  • 系统网络
  • 系统辅助工具
  • MySQL
  • Redis
  • Mongodb
  • Docker基础
  • Container基础
  • Kubernetes

    • Kubernetes基础
    • Kubernetes辅助
  • Container-Network
  • Jenkins
  • Gitlab
  • ArgoCD
  • Ansible
  • Terraform
  • AWS
  • MQ
  • NGINX
  • JumpServer
  • 基础
  • 函数模块
  • 框架
  • 基础

    • Golang环境
    • 语法
    • 数据类型与运算符
    • 分支语句
    • 循环语句
    • 数组
    • 切片
    • Map
    • String
    • 函数
    • 包的管理
    • 指针
    • 结构体
    • Go语言中的OOP
    • 方法和接口
    • 错误处理
  • Go进阶

    • Go进阶
  • Go框架

    • Go框架
  • Golang辅助

    • Golang辅助
  • CSS
  • HTML
  • JavaScript
  • 前端辅助
  • 常用命令
  • 性能监控工具
  • Windows下Docker使用
  • 日常学习
  • 其他导航
  • Docker

  • Container

  • Kubernetes

    • Kubernetes基础

    • Kubernetes辅助

      • terminating的pod、pv、pvc无法删除解决方法
      • kubernetes部署minio对象存储
    • Container-Network

    • Containers
    • Kubernetes
    • Kubernetes辅助
    Bruce
    2023-01-18
    目录

    kubernetes部署minio对象存储

    # 1.Kubernetes部署MinIO

    Kubernetes的部署和状态集提供了在独立,分布式模式下部署MinIO服务器的完美平台. 在Kubernetes上部署MinIO有多种选择,可以选择最适合的方式来进行部署.

    image-20210324010628791

    参考:https://github.com/minio/charts

    # 部署前提条件:
    # 1、需要准备k8s集群,并且包含足够多的节点,如4个节点的集群
    [root@jenkins ~]# kubectl get nodes
    NAME          STATUS   ROLES    AGE   VERSION
    k8s-master1   Ready    master   89d   v1.18.8
    k8s-master2   Ready    master   89d   v1.18.8
    k8s-master3   Ready    master   89d   v1.18.8
    k8s-node1     Ready    <none>   89d   v1.18.8
    
    1
    2
    3
    4
    5
    6
    # 2、需要准备可用的动态存储(longhorn、rook、openebs等)
    [root@jenkins ~]# kubectl get sc
    NAME                 PROVISIONER          RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
    longhorn (default)   driver.longhorn.io   Delete          Immediate           true                   89d
    
    1
    2
    3

    # 2.独立模式部署

    # 基于官方helm chat进行部署,安装 MinIO chart
    helm repo add minio https://helm.min.io/
    
    1
    # 独立模式部署minio,使用deployment方式部署单个pod
    # 开启service端口部署
    helm install minio \
      --namespace minio --create-namespace \
      --set accessKey=minio,secretKey=minio123 \
      --set mode=standalone \
      --set service.type=NodePort \
      --set persistence.enabled=true \
      --set persistence.size=10Gi \
      --set persistence.storageClass=longhorn \
      minio/minio
      
    # 开启ingress部署
    helm install minio \
      --namespace spinnaker \
      --set accessKey=minio,secretKey=minio123 \
      --set mode=standalone \
      --set service.enabled=true \
      --set ingress.enabled=true \
      --set ingress.annotations."kubernetes\.io/ingress\.class"=nginx \
      --set ingress.enabled=true \
      --set ingress.'hosts[0]'=minio.devops.site \
      --set persistence.enabled=true \
      --set persistence.size=100Gi \
      --set persistence.storageClass=course-nfs-storage \
      minio/minio
      
      helm list -n spinnaker
      kubectl get pods,svc,ingress -n spinnaker
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    # 查看创建的资源
    [root@jenkins ~]# kubectl -n minio get deploy
    NAME    READY   UP-TO-DATE   AVAILABLE   AGE
    minio   1/1     1            1           12m
    
    [root@jenkins ~]# kubectl -n minio get pods
    NAME                     READY   STATUS    RESTARTS   AGE
    minio-76dcf6b46c-6lm8c   1/1     Running   0          12m
    
    [root@jenkins minio]# kubectl -n minio get pvc
    NAME    STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    minio   Bound    pvc-2f54ab9b-ed5e-4a4d-b528-87be85bf8e6a   10Gi       RWO            longhorn       6m44s
    
    [root@jenkins ~]# kubectl -n minio get svc
    NAME    TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
    minio   NodePort   10.103.145.126   <none>        9000:32000/TCP   12m
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    # 浏览器访问minio UI

    image-20210324011004759

    # 3.分布式模式部署

    # 分布式模式部署minio,使用statefulset模式部署多个pod并分布在不同节点
    helm install minio \
      --namespace minio --create-namespace \
      --set accessKey=minio,secretKey=minio123 \
      --set mode=distributed \
      --set replicas=4 \
      --set service.type=NodePort \
      --set persistence.size=10Gi \
      --set persistence.storageClass=longhorn \
      minio/minio
    
    1
    2
    3
    4
    5
    6
    7
    8
    9

    说明:独立模式下replicas参数不生效,仅对分布式模式生效, 可选值 4 <= x <= 16

    # 查看创建的资源
    [root@jenkins ~]# kubectl -n minio get sts
    NAME    READY   AGE
    minio   4/4     25m
    
    [root@jenkins ~]# kubectl -n minio get pods -o wide
    NAME      READY   STATUS    RESTARTS   AGE   IP                NODE          NOMINATED NODE   READINESS GATES
    minio-0   1/1     Running   0          26m   100.86.135.210    k8s-master3   <none>           <none>
    minio-1   1/1     Running   0          26m   100.105.225.44    k8s-master1   <none>           <none>
    minio-2   1/1     Running   0          26m   100.111.156.179   k8s-node1     <none>           <none>
    minio-3   1/1     Running   0          26m   100.87.223.56     k8s-master2   <none>           <none>
    
    [root@jenkins ~]# kubectl -n minio get pvc
    NAME             STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    export-minio-0   Bound    pvc-b48cacbb-d5ab-41d9-8498-6bfb9a385baf   10Gi       RWO            longhorn       25m
    export-minio-1   Bound    pvc-67e9bb47-1f89-4cd8-ac95-ac974941fc0c   10Gi       RWO            longhorn       25m
    export-minio-2   Bound    pvc-eb895874-9b96-49c4-8259-b6aefb171bef   10Gi       RWO            longhorn       25m
    export-minio-3   Bound    pvc-959eaf35-d7c7-46a5-8a1f-487203c190bf   10Gi       RWO            longhorn       25m
    
    [root@jenkins ~]# kubectl -n minio get svc
    NAME        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
    minio       NodePort    10.106.114.111   <none>        9000:32000/TCP   25m
    minio-svc   ClusterIP   None             <none>        9000/TCP         25m
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    # 在kubesphere容器平台中查看部署的minio资源

    image-20210324011236479

    # 4.清理minio集群

    helm -n minio uninstall minio
    
    1

    分布式模式下需要手动清理pvc和pv

    kubectl -n minio delete pvc --all 
    
    1

    # 5.Operator方式部署

    MinIO Operator为Kubernetes带来了对MinIO,图形控制台和加密的原生支持.

    参考:https://github.com/minio/operator

    # kubectl安装 krew插件
    (
      set -x; cd "$(mktemp -d)" &&
      curl -fsSLO "https://github.com/kubernetes-sigs/krew/releases/latest/download/krew.tar.gz" &&
      tar zxvf krew.tar.gz &&
      KREW=https://bruce-log-img.oss-cn-shanghai.aliyuncs.com/krew-"$(uname | tr '[:upper:]' '[:lower:]')_$(uname -m | sed -e 's/x86_64/amd64/' -e 's/arm.*$/arm/')" &&
      "$KREW" install krew
    )
    
    1
    2
    3
    4
    5
    6
    7
    # 添加环境变量
    echo 'export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"' >> /root/.bashrc
    
    1
    # 安装minio插件
    kubectl krew install minio
    
    1

    MinIO Operator提供MinIO租户创建,管理,升级,池添加等功能.Operator可以控制和管理多个MinIO租户.

    首先,初始化MinIO Operator部署.这是一个一次性的过程.

    # kubectl minio初始化,一旦创建了MinIO Operator,便可以继续进行Tenant创建.
    [root@jenkins ~]# kubectl minio init
    
    1
    # 查看创建的operator
    [root@jenkins ~]# kubectl get pods |grep minio
    minio-operator-78b4f47796-rpnbt   1/1     Running   0          2m35s
    
    1
    2
    # 生成tenant yaml文件,需要提前准备可用的storage-class,指定4个server,每个server一个volumes,共40Gi大小.
    kubectl minio tenant create --name tenant1 \
       --namespace tenant1-ns \
       --storage-class longhorn \ 
       --servers 4 --volumes 4 --capacity 40Gi -o > tenant.yaml
    
    1
    2
    3
    4
    # 由于默认console镜像版本较低,存在bug,修改tenant.yaml文件,将console镜像修改为新版本:
    [root@jenkins minio]# cat tenant.yaml  |grep image: | grep console
        image: minio/console:v0.4.6
    
    1
    2
    # 部署yaml文件
    kubectl apply -f tenant.yaml
    
    1
    # 查看创建的资源
    [root@jenkins minio]# kubectl -n tenant1-ns get pods
    NAME                              READY   STATUS    RESTARTS   AGE
    tenant1-console-bccb4b76c-89nqh   1/1     Running   0          23m
    tenant1-console-bccb4b76c-vdfpx   1/1     Running   0          23m
    tenant1-zone-0-0                  1/1     Running   0          25m
    tenant1-zone-0-1                  1/1     Running   0          25m
    tenant1-zone-0-2                  1/1     Running   0          25m
    tenant1-zone-0-3                  1/1     Running   0          25m
    
    1
    2
    3
    4
    5
    6
    7
    8

    修改service类型为NodePort,方便访问minio UI以及tenant-console UI:

    kubectl -n tenant1-ns patch svc minio -p '{"spec": {"type": "NodePort"}}'
    kubectl -n tenant1-ns patch svc tenant1-console -p '{"spec": {"type": "NodePort"}}'
    
    1
    2
    # 查看service,记录minio及tenant1-console中的nodeport
    [root@jenkins minio]# kubectl -n tenant1-ns get svc
    NAME              TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                         AGE
    minio             NodePort    10.98.66.158     <none>        443:30143/TCP                   26m
    tenant1-console   NodePort    10.101.229.165   <none>        9090:30797/TCP,9443:32372/TCP   23m
    tenant1-hl        ClusterIP   None             <none>        9000/TCP                        26m
    
    1
    2
    3
    4
    5
    # 查看minio UI登录信息
    # cat tenant.yaml
    
    ......
    ---
    
    apiVersion: v1
    data:
      accesskey: ZWM1ZTNmMmYtNzc0NS00MWMwLTlkN2MtODFlMWFkYTczYWU1
      secretkey: NWY1MzYwYmQtNjBlZS00MjY5LTkyYTItYzk4NTNlZDc3Yjk5
    kind: Secret
    metadata:
      creationTimestamp: null
      name: tenant1-creds-secret
      namespace: tenant1-ns
    
    ---
    
    apiVersion: v1
    data:
      CONSOLE_ACCESS_KEY: NjEzNjcyMjAtMDg3ZS00Zjk0LWJkY2QtOWRhODM4YmJmOTE5
      CONSOLE_HMAC_JWT_SECRET: NmEwMWE2N2EtYzM1MS00ZmFkLTkxMDEtMTc1MTBkZmI2ZmU4
      CONSOLE_PBKDF_PASSPHRASE: ZDExYjY2MjAtMWZlNS00Y2ZiLWFlNjUtYWUxZjBmZWRhN2Y1
      CONSOLE_PBKDF_SALT: ZmRiZmU5ZmItMWExZi00MmU5LThkNWEtYzJiYWExNmJlN2Jk
      CONSOLE_SECRET_KEY: YWVkZTVjMGYtZDMyMS00MDkxLWFkNDYtMTg3YmNlYWQ3Yzlj
    kind: Secret
    metadata:
      creationTimestamp: null
      name: tenant1-console-secret
      namespace: tenant1-ns
    ......
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30

    将tenant1-creds-secret中accesskey及secretkey解码

    echo ZWM1ZTNmMmYtNzc0NS00MWMwLTlkN2MtODFl-e MWFkYTczYWU1 | base64 -d  
    echo NWY1MzYwYmQtNjBlZS00MjY5LTkyYTItYzk4NTNlZDc3Yjk5 | base64 -d  
    
    1
    2

    将tenant1-console-secret中CONSOLE_ACCESS_KEY及CONSOLE_SECRET_KEY解码

    echo NjEzNjcyMjAtMDg3ZS00Zjk0LWJkY2QtOWRhODM4YmJmOTE5 | base64 -d  
    echo YWVkZTVjMGYtZDMyMS00MDkxLWFkNDYtMTg3YmNlYWQ3Yzlj | base64 -d v
    
    1
    2

    使用nodeport访问minio UI,使用https方式:

    image-20210324011903268

    验证创建bucket

    image-20210324011920808

    使用nodeport访问tenant-console UI,使用https方式:

    image-20230118115916381

    # 6.minio扩容

    # 可以使用kubectl minio插件向租户添加容量,如下所示
    kubectl minio tenant expand --name tenant1 --servers 8 --volumes 32 --capacity 32Ti
    
    1

    这将为租户增加32个驱动器,这些驱动器均匀分布在8台服务器上tenant1,并具有32Ti的额外容量.

    # 清理operator
    [root@jenkins jenkins]#  kubectl minio tenant delete --name tenant1 -n tenant1-ns
    
    1
    上次更新: 2024/04/09, 16:48:42
    terminating的pod、pv、pvc无法删除解决方法
    Container-Network

    ← terminating的pod、pv、pvc无法删除解决方法 Container-Network→

    最近更新
    01
    AWS NAT-NetWork-Firwalld配置(一)
    04-09
    02
    AWS NAT-NetWork-Firwalld配置(二)
    04-09
    03
    Jenkins-Argocd CICD-下
    01-17
    更多文章>
    Theme by Vdoing | Copyright © 2019-2024 Bruce Tao Blog Space | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式