minio-operator部署minio服务

本文介绍如何用minio-operator来部署minio服务,并浏览器和Java客户端来访问minio上的数据。

kubernetes环境

确保kubenetes环境是v1.19+ 环境

# kubelet 版本
[root@devops-yanxiao-1-161]# kubelet --version
Kubernetes v1.19.3
# kubectl 版本
kubectl version
Client Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.3", GitCommit:"1e11e4a2108024935ecfcb2912226cedeafd99df", GitTreeState:"clean", BuildDate:"2020-10-14T12:50:19Z", GoVersion:"go1.15.2", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.3", GitCommit:"1e11e4a2108024935ecfcb2912226cedeafd99df", GitTreeState:"clean", BuildDate:"2020-10-14T12:41:49Z", GoVersion:"go1.15.2", Compiler:"gc", Platform:"linux/amd64"}

安装minio-operator

安装minio-operator有两种方式

第一种(不推荐):可以用刚才安装的krew插件来安装kubectl minio命令插件,然后用插件来安装。

安装krew插件

脚本命令安装

# 下载并安装krew
(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
)# 为了操作方便也可以将命令放入PATH路径
vim /etc/profile
# 在文件最后一行加入如下脚本
export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
# 当命令生效
[root@devops-yanxiao-1-161]# source /etc/profile
# 查看krew版本,看是否安装成功并生效
[root@devops-yanxiao-1-161]# kubectl krew version
OPTION            VALUE
GitTag            v0.4.3
GitCommit         dbfefa5
IndexURI          https://github.com/kubernetes-sigs/krew-index.git
BasePath          /root/.krew
IndexPath         /root/.krew/index/default
InstallPath       /root/.krew/store
BinPath           /root/.krew/bin
DetectedPlatform  linux/amd64
[root@devops-yanxiao-1-161]#
[root@devops-yanxiao-1-161]# kubectl krew update
[root@devops-yanxiao-1-161]# kubectl krew install minio

警告:用这种方式安装的minio-operator在安装minio服务时,因为安装的是最新的minio-operator版本,因此可能会出现与kubernetes版本兼容的问题。

第二种(推荐):下载指定版本脚本安装

地址: https://github.com/minio/operator/tags

本文档安装的是v4.2.2版本

[root@devops-yanxiao-1-161]# wget https://github.com/minio/operator/releases/download/v4.2.2/kubectl-minio_4.2.2_linux_amd64 -O kubectl-minio
[root@devops-yanxiao-1-161]# chmod +x kubectl-minio
[root@devops-yanxiao-1-161]# mv kubectl-minio /usr/local/bin/

检查命令是否安装成功

[root@devops-yanxiao-1-161]# kubectl minio version
v4.2.2

初始化minio-operator,初始化时会将服务部署到minio-operator命名空间

[root@devops-yanxiao-1-161]# kubectl minio init

查看服务是否部署成功

[root@devops-yanxiao-1-161]#  kubectl get all --namespace minio-operator
NAME                                  READY   STATUS    RESTARTS   AGE
pod/console-7c855c9789-k4wt2          1/1     Running   1          5d17h
pod/minio-operator-66849f98b7-7wq27   1/1     Running   1          5d17hNAME               TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)             AGE
service/console    ClusterIP   10.110.18.0     <none>        9090/TCP,9443/TCP   5d17h
service/operator   ClusterIP   10.110.81.114   <none>        4222/TCP,4233/TCP   5d17hNAME                             READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/console          1/1     1            1           5d17h
deployment.apps/minio-operator   1/1     1            1           5d17hNAME                                        DESIRED   CURRENT   READY   AGE
replicaset.apps/console-7c855c9789          1         1         1       5d17h
replicaset.apps/minio-operator-66849f98b7   1         1         1       5d17h
[root@devops-yanxiao-1-161]#

安装minio tenant存储服务

tenant就是实际上的minio对象存储服务,如果minio-operator安装成功后就可以来初始化minio tenant服务了,在初始化minio tenant服务前需要创建local pv,但是官方强烈推荐MinIO DirectCSI 来支撑minio的高性能对象存储服务

DirectPV 是直接附加存储的 CSI 驱动程序。 在更简单的意义上,它是一个分布式持久卷管理器,而不是像 SAN 或 NAS 这样的存储系统。 跨服务器发现、格式化、安装、调度和监控驱动器很有用。https://github.com/minio/directpv

directpv 安装

# 安装 kubectl directpv 插件
kubectl krew install directpv# 用这个插件初始化directpv到kubenetes集群
kubectl directpv install# 确保directpv成功安装
kubectl directpv info# 列表kubernetes集群所有磁盘驱动
kubectl directpv drives ls --all# 将磁盘驱动format以及管理起来,请将drives参数和modes参数替换为kubernetes集群中实际的值
kubectl directpv drives format --drives /dev/sd{a...f} --nodes directpv-1,directpv2

directpv安装成功后,会创建storage-class

[root@devops-yanxiao-1-161 krew]# kubectl get sc
NAME                  PROVISIONER                    RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
direct-csi-min-io     direct-csi-min-io              Delete          WaitForFirstConsumer   false                  3d23h
directpv-min-io       direct-csi-min-io              Delete          WaitForFirstConsumer   false                  3d23h

初始化 tenant服务

# 创建namespace
[root@devops-yanxiao-1-161 krew]# kubectl create ns minio-tenant-1# 初始化tenant集群,容量为1G,初始化命令提交后会返回访问tenant集群的账号和密码
[root@devops-yanxiao-1-161 krew]# kubectl minio tenant create minio-tenant-1  --storage-class direct-csi-min-io --namespace minio-tenant-1 --servers 1 --volumes 4 --capacity 1Gi# 查看tenant集群创建状态,如果没查到数据请稍等一会儿
[root@devops-yanxiao-1-161 krew]# kubectl get all -n minio-tenant-1
NAME                        READY   STATUS    RESTARTS   AGE
pod/minio-tenant-1-ss-0-0   1/1     Running   0          3d15hNAME                             TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
service/minio                    NodePort    10.100.108.23   <none>        443:30280/TCP    3d15h
service/minio-tenant-1-console   NodePort    10.107.12.82    <none>        9443:32000/TCP   3d15h
service/minio-tenant-1-hl        ClusterIP   None            <none>        9000/TCP         3d15hNAME                                   READY   AGE
statefulset.apps/minio-tenant-1-ss-0   1/1     3d15h
[root@devops-yanxiao-1-161 krew]

外网访问tenant服务

说明: 在minio tenant服务集群创建后,minio以及minio-tenant的service type都是ClusterIp,默认只能在kubernetes集群内部访问,如果想在k8s集群外部访问需要编辑对应的svc,将type改为NodePort,并指定nodePort端口

# 修改svc type类型为NodePort,并指定端口
[root@devops-yanxiao-1-161 krew]# kubectl edit svc minio -n minio-tenant-1
# 修改svc type类型为NodePort,并指定端口
[root@devops-yanxiao-1-161 krew]# kubectl edit svc minio-tenant-1-console -n minio-tenant-1[root@devops-yanxiao-1-161 krew]# kubectl get svc -n minio-tenant-1
NAME                     TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
minio                    NodePort    10.100.108.23   <none>        443:30280/TCP    3d16h
minio-tenant-1-console   NodePort    10.107.12.82    <none>        9443:32000/TCP   3d16h
minio-tenant-1-hl        ClusterIP   None            <none>        9000/TCP         3d16h
[root@devops-yanxiao-1-161 krew]#

说明:修改minio svc为了让客户端访问minio对象存储服务,修改minio-tenant-1-console svc 是为了能在浏览器登录管理后台访问minio 服务

浏览器访问tenant服务 https://192.168.1.162:32000/login

账号密码是在初始化minio tenant服务时,返回的

Java客户端连接tenant服务

说明:如果是浏览器访问的话,需要访问minio-tenant-1-console svc 的ip和端口,但如果是用客户端来连接minio,那么需要访问minio svc的ip和端口。如果你minio svc的type是ClusterIp,请先修改为NodePort类型。

[root@devops-yanxiao-1-161 krew]# kubectl get svc minio -n minio-tenant-1
NAME                     TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
minio                    NodePort    10.100.108.23   <none>        443:30280/TCP    3d16h
[root@devops-yanxiao-1-161 krew]#

minio Java客户端访问minio

引入依赖

<dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.2.1</version>
</dependency>

Java代码

import io.minio.MinioClient;
import io.minio.messages.Bucket;
import okhttp3.OkHttpClient;import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.cert.X509Certificate;
import java.util.List;
import java.util.Objects;public class MinioTest {public static OkHttpClient getUnsafeOkHttpsClient() {try {final TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {@Overridepublic void checkClientTrusted(X509Certificate[] x509Certificates, String s) {}@Overridepublic void checkServerTrusted(X509Certificate[] x509Certificates, String s) {}@Overridepublic X509Certificate[] getAcceptedIssuers() {return new X509Certificate[]{};}}};final SSLContext sslContext = SSLContext.getInstance("SSL");sslContext.init(null, trustAllCerts, new SecureRandom());final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();OkHttpClient.Builder builder = new OkHttpClient.Builder();builder.sslSocketFactory(sslSocketFactory);builder.hostnameVerifier((s, sslSession) -> true);return builder.build();} catch (NoSuchAlgorithmException | KeyManagementException e) {e.printStackTrace();}return null;}public static void main(String[] args) throws Exception {MinioClient admin = MinioClient.builder().endpoint("https://192.168.1.162:30280").credentials("admin", "6d24b54e-68c4-46b7-9128-a623058c7556").httpClient(Objects.requireNonNull(getUnsafeOkHttpsClient())).build();List<Bucket> buckets = admin.listBuckets();for (Bucket bucket : buckets) {System.out.println(bucket.name());}}
}

注意:连接的ip和端口,一定要是minio svc的ip和端口

minio-operator部署minio服务,并用Java客户端访问minio相关推荐

  1. CentOS8上部署NFS服务端和客户端

    centos8上部署nfs服务端和客户端 文章目录 背景 服务端与客户端信息 配置服务端 安装软件包 编辑配置文件 验证并使配置生效 启动服务端服务 查看服务端状态: 配置客户端: 安装软件包 启动客 ...

  2. fastdfs java客户端_FastDFS的Java客户端访问

    FastDFS的Java客户端访问: 没前奏,直接上车. 1. 引入依赖: net.oschina.zcx7878 fastdfs-client-java 1.27.0.0 2.在项目resource ...

  3. 部署FileZilla服务端与客户端

    FileZilla服务端下载地址: FileZilla服务端https://www.filezilla.cn/download/server FileZilla客户端下载地址: FileZilla客户 ...

  4. 一键部署openvpn服务端和客户端(已写成脚本)

    openvpn 容器安装 需要有docker-compse和docker #docker和docker-compse一键脚本 #!/bin/bash #添加DNS echo $MASTER_IP $H ...

  5. Java客户端访问HBase集群解决方案(优化)

    测试环境:Idea+Windows10 准备工作: <1>.打开本地 C:\Windows\System32\drivers\etc(系统默认)下名为hosts的系统文件,如果提示当前用户 ...

  6. java客户端访问kafka

    kafka版本:kafka_2.11-0.11.0.1.tgz centos7 关闭防火墙:systemctl stop firewalld.service 在kafka中配置文件: listener ...

  7. java客户端访问ApiServer(kubernetes-client使用)

    前言 使用kubernetes-client访问k8s apiserver,直接贴代码了 配置类ApiClientConfig(自己根据需要改) package com.pdd.transports. ...

  8. 【Java客户端访问Kafka】

    我是

  9. MinIO实现分布式文件服务

    文章目录 什么是MinIO? 应用场景 特点 安装MinIO 获取镜像 启动镜像 图形界面操作 SpringBoot整合MinIO 获取accessKey和secretKey 添加依赖 添加配置 配置 ...

  10. 直播技术(从服务端到客户端)一

    环境部署 2015年开始直播变得越来越流行,很多的直播平台也应运而生,直播是一个很有技术的项目,从服务端到客户端到web等等.我们将写一序列的博客来阐述直播中的技术,这包括服务端技术和客户端技术.包括 ...

最新文章

  1. android 365手机秘书源代码
  2. call和apply
  3. ps修改dds贴图_「干货」喜爱3D游戏动漫建模的你,必备的次世代游戏贴图技巧...
  4. java写航显系统_一种机场航显系统的制作方法
  5. Boost:双图bimap的修改和替换测试程序
  6. 美国顶尖大学的博士是怎样练成的?
  7. C语言/C++程序员大神打造纯C的电子时钟(加图形库+源码)
  8. 判断当前浏览器是不是微信浏览器
  9. Java中的可变参数使用
  10. 汽车+辐射测试软件,汽车EMC辐射发射的一些所见所闻和思考
  11. PHP时间戳与日期之间转换
  12. Chrome 谷歌浏览器将整个网页保存为图片
  13. qtablewidget控件居中_单元格Edi期间QTableWidgetItem中的文本居中
  14. poj1008(Maya Calendar)玛雅历(c++实现)
  15. 安卓真机如何连接本地服务器_Android真机测试 连接本地服务器 手机测试访问本地服务器 android通过电脑上网...
  16. sencha 安装教程
  17. 光E电小家庭要如何理财
  18. root联通定制机顶盒,root 机顶盒
  19. Python_阿里云物联网_数据/图像/音频传输
  20. Android 百度地图开发问题----解决地图有时候加载不出来问题

热门文章

  1. 商场三十六计——第29计 “树上开花”
  2. PSC-Net: Learning Part Spatial Co-occurrence for Occluded Pedestrian Detection 用于遮挡行人检测的部分空间共现网络 翻译
  3. 网易云/QQ音乐歌单转移到Apple Music内
  4. Python计算机视觉-仿射扭曲简单实例
  5. JavaWeb——会话追踪之Cookie和Session
  6. java append()_append()方法的坑
  7. Nginx从入门到精通(笔记)
  8. 支付行业架构流程梳理
  9. 虚拟化平台VMware vCenter Server无法连接故障排查解决
  10. 赖美云的认证照_赖美云的“瓜子牙”辣眼睛?原来牙齿美容这么重要