แแ แแแแก แแแกแแฌแงแแกแจแ, 3 แแแแกแก, แแแแแชแฎแแแแ "Kubernetes-แจแ แแแแแชแแแแ แแแแแฌแแแแแฃแแ แจแแแแฎแแแก แแแ แแแแก แกแแกแขแแแแก" แซแแ แแแแแ แแแแแจแแแแ -
แแแแแแ, Rook แแ แแก แแแแแแแฅแขแ
แแ แแ แแแกแแแแก แงแแแแแแ แแแแแแแแ แแแฃแแ (แแ
แจแแแแจแแแ: Ceph-แแแ แแแแแแจแแ แแแฃแแ Rook 1.0.0 แแแแแจแแแแแก แแแแจแแแแแแแแ แชแแแแแแแแแก แจแแ แแก แจแแแแแซแแแ แแฆแแแแจแแแ Ceph Nautilus-แแก แแฎแแ แแแญแแ แ แแ NFS-แแก แแแแแงแแแแแแก แจแแกแแซแแแแแแแ CephFS แแ RGW แแแแแฃแแแแแกแแแแก. แ แแช แแแแแแ แฉแแแ แกแฎแแแแ แจแแ แแก แแ แแก EdgeFS แแฎแแ แแแญแแ แแก แแแแฌแแคแแแ แแแขแ แแแแแแ.
แแกแ แ แแ, แแ แกแขแแขแแแจแ แฉแแแ:
- แแแแแ แแฃแแแกแฃแฎแแ แแแแฎแแแก, แแฃ แ แ แฃแแแ แแขแแกแแแแแก แแฎแแแแแ Rook-แแก แแแแแงแแแแแแจแ Ceph-แแก แแฃแแแ แแแขแแก แแแแกแขแแ แจแ แแแแกแแแแแกแแแแแ;
- แฉแแแ แแแแแแแแ แแแ แฉแแแแก แแแแแชแแแแแแแก แแ แจแแแแแญแแแแแแแแก แฌแแ แแแแแแจแ Rook-แแก แแแแแงแแแแแแก แจแแกแแฎแแ;
- แแแแแ แแแแฎแ แแ, แ แแขแแ แแแฃแแแแแแ แ แฃแแก โแแแแฎ!โ แแ แ แ แแแแแแแ แแแแฅแแก แแแกแแแแก.
แแแแแฌแงแแ แแแแแแ แชแแแแแแแแ แแ แแแแ แแแ.
"แแ แแแฅแแก แแ แแ แ แฃแแแก แฃแแแ แแขแแกแแแ!" (แฃแชแแแแ แแแญแแแ แแแ)
Rook-แแก แแ แ-แแ แแ แแแแแแ แ แฃแแแ แแขแแกแแแ แแก แแ แแก, แ แแ แแแแแชแแแแ แแแฆแแแแแแแแ แฃแ แแแแ แแฅแแแแแแ แฎแแ แชแแแแแแแ Kubernetes แแแฅแแแแแแแแแก แแแจแแแแแแ. แแก แแแจแแแแก, แ แแ แแฅแแแ แแฆแแ แแญแแ แแแแแ แแ แซแแแแแแแแก แแแแแ แแแ Ceph-แแก แแแแคแแแฃแ แแชแแแกแแแแก แคแฃแ แชแแแแแ แแแแกแแแจแ.
โ แแกแฃแ แ แแแแแแแแกแแ CephFS แแแแกแขแแ แจแ? แฃแแ แแแแ แแแฌแแ แแ YAML แคแแแแ!
- แฒ แ? แแกแแแ แแกแฃแ แ แแแแแแแแกแแ แแแแแฅแขแแแแก แแแฆแแแแ S3 API-แแ? แฃแแ แแแแ แแแฌแแ แแ แแแแ แ YAML แคแแแแ!
Rook แแฅแแแแแ แขแแแแฃแ แ แแแแ แแขแแ แแก แงแแแแ แฌแแกแแก แแแฎแแแแแ. แแแกแแแ แฃแ แแแแ แแฅแแแแแแ แฎแแแแ แแแแแงแแแแแแ
แแแแแ แจแแแฎแแแแ แกแแแชแแคแแแแก Object Store-แแก แจแแฅแแแแก แแแแแแแแแก แแแแแงแแแแแแ, แฃแคแ แ แกแฌแแ แแ - 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 แแแแ แแขแแ แ pod-แแก แจแแแแแ แแแแแแแแแก แจแแแแแแก:
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 }}
.
แแ แกแแแแฃแแแแก แแแแแชแแแแแแก แแแแแกแแงแแแแแแแ, แฃแแ แแแแ แแแแแแขแแ แแแ แแแแขแแแแแ แจแ, แ แแแแ แช แแแ แแแแก แชแแแแแ. แแแแแแแแแ, แแ แแแแชแแ แกแแแฃแจแแแก แจแแแแแแก, แ แแแแแจแแช แฉแแแ แแแขแแแแขแฃแ แแ แแฅแแแแ แแแแแฃแแแแก แแแแแแฃแแ แแแแฎแแแ แแแแแก แแแ แแแแกแแแแก:
{{- 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-แแก แแแแแงแแแแแแกแแก แแก แแ แแแแแแ แฃแแ แแแแ แแ แแ แกแแแแแก. แกแแแแแขแแแ แแ แแชแแกแ แฎแแแแ แกแแแฃแแแ แ แแ แแแแแ แแแแก แแแแแงแแแแแแ, แกแแคแฃแซแแแแแ
แ แฃแแ แแแขแแแแขแฃแ แแ แฌแงแแแขแก แแแแ แแ แแแแแแแก, แ แแช แแแแแซแฃแแแแก แแแแแแแงแแแแ แแแ แแฎแแ แแ แแแฅแขแแแจแ.
แ แฃแแแก แแแงแ
แแแแแ แแแแแกแ แฃแแแ แแ แแฅแขแแแฃแแ แแแฌแแแ แ แฃแแแกแ แแ แชแแคแแก แแแแแแแแแแ, แ แแแ แฉแแแ แจแแแซแแแ แกแแแฃแแแ แ แแฅแกแแแ แแแแแขแแแแก แฉแแขแแ แแแ. แแ แแฃแฆแแแแแ แแแจแแแก แจแขแฃแ แแแก แแแกแแแแแแแแแแแ, แแแแแแแแแ แแแแ แแแแแแแแแก 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
แแแแแชแแแแ แจแแแแฎแแแกแแแแก แ แแแแ แแแ แแแฃแแ แแแแแแฃแแ แแแแแซแแกแแแแก, แแแแแแขแแ แจแแกแแแแแแกแ แแแฅแ:
$ 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"
แชแแคแแก แกแขแแขแฃแกแแก แจแแแแฌแแแแ - แแแแแ, แ แแ แแแฎแแ 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-แแก แฎแแแแ แแแแคแแแฃแ แแชแแ:
- แแ แแ แแก Rook Driver
แแแ แกแแแฅแกแแแ แขแ แแแขแ แแแ แแแแแแขแแแแแฃแแ แแแแแแแแก แแแแแงแแแแแแแ, แ แแช แแแแ แแแแแก แแแแแขแแ แแแแก. - Flexvolume แแ CSI
แแ แแแชแ แ แแแแ แจแแชแแแแแ แแแชแฃแแแแแแแก แแแแ (แแแแแ RBD-แแกแแแ แแแแกแฎแแแแแแแ), แแกแ แ แแ Rook แแแแแแแฃแแแ แกแแกแแ แแแแแ (แแ แแแแฏแแ แแ แแขแแแฃแแแ แกแแญแแ แ!) แฎแแแกแแฌแงแแก. - แ แฃแแ แฏแแ แแแแแ แแ แแ แแก แแกแแแ แแแฅแแแแ, แ แแแแ แช แฉแแแฃแแแแ แแแ แชแแคแ. แแฃ แแแแแแ แแแแแแแแคแแแฃแ แแ แแ แแฃแแ CephFS แแแขแแแแแแชแแแแแแกแแแแก SSD-แแ แจแแกแแแแฎแแ, แฎแแแ แแแแแ แแแแแชแแแแแ HDD-แแ แจแแกแแแแฎแแ, แฉแแแ แแแแแญแแ แแแแ แแแฌแงแแแแแแแแแแก แชแแแแแฃแแ แฏแแฃแคแแแแก แ แแแแกแขแ แแชแแ CRUSH แ แฃแแแแจแ แฎแแแแ.
- แแแแกแแ แแแฃแฎแแแแแแ, แ แแ rook-ceph-แแแแ แแขแแ แ แแแแแแแ แกแขแแแแแฃแ แแ, แแแแแแแ แแ แแก แแแ แแแแฃแแ แแ แแแแแแแแ Ceph-แแก 13-แแแ 14-แแแ แแแ แกแแแก แแแแแฎแแแแแกแแก.
แแแกแแแแแแ
โแแฎแแ แ แฃแแ แแแฎแฃแ แฃแแแ แแแ แ แกแแแงแแ แแกแแแ แแแแแแ แแแแแ, แแแแ แแ แฉแแแ แแแฏแแ แ, แ แแ แแ แ แแฆแแก แแก แแแแแแฌแงแแแข แ แแแก แแแแแแจแแแก แแแแแจแจแ!โ (แชแแขแแขแ แแแแแแแแแแก แกแแแชแแแแฃแ แแ แแ แกแขแแขแแแกแแแแก)
Rook-แแก แแ แแแฅแขแแ แฃแแแแแ แแแแแ แฉแแแแ แแฃแแ - แฉแแแ แแแฏแแ แ, แ แแ [แงแแแแ แแแแแกแ แแแแแแแแ แแ แฃแแ แงแแคแแแ แแฎแแ แแแแแ] แแก แแแแแแแแแ แแแกแแฎแฃแ แแแก แแฅแแแแก แงแฃแ แแแฆแแแแก.
แฉแแแแ แกแแแแแแแแ แแแแแแแ แแแงแแ แแแ rook-ceph-แแก แแแแฃแแก
PS
แแกแแแ แฌแแแแแแฎแแ แฉแแแแก แแแแแแ:
- ยซ
Rook - "แแแแแแแแกแแฎแฃแ แแแแก" แแแแแชแแแแ แกแแฌแงแแแ Kubernetes-แแกแแแแก "; - ยซ
แแฃแแแแแ แแแฎแกแแแ แแแแก แจแแฅแแแ Kubernetes-แจแ แแแฌแแแแแแ Ceph-แแก แกแแคแฃแซแแแแแ "; - ยซ
แแแแแชแแแแ แแแแแแ แแ Kubernetes (แแแแแฎแแแแ แแ แแแแแ แแแแแ แแจแ) "; - ยซ
Shell-แแแแ แแขแแ แแก แฌแแ แแแแแแแ: Kubernetes-แแกแแแแก แแแแ แแขแแ แแแแก แจแแฅแแแ แแฎแแแฎแแ แแแแแ แขแแแแ "; - ยซ
แแแแ แแขแแ แแแ Kubernetes-แแกแแแแก: แ แแแแ แแแแฃแจแแแ แกแแฎแแแแฌแแคแ แแแแแแแชแแแแ ".
แฌแงแแ แ: www.habr.com