Kubernetesを動かす(3) rook/ceph編
前回はpodの作成テストを行いました。
rook/ceph
ブロックストレージを使用した分散ストレージを作成したいのでrook/cephを導入します。
RBDプロビジョナーが自動で良い感じに冗長化しつつストレージを管理してくれます(ふわふわ)
ストレージの作成
各マシンにSSDを追加します。hyper-vを使ってるので追加してフォーマット
# デバイスを調べる sudo fdisk -l # 未フォーマット状態にする sudo dd if=/dev/zero of=/dev/sdb bs=1M count=100
rook/cephのデプロイ
rook/cephをインストールします。公式クイックスタートガイドの通りにgitをcloneし、rook/cephのオペレーターをデプロイします。
git clone --single-branch --branch v1.12.6 https://github.com/rook/rook.git cd rook/deploy/examples kubectl create -f crds.yaml -f common.yaml -f operator.yaml
cephクラスターの作成
ここでストレージ容量やデバイスなどを設定します。
rook/deploy/examplesにあるcluster.yamlを適当な場所にコピーして編集します。
cluster.yaml
apiVersion: ceph.rook.io/v1 kind: CephCluster metadata: name: rook-ceph namespace: rook-ceph spec: cephVersion: image: quay.io/ceph/ceph:v17.2.6 allowUnsupported: false dataDirHostPath: /var/lib/rook skipUpgradeChecks: false continueUpgradeAfterChecksEvenIfNotHealthy: false waitTimeoutForHealthyOSDInMinutes: 10 mon: count: 3 allowMultiplePerNode: false mgr: count: 2 allowMultiplePerNode: false modules: - name: pg_autoscaler enabled: true dashboard: enabled: true ssl: true monitoring: enabled: false metricsDisabled: false network: connections: encryption: enabled: false compression: enabled: false requireMsgr2: false crashCollector: disable: false logCollector: enabled: true periodicity: daily maxLogSize: 500M cleanupPolicy: confirmation: "" sanitizeDisks: method: quick dataSource: zero iteration: 1 allowUninstallWithVolumes: false annotations: labels: resources: removeOSDsIfOutAndSafeToRemove: false storage: # 指定のノードの指定ストレージで動かす useAllNodes: false nodes: - name: "master" devices: - name: "/dev/sdb" - name: "worker1" devices: - name: "/dev/sdb" - name: "worker2" devices: - name: "/dev/sdb" config: onlyApplyOSDPlacement: false disruptionManagement: managePodBudgets: true osdMaintenanceTimeout: 30 pgHealthCheckTimeout: 0 healthCheck: daemonHealth: mon: disabled: false interval: 45s osd: disabled: false interval: 60s status: disabled: false interval: 60s livenessProbe: mon: disabled: false mgr: disabled: false osd: disabled: false startupProbe: mon: disabled: false mgr: disabled: false osd: disabled: false
マスターノードで動かす場合
可用性を保つにはmon(モニター)の数を3以上の奇数にする必要がありますが、テスト環境などでマスターノードでも動かす場合
kubectl label nodes master node-role.kubernetes.io/mon=
各ノードで上記を実行し、mon(モニター)を動かすノードを指定するタグ(node-role.kubernetes.io/mon)をつけています。さらにcluster.yamlのspecに下記を追加してマスターノードでも動くようにします。
placement: mon: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: node-role.kubernetes.io/mon operator: Exists #マスターノードでも動かす tolerations: - key: node-role.kubernetes.io/control-plane operator: Exists
保存したら下記でデプロイします。
kubectl apply -f cluster.yaml
立ち上がりました。
ストレージクラスの作成
ceph-storageclass.yaml
など適当な名前でファイルを作成して以下を記述します。
apiVersion: ceph.rook.io/v1 kind: CephBlockPool metadata: name: my-replicated-pool namespace: rook-ceph spec: replicated: size: 3 --- apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: rook-ceph-block provisioner: rook-ceph.rbd.csi.ceph.com parameters: clusterID: rook-ceph pool: my-replicated-pool imageFormat: "2" imageFeatures: layering csi.storage.k8s.io/provisioner-secret-name: rook-csi-rbd-provisioner csi.storage.k8s.io/provisioner-secret-namespace: rook-ceph csi.storage.k8s.io/node-stage-secret-name: rook-csi-rbd-node csi.storage.k8s.io/node-stage-secret-namespace: rook-ceph reclaimPolicy: Retain allowVolumeExpansion: true
下記でデプロイ
kubectl apply -f ceph-storageclass.yaml
kubectl get storageclass
コマンドで作成したストレージクラスを確認出来ます。
下記でデフォルトのPVCとして登録できます。
kubectl patch storageclass rook-ceph-block -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
次回はこのストレージクラスを使用してcrunkey PGOとpgpool-IIを導入したPostgreSQLのデーターベースクラスタを作成します。