์ด๋ฌ ์ด์ธ 3์ XNUMX์ผ '์ฟ ๋ฒ๋คํฐ์ค์ ๋ถ์ฐ ๋ฐ์ดํฐ ์ ์ฅ์ ์ํ ๊ด๋ฆฌ ์์คํ
'์ ์ฃผ์ ๋ฆด๋ฆฌ์ค๊ฐ ๋ฐํ๋์์ต๋๋ค.
๊ฐ๋จํ ๋งํด์ Rook์ ์ธํธ์
๋๋ค.
ํ์ฌ ๊ฐ์ฅ ๋ฐ์ ๋ (๊ทธ๋ฆฌ๊ณ
์ฃผ์: Ceph์ ๊ด๋ จ๋ Rook 1.0.0 ๋ฆด๋ฆฌ์ค์ ์ค์ํ ๋ณ๊ฒฝ ์ฌํญ ์ค Ceph Nautilus์ ๋ํ ์ง์๊ณผ CephFS ๋๋ RGW ๋ฒํท์ NFS๋ฅผ ์ฌ์ฉํ๋ ๊ธฐ๋ฅ์ ์ฃผ๋ชฉํ ์ ์์ต๋๋ค. ๋ฌด์๋ณด๋ค๋ ๋์ ๋๋ ์ ์ EdgeFS ์ง์์ด ๋ฒ ํ ์์ค์ผ๋ก ์ฑ์๋์๋ค๋ ์ ์ ๋๋ค.
๋ฐ๋ผ์ ์ด ๊ธฐ์ฌ์์๋ ๋ค์์ ์ํํฉ๋๋ค.
- Rook์ ์ฌ์ฉํ์ฌ Kubernetes ํด๋ฌ์คํฐ์ Ceph๋ฅผ ๋ฐฐํฌํ ๋ ์ด๋ค ์ด์ ์ด ์๋์ง์ ๋ํ ์ง๋ฌธ์ ๋ตํด ๋ณด๊ฒ ์ต๋๋ค.
- ํ๋ก๋์ ์์ Rook์ ์ฌ์ฉํ ๊ฒฝํ๊ณผ ์ธ์์ ๊ณต์ ํ๊ฒ ์ต๋๋ค.
- ์ฐ๋ฆฌ๊ฐ Rook์๊ฒ โ์!โ๋ผ๊ณ ๋งํ๋ ์ด์ ์ ๊ทธ๋ฅผ ์ํ ์ฐ๋ฆฌ์ ๊ณํ์ ๋ํด ์ด์ผ๊ธฐํด ๋ด ์๋ค.
์ผ๋ฐ์ ์ธ ๊ฐ๋ ๊ณผ ์ด๋ก ๋ถํฐ ์์ํ๊ฒ ์ต๋๋ค.
โ๋์๊ฒ ํ ๋ฃจํฌ์ ์ฅ์ ์ด ์์ด์!โ (์ ์ ์๋ ์ฒด์ค ํ๋ ์ด์ด)
Rook์ ์ฃผ์ ์ฅ์ ์ค ํ๋๋ ๋ฐ์ดํฐ ์ ์ฅ์์์ ์ํธ ์์ฉ์ด Kubernetes ๋ฉ์ปค๋์ฆ์ ํตํด ์ํ๋๋ค๋ ๊ฒ์
๋๋ค. ์ด๋ ๋ ์ด์ Ceph๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํด ์ํธ์์ ์ฝ์๋ก ๋ช
๋ น์ ๋ณต์ฌํ ํ์๊ฐ ์์์ ์๋ฏธํฉ๋๋ค.
โ CephFS๋ฅผ ํด๋ฌ์คํฐ์ ๋ฐฐํฌํ์๊ฒ ์ต๋๊น? YAML ํ์ผ์ ์์ฑํ๋ฉด ๋ฉ๋๋ค!
- ๋ฌด์? S3 API๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด ์ ์ฅ์๋ ๋ฐฐํฌํ์๊ฒ ์ต๋๊น? ๋ ๋ฒ์งธ YAML ํ์ผ์ ์์ฑํ๋ฉด ๋ฉ๋๋ค!
Rook์ ์ผ๋ฐ์ ์ธ ์ฐ์ฐ์์ ๋ชจ๋ ๊ท์น์ ๋ฐ๋ผ ์์ฑ๋ฉ๋๋ค. ๊ทธ์์ ์ํธ ์์ฉ์ ๋ค์์ ์ฌ์ฉํ์ฌ ๋ฐ์ํฉ๋๋ค.
๊ฐ์ฒด ์ ์ฅ์๋ฅผ ์์ฑํ๋ ์๋ฅผ ์ฌ์ฉํ์ฌ ์ธ๋ถ ์ฌํญ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. CephObjectStoreUser
.
apiVersion: ceph.rook.io/v1
kind: CephObjectStore
metadata:
name: {{ .Values.s3.crdName }}
namespace: kube-rook
spec:
metadataPool:
failureDomain: host
replicated:
size: 3
dataPool:
failureDomain: host
erasureCoded:
dataChunks: 2
codingChunks: 1
gateway:
type: s3
sslCertificateRef:
port: 80
securePort:
instances: 1
allNodes: false
---
apiVersion: ceph.rook.io/v1
kind: CephObjectStoreUser
metadata:
name: {{ .Values.s3.crdName }}
namespace: kube-rook
spec:
store: {{ .Values.s3.crdName }}
displayName: {{ .Values.s3.username }}
๋ชฉ๋ก์ ํ์๋ ๋งค๊ฐ๋ณ์๋ ๋งค์ฐ ํ์ค์ ์ด๋ฉฐ ์ฃผ์์ด ๊ฑฐ์ ํ์ํ์ง ์์ง๋ง ํ ํ๋ฆฟ ๋ณ์์ ํ ๋น๋ ๋งค๊ฐ๋ณ์์๋ ํน๋ณํ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ผ ๊ฐ์น๊ฐ ์์ต๋๋ค.
์ผ๋ฐ์ ์ธ ์์ ๊ณํ์ YAML ํ์ผ์ ํตํด ๋ฆฌ์์ค๋ฅผ "์ฃผ๋ฌธ"ํ๋ค๋ ์ฌ์ค๋ก ๊ท๊ฒฐ๋ฉ๋๋ค. ์ด๋ฅผ ์ํด ์ด์์๋ ํ์ํ ๋ช ๋ น์ ์คํํ๊ณ ์ถ๊ฐ ์์ ์ ํ ์ ์๋ "๊ทธ๋ ์ง ์์" ๋น๋ฐ์ ๋ฐํํฉ๋๋ค. (์๋ ์ฐธ์กฐ). ๊ทธ๋ฆฌ๊ณ ์์ ๋์ด๋ ๋ณ์์์ ๋ช ๋ น๊ณผ ๋น๋ฐ ์ด๋ฆ์ด ์ปดํ์ผ๋ฉ๋๋ค.
์ด ํ์ ์ด๋ค ํ์ธ๊ฐ์? ๊ฐ์ฒด ์คํ ๋ฆฌ์ง์ฉ ์ฌ์ฉ์๋ฅผ ์์ฑํ ๋ ํฌ๋ ๋ด๋ถ์ Rook ์ด์์๋ ๋ค์์ ์ํํฉ๋๋ค.
radosgw-admin user create --uid="rook-user" --display-name="{{ .Values.s3.username }}"
์ด ๋ช ๋ น์ ์คํํ ๊ฒฐ๊ณผ๋ JSON ๊ตฌ์กฐ์ ๋๋ค.
{
"user_id": "rook-user",
"display_name": "{{ .Values.s3.username }}",
"keys": [
{
"user": "rook-user",
"access_key": "NRWGT19TWMYOB1YDBV1Y",
"secret_key": "gr1VEGIV7rxcP3xvXDFCo4UDwwl2YoNrmtRlIAty"
}
],
...
}
Keys
- S3 API๋ฅผ ํตํด ๊ฐ์ฒด ์คํ ๋ฆฌ์ง์ ์ก์ธ์คํ๋ ค๋ฉด ํฅํ ์ ํ๋ฆฌ์ผ์ด์
์ ํ์ํ ๊ฒ์ด ๋ฌด์์
๋๊น? Rook ์ด์์๋ ์น์ ํ๊ฒ ์ด๋ฅผ ์ ํํ์ฌ ์ด๋ฆ์ด ์๋ ๋น๋ฐ ํ์์ผ๋ก ๋ค์์คํ์ด์ค์ ๋ฃ์ต๋๋ค. rook-ceph-object-user-{{ $.Values.s3.crdName }}-{{ $.Values.s3.username }}
.
์ด ๋น๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ํ๊ฒฝ ๋ณ์๋ก ์ปจํ ์ด๋์ ์ถ๊ฐํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๊ฐ ์ฌ์ฉ์ ํ๊ฒฝ์ ๋ํ ๋ฒํท์ ์๋์ผ๋ก ์์ฑํ๋ Job์ฉ ํ ํ๋ฆฟ์ ์ ๊ณตํ๊ฒ ์ต๋๋ค.
{{- range $bucket := $.Values.s3.bucketNames }}
apiVersion: batch/v1
kind: Job
metadata:
name: create-{{ $bucket }}-bucket-job
annotations:
"helm.sh/hook": post-install
"helm.sh/hook-weight": "2"
spec:
template:
metadata:
name: create-{{ $bucket }}-bucket-job
spec:
restartPolicy: Never
initContainers:
- name: waitdns
image: alpine:3.6
command: ["/bin/sh", "-c", "while ! getent ahostsv4 rook-ceph-rgw-{{ $.Values.s3.crdName }}; do sleep 1; done" ]
- name: config
image: rook/ceph:v1.0.0
command: ["/bin/sh", "-c"]
args: ["s3cmd --configure --access_key=$(ACCESS-KEY) --secret_key=$(SECRET-KEY) -s --no-ssl --dump-config | tee /config/.s3cfg"]
volumeMounts:
- name: config
mountPath: /config
env:
- name: ACCESS-KEY
valueFrom:
secretKeyRef:
name: rook-ceph-object-user-{{ $.Values.s3.crdName }}-{{ $.Values.s3.username }}
key: AccessKey
- name: SECRET-KEY
valueFrom:
secretKeyRef:
name: rook-ceph-object-user-{{ $.Values.s3.crdName }}-{{ $.Values.s3.username }}
key: SecretKey
containers:
- name: create-bucket
image: rook/ceph:v1.0.0
command:
- "s3cmd"
- "mb"
- "--host=rook-ceph-rgw-{{ $.Values.s3.crdName }}"
- "--host-bucket= "
- "s3://{{ $bucket }}"
ports:
- name: s3-no-sll
containerPort: 80
volumeMounts:
- name: config
mountPath: /root
volumes:
- name: config
emptyDir: {}
---
{{- end }}
์ด ์์ ์ ๋์ด๋ ๋ชจ๋ ์์ ์ Kubernetes ํ๋ ์์ํฌ ๋ด์์ ์ํ๋์์ต๋๋ค. YAML ํ์ผ์ ์ค๋ช ๋ ๊ตฌ์กฐ๋ Git ์ ์ฅ์์ ์ ์ฅ๋๋ฉฐ ์ฌ๋ฌ ๋ฒ ์ฌ์ฌ์ฉ๋ฉ๋๋ค. ์ฐ๋ฆฌ๋ ์ด๊ฒ์ด DevOps ์์ง๋์ด์ CI/CD ํ๋ก์ธ์ค ์ ์ฒด์ ํฐ ์ฅ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
Rook๊ณผ Rados์ ๋ง์กฑํจ
Ceph + RBD ์กฐํฉ์ ์ฌ์ฉํ๋ฉด ํฌ๋์ ๋ณผ๋ฅจ์ ๋ง์ดํธํ๋ ๋ฐ ํน์ ์ ํ์ด ์ ์ฉ๋ฉ๋๋ค.
ํนํ, ์ํ ์ ์ฅ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์๋ํ๋ ค๋ฉด ๋ค์์คํ์ด์ค์ Ceph์ ์ก์ธ์คํ๊ธฐ ์ํ ๋น๋ฐ์ด ํฌํจ๋์ด์ผ ํฉ๋๋ค. ๋ค์์คํ์ด์ค์ 2~3๊ฐ์ ํ๊ฒฝ์ด ์์ด๋ ๊ด์ฐฎ์ต๋๋ค. ๊ฐ์ ๋น๋ฐ์ ์๋์ผ๋ก ๋ณต์ฌํ ์ ์์ต๋๋ค. ํ์ง๋ง ๊ฐ ๊ธฐ๋ฅ์ ๋ํด ์์ฒด ๋ค์์คํ์ด์ค๊ฐ ์๋ ๋ณ๋์ ํ๊ฒฝ์ด ๊ฐ๋ฐ์๋ฅผ ์ํด ์์ฑ๋๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
์ฐ๋ฆฌ๋ ๋ค์์ ์ฌ์ฉํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ์ค์ค๋ก ํด๊ฒฐํ์ต๋๋ค.
#! /bin/bash
if [[ $1 == โ--configโ ]]; then
cat <<EOF
{"onKubernetesEvent":[
{"name": "OnNewNamespace",
"kind": "namespace",
"event": ["add"]
}
]}
EOF
else
NAMESPACE=$(kubectl get namespace -o json | jq '.items | max_by( .metadata.creationTimestamp ) | .metadata.name')
kubectl -n ${CEPH_SECRET_NAMESPACE} get secret ${CEPH_SECRET_NAME} -o json | jq ".metadata.namespace="${NAMESPACE}"" | kubectl apply -f -
fi
๊ทธ๋ฌ๋ Rook์ ์ฌ์ฉํ๋ฉด ์ด ๋ฌธ์ ๊ฐ ์ ํ ๋ฐ์ํ์ง ์์ต๋๋ค. ์ฅ์ฐฉ ํ๋ก์ธ์ค๋ ๋ค์์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์์ฒด ๋๋ผ์ด๋ฒ๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ฉ๋๋ค.
Rook์ ๋ง์ ๋ฌธ์ ๋ฅผ ์๋์ผ๋ก ํด๊ฒฐํ๋ฏ๋ก ์๋ก์ด ํ๋ก์ ํธ์์ ์ด๋ฅผ ์ฌ์ฉํ๋๋ก ๊ถ์ฅ๋ฉ๋๋ค.
๋ฃจํฌ ๊ณต์ฑ์
์์ฒด์ ์ผ๋ก ์คํ์ ์ํํ ์ ์๋๋ก Rook ๋ฐ Ceph๋ฅผ ๋ฐฐํฌํ์ฌ ์ค์ต์ ์๋ฃํด ๋ณด๊ฒ ์ต๋๋ค. ์ด ๋๊ณต๋ถ๋ฝ์ ํ์๋ฅผ ๋ ์ฝ๊ฒ ์ต๊ฒฉํ ์ ์๋๋ก ๊ฐ๋ฐ์๋ Helm ํจํค์ง๋ฅผ ์ค๋นํ์ต๋๋ค. ๋ค์ด๋ก๋ํ์:
$ helm fetch rook-master/rook-ceph --untar --version 1.0.0
ํ์ผ์์ rook-ceph/values.yaml
๋ค์ํ ์ค์ ์ ์ฐพ์ ์ ์์ต๋๋ค. ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ์์ด์ ํธ์ ๊ฒ์์ ๋ํ ํ์ฉ ๋ฒ์๋ฅผ ์ง์ ํ๋ ๊ฒ์
๋๋ค. ์ฐ๋ฆฌ๋ ์ค์ผ/๊ด์ฉ ๋ฉ์ปค๋์ฆ์ด ์ด๋ค ์ฉ๋๋ก ์ฌ์ฉ๋ ์ ์๋์ง ์์ธํ ์ค๋ช
ํ์ต๋๋ค.
๊ฐ๋จํ ๋งํด์, ์ฐ๋ฆฌ๋ ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์ ํฌ๋๊ฐ ๋ฐ์ดํฐ ์คํ ๋ฆฌ์ง ๋์คํฌ์ ๋์ผํ ๋ ธ๋์ ์์นํ๋ ๊ฒ์ ์ํ์ง ์์ต๋๋ค. ์ด์ ๋ ๊ฐ๋จํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด Rook ์์ด์ ํธ์ ์์ ์ด ์ ํ๋ฆฌ์ผ์ด์ ์์ฒด์ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค.
๊ทธ๋ผ ํ์ผ์ ์ด์ด๋ณด์ธ์ rook-ceph/values.yaml
์ข์ํ๋ ํธ์ง๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋์ ๋ค์ ๋ธ๋ก์ ์ถ๊ฐํ์ญ์์ค.
discover:
toleration: NoExecute
tolerationKey: node-role/storage
agent:
toleration: NoExecute
tolerationKey: node-role/storage
mountSecurityMode: Any
๋ฐ์ดํฐ ์ ์ฅ์ฉ์ผ๋ก ์์ฝ๋ ๊ฐ ๋ ธ๋์ ๋ํด ํด๋น taint๋ฅผ ์ถ๊ฐํฉ๋๋ค.
$ kubectl taint node ${NODE_NAME} node-role/storage="":NoExecute
๊ทธ๋ฐ ๋ค์ ๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ Helm ์ฐจํธ๋ฅผ ์ค์นํฉ๋๋ค.
$ helm install --namespace ${ROOK_NAMESPACE} ./rook-ceph
์ด์ ํด๋ฌ์คํฐ๋ฅผ ์์ฑํ๊ณ ์์น๋ฅผ ์ง์ ํด์ผ ํฉ๋๋ค.
apiVersion: ceph.rook.io/v1
kind: CephCluster
metadata:
clusterName: "ceph"
finalizers:
- cephcluster.ceph.rook.io
generation: 1
name: rook-ceph
spec:
cephVersion:
image: ceph/ceph:v13
dashboard:
enabled: true
dataDirHostPath: /var/lib/rook/osd
mon:
allowMultiplePerNode: false
count: 3
network:
hostNetwork: true
rbdMirroring:
workers: 1
placement:
all:
tolerations:
- key: node-role/storage
operator: Exists
storage:
useAllNodes: false
useAllDevices: false
config:
osdsPerDevice: "1"
storeType: filestore
resources:
limits:
memory: "1024Mi"
requests:
memory: "1024Mi"
nodes:
- name: host-1
directories:
- path: "/mnt/osd"
- name: host-2
directories:
- path: "/mnt/osd"
- name: host-3
directories:
- path: "/mnt/osd"
Ceph ์ํ ํ์ธ ์ค - ํ์ธ ๊ฐ๋ฅ HEALTH_OK
:
$ kubectl -n ${ROOK_NAMESPACE} exec $(kubectl -n ${ROOK_NAMESPACE} get pod -l app=rook-ceph-operator -o name -o jsonpath='{.items[0].metadata.name}') -- ceph -s
๋์์ ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์๋ ํฌ๋๊ฐ Ceph์ฉ์ผ๋ก ์์ฝ๋ ๋ ธ๋์ ์์ง ์์์ง ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค.
$ kubectl -n ${APPLICATION_NAMESPACE} get pods -o custom-columns=NAME:.metadata.name,NODE:.spec.nodeName
๋ํ ์ํ๋ ๋๋ก ์ถ๊ฐ ๊ตฌ์ฑ ์์๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ์ด์ ๋ํ ์์ธํ ๋ด์ฉ์
๋ฃจํฌ์ ํํฌ: ๋ฃจํฌ๋ ๋ชจ๋ ๊ฒ์ ์ถฉ๋ถํฉ๋๊น?
๋ณด์๋ค์ํผ Rook์ ๊ฐ๋ฐ์ด ๋ณธ๊ฒฉํ๋๊ณ ์์ต๋๋ค. ๊ทธ๋ฌ๋ Ceph์ ์๋ ๊ตฌ์ฑ์ ์์ ํ ํฌ๊ธฐํ ์ ์๋ ๋ฌธ์ ๊ฐ ์ฌ์ ํ ์์ต๋๋ค.
- ๋ฃจํฌ ๋๋ผ์ด๋ฒ ์์
ํ ์ ์๋ค ๋ง์ดํธ๋ ๋ธ๋ก ์ฌ์ฉ์ ๋ํ ์ธก์ ํญ๋ชฉ์ ๋ด๋ณด๋ด๋ฉด ๋ชจ๋ํฐ๋ง์ด ๋ถ๊ฐ๋ฅํด์ง๋๋ค. - Flexvolume ๋ฐ CSI
๋ฐฉ๋ฒ์ ๋ชจ๋ฅด๊ฒ ์ด (๋์ผํ RBD์ ๋ฐ๋๋ก) ๋ณผ๋ฅจ ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ๋ฏ๋ก Rook์๋ ์ ์ฉํ(๋๋ก๋ ๋งค์ฐ ํ์ํ) ๋๊ตฌ๊ฐ ์์ต๋๋ค. - Rook์ ์ฌ์ ํ โโ์ผ๋ฐ Ceph๋งํผ ์ ์ฐํ์ง ์์ต๋๋ค. CephFS ๋ฉํ๋ฐ์ดํฐ์ฉ ํ์ SSD์ ์ ์ฅํ๊ณ ๋ฐ์ดํฐ ์์ฒด๋ฅผ HDD์ ์ ์ฅํ๋๋ก ๊ตฌ์ฑํ๋ ค๋ฉด CRUSH ๋งต์ ๋ณ๋์ ์ฅ์น ๊ทธ๋ฃน์ ์๋์ผ๋ก ๋ฑ๋กํด์ผ ํฉ๋๋ค.
- rook-ceph-operator๊ฐ ์์ ์ ์ธ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋๋ค๋ ์ฌ์ค์๋ ๋ถ๊ตฌํ๊ณ ํ์ฌ Ceph๋ฅผ ๋ฒ์ 13์์ 14๋ก ์ ๊ทธ๋ ์ด๋ํ ๋ ๋ช ๊ฐ์ง ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
์กฐ์ฌ ๊ฒฐ๊ณผ
"์ง๊ธ์ Rook์ด ํฐ์ ์ํด ์ธ๋ถ ์ธ๊ณ์ ์ฐจ๋จ๋์ด ์์ง๋ง ์ธ์ ๊ฐ๋ Rook์ด ๊ฒ์์์ ๊ฒฐ์ ์ ์ธ ์ญํ ์ ํ๊ฒ ๋ ๊ฒ์ด๋ผ๊ณ ๋ฏฟ์ต๋๋ค!" (์ด ๊ธฐ์ฌ๋ฅผ ์ํด ํน๋ณํ ๊ณ ์๋ ์ธ์ฉ๋ฌธ)
Rook ํ๋ก์ ํธ๋ ์์ฌํ ์ฌ์ง์์ด ์ฐ๋ฆฌ์ ๋ง์์ ์ฌ๋ก์ก์์ต๋๋ค. ์ฐ๋ฆฌ๋ [๋ชจ๋ ์ฅ๋จ์ ์๋ ๋ถ๊ตฌํ๊ณ ] ํ์คํ ์ฌ๋ฌ๋ถ์ ๊ด์ฌ์ ๋ฐ์ ๊ฐ์น๊ฐ ์๋ค๊ณ ๋ฏฟ์ต๋๋ค.
์ฐ๋ฆฌ์ ํฅํ ๊ณํ์ rook-ceph๋ฅผ ๋ค์ ๋ชจ๋๋ก ๋ง๋๋ ๊ฒ์
๋๋ค.
PS
๋ธ๋ก๊ทธ์์๋ ์ฝ์ด๋ณด์ธ์.
- ยซ
Rook - Kubernetes์ฉ "์ ํ ์๋น์ค" ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค "; - ยซ
Ceph ๊ธฐ๋ฐ Kubernetes์์ ํ๋ก๋น์ ๋์ ํตํด ์๊ตฌ ์คํ ๋ฆฌ์ง ์์ฑ "; - ยซ
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ Kubernetes(๊ฐ์ ๋ฐ ๋์์ ๋ณด๊ณ ์) "; - ยซ
Shell-Operator ์๊ฐ: Kubernetes์ฉ ์ฐ์ฐ์ ์์ฑ์ด ๋์ฑ ์ฌ์์ก์ต๋๋ค. "; - ยซ
Kubernetes์ฉ ์ฐ์ฐ์: ์ํ ์ ์ฅ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋ ๋ฐฉ๋ฒ ".
์ถ์ฒ : habr.com