文档地址: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. SpringBoot之MongoDB附件操作

    前言 近期自己针对附件上传进一步学习,为了弥足项目中文件上传的漏洞,保证文件上传功能的健壮性和可用性,现在我将自己在这一块的心得总结如下: 一.pom.xml依赖的引入 <dependency& ...

  2. vue2升级vue3指南(一)—— 环境准备和构建篇

    1.nodejs和npm 注意二者的版本,版本过低需要升级,本人升级后的版本如下: $ node -v v16.15.1 $ npm -v 8.11.0 2.package.json 和依赖升级 由于 ...

  3. Object类中wait代餐方法和notifyAll方法和线程间通信

    Object类中wait代餐方法和notifyAll方法 package com.yang.Test.ThreadStudy; import lombok.SneakyThrows; /** * 进入 ...

  4. python 生成Windows快捷方式

    此处以虚拟机镜像快捷方式为例 link_filepath:快捷方式的生成路径 win32_cmd:需要执行的应用程序 arg_str:exe的参数 快捷方式的目标:由win32_cmd + arg_s ...

  5. 【点击云游台湾省】今天,老子云在台湾省建了个3D房子!

    今日热搜仍然聚焦台湾省,中国新闻网发文:地图已经可以显示台湾省的每个街道.网友一片叫好! 台湾省通过平面图观察,难免看的不够真切,其实现在已经可以通过3D视角云游台湾省了! 老子云这次通过自研技术,还 ...

  6. Python-基础学习-第二轮

    目录 数据类型 文件 自调用其他程序 os.system函数 os.startfile 函数 subprocess 模块 线程和进程 创建新线程 共享数据的访问控制 deamon线程 多线程 JSON ...

  7. java-前端之HTML

    --html网页简单使用 1.html网页的基本标签 <!doctype html><!-- 声明网页版本 --> <html><!-- 唯一的跟元素 --& ...

  8. zabbix 报表动作日志 报错”503“

  9. Excel 统计函数(二):COUNTIF 和 COUNTIFS

    COUNTIF [语法]COUNTIF(range, criteria) [作用]range 为统计的范围,criteria 是统计的条件. [题目]统计 A1 到 A10 范围内,出现"你 ...

  10. Java SE 10 Application Class-Data Sharing 示例

    Java SE 10 Application Class-Data Sharing 示例 作者:Grey 原文地址:Java SE 10 Application Class-Data Sharing ...