Дар аввали ҳамин моҳ, 3 май, як нашри асосии "системаи идоракунӣ барои нигаҳдории тақсимоти додаҳо дар Кубернетес" эълон карда шуд -
Хулоса, Рук маҷмӯи аст
Дар айни замон аз ҳама пешрафта (ва
эрод гирифтан: Дар байни тағироти назаррас дар версияи Rook 1.0.0, ки ба Ceph алоқаманд аст, мо метавонем дастгирии Ceph Nautilus ва қобилияти истифодаи NFS-ро барои сатилҳои CephFS ё RGW қайд кунем. Он чизе, ки дар байни дигарон фарқ мекунад, камолоти дастгирии EdgeFS ба сатҳи бета мебошад.
Пас, дар ин мақола мо:
- Биёед ба саволе ҷавоб диҳем, ки мо дар истифодаи Rook барои ҷойгиркунии Ceph дар кластери Kubernetes чӣ бартариҳоро мебинем;
- Мо таҷриба ва таассуроти худро дар бораи истифодаи Rook дар истеҳсолот мубодила хоҳем кард;
- Биёед ба шумо бигӯем, ки чаро мо ба Рук «Ҳа!» мегӯем ва дар бораи нақшаҳои мо барои ӯ.
Биёед бо мафҳумҳо ва назарияи умумӣ оғоз кунем.
"Ман бартарии як Рӯк дорам!" (шоҳмотбози номаълум)
Яке аз бартариҳои асосии Rook дар он аст, ки ҳамкорӣ бо мағозаҳои маълумот тавассути механизмҳои Kubernetes амалӣ карда мешавад. Ин маънои онро дорад, ки ба шумо дигар лозим нест, ки фармонҳоро барои танзим кардани Ceph аз варақ ба консол нусхабардорӣ кунед.
— Оё шумо мехоҳед CephFS-ро дар кластер ҷойгир кунед? Танҳо як файли YAML нависед!
- Чӣ? Оё шумо инчунин мехоҳед, ки мағозаи объектро бо API S3 ҷойгир кунед? Танҳо як файли дуюми 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 }}
.
Барои истифодаи маълумот аз ин сир, танҳо онро ба контейнер ҳамчун тағирёбандаҳои муҳити зист илова кунед. Ба унвони мисол, ман барои Ҷоб як қолаб медиҳам, ки дар он мо ба таври худкор сатилҳоро барои ҳар як муҳити корбар эҷод мекунем:
{{- 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 ба таври худкор мушкилоти зиёдеро ҳал мекунад, ки ин моро водор мекунад, ки онро дар лоиҳаҳои нав истифода барем.
Муҳосираи Рук
Биёед қисми амалиро тавассути ҷойгиркунии Rook and 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
Барои ҳар як гиреҳе, ки барои нигаҳдории додаҳо ҳифз шудааст, доғи мувофиқро илова кунед:
$ 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ро комилан тарк кунем:
- Ронандаи Rook нест
наметавонад ченакҳои содиротӣ оид ба истифодаи блокҳои насбшуда, ки моро аз мониторинг маҳрум мекунад. - Flexvolume ва CSI
намедонам чи тавр андозаи ҳаҷмҳоро тағир диҳед (бар хилофи ҳамон RBD), аз ин рӯ Рук аз абзори муфид (ва баъзан ба таври интиқодӣ лозим!) маҳрум аст. - Рук ҳоло ҳам мисли Ceph муқаррарӣ чандир нест. Агар мо хоҳем, ки ҳавзро барои метамаълумоти CephFS дар SSD нигоҳ дошта шавад ва худи маълумот дар HDD нигоҳ дошта шавад, ба мо лозим меояд, ки гурӯҳҳои алоҳидаи дастгоҳҳоро дар харитаҳои CRUSH дастӣ сабти ном кунем.
- Сарфи назар аз он, ки rook-ceph-оператор устувор ҳисобида мешавад, дар айни замон ҳангоми навсозии Ceph аз версияи 13 ба 14 баъзе мушкилот вуҷуд дорад.
натиҷаҳои
"Ҳозир Рук аз ҷаҳони беруна тавассути пиёдаҳо баста шудааст, аммо мо боварӣ дорем, ки рӯзе вай дар бозӣ нақши ҳалкунанда хоҳад дошт!" (иқтибос махсус барои ин мақола ихтироъ шудааст)
Лоиҳаи Rook бешубҳа дили моро ба даст овард - мо боварӣ дорем, ки [бо тамоми ҷиҳатҳои мусбат ва манфии он] он бешубҳа сазовори таваҷҷӯҳи шумост.
Нақшаҳои ояндаи мо аз он иборат аст, ки rook-ceph ба модул барои
PS
Инчунин дар блоги мо хонед:
- «
Rook - анбори додаҳои "худхизматрасонӣ" барои Kubernetes »; - «
Эҷоди нигаҳдории доимӣ бо таъминкунӣ дар Kubernetes дар асоси Ceph »; - «
Пойгоҳи додаҳо ва Кубернетҳо (баррасӣ ва гузориши видеоӣ) »; - «
Муаррифии shell-operator: сохтани операторҳо барои Kubernetes осонтар шуд »; - «
Операторҳо барои Kubernetes: чӣ гуна иҷро кардани барномаҳои давлатӣ ".
Манбаъ: will.com