文檔地址: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租戶。