CSI(์ปจํ
์ด๋ ์คํ ๋ฆฌ์ง ์ธํฐํ์ด์ค)๋ Kubernetes์ ์คํ ๋ฆฌ์ง ์์คํ
๊ฐ์ ํตํฉ ์ธํฐํ์ด์ค์
๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฏธ ๊ทธ๊ฒ์ ๋ํด ๊ฐ๋ตํ๊ฒ ์ด์ผ๊ธฐํ์ต๋๋ค. , ์ค๋์ CSI์ Ceph์ ์กฐํฉ์ ๋ํด ์์ธํ ์ดํด๋ณด๊ฒ ์ต๋๋ค. Kubernetes ํด๋ฌ์คํฐ์.
์ด ๊ธฐ์ฌ๋ ์ดํดํ๊ธฐ ์ฝ๋๋ก ์ฝ๊ฐ ๋จ์ํ๋ ์ค์ ์ฌ๋ก๋ฅผ ์ ๊ณตํฉ๋๋ค. Ceph ๋ฐ Kubernetes ํด๋ฌ์คํฐ ์ค์น ๋ฐ ๊ตฌ์ฑ์ ๊ณ ๋ คํ์ง ์์ต๋๋ค.
์ด๋ป๊ฒ ์๋ํ๋์ง ๊ถ๊ธํ์ ๊ฐ์?

๋ฐ๋ผ์ Kubernetes ํด๋ฌ์คํฐ๋ฅผ ์์ฝ๊ฒ ๋ฐฐํฌํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, . ๊ทผ์ฒ์์ ์๋ํ๋ Ceph ํด๋ฌ์คํฐ๊ฐ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ด ์ค์นํ ์๋ ์์ต๋๋ค. . ๊ทธ๋ค ์ฌ์ด์ ์์ฐ์ ์ํด์๋ ์ต์ 10Gbit/s์ ๋์ญํญ์ ๊ฐ์ง ๋คํธ์ํฌ๊ฐ ์์ด์ผ ํ๋ค๋ ์ ์ ์ธ๊ธํ ํ์๊ฐ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
์ด๊ฑฐ ๋ค ๋ชจ์์ผ๋ฉด ๊ฐ์!
๋จผ์ Ceph ํด๋ฌ์คํฐ ๋ ธ๋ ์ค ํ๋๋ก ์ด๋ํ์ฌ ๋ชจ๋ ๊ฒ์ด ์ฌ๋ฐ๋ฅธ์ง ํ์ธํ๊ฒ ์ต๋๋ค.
ceph health
ceph -s๋ค์์ผ๋ก RBD ๋์คํฌ์ฉ ํ์ ์ฆ์ ์์ฑํ๊ฒ ์ต๋๋ค.
ceph osd pool create kube 32
ceph osd pool application enable kube rbdKubernetes ํด๋ฌ์คํฐ๋ก ๋์ด๊ฐ๊ฒ ์ต๋๋ค. ๋จผ์ RBD์ฉ Ceph CSI ๋๋ผ์ด๋ฒ๋ฅผ ์ค์นํ๊ฒ ์ต๋๋ค. ์์๋๋ก Helm์ ํตํด ์ค์นํ๊ฒ ์ต๋๋ค.
์ฐจํธ์ ํจ๊ป ์ ์ฅ์๋ฅผ ์ถ๊ฐํ๊ณ ceph-csi-rbd ์ฐจํธ์ ๋ํ ๋ณ์ ์ธํธ๋ฅผ ์ป์ต๋๋ค.
helm repo add ceph-csi https://ceph.github.io/csi-charts
helm inspect values ceph-csi/ceph-csi-rbd > cephrbd.yml์ด์ cephrbd.yml ํ์ผ์ ์์ฑํด์ผ ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ ค๋ฉด Ceph์์ ๋ชจ๋ํฐ์ ํด๋ฌ์คํฐ ID์ IP ์ฃผ์๋ฅผ ์ฐพ์ผ์ญ์์ค.
ceph fsid # ัะฐะบ ะผั ัะทะฝะฐะตะผ clusterID
ceph mon dump # ะฐ ัะฐะบ ัะฒะธะดะธะผ IP-ะฐะดัะตัะฐ ะผะพะฝะธัะพัะพะฒ์ป์ ๊ฐ์ cephrbd.yml ํ์ผ์ ์ ๋ ฅํฉ๋๋ค. ๋์์ PSP ์ ์ฑ (Pod ๋ณด์ ์ ์ฑ ) ์์ฑ์ ํ์ฑํํฉ๋๋ค. ์น์ ์ ์ต์ ๋ ธ๋ํ๋ฌ๊ทธ์ธ ะธ ์ ๊ณต์ ์ด๋ฏธ ํ์ผ์ ์๋ ๊ฒฝ์ฐ ์๋์ ๊ฐ์ด ์์ ํ ์ ์์ต๋๋ค.
csiConfig:
- clusterID: "bcd0d202-fba8-4352-b25d-75c89258d5ab"
monitors:
- "v2:172.18.8.5:3300/0,v1:172.18.8.5:6789/0"
- "v2:172.18.8.6:3300/0,v1:172.18.8.6:6789/0"
- "v2:172.18.8.7:3300/0,v1:172.18.8.7:6789/0"
nodeplugin:
podSecurityPolicy:
enabled: true
provisioner:
podSecurityPolicy:
enabled: true๋ค์์ผ๋ก ๋จ์ ๊ฒ์ Kubernetes ํด๋ฌ์คํฐ์ ์ฐจํธ๋ฅผ ์ค์นํ๋ ๊ฒ์ ๋๋ค.
helm upgrade -i ceph-csi-rbd ceph-csi/ceph-csi-rbd -f cephrbd.yml -n ceph-csi-rbd --create-namespace์ข์ต๋๋ค. RBD ๋๋ผ์ด๋ฒ๊ฐ ์๋ํฉ๋๋ค!
Kubernetes์์ ์๋ก์ด StorageClass๋ฅผ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค. ์ด๋ฅผ ์ํด์๋ ๋ค์ Ceph๋ฅผ ์ฝ๊ฐ ์กฐ์ํด์ผ ํฉ๋๋ค.
Ceph์์ ์ ์ฌ์ฉ์๋ฅผ ์์ฑํ๊ณ ๊ทธ์๊ฒ ํ์ ์ธ ์ ์๋ ๊ถํ์ ๋ถ์ฌํฉ๋๋ค. ํ๋ธ:
ceph auth get-or-create client.rbdkube mon 'profile rbd' osd 'profile rbd pool=kube'์ด์ ์ก์ธ์ค ํค๊ฐ ์ฌ์ ํ ์๋์ง ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค.
ceph auth get-key client.rbdkube๋ช ๋ น์ ๋ค์๊ณผ ๊ฐ์ด ์ถ๋ ฅ๋ฉ๋๋ค.
AQCO9NJbhYipKRAAMqZsnqqS/T8OYQX20xIa9A==์ด ๊ฐ์ Kubernetes ํด๋ฌ์คํฐ์ Secret์ ์ถ๊ฐํด ๋ณด๊ฒ ์ต๋๋ค(ํ์ํ ๊ฒฝ์ฐ). ์ฌ์ฉ์ ํค:
---
apiVersion: v1
kind: Secret
metadata:
name: csi-rbd-secret
namespace: ceph-csi-rbd
stringData:
# ะะฝะฐัะตะฝะธั ะบะปััะตะน ัะพะพัะฒะตัััะฒััั ะธะผะตะฝะธ ะฟะพะปัะทะพะฒะฐัะตะปั ะธ ะตะณะพ ะบะปััั, ะบะฐะบ ัะบะฐะทะฐะฝะพ ะฒ
# ะบะปะฐััะตัะต Ceph. ID ัะทะตัะฐ ะดะพะปะถะตะฝ ะธะผะตัั ะดะพัััะฟ ะบ ะฟัะปั,
# ัะบะฐะทะฐะฝะฝะพะผั ะฒ storage class
userID: rbdkube
userKey: <user-key>๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ๋น๋ฐ์ ๋ง๋ญ๋๋ค:
kubectl apply -f secret.yaml๋ค์์ผ๋ก ๋ค์๊ณผ ๊ฐ์ StorageClass ๋งค๋ํ์คํธ๊ฐ ํ์ํฉ๋๋ค.
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: csi-rbd-sc
provisioner: rbd.csi.ceph.com
parameters:
clusterID: <cluster-id>
pool: kube
imageFeatures: layering
# ะญัะธ ัะตะบัะตัั ะดะพะปะถะฝั ัะพะดะตัะถะฐัั ะดะฐะฝะฝัะต ะดะปั ะฐะฒัะพัะธะทะฐัะธะธ
# ะฒ ะฒะฐั ะฟัะป.
csi.storage.k8s.io/provisioner-secret-name: csi-rbd-secret
csi.storage.k8s.io/provisioner-secret-namespace: ceph-csi-rbd
csi.storage.k8s.io/controller-expand-secret-name: csi-rbd-secret
csi.storage.k8s.io/controller-expand-secret-namespace: ceph-csi-rbd
csi.storage.k8s.io/node-stage-secret-name: csi-rbd-secret
csi.storage.k8s.io/node-stage-secret-namespace: ceph-csi-rbd
csi.storage.k8s.io/fstype: ext4
reclaimPolicy: Delete
allowVolumeExpansion: true
mountOptions:
- discard์์ฑํด์ผ ํจ ํด๋ฌ์คํฐID, ์ฐ๋ฆฌ ํ์์ ์ด๋ฏธ ๋ฐฐ์ด ๋ด์ฉ์ ๋๋ค. ์ธํ fsid์ ํด๋ฆญํ๊ณ ์ด ๋งค๋ํ์คํธ๋ฅผ Kubernetes ํด๋ฌ์คํฐ์ ์ ์ฉํฉ๋๋ค.
kubectl apply -f storageclass.yamlํด๋ฌ์คํฐ๊ฐ ์ด๋ป๊ฒ ํจ๊ป ์๋ํ๋์ง ํ์ธํ๊ธฐ ์ํด ๋ค์ PVC(์๊ตฌ ๋ณผ๋ฅจ ์ฒญ๊ตฌ)๋ฅผ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: rbd-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: csi-rbd-scKubernetes๊ฐ Ceph์์ ์์ฒญ๋ ๋ณผ๋ฅจ์ ์ด๋ป๊ฒ ์์ฑํ๋์ง ์ฆ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
kubectl get pvc
kubectl get pv๋ชจ๋ ๊ฒ์ด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค! Ceph ์ชฝ์์๋ ์ด๋ค ๋ชจ์ต์ธ๊ฐ์?
ํ์ ๋ณผ๋ฅจ ๋ชฉ๋ก์ ์ป๊ณ ๋ณผ๋ฅจ์ ๋ํ ์ ๋ณด๋ฅผ ๋ด
๋๋ค.
rbd ls -p kube
rbd -p kube info csi-vol-eb3d257d-8c6c-11ea-bff5-6235e7640653 # ััั, ะบะพะฝะตัะฝะพ ะถะต, ะฑัะดะตั ะดััะณะพะน ID ัะพะผะฐ, ะบะพัะพััะน ะฒัะดะฐะปะฐ ะฟัะตะดัะดััะฐั ะบะพะผะฐะฝะดะฐ์ด์ RBD ๋ณผ๋ฅจ ํฌ๊ธฐ ์กฐ์ ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
pvc.yaml ๋งค๋ํ์คํธ์ ๋ณผ๋ฅจ ํฌ๊ธฐ๋ฅผ 2Gi๋ก ๋ณ๊ฒฝํ๊ณ ์ ์ฉํฉ๋๋ค.
kubectl apply -f pvc.yaml๋ณ๊ฒฝ ์ฌํญ์ด ์ ์ฉ๋ ๋๊น์ง ๊ธฐ๋ค๋ ธ๋ค๊ฐ ๋ณผ๋ฅจ ํฌ๊ธฐ๋ฅผ ๋ค์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
rbd -p kube info csi-vol-eb3d257d-8c6c-11ea-bff5-6235e7640653
kubectl get pv
kubectl get pvcPVC์ ํฌ๊ธฐ๋ ๋ณํ์ง ์์ ๊ฒ์ ์ ์ ์์ต๋๋ค. ์ด์ ๋ฅผ ์์๋ณด๋ ค๋ฉด Kubernetes์ PVC์ YAML ์ค๋ช ์ ์ฟผ๋ฆฌํ๋ฉด ๋ฉ๋๋ค.
kubectl get pvc rbd-pvc -o yaml๋ฌธ์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ฉ์์ง: ์ฌ์ฉ์๊ฐ ํฌ๋๋ฅผ (๋ค์) ์์ํ์ฌ ๋ ธ๋์์ ๋ณผ๋ฅจ์ ํ์ผ ์์คํ ํฌ๊ธฐ ์กฐ์ ์ ์๋ฃํ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ์ค์ ๋๋ค. ์ ํ: FileSystemResizePending
์ฆ, ๋์คํฌ๋ ์ปค์ก์ง๋ง ๋์คํฌ์ ํ์ผ ์์คํ
์ ์ปค์ง์ง ์์์ต๋๋ค.
ํ์ผ ์์คํ
์ ํ์ฅํ๋ ค๋ฉด ๋ณผ๋ฅจ์ ๋ง์ดํธํด์ผ ํฉ๋๋ค. ์ฐ๋ฆฌ๋๋ผ์์๋ ์์ฑ๋ PVC/PV๊ฐ ํ์ฌ ์ด๋ ํ ๋ฐฉ์์ผ๋ก๋ ์ฌ์ฉ๋์ง ์๊ณ ์๋ค.
์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ด ํ ์คํธ Pod๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
---
apiVersion: v1
kind: Pod
metadata:
name: csi-rbd-demo-pod
spec:
containers:
- name: web-server
image: nginx:1.17.6
volumeMounts:
- name: mypvc
mountPath: /data
volumes:
- name: mypvc
persistentVolumeClaim:
claimName: rbd-pvc
readOnly: false์ด์ PVC๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
kubectl get pvcํฌ๊ธฐ๊ฐ ๋ณ๊ฒฝ๋์์ต๋๋ค. ๋ชจ๋ ๊ฒ์ด ์ ์์ ๋๋ค.
์ฒซ ๋ฒ์งธ ๋ถ๋ถ์์๋ RBD ๋ธ๋ก ์ฅ์น(Rados Block Device์ ์ฝ์)๋ฅผ ์ฌ์ฉํ์ฌ ์์
ํ์ง๋ง ์ฌ๋ฌ ๋ง์ดํฌ๋ก์๋น์ค๊ฐ ์ด ๋์คํฌ๋ฅผ ๋์์ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ์๋ ์ด ์์
์ ์ํํ ์ ์์ต๋๋ค. CephFS๋ ๋์คํฌ ์ด๋ฏธ์ง๋ณด๋ค๋ ํ์ผ ์์
์ ํจ์ฌ ๋ ์ ํฉํฉ๋๋ค.
Ceph ๋ฐ Kubernetes ํด๋ฌ์คํฐ์ ์๋ฅผ ์ฌ์ฉํ์ฌ CephFS์ ์๋ํ๋๋ก CSI ๋ฐ ๊ธฐํ ํ์ํ ์ํฐํฐ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
์๋ก์ด Helm ์ฐจํธ์์ ํ์ํ ๊ฐ์ ๊ฐ์ ธ์ค๊ฒ ์ต๋๋ค.
helm inspect values ceph-csi/ceph-csi-cephfs > cephfs.yml์ด๋ฒ์๋ cephfs.yml ํ์ผ์ ์์ฑํด์ผ ํฉ๋๋ค. ์ด์ ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก Ceph ๋ช ๋ น์ด ๋์์ด ๋ฉ๋๋ค.
ceph fsid
ceph mon dump๋ค์๊ณผ ๊ฐ์ ๊ฐ์ผ๋ก ํ์ผ์ ์ฑ์ฐ์ญ์์ค.
csiConfig:
- clusterID: "bcd0d202-fba8-4352-b25d-75c89258d5ab"
monitors:
- "172.18.8.5:6789"
- "172.18.8.6:6789"
- "172.18.8.7:6789"
nodeplugin:
httpMetrics:
enabled: true
containerPort: 8091
podSecurityPolicy:
enabled: true
provisioner:
replicaCount: 1
podSecurityPolicy:
enabled: true๋ชจ๋ํฐ ์ฃผ์๋ ์ฃผ์:ํฌํธ๋ผ๋ ๊ฐ๋จํ ํ์์ผ๋ก ์ง์ ๋ฉ๋๋ค. ๋
ธ๋์ cephfs๋ฅผ ๋ง์ดํธํ๊ธฐ ์ํด ์ด๋ฌํ ์ฃผ์๋ v2 ๋ชจ๋ํฐ ํ๋กํ ์ฝ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์์ง ๋ชจ๋ฅด๋ ์ปค๋ ๋ชจ๋๋ก ์ ์ก๋ฉ๋๋ค.
Kubespray๊ฐ ์ค์นํ nginx-proxy์ ์ถฉ๋ํ์ง ์๋๋ก httpMetrics์ฉ ํฌํธ๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค(Prometheus๋ ๋ฉํธ๋ฆญ ๋ชจ๋ํฐ๋ง์ ์ํด ํด๋น ํฌํธ๋ก ์ด๋ํฉ๋๋ค). ์ด๊ฒ์ด ํ์ํ์ง ์์ ์๋ ์์ต๋๋ค.
Kubernetes ํด๋ฌ์คํฐ์ Helm ์ฐจํธ๋ฅผ ์ค์นํฉ๋๋ค.
helm upgrade -i ceph-csi-cephfs ceph-csi/ceph-csi-cephfs -f cephfs.yml -n ceph-csi-cephfs --create-namespaceCeph ๋ฐ์ดํฐ ์ ์ฅ์๋ก ์ด๋ํ์ฌ ๊ฑฐ๊ธฐ์ ๋ณ๋์ ์ฌ์ฉ์๋ฅผ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค. ์ค๋ช ์์๋ CephFS ํ๋ก๋น์ ๋์ ํด๋ฌ์คํฐ ๊ด๋ฆฌ์ ์ก์ธ์ค ๊ถํ์ด ํ์ํ๋ค๊ณ ๋ช ์๋์ด ์์ต๋๋ค. ํ์ง๋ง ์ฐ๋ฆฌ๋ ๋ณ๋์ ์ฌ์ฉ์๋ฅผ ์์ฑํ๊ฒ ์ต๋๋ค. fs ์ ํ๋ ๊ถ๋ฆฌ:
ceph auth get-or-create client.fs mon 'allow r' mgr 'allow rw' mds 'allow rws' osd 'allow rw pool=cephfs_data, allow rw pool=cephfs_metadata'๊ทธ๋ฆฌ๊ณ ์ฆ์ ๊ทธ์ ์ก์ธ์ค ํค๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ๋์ค์ ํ์ํฉ๋๋ค.
ceph auth get-key client.fsSecret๊ณผ StorageClass๋ฅผ ๋ณ๋๋ก ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค.
์๋ก์ด ๊ฒ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฏธ RBD์ ์์์ ์ด๊ฒ์ ๋ณด์์ต๋๋ค:
---
apiVersion: v1
kind: Secret
metadata:
name: csi-cephfs-secret
namespace: ceph-csi-cephfs
stringData:
# ะะตะพะฑั
ะพะดะธะผะพ ะดะปั ะดะธะฝะฐะผะธัะตัะบะธ ัะพะทะดะฐะฒะฐะตะผัั
ัะพะผะพะฒ
adminID: fs
adminKey: <ะฒัะฒะพะด ะฟัะตะดัะดััะตะน ะบะพะผะฐะฝะดั>๋งค๋ํ์คํธ ์ ์ฉ:
kubectl apply -f secret.yaml์ด์ ๋ณ๋์ StorageClass๊ฐ ์์ต๋๋ค.
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: csi-cephfs-sc
provisioner: cephfs.csi.ceph.com
parameters:
clusterID: <cluster-id>
# ะะผั ัะฐะนะปะพะฒะพะน ัะธััะตะผั CephFS, ะฒ ะบะพัะพัะพะน ะฑัะดะตั ัะพะทะดะฐะฝ ัะพะผ
fsName: cephfs
# (ะฝะตะพะฑัะทะฐัะตะปัะฝะพ) ะัะป Ceph, ะฒ ะบะพัะพัะพะผ ะฑัะดัั ั
ัะฐะฝะธัััั ะดะฐะฝะฝัะต ัะพะผะฐ
# pool: cephfs_data
# (ะฝะตะพะฑัะทะฐัะตะปัะฝะพ) ะ ะฐะทะดะตะปะตะฝะฝัะต ะทะฐะฟัััะผะธ ะพะฟัะธะธ ะผะพะฝัะธัะพะฒะฐะฝะธั ะดะปั Ceph-fuse
# ะฝะฐะฟัะธะผะตั:
# fuseMountOptions: debug
# (ะฝะตะพะฑัะทะฐัะตะปัะฝะพ) ะ ะฐะทะดะตะปะตะฝะฝัะต ะทะฐะฟัััะผะธ ะพะฟัะธะธ ะผะพะฝัะธัะพะฒะฐะฝะธั CephFS ะดะปั ัะดัะฐ
# ะกะผ. man mount.ceph ััะพะฑั ัะทะฝะฐัั ัะฟะธัะพะบ ััะธั
ะพะฟัะธะน. ะะฐะฟัะธะผะตั:
# kernelMountOptions: readdir_max_bytes=1048576,norbytes
# ะกะตะบัะตัั ะดะพะปะถะฝั ัะพะดะตัะถะฐัั ะดะพัััะฟั ะดะปั ะฐะดะผะธะฝะฐ ะธ/ะธะปะธ ัะทะตัะฐ Ceph.
csi.storage.k8s.io/provisioner-secret-name: csi-cephfs-secret
csi.storage.k8s.io/provisioner-secret-namespace: ceph-csi-cephfs
csi.storage.k8s.io/controller-expand-secret-name: csi-cephfs-secret
csi.storage.k8s.io/controller-expand-secret-namespace: ceph-csi-cephfs
csi.storage.k8s.io/node-stage-secret-name: csi-cephfs-secret
csi.storage.k8s.io/node-stage-secret-namespace: ceph-csi-cephfs
# (ะฝะตะพะฑัะทะฐัะตะปัะฝะพ) ะัะฐะนะฒะตั ะผะพะถะตั ะธัะฟะพะปัะทะพะฒะฐัั ะปะธะฑะพ ceph-fuse (fuse),
# ะปะธะฑะพ ceph kernelclient (kernel).
# ะัะปะธ ะฝะต ัะบะฐะทะฐะฝะพ, ะฑัะดะตั ะธัะฟะพะปัะทะพะฒะฐัััั ะผะพะฝัะธัะพะฒะฐะฝะธะต ัะพะผะพะฒ ะฟะพ ัะผะพะปัะฐะฝะธั,
# ััะพ ะพะฟัะตะดะตะปัะตััั ะฟะพะธัะบะพะผ ceph-fuse ะธ mount.ceph
# mounter: kernel
reclaimPolicy: Delete
allowVolumeExpansion: true
mountOptions:
- debug์ฌ๊ธฐ์ ์ฑ์๋ณด์ ํด๋ฌ์คํฐID Kubernetes์ ์ ์ฉ ๊ฐ๋ฅ:
kubectl apply -f storageclass.yamlะัะพะฒะตัะบะฐ
ํ์ธํ๊ธฐ ์ํด ์ด์ ์์ ๊ฐ์ด PVC๋ฅผ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค.
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: csi-cephfs-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
storageClassName: csi-cephfs-sc๊ทธ๋ฆฌ๊ณ PVC/PV๊ฐ ์๋์ง ํ์ธํฉ๋๋ค.
kubectl get pvc
kubectl get pvCephFS์ ํ์ผ๊ณผ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ณด๋ ค๋ฉด ์ด ํ์ผ ์์คํ ์ ์ด๋๊ฐ์ ๋ง์ดํธํ๋ฉด ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด ์๋์ ๊ฐ์ต๋๋ค.
Ceph ํด๋ฌ์คํฐ ๋ ธ๋ ์ค ํ๋๋ก ์ด๋ํ์ฌ ๋ค์ ์์ ์ ์ํํด ๋ณด๊ฒ ์ต๋๋ค.
# ะขะพัะบะฐ ะผะพะฝัะธัะพะฒะฐะฝะธั
mkdir -p /mnt/cephfs
# ะกะพะทะดะฐัะผ ัะฐะนะป ั ะบะปััะพะผ ะฐะดะผะธะฝะธัััะฐัะพัะฐ
ceph auth get-key client.admin >/etc/ceph/secret.key
# ะะพะฑะฐะฒะปัะตะผ ะทะฐะฟะธัั ะฒ /etc/fstab
# !! ะะทะผะตะฝัะตะผ ip ะฐะดัะตั ะฝะฐ ะฐะดัะตั ะฝะฐัะตะณะพ ัะทะปะฐ
echo "172.18.8.6:6789:/ /mnt/cephfs ceph name=admin,secretfile=/etc/ceph/secret.key,noatime,_netdev 0 2" >> /etc/fstab
mount /mnt/cephfs๋ฌผ๋ก ์ด์ ๊ฐ์ Ceph ๋ ธ๋์ FS๋ฅผ ๋ง์ดํธํ๋ ๊ฒ์ ํ๋ จ ๋ชฉ์ ์๋ง ์ ํฉํฉ๋๋ค. . ํ๋ก๋์ ํ๊ฒฝ์์๋ ๋๊ตฌ๋ ์ด๋ฐ ์์ ์ ์ํํ์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ค์ํ ํ์ผ์ ์ค์๋ก ์ญ์ ํ ์ํ์ด ๋์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก CephFS์ ๊ฒฝ์ฐ ๋ณผ๋ฅจ ํฌ๊ธฐ ์กฐ์ ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค. Kubernetes๋ก ๋์๊ฐ์ PVC์ ๋ํ ๋งค๋ํ์คํธ๋ฅผ ํธ์งํด ๋ณด๊ฒ ์ต๋๋ค. ํฌ๊ธฐ๋ฅผ ์๋ฅผ ๋ค์ด 7Gi๋ก ๋๋ฆฝ๋๋ค.
ํธ์ง๋ ํ์ผ์ ์ ์ฉํด ๋ณด๊ฒ ์ต๋๋ค.
kubectl apply -f pvc.yamlํ ๋น๋์ด ์ด๋ป๊ฒ ๋ณ๊ฒฝ๋์๋์ง ์์๋ณด๊ธฐ ์ํด ๋ง์ดํธ๋ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
getfattr -n ceph.quota.max_bytes <ะบะฐัะฐะปะพะณ-ั-ะดะฐะฝะฝัะผะธ>์ด ๋ช ๋ น์ด ์๋ํ๋ ค๋ฉด ์์คํ ์ ํจํค์ง๋ฅผ ์ค์นํด์ผ ํ ์๋ ์์ต๋๋ค. ์์ฑ.
๋์ด ๋๋ ต๊ณ ์์ด
์ด๋ฌํ ๋ชจ๋ ์ฃผ๋ฌธ๊ณผ ๊ธด YAML ๋งค๋ํ์คํธ๋ ํ๋ฉด์ ์ผ๋ก๋ ๋ณต์กํด ๋ณด์ด์ง๋ง ์ค์ ๋ก Slurm ํ์๋ค์ ๋งค์ฐ ๋น ๋ฅด๊ฒ ์ต์ํด์ง๋๋ค.
์ด ๊ธฐ์ฌ์์ ์ฐ๋ฆฌ๋ ์ ๊ธ ์์ผ๋ก ๊น์ด ๋ค์ด ๊ฐ์ง ์์์ต๋๋ค. ์ด์ ๋ํ ๊ณต์ ๋ฌธ์๊ฐ ์์ต๋๋ค. Kubernetes ํด๋ฌ์คํฐ๋ก Ceph ์คํ ๋ฆฌ์ง๋ฅผ ์ค์ ํ๋ ์ธ๋ถ ์ ๋ณด์ ๊ด์ฌ์ด ์๋ ๊ฒฝ์ฐ ๋ค์ ๋งํฌ๊ฐ ๋์์ด ๋ ๊ฒ์
๋๋ค.
์ฌ๋ผ ์ฝ์ค์์ ์ข ๋ ๋์๊ฐ CephFS๋ฅผ ํ์ผ ์คํ ๋ฆฌ์ง๋ก ์ฌ์ฉํ ์ค์ ์ ํ๋ฆฌ์ผ์ด์ ์ Kubernetes์ ๋ฐฐํฌํ ์ ์์ต๋๋ค. GET/POST ์์ฒญ์ ํตํด Ceph์์ ํ์ผ์ ์ ์กํ๊ณ ๋ฐ์ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฐ์ดํฐ ์ ์ฅ์ ๋ ๊ด์ฌ์ด ์๋ค๋ฉด ๊ฐ์ ํ์ธ์. . ๋ฒ ํ ํ ์คํธ๊ฐ ์งํ๋๋ ๋์ ๊ฐ์ข๋ฅผ ํ ์ธ๋ ๊ฐ๊ฒฉ์ผ๋ก ์๊ฐํ ์ ์์ผ๋ฉฐ ๊ฐ์ข ๋ด์ฉ์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
๊ธฐ์ฌ ์์ฑ์: Alexander Shvalov, ํ์ง ์์ง๋์ด , ๊ณต์ธ Kubernetes ๊ด๋ฆฌ์, Slurm ๊ณผ์ ์ ์ ์ ๋ฐ ๊ฐ๋ฐ์์ ๋๋ค.
์ถ์ฒ : habr.com
