Macにインストールした Krew を使って、Kubernetes に MinIO をデプロイする

Nov 16, 2024, 5:57 PM
以前、https://microai.jp/blog/20f5612a-42f7-49bc-8f6a-df357460a5f0 で手動で MinIO をデプロイしましたが、今回は、Krew を使ってデプロイしてみます。

Mac 上で Krew のプラグインを更新

$ kubectl krew update
Updated the local copy of plugin index.

MinIO プラグインのインストール

$ kubectl krew install minio
Updated the local copy of plugin index.
Installing plugin: minio
Installed plugin: minio
\
| Use this plugin:
| kubectl minio
| Documentation:
| https://github.com/minio/operator/tree/master/kubectl-minio
| Caveats:
| \
| | * For resources that are not in default namespace, currently you must
| | specify -n/--namespace explicitly (the current namespace setting is not
| | yet used).
| /
/
WARNING: You installed plugin "minio" from the krew-index plugin repository.
These plugins are not audited for security by the Krew maintainers.
Run them at your own risk.

この警告は、Krew プラグインが公式にセキュリティ監査されていないことを示しています。信頼できるソース(今回の場合、MinIO の公式リポジトリ)で提供されていることを確認して進めましょう

Mac が Kubernetes にアクセスできるようにする(JOINはしません)

Kubernetes のコントロールプレーン(マスターノード)で
root@master-01:~# cat /etc/kubernetes/admin.conf
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0....
server: https://10.0.0.100:6443
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: kubernetes-admin
name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
user:
client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0t....
client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0...
を実行し、中身をコピーしておきます。

Macで
$ mkdir -p ~/.kube
$ nano ~/.kube/config
で貼り付けて
$ chmod 600 ~/.kube/config
$ kubectl cluster-info
Kubernetes control plane is running at https://10.0.0.100:6443
CoreDNS is running at https://10.0.0.100:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
権限をかえると、接続できるようになりました。

一応、ノードの一覧も取得してみます。
$ kubectl get nodes

NAME STATUS ROLES AGE VERSION
geekom-01 Ready <none> 114d v1.30.3
geekom-02 Ready <none> 114d v1.30.3
jetson-01 Ready <none> 171d v1.30.1
jetson-02 Ready <none> 171d v1.30.1
master-01 Ready control-plane 172d v1.30.1
master-02 Ready control-plane 17d v1.30.6
master-03 Ready control-plane 17d v1.30.6
worker-01 Ready <none> 16h v1.30.6
worker-02 Ready <none> 12d v1.30.1
素晴らしい🍺

ネームスペースを指定してMinIO Operator のデプロイ

私は、minio-omv というネームスペースにしました。自由に指定してください。
$ kubectl minio init -n minio-omv
# Warning: 'patchesJson6902' is deprecated. Please use 'patches' instead. Run 'kustomize edit fix' to update your Kustomization automatically.
namespace/minio-omv 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
customresourcedefinition.apiextensions.k8s.io/policybindings.sts.min.io created
customresourcedefinition.apiextensions.k8s.io/miniojobs.job.min.io created
service/operator created
service/sts created
deployment.apps/minio-operator created
serviceaccount/console-sa created
secret/console-sa-secret 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-omv

-----------------
デプロイ完了です🍺

Macでそのまま以下を実行すると
$ kubectl minio proxy -n minio-omv
Starting port forward of the Console UI.

To connect open a browser and go to http://localhost:9090

Current JWT to login: eyJhbGciOiJSUzI1NiIsImtpZCI6InZzWTBnQVpqUERVZUJ5ZTQ5TEUycDlfbkI5YnN0Q2JyN240YjltcS1Hb3MifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJtaW5pby1vbXYiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlY3JldC5uYW1lIjoiY29uc29sZS1zYS1zZWNyZXQiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiY29uc29sZS1zYSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjZkNzZhZmRmLTlhODAtNGZmNi05MDY4LTQwY2QwZDM1ZDQwOCIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDptaW5pby1vbXY6Y29uc29sZS1zYSJ9.bHrolrHB_rMM7PsMOEQx1l2rYRnd1cEJZzEutOeJvRkroVHgnRD0Jlp8fuvfjRzN33cftRedyGWQaSNeG1GKORQr60xFvSZ2I8Nu3HPcbz7sdqua5cB7nsBp3RpDT3kBDDMWAFM8-Tc-NTq1tZFubbi1bcw9ZEBQAKHfnJDZZKKdDljdRqSeSKoUnlmyYBgw_LprvvjxeW-iEHYaNW3Ki26Oa5vzFQCEHm3cBfUdi8blJrgpJLNMEel5WgPainBw1tVBTVX92UCXc8mJp3Uc-Q7S-vPwJUPDqqo9r_ucO5ufxQJZtIhsUwJjP9rocAW1KaPiNRlEW7ZvuD79TOWRxA

Forwarding from 0.0.0.0:9090 -> 9090

Macのブラウザで
http://localhost:9090
にアクセスすると、以下のうような画面が表示されます。




master-01
$ helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
$ helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
--set nfs.server=10.0.0.61 \
--set nfs.path=/export/minio \
--set storageClass.name=omv-client-minio \
--namespace minio-omv
NAME: nfs-subdir-external-provisioner
LAST DEPLOYED: Mon Nov 18 00:12:24 2024
NAMESPACE: minio-omv
STATUS: deployed
REVISION: 1
TEST SUITE: None

MinIO Tenant の作成

$ kubectl minio tenant create tenant1 \
--namespace minio-omv \
--servers 4 \
--volumes 4 \
--capacity 1Ti \
--storage-class omv-client-minio

W1118 00:19:35.720868 11949 warnings.go:70] unknown field "spec.pools[0].volumeClaimTemplate.metadata.creationTimestamp"

Tenant 'tenant1' created in 'minio-omv' Namespace

Username: 23JSJYNXS7UE2OTEIK6H
Password: Ffr3kWLYn9cnG4OqnNYNWj5UbaoAjxdUuvipIpwz
Note: Copy the credentials to a secure location. MinIO will not display these again.

APPLICATION SERVICE NAME NAMESPACE SERVICE TYPE SERVICE PORT
MinIO minio minio-omv ClusterIP 443
Console tenant1-console minio-omv ClusterIP 9443

  • --servers 4: MinIO サーバーのインスタンス数。値は 2 の倍数である必要があります(データ冗長性のため)
  • --volumes 4: 使用するボリュームの数。ボリュームはデータを保存する物理的または仮想的なストレージ単位で、MinIO の各サーバーに割り当てられます。各サーバーが持つボリューム数は volumes ÷ servers で計算されます。例:16 ボリュームを 4 サーバーで使う場合、各サーバーは 4 ボリュームを持ちます。
  • --capacity 1Ti: テナント全体の合計ストレージ容量。各ボリュームの容量は capacity ÷ volumes で計算されます。
  • --storage-class nfs-pvc: 使用する Persistent Volume Claim(PVC)の StorageClass を指定します

私の環境では、NFS のバックエンドが 1 つの SSD キャッシュを持つ 4 ベイの NAS で構成されています。RAID10 によって物理的な 4 台の SSD が冗長性を提供し、データの読み書き性能が向上しています。しかし、この構成では、SSD キャッシュを管理するロジックが単一であるため、過剰な並列アクセスを避ける必要があります。

アンインストール方法

$ kubectl delete namespace minio-omv
$ kubectl delete crd tenants.minio.min.io
$ kubectl delete crd policybindings.sts.min.io
$ kubectl delete crd miniojobs.job.min.io
ネームスペースは、変更してください。
Mac に Krew をインストールする