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 DirectCSI
- [Local Persistent Volume](Local Persistent Volume)
证书有关
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使用的更多相关文章
- ceph对接k8s storage class
简介 对接ceph的rbd和cephfs到k8s中提供持久化存储 环境 主机名 IP role 操作系统 ceph-01 172.16.31.11 mon osd CentOS7.8 ceph-02 ...
- 使用k8s && minio 进行 postgres 数据库自动备份
通过k8s 的定时任务job,我们可以方便的进行定时任务应用的开发,通过minio s3 兼容的cloud native 存储 我们可以方便的通过http 请求进行数据文件的备份,以下简单演示下如 ...
- KubeEdge v0.2发布,全球首个K8S原生的边缘计算平台开放云端代码
KubeEdge开源背景 KubeEdge在18年11月24日的上海KubeCon上宣布开源,技术圈曾掀起一阵讨论边缘计算的风潮,从此翻开了边缘计算和云计算联动的新篇章. KubeEdge即Kube+ ...
- 基于drone构建CI-CD系统
kubernetes集群三步安装 CI 概述 用一个可描述的配置定义整个工作流 程序员是很懒的动物,所以想各种办法解决重复劳动的问题,如果你的工作流中还在重复一些事,那么可能就得想想如何优化了 持续集 ...
- Service Mesh 初体验
前言 计算机软件技术发展到现在,软件架构的演进无不朝着让开发者能够更加轻松快捷地构建大型复杂应用的方向发展.容器技术最初是为了解决运行环境的不一致问题而产生的,随着不断地发展,围绕容器技术衍生出来越来 ...
- Service Mesh体验
前言# 计算机软件技术发展到现在,软件架构的演进无不朝着让开发者能够更加轻松快捷地构建大型复杂应用的方向发展.容器技术最初是为了解决运行环境的不一致问题而产生的,随着不断地发展,围绕容器技术衍生出来越 ...
- 基于Rust-vmm实现Kubernetes运行时
随着容器及K8s的广泛使用,越来越多的容器安全与隔离问题被暴露出来,如:容器逃逸.水平攻击.DDos攻击等严重威胁了办公和生产环境的安全与稳定,影响了业务的正常运行.安全容器技术孕育而生,产生了kat ...
- 灵雀云Istio技术实践专题整理
Istio技术实践专题(1) Service Mesh Istio 基本概念和架构基础 Istio被称作Kubernetes的最佳云原生拍档.从今天起,我们推出"Istio技术实践" ...
- Clusternet - 新一代开源多集群管理与应用治理项目
作者 徐迪,腾讯云容器技术专家. 汝英哲,腾讯云高级产品经理. 摘要 在过去的数年里,云计算领域经历了多次巨大的变革,当前越来越多的组织将应用部署在本地和云上的多个基础设施平台上,这些平台可能是两个公 ...
随机推荐
- 写出个灵活的系统竟然可以如此简单!小白也能写出高级的Java业务!
一 最近正好公司里有个需求,一个短信业务接了多个第三方供应商,某些业务需要查询第三方供应商剩余的短信包数量去选择剩余量最多的渠道去批量发送.有些业务是指定了某个短信供应商,有些场景需要根据业务的值去动 ...
- 跟HR在大群吵架是什么体验?
原创不易,求分享.求一键三连 昨天跟HR负责人在公司大群吵了一架,先说结论:我输了... 事情原委是,老板在周一司庆上聊嗨了,说了一句:我觉得打卡没用,建议取消打卡. 下来后老板在公司论坛发了一个问题 ...
- Solution -「CF520E」Pluses everywhere
Step 1. 转化一步题目:考虑有 \(n\) 个小球,每个小球有 \(a_i\) 的价值,\(m\) 个板子,把板子插进小球间的空隙,且不能插在第 \(1\) 个球之前与第 \(n\) 个球之后. ...
- 安装linux下一些常用软件
1.先卸载一些不常用的软件 apt purge ufw lxd lxd-client lxcfs lxc-common 2.安装一些常用软件 apt install iproute2 ntpdate ...
- 基于SqlSugar的开发框架循序渐进介绍(13)-- 基于ElementPlus的上传组件进行封装,便于项目使用
在我们实际项目开发过程中,往往需要根据实际情况,对组件进行封装,以更简便的在界面代码中使用,在实际的前端应用中,适当的组件封装,可以减少很多重复的界面代码,并且能够非常简便的使用,本篇随笔介绍基于El ...
- zabbix监控添加学习笔记
在实际生产环境中,除了CPU.内存等一些系统信息可以挂载zabbix的自带模板Template OS Linux:但是一些公司开发的定制服务需要自己写模板或者监控项去监控: 一.监控公司的java服务 ...
- 手动从0搭建ABP框架-ABP官方完整解决方案和手动搭建简化解决方案实践
本文主要讲解了如何把ABP官方的在线生成解决方案运行起来,并说明了解决方案中项目间的依赖关系.然后手动实践了如何从0搭建了一个简化的解决方案.ABP官方的在线生成解决方案源码下载参考[3],手动搭 ...
- 2521-Shiro系列-基本使用
在springboot中使用SHiro作为安全框架,非常简单,灵活性也比较高 在springboot中使用Shiro不用像官网教程那样,官网是将配置文件写在INI文件和XML配置中 springboo ...
- 6.18 NOI 模拟
发现 \(Typro\) 没保存的草稿也是可以找回的,\(tql\) \(T1\ bs\) 考虑选的必然是开头的连续一段,那么直接二分\(+\)判定即可 由于数据范围是\(5\times 10^7\) ...
- 发布Android库至MavenCentral详解
Sonatype 账号 MavenCentral 和 Sonatype 的关系 库平台 运营商 管理后台 MavenCentral Sonatype oss.sonatype.org 因此我们要发布L ...