minio operatorを利用してk8sにminioをインストールしてみた
minio operator をインストールする
ArgoCD で helm chart からインストールします。
1apiVersion: argoproj.io/v1alpha1
2kind: Application
3metadata:
4 name: minio-operator
5 namespace: argocd
6spec:
7 syncPolicy:
8 syncOptions:
9 - CreateNamespace=true
10 project: default
11 source:
12 chart: operator
13 repoURL: https://operator.min.io
14 targetRevision: 6.0.3
15 helm:
16 releaseName: operator
17
18 destination:
19 server: https://kubernetes.default.svc
20 namespace: minio-operator
minio をインストールする
kustomize を利用してインストールします。
以下のようなkustomization.yaml
を記述し ArgoCD の Application に登録しています。
1resources:
2 - https://github.com/minio/operator/examples/kustomization/base/
3 - console-ingress.yaml
4
5patches:
6 - target:
7 kind: Tenant
8 name: myminio
9 patch: |
10 - op: replace
11 path: /spec/pools/0/servers
12 value: 4
13 - op: replace
14 path: /spec/pools/0/volumesPerServer
15 value: 1
16 - op: replace
17 path: /spec/pools/0/volumeClaimTemplate/spec/resources/requests/storage
18 value: 5Gi
19 - op: replace
20 path: /spec/pools/0/volumeClaimTemplate/spec/storageClassName
21 value: longhorn
patches でkind: Tenant
の設定内容を変更しています。
/spec/pools/0/servers
はサーバーの数を定義します。4 以上を指定する必要があります。
/spec/pools/0/volumesPerServer
は 1 サーバー当たりのボリュームの数を指定します。
/spec/pools/0/volumes/0/volumeClaimTemplate/spec/resources/requests/storage
はボリュームのサイズを指定します。初期値は 1Ti となっているため、ストレージの容量に合わせて変更する必要があります。
/spec/pools/0/volumeClaimTemplate/spec/storageClassName
はストレージクラスを指定します。今回の環境では longhorn を利用しているため、longhorn
を指定します。
console-ingress.yaml
WebUI にアクセスできるように Ingress を追加します。
1apiVersion: networking.k8s.io/v1
2kind: Ingress
3metadata:
4 name: console
5 namespace: minio-tenant
6 annotations:
7 nginx.ingress.kubernetes.io/backend-protocol: HTTPS
8 nginx.ingress.kubernetes.io/rewrite-target: /
9 nginx.ingress.kubernetes.io/proxy-body-size: "0"
10 nginx.ingress.kubernetes.io/server-snippet: |
11 client_max_body_size 0;
12 nginx.ingress.kubernetes.io/configuration-snippet: |
13 chunked_transfer_encoding off;
14spec:
15 ingressClassName: nginx
16 rules:
17 - host: minio-console.homelab.t-inagaki.net
18 http:
19 paths:
20 - path: /
21 pathType: Prefix
22 backend:
23 service:
24 name: myminio-console
25 port:
26 number: 9443
ingress-nginx を利用しています。annotations で-snippet
を利用するには、ingress-nginx のインストール時に許可する必要があります。
helm でインストールしている場合は ingresss-nginx の values.yaml に以下の項目を追加します。
1controller:
2 allowSnippetAnnotations: true
この設定は、最終的に ingress-nginx の nginx.conf に挿入される可能性があるため、Ingress をデプロイするユーザーが信頼できる場合に有効にするべきです。
ArgoCD 上での見え方
以下のように見えます。
statefulset で 4 個サーバー(pod)がうごいていることがわかります。
Minio Console
Ingress を設定したホスト名でアクセスできます。今回の環境ではminio-console.homelab.t-inagaki.net
になります。
kustomization の base の設定では、ユーザー名がconsole
、パスワードがconsole123
になっています。
本来はここも変更するべきでした・・・
さいごに
minio-operator の example の base を読み込んでいるため、Tenant の名前が myminio になっていたりパスワードが脆弱なままだったりしますが、minio を建てることができました。
k8s 内からは minio.minio-tenant.cluster.local
でアクセスすることができます。
今後は、これを使って s3 をファイルストレージとしたアプリケーションの運用などして見たいと思います。