文档地址: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租户。

MinIO对接k8s使用的更多相关文章

  1. ceph对接k8s storage class

    简介 对接ceph的rbd和cephfs到k8s中提供持久化存储 环境 主机名 IP role 操作系统 ceph-01 172.16.31.11 mon osd CentOS7.8 ceph-02 ...

  2. 使用k8s && minio 进行 postgres 数据库自动备份

      通过k8s 的定时任务job,我们可以方便的进行定时任务应用的开发,通过minio s3 兼容的cloud native 存储 我们可以方便的通过http 请求进行数据文件的备份,以下简单演示下如 ...

  3. KubeEdge v0.2发布,全球首个K8S原生的边缘计算平台开放云端代码

    KubeEdge开源背景 KubeEdge在18年11月24日的上海KubeCon上宣布开源,技术圈曾掀起一阵讨论边缘计算的风潮,从此翻开了边缘计算和云计算联动的新篇章. KubeEdge即Kube+ ...

  4. 基于drone构建CI-CD系统

    kubernetes集群三步安装 CI 概述 用一个可描述的配置定义整个工作流 程序员是很懒的动物,所以想各种办法解决重复劳动的问题,如果你的工作流中还在重复一些事,那么可能就得想想如何优化了 持续集 ...

  5. Service Mesh 初体验

    前言 计算机软件技术发展到现在,软件架构的演进无不朝着让开发者能够更加轻松快捷地构建大型复杂应用的方向发展.容器技术最初是为了解决运行环境的不一致问题而产生的,随着不断地发展,围绕容器技术衍生出来越来 ...

  6. Service Mesh体验

    前言# 计算机软件技术发展到现在,软件架构的演进无不朝着让开发者能够更加轻松快捷地构建大型复杂应用的方向发展.容器技术最初是为了解决运行环境的不一致问题而产生的,随着不断地发展,围绕容器技术衍生出来越 ...

  7. 基于Rust-vmm实现Kubernetes运行时

    随着容器及K8s的广泛使用,越来越多的容器安全与隔离问题被暴露出来,如:容器逃逸.水平攻击.DDos攻击等严重威胁了办公和生产环境的安全与稳定,影响了业务的正常运行.安全容器技术孕育而生,产生了kat ...

  8. 灵雀云Istio技术实践专题整理

    Istio技术实践专题(1) Service Mesh Istio 基本概念和架构基础 Istio被称作Kubernetes的最佳云原生拍档.从今天起,我们推出"Istio技术实践" ...

  9. Clusternet - 新一代开源多集群管理与应用治理项目

    作者 徐迪,腾讯云容器技术专家. 汝英哲,腾讯云高级产品经理. 摘要 在过去的数年里,云计算领域经历了多次巨大的变革,当前越来越多的组织将应用部署在本地和云上的多个基础设施平台上,这些平台可能是两个公 ...

随机推荐

  1. RS485通信电路

    RS485由RS232和RS422发展而来,弥补了抗干扰能力差.通信距离短.速率低的缺点,增加了多点.双向通信能力,即允许多个发送器连接在同一条主线上,同时增加了发送器的驱动能力和冲突保护特性,扩展了 ...

  2. linux 常用操作搜集

    1.去除空行 方法一:利用grep grep -v '^\s*$' test.txt 注:-v表示将匹配的结果进行反转,正则表达式匹配空行.(空行可包括空格符制表符等空白字符) 方法二:利用sed s ...

  3. 使用Docker-compose搭建nginx-keepalived双机热备来实现高可用nginx集群

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_117 最近同学出去面试经常会被问到一个问题. 面试官:你说你们公司使用nginx反向代理tornado,部署了多少多少台机器,好像 ...

  4. eclipse mave无法下载jar包

    解决方法: 先查看本地配置是否正确: 确保此处没有勾选 此处和自己配置的maven一致,没有则修改此处设置.然后项目上右键–>Maven–>Update Project 即可 . 如果还不 ...

  5. Apache DolphinScheduler 使用文档(4/8):软件部署

    本文章经授权转载,原文链接: https://blog.csdn.net/MiaoSO/article/details/104770720 目录 4. 软件部署 4.1 为 dolphinschedu ...

  6. java-异步与并发之基础

    1.线程提供了一个方法: void join()该方法允许一个线程在另一个线程上等待,直到其完成工作后才解除阻塞运行.所以join可以协调线程之间同步运行线程调用join()方法,方法后就进入阻塞状态 ...

  7. HTTP 的 Content-Type 及其媒体类型(MIME)

    Content-Type Content-Type 代表 HTTP 携带的文件类型,决定文件接收方或发送方将以什么形式.什么编码读取这个文件.下图,load.gif 的媒体类型就是 image/gif ...

  8. CM311-1a(S905L3系列)玩转桌面

    那安装了ambian后,玩转桌面(安装GUI桌面环境)有没有可能呢?那肯定啊!那桌面有什么用?当然有用,多一种玩法,可以写写代码,上网冲浪,学习linux语法什么的.而且单主机只要40左右,想想看可以 ...

  9. Java反射(重要)

    全文内容 1: 获取字节码文件对象的三种方式 2: 获取公有,私有方法,并调用构造方法,成员方法 3: 获取并调用私有成员变量 4: 如何为实例对象的成员变量赋值 5: 文末有一些注意 tea1类代码 ...

  10. 【NOI P模拟赛】混凝土粉末(整体二分)

    题面 样例输入 5 8 1 1 4 2 2 3 1 2 3 3 1 2 5 1 2 3 3 2 5 2 2 1 2 2 1 3 样例输出 1 0 4 0 1 0 样例解释 题解 比这道题简单了不知多少 ...