ืืื ืื ืึธื ืืืื ืคืื ืืขื ืืืืฉ, ืืืืฃ ืืื 3, ืึท ืืืืคึผื ืืขืืืื ื ืคืื ืึท "ืคืึทืจืืืึทืืืื ื ืกืืกืืขื ืคึฟืึทืจ ืคืื ืื ืืขืจืืขืืืืื ืืึทืื ืกืืึธืจืืืืฉ ืืื Kubernetes" ืืื ืืืืืข -
ืืื ืงืืจืฅ, ืจืืง ืืื ืึท ืืึทื ื
ืืื ืืขืจ ืืึธืืขื ื ืื ืืขืจืกื ืืขืืืขืืึธืคึผืขื (ืืื
ืืึธื: ืฆืืืืฉื ืื ืืึทืืืึทืืืง ืขื ืืขืจืื ืืขื ืืื ืื Rook 1.0.0 ืืขืืืื ื ืฉืืึทืืืช ืฆื Ceph, ืืืจ ืงืขื ืขื ืืึธื ืฉืืืฆื ืคึฟืึทืจ Ceph Nautilus ืืื ืื ืคืืืืงืืื ืฆื ื ืืฆื NFS ืคึฟืึทืจ CephFS ืึธืืขืจ RGW ืืึทืงืึทืฅ. ืืืึธืก ืฉืืืื ืืืืก ืฆืืืืฉื ืื ืืขืจืข ืืื ืื ืืึทืืฉืืจืืืฉืึทื ืคืื EdgeFS ืฉืืืฆื ืฆื ืื ืืืชื ืืืจืื.
ืึทืืื, ืืื ืืขื ืึทืจืืืงื ืืืจ:
- ืืึธืืืจ ืขื ืืคึฟืขืจื ืื ืงืฉืื ืืืขืื ืืืึธืก ืึทืืืืึทื ืืืืืฉืื ืืืจ ืืขื ืืื ื ืืฆื Rook ืฆื ืฆืขืืืืงืืขื Ceph ืืื ืึท ืงืืืขืจื ืขืืขืก ืงื ืืื;
- ืืืจ ืืืขืื ืืืืื ืืื ืืืขืจ ืืขืจืคืึทืจืื ื ืืื ืืืคึผืจืขืกืกืืึธื ืก ืคืื ื ืืฆื ืจืืง ืืื ืคึผืจืึธืืืงืฆืืข;
- ืืืืืจ ืืืื ืืืื ืคืืจืืืืก ืืืจ ืืืื "ืื!" ืฆื ืจืืง, ืืื ืืืขืื ืืื ืืขืจืข ืคืืขื ืขืจ ืคืืจ ืืื.
ืืืืืจ ืื ืืืืื ืืื ืืืืขืืืื ืข ืืืืจืืคื ืืื ืืขืืจืืข.
"ืืื ืืึธืื ืึท ืืืึทืืข ืคืื โโืืืื ืจืืง!" (ืืืืืึทืงืึทื ื ืฉืึธื ืฉืคึผืืืขืจ)
ืืืื ืขืจ ืคืื ืื ืืืืคึผื ืึทืืืืึทื ืืืืืฉืื ืคืื Rook ืืื ืึทื ืื ืืขืจืึทืงืฉืึทื ืืื ืืึทืื ืกืืึธืจื ืืื ืืืจืืืขืงืึธืื ืืืจื ืงืืืขืจื ืขืืขืก ืืขืงืึทื ืืืึทืื. ืืขื ืืืื ืึทื ืืืจ ื ืื ืืขืจ ืืึทืจืคึฟื ืฆื ื ืึธืืืึทืื ืื ืงืึทืืึทื ืื ืฆื ืงืึทื ืคืืืืขืจ Ceph ืคึฟืื ืื ืืืึทื ืืื ืื ืงืึทื ืกืึธืื.
โ ืฆื ืืืจ ืืืืื ืฆื ืฆืขืืืืงืืขื CephFS ืืื ืึท ืงื ืืื? ื ืึธืจ ืฉืจืืึทืื ืึท YAML ืืขืงืข!
- ืืืืก? ืฆื ืืืจ ืืืื ืืืืื ืฆื ืฆืขืืืืงืืขื ืึท ืืืืคืขืฅ ืงืจืึธื ืืื S3 API? ืฉืจืืื ื ืืจ ื ืฆืืืืืืข ืืืื ืคืืื!
ืจืืง ืืื ืืืฉืืคื ืืืื ืึทืืข ืื ืึผืืืื ืคืื ืึท ืืืคึผืืฉ ืึธืคึผืขืจืึทืืึธืจ. ืื ืืขืจืึทืงืฉืึทื ืืื ืืื ืึทืงืขืจื ื ืืฆื
ืืึธืืืจ ืงืืงื ืืื ืื ืกืคึผืขืกืืคืืงืก ื ืืฆื ืืขื ืืืืฉืคึผืื ืคืื ืงืจืืืืืื ื ืึท ืึธืืืืฉืขืงื ืกืืึธืจ, ืึธืืขืจ ืืึทื ืฅ - 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 }}
ืื ืคึผืึทืจืึทืืขืืขืจืก ืื ืืขืืืืื ืืื ืื ืืืกืืื ื ืืขื ืขื ืืึทื ืฅ ื ืึธืจืืึทื ืืื ืงืืื ืืึทืจืคึฟื ืืึทืืขืจืงืื ืืขื, ืึธืืขืจ ืขืก ืืื ืืืขืจื ืฆื ืืึทืฆืึธืื ืกืคึผืขืฆืืขื ืืคืืขืจืงืืึทืืงืืื ืฆื ืื ืึทืืึทืงืืืืื ืฆื ืืืกืืขืจ ืืืขืจืืึทืืึทืื.
ืืขืจ ืึทืืืขืืืื ืึทืจืืขื ืกืืขืืข ืงืืื ืฆื ืืขื ืคืึทืงื ืึทื ืืืจ "ืืึทืฉืืขืื" ืจืขืกืืจืกื ืืืจื ืึท ืืื ืืขืงืข, ืคึฟืึทืจ ืืืึธืก ืืขืจ ืึธืคึผืขืจืึทืืึธืจ ืขืงืกืึทืงืืืฅ ืื ื ืืืืืง ืงืึทืืึทื ืื ืืื ืงืขืจื ืืื ืื ืึท "ื ืื-ืึทืืื-ืคืึทืงืืืฉ" ืกืื ืืื ืืืึธืก ืืืจ ืงืขื ืขื ืืืืึทืืขืจ ืึทืจืืขืื (ืืข ืืื ืื). ืืื ืคึฟืื ืื ืืืขืจืืึทืืึทืื ืืืกืืขื ืืืืื, ืื ืืึทืคึฟืขื ืืื ืกืื ื ืึธืืขื ืืืขื ืืืื ืงืึทืืคึผืืืื.
ืืืึธืก ืืื ืคืื ืืึทื ืฉืึทืคึฟื ืืื ืืึธืก? ืืืขื ืงืจืืืืืื ื ืึท ืืึทื ืืฆืขืจ ืคึฟืึทืจ ืึทืืืืฉืขืงืฅ ืกืืึธืจืืืืฉ, ืืขืจ ืจืืง ืึธืคึผืขืจืึทืืึธืจ ืืื ืื ืคึผืึธื ืืืขื ืืึธื ืื ืคืืืืขื ืืข:
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-ceph-object-user-{{ $.Values.s3.crdName }}-{{ $.Values.s3.username }}
.
ืฆื ื ืืฆื ืื ืืึทืื ืคืื ืืขื ืกืื, ื ืึธืจ ืืืืื ืขืก ืฆื ืืขื ืงืึทื ืืืื ืขืจ ืืื ืื ืืืืืจืึทื ืืขื ืึทื ืืืขืจืืึทืืึทืื. ืืื ืึท ืืืึทืฉืคึผืื, ืืื ืืืขื ืืขืื ืึท ืืืกืืขืจ ืคึฟืึทืจ ืืืฉืึธื, ืืื ืืืึธืก ืืืจ ืืืืืึธืืึทืืืฉ ืฉืึทืคึฟื ืืึทืงืึทืฅ ืคึฟืึทืจ ืืขืืขืจ ืืึทื ืืฆืขืจ ืกืืืืืืข:
{{- 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 ืคึผืจืึธืฆืขืก ืืื ืึท ืืึทื ืฅ.
ืฆืืคืจืืื ืืื ืจืืง ืืื ืจืึทืืึธืก
ื ืืฆื ืื 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 ืืื Ceph ืึทืืื ืืืจ ืงืขื ืขื ืืืจืืคืืจื ืืื ืืืขืจ ืืืืืขื ืข ืืงืกืคึผืขืจืึทืืึทื ืฅ. ืฆื ืืึทืื ืขืก ืืจืื ืืขืจ ืฆื ืฉืืืจืขื ืืขื ืืืคึผืจืขืื ืึทืืึทื ืืืจืขื, ืื ืืขืืืขืืึธืคึผืขืจืก ืืึธืื ืฆืืืขืืจืืื ืึท ืืขืื ืคึผืขืงื. ืืึธืืืจ ืขืก ืืจืืคืงืืคืืข:
$ helm fetch rook-master/rook-ceph --untar --version 1.0.0
ืืื ืืขืงืข rook-ceph/values.yaml
ืืืจ ืงืขื ืขื ืืขืคึฟืื ืขื ืคืืืข ืคืึทืจืฉืืืขื ืข ืกืขืืืื ืืก. ืื ืืขืจืกื ืืืืืืืง ืืึทื ืืื ืฆื ืกืคึผืขืฆืืคืืฆืืจื ืืึธืืขืจืืืฉืึทื ื ืคึฟืึทืจ ืึทืืขื ืฅ ืืื ืืืื. ืืืจ ืืืกืงืจืืืื ืืื ืืขืืึทื ืคึฟืึทืจ ืืืึธืก ืื ืืึทืื ื / ืืึธืืขืจืืืฉืึทื ื ืืขืงืึทื ืืืึทื ืงืขื ืขื ืืืื ืืขืืืืื ื
ืืื ืงืืจืฅ, ืืืจ ืืึธื ื ืื ืืืขืื ืื ืงืืืขื ื ืึทืคึผืืึทืงืืืฉืึทื ืคึผืึธืืก ืฆื ืืืื ืืืื ืืืืฃ ืื ืืขืืืข ื ืึธืืื ืืื ืื ืืึทืื ืกืืึธืจืืืืฉ ืืืกืงืก. ืื ืกืืื ืืื ืคึผืฉืื: ืึทืืื ืื ืึทืจืืขื ืคืื ืจืืง ืืืขื ืื ืืืขื ื ืืฉื ืืืืจืงื ืื ืึทืคึผืืึทืงืืืฉืึทื ืืื.
ืึทืืื, ืขืคืขื ืขื ืื ืืขืงืข rook-ceph/values.yaml
ืืื ืืืื ืืึทืืืืกืืข ืจืขืืึทืงืืึธืจ ืืื ืืืืื ืื ืคืืืืขื ืืข ืืืึธืง ืืื ืื ืกืืฃ:
discover:
toleration: NoExecute
tolerationKey: node-role/storage
agent:
toleration: NoExecute
tolerationKey: node-role/storage
mountSecurityMode: Any
ืคึฟืึทืจ ืืขืืขืจ ื ืึธืืข ืจืขืืขืจืืืืจื ืคึฟืึทืจ ืืึทืื ืกืืึธืจืืืืฉ, ืืืืื ืื ืงืึธืจืึทืกืคึผืึทื ืืื ื ืืึทื:
$ kubectl taint node ${NODE_NAME} node-role/storage="":NoExecute
ืืขืจื ืึธื ืื ืกืืึทืืืจื ืื ืืขืื ืืฉืึทืจื ืืื ืืขื ืืึทืคึฟืขื:
$ 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:
- ืงืืื ืจืืงื ืืจืืืืืขืจ
ืงืขื ืขื ื ืื ืึทืจืืืกืคืืจื ืืขืืจืืงืก ืืืืฃ ืื ื ืืฆื ืคืื ืืึธืื ืืขื ืืืึทืงืก, ืืืึธืก ืืืคึผืจืืืืื ืืื ืื ืืึธื ืืืึธืจืื ื. - Flexvolum ืืื CSI
ืืึธื ื ืื ืืืืกื ืืื ืืืืฉื ืื ืืจืืืก ืคืื ืืืึทืืืืื (ืืื ืงืขืื ืฆื ืืขืจ ืืขืืืืงืขืจ ืจืื), ืึทืืื ืจืืง ืืื ืืืคึผืจืืืืื ืคืื ืึท ื ืืฆืืง (ืืื ืืื ืงืจืืืืงืึทืื ืืืจืฃ!) ืืขืฆืืึทื. - ืจืืง ืืื ื ืึธื ื ืืฉื ืืื ืคืืขืงืกืึทืืึทื ืืื ืจืขืืืืขืจ ืกืขืฃ. ืืืื ืืืจ ืืืืื ืฆื ืงืึทื ืคืืืืขืจ ืื ืืขืงื ืคึฟืึทืจ CephFS ืืขืืึทืืึทืืึท ืฆื ืืืื ืกืืึธืจื ืืืืฃ SSD, ืืื ืื ืืึทืื ืืื ืฆื ืืืื ืกืืึธืจื ืืืืฃ ืืื, ืืืจ ืืึทืจืคึฟื ืฆื ืคืึทืจืฉืจืืึทืื ืืึทืืื ืืขืจ ืืจืืคึผืขืก ืคืื ืืขืืืืกืขืก ืืื CRUSH ืืึทืคึผืก ืืึทื ืืืึทืื.
- ืืจืึธืฅ ืืขืจ ืคืึทืงื ืึทื ืจืืง-ืกืขืฃ-ืึธืคึผืขืจืึทืืึธืจ ืืื ืืขืืืืื ืกืืึทืืื, ืขืก ืืขื ืขื ืืขืจืืืืึทื ืขืืืขืืข ืคืจืืืืขืืขื ืืืขื ืึทืคึผืืจืืืืื ื Ceph ืคืื ืืืขืจืกืืข 13 ืฆื 14.
ืคืืื ืืื ืื
"ืืืฆื ืจืืง ืืื ืคืืจืืืื ืคืื ืื ืืจืืืกื ืืืง ืืืขืื ืืืจื ืคึผืึธื ื, ืึธืืขืจ ืืืจ ืืืืืื ืึทื ืืืื ืืึธื ืื ืืืขื ืฉืคึผืืื ืึท ืืึทืฉืืืืขื ืืืง ืจืึธืืข ืืื ืืขืจ ืฉืคึผืื!" (ืฆืืืืจื ืื ืืืขื ืืื ืกืคึผืึทืกืืคืืงืื ืคึฟืึทืจ ืืขื ืึทืจืืืงื)
ืื Rook ืคึผืจืืืขืงื ืืื ืืื ืืืึทื ืืื ืืืขืจ ืืขืจืฆืขืจ - ืืืจ ืืืืืื ืึทื [ืืื ืึทืืข ืืืึทื ืคึผืจืึธืก ืืื ืงืึธื ืก] ืขืก ืืืฉืืืื ืคืืจืืื ื ืืืื ืืคืืขืจืงืืึทืืงืืึทื.
ืืื ืืืขืจ ืฆืืงืื ืคึฟื ืคึผืืึทื ื ืงืึธืื ืึทืจืึธืคึผ ืฆื ืืึทืื ืจืืง-ืกืขืฃ ืึท ืืึธืืืืข ืคึฟืึทืจ
ืคึผืก
ืืืืขื ืขื ืืืื ืืืืฃ ืืื ืืืขืจ ืืืึธื:
- ยซ
ืจืืง - "ืืื-ืืื ืกื" ืืึทืื ืืืขืจืืึทืืก ืคึฟืึทืจ Kubernetes "; - ยซ
ืงืจืืืืืื ื ืคึผืขืจืกืืกืืขื ื ืกืืึธืจืืืืฉ ืืื ืคึผืจืึทืืืืืฉืึทื ื ืืื Kubernetes ืืืืืจื ืืืืฃ Ceph "; - ยซ
ืืึทืืึทืืืืกืื ืืื ืงืืืขืจื ืขืืขืก (ืืืขืจืืืืง ืืื ืืืืืขื ืืึทืจืืื) "; - ยซ
ืื ืืจืึธืืืืกืื ื ืฉืึธื ืึธืคึผืขืจืึทืืึธืจ: ืงืจืืืืืื ื ืึธืคึผืขืจืืืืขืจื ืคึฟืึทืจ Kubernetes ืืื ืคึผืื ืงื ืืจืื ืืขืจ "; - ยซ
ืึธืคึผืขืจืืืืขืจื ืคึฟืึทืจ Kubernetes: ืืื ืฆื ืืืืคื ืกืืึทืืขืคืื ืึทืคึผืืึทืงืืืฉืึทื ื '.
ืืงืืจ: www.habr.com