• MinIO对接k8s使用


    文档地址:https://github.com/minio/operator/blob/master/README.md
    https://docs.min.io/minio/k8s/deployment/deploy-minio-operator.html

    MinIO是Kubernetes原生的高性能对象存储,具有S3兼容的API。MinIO Kubernetes运营商支持将MinIO租户部署到私有和公共云基础设施(“混合”云)。

    结构

    每个MinIO租户代表Kubernetes集群中的一个独立MinIO对象存储。下图描述了部署到Kubernetes的MinIO租户的体系结构:

    MinIO提供了多种访问和管理MinIO租户的方法:

    MinIO Console

    MinIO控制台提供了一个图形用户界面(GUI),用于与MinIO租户进行交互。默认情况下,MinIO操作员为每个租户安装和配置控制台。

    MinIO租户的管理员可以通过控制台执行各种任务,包括用户创建、策略配置和bucket复制。控制台还提供租户运行状况、使用情况和恢复状态的高级视图。

    MinIO Operator and kubectl Plugin

    MinIO Operator 扩展了Kubernetes API,以支持在Kubernetes集群中作为租户部署特定于MinIO的资源。
    MinIO-kubectl MinIO插件包装了运营商,通过kubectl命令行工具为Kubernetes集群中部署和管理MinIO租户提供了一个简化的界面。

    Deploy the MinIO Operator and Create a Tenant

    此过程将安装MinIO操作符并创建一个4节点MinIO租户,以支持Kubernetes群集中的对象存储操作。

    k8s版本要求

    Kubernetes 1.19 or Later,必须将Kubernetes群集升级到1.19.0或更高版本才能使用Operator v4.0.0+。

    Starting with Operator v4.0.0, MinIO requires Kubernetes version 1.19.0 or later. Previous versions of the Operator supported Kubernetes 1.17.0 or later. You must upgrade your Kubernetes cluster to 1.19.0 or later to use Operator v4.0.0+.

    此过程假设主机安装了kubectl,并配置了对目标Kubernetes群集的访问权限。

    安装k8s插件 krew

    # yum -y install git
    # (复制如下命令执行,包含括号)
    (
      set -x; cd "$(mktemp -d)" &&
      OS="$(uname | tr '[:upper:]' '[:lower:]')" &&
      ARCH="$(uname -m | sed -e 's/x86_64/amd64/' -e 's/\(arm\)\(64\)\?.*/\1\2/' -e 's/aarch64$/arm64/')" &&
      KREW="krew-${OS}_${ARCH}" &&
      curl -fsSLO "https://github.com/kubernetes-sigs/krew/releases/latest/download/${KREW}.tar.gz" &&
      tar zxvf "${KREW}.tar.gz" &&
      ./"${KREW}" install krew
    )
    
    # vim .bashrc
    export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
    
    # 运行kubectl krew检查安装情况
    
    

    k8s中创建名称空间,MinIO Tenant Namespace

    MinIO支持每个命名空间不超过一个MinIO租户。下面的kubectl命令为MinIO租户创建一个新的名称空间。MinIO Operator Console支持在租户创建过程中创建名称空间。

    # kubectl create namespace minio-tenant
    namespace/minio-tenant created
    

    租户存储类

    作为部署MinIO租户的一部分,MinIO Kubernetes运营商会自动生成持久卷声明(PVC)。

    该插件默认使用默认的Kubernetes存储类创建每个PVC。如果默认存储类无法支持生成的PVC,租户可能无法部署。

    MinIO租户要求StorageClass将volumeBindingMode设置为WaitForFirstConsumer。默认的StorageClass可能会使用立即设置,这可能会在PVC绑定过程中导致复杂性。MinIO强烈建议创建一个定制StorageClass,供支持MinIO租户的PV使用。

    以下StorageClass对象包含支持使用MinIO DirectCSI托管驱动器 的MinIO租户的适当字段:

    这里是用MinIO DirectCSI托管驱动器创建的StorageClass

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
        name: direct-csi-min-io
    provisioner: kubernetes.io/no-provisioner
    volumeBindingMode: WaitForFirstConsumer
    

    租户持久卷

    MinIO运营商为租户中的每个卷生成一个持久卷声明(PVC),再加上两个PVC,以支持收集租户指标和日志。集群必须有足够的持久卷,以满足每个PVC的容量要求,以便租户正确启动。例如,部署一个拥有16个卷的租户需要18(16+2)。如果每个PVC要求1TB的容量,则每个PV还必须提供至少1TB的容量。

    MinIO建议使用MinIO DirectCSI驱动程序从本地连接的驱动器自动配置持久卷。本过程假设安装并配置了MinIO DirectCSI。
    对于无法部署MinIO DirectCSI的群集,请使用本地持久卷。以下示例YAML描述了一个本地持久卷:

    apiVersion: v1
    kind: PersistentVolume
    metadata:
       name: <PV-NAME>
    spec:
       capacity:
          storage: 1Ti
       volumeMode: Filesystem
       accessModes:
       - ReadWriteOnce
       persistentVolumeReclaimPolicy: Retain
       storageClassName: local-storage
       local:
          path: </mnt/disks/ssd1>
       nodeAffinity:
          required:
             nodeSelectorTerms:
             - matchExpressions:
                - key: kubernetes.io/hostname
                  operator: In
                  values:
                  - <NODE-NAME>
    

    将括号<VALUE>中的值替换为本地驱动器的适当值。

    通过将租户中minio服务器吊舱的数量乘以每个节点的驱动器数量,可以估计PVC的数量。例如,每个节点有4个驱动器的4节点租户需要16个PVC,因此需要16个PV。

    MinIO强烈建议使用以下CSI驱动程序创建本地PV,以确保最佳对象存储性能:

    证书有关

    MinIO Operator 自动生成TLS证书签名请求(CSR)并使用Kubernetes证书。certificates.k8s.io TLS证书管理API,用于创建已签名的TLS证书。

    因此,MinIO操作员要求Kubernetes kube控制器管理器配置包括以下配置设置:

    • --cluster-signing-key-file: 指定用于签名群集范围证书的PEM编码RSA或ECDSA私钥。
    • --cluster-signing-cert-file: 指定用于颁发群集范围证书的PEM编码的x.509证书颁发机构证书。

    如果Kubernetes群集未配置为响应生成的CSR,则操作员无法完成初始化。默认情况下,某些Kubernetes提供程序不指定这些配置值。

    要验证kube controller manager是否具有所需的设置,请使用以下命令。将集群名称-当前主机名替换为Kubernetes群集的名称:

    kubectl get pod kube-controller-manager-集群名称-当前主机名 -n kube-system -o yaml
    
    # 查询具体的pod
    ]# kubectl get pod  -n kube-system
    NAME                                       READY   STATUS    RESTARTS   AGE
    ......
    kube-controller-manager-develop-master-1   1/1     Running   2          84d
    ......
    
    # 再查询
    kubectl get pod kube-controller-manager-develop-master-1 -n kube-system -o yaml
    

    确认输出包含高亮显示的行。上述示例命令的输出可能与终端中的输出不同:

    MinIO操作员使用指定的证书颁发机构(CA)为所有MinIO租户POD自动生成TLS证书。Kubernetes群集外部的客户端必须信任Kubernetes群集CA才能连接到MinIO运营商或MinIO租户。无法信任Kubernetes群集CA的客户端可以尝试禁用连接到MinIO运营商或MinIO租户的TLS验证。或者,您可以生成由已知且受信任的CA签名的x.509 TLS证书,并将这些证书传递给MinIO租户。有关更完整的文档,请参阅MinIO对象存储的用户生成的TLS证书。

    操作步骤

    Install the MinIO Kubernetes Operator

    运行以下命令,使用Kubernetes krew插件管理器安装MinIO操作符和插件:

    # 如下这两步操作是在线更新插件列表和安装插件,需要连接github,因为网络问题,导致无法访问,因此这俩命令可以不用执行,改成使用下面的直接下载二进制文件来操作
    
    # kubectl krew update
    W0316 10:03:24.732181   22170 update.go:168] failed to update index "default": fetch index at "/root/.krew/index/default" failed: command execution failure, output="fatal: unable to access 'https://github.com/kubernetes-sigs/krew-index.git/': Encountered end of file\n": exit status 128
    failed to update the following indexes: default
    : fetch index at "/root/.krew/index/default" failed: command execution failure, output="fatal: unable to access 'https://github.com/kubernetes-sigs/krew-index.git/': Encountered end of file\n": exit status 128
    
    # kubectl krew install minio
    W0316 10:10:54.231193   48472 update.go:168] failed to update index "default": fetch index at "/root/.krew/index/default" failed: command execution failure, output="fatal: unable to access 'https://github.com/kubernetes-sigs/krew-index.git/': Encountered end of file\n": exit status 128
    failed to update the following indexes: default
    : fetch index at "/root/.krew/index/default" failed: command execution failure, output="fatal: unable to access 'https://github.com/kubernetes-sigs/krew-index.git/': Encountered end of file\n": exit status 128
    

    还可以直接下载kubectl minio插件,并将其安装到您的系统路径。以下代码下载MinIO Kubernetes插件的最新稳定版本4.4.11,并将其安装到系统$PATH中:

    wget https://github.com/minio/operator/releases/download/v4.4.4/kubectl-minio_4.4.4_linux_amd64 -O kubectl-minio
    chmod +x kubectl-minio
    mv kubectl-minio /usr/local/bin/
    

    运行以下命令以验证插件的安装:

    # kubectl minio version
    v4.4.11
    

    Initialize the MinIO Kubernetes Operator

    运行kubectl minio init命令初始化minio运算符:

    # kubectl minio init
    namespace/minio-operator created
    serviceaccount/minio-operator created
    clusterrole.rbac.authorization.k8s.io/minio-operator-role created
    clusterrolebinding.rbac.authorization.k8s.io/minio-operator-binding created
    customresourcedefinition.apiextensions.k8s.io/tenants.minio.min.io created
    service/operator created
    deployment.apps/minio-operator created
    serviceaccount/console-sa created
    clusterrole.rbac.authorization.k8s.io/console-sa-role created
    clusterrolebinding.rbac.authorization.k8s.io/console-sa-binding created
    configmap/console-env created
    service/console created
    deployment.apps/console created
    -----------------
    
    To open Operator UI, start a port forward using this command:
    
    kubectl minio proxy -n minio-operator 
    
    -----------------
    

    该命令使用以下默认设置初始化MinIO运算符:

    • 将操作符部署到minio-operator命名空间中。指定kubectl minio init--namespace参数,将运算符部署到不同的命名空间中。
    • 使用 cluster.local 在配置操作员的DNS主机名时,本地作为群集域。指定kubectl minio init--cluster domain参数以设置其他群集域值。

    记录初始化MinIO运算符时使用的所有参数。

    Validate the Operator Installation

    要验证安装,请运行以下命令:

    # kubectl get all --namespace minio-operator
    NAME                                  READY   STATUS    RESTARTS   AGE
    pod/console-58b7dc8856-gzrqt          1/1     Running   0          2m55s
    pod/minio-operator-849f8cf8b8-sjbss   1/1     Running   0          2m55s
    pod/minio-operator-849f8cf8b8-v5lzn   1/1     Running   0          2m55s
    
    NAME               TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)             AGE
    service/console    ClusterIP   172.16.13.10     <none>        9090/TCP,9443/TCP   2m55s
    service/operator   ClusterIP   172.16.118.243   <none>        4222/TCP            2m55s
    
    NAME                             READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/console          1/1     1            1           2m55s
    deployment.apps/minio-operator   2/2     2            2           2m55s
    
    NAME                                        DESIRED   CURRENT   READY   AGE
    replicaset.apps/console-58b7dc8856          1         1         1       2m55s
    replicaset.apps/minio-operator-849f8cf8b8   2         2         2       2m55s
    

    如果使用自定义名称空间初始化运算符,请使用该名称空间替换minio-operator。

    Open the Operator Console

    运行kubectl minio proxy命令,将流量从minio操作员控制台服务临时转发到本地计算机:

    # kubectl minio proxy
    Starting port forward of the Console UI.
    
    To connect open a browser and go to http://localhost:9090
    
    Current JWT to login: eyJhbGciOiJSUzI1NiIsImtpZCI6InBneENoOVhBcEtsTmFGUGhiWHBwSHBjeHl5cmdYWU5GS3pMbzlhbEdGMm8ifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJtaW5pby1vcGVyYXRvciIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJjb25zb2xlLXNhLXRva2VuLXRjcXZyIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImNvbnNvbGUtc2EiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI2N2QwNTRhMy1iYzZhLTQxMTktODQ5Zi0wMGM5YmM2YTY3MDEiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6bWluaW8tb3BlcmF0b3I6Y29uc29sZS1zYSJ9.UZ5r1_mqoh-3zZT_w5s_z-9lvktUPcyaF-COLViJ414J-HbMxiEu7FCk7aXDe_VCrXkbSpy4lwxWT4lXfX_F2yq0KVTyrrUt7VlRj_iUpKsEAoI7xwbnnsxyBKxKb98nzXyA8je2xkTwKNDBfJ1-FlMLzJH2IIjuTLVD_blIU97RN1PlZXH2ODqiDN_ulL4AAdsdnbNAgIpSe5WITtbUTdHHtLVZtJCEu4FN_EGqmN-ta4H0_k6aL9fPyknCGR087VKgnMfnDiTgq_lh9XbnLxCtHqoBflGMssjxaYeNWbB2zEgi8M1AtQ5I8vFqKGxhXTEDXrzoupKe0igtX-okHw
    
    Forwarding from 0.0.0.0:9090 -> 9090
    

    The command output includes a JWT token you must use to log into the Operator Console.

    您可以从操作员仪表板部署新的MinIO租户。

  • 相关阅读:
    微信Web开发者工具 移动调试 手机连接不上
    js 生成guid 自定义函数
    json
    c# 返回时间差
    Quartz.Net和队列应用demo
    数据库字段数字表示含义的枚举维护
    API文档自动生成,Swagger的配置
    请求资源文件报500错误
    文件上传三:base64文件上传
    文件上传二:FormData上传
  • 原文地址:https://www.cnblogs.com/sanduzxcvbnm/p/16009634.html
Copyright © 2020-2023  润新知