Mukutanga kwemwedzi uno, muna Chivabvu 3, kuburitswa kukuru kwe "management system yekugovera kuchengetedza data muKubernetes" yakaziviswa -
Muchidimbu, Rook isethi
Parizvino iyo yakagadziridzwa zvakanyanya (uye
taura pfungwa: Pakati pekuchinja kukuru muRook 1.0.0 kusunungurwa kwakabatana neCeph, tinogona kucherechedza kutsigirwa kweCeph Nautilus uye kukwanisa kushandisa NFS yeCephFS kana RGW mabhakiti. Chinomira pachena pakati pevamwe ndiko kukura kweEdgeFS rutsigiro kusvika padanho rebeta.
Saka, mune ino chinyorwa isu:
- Ngatipindurei mubvunzo pamusoro pezvakanakira zvatinoona mukushandisa Rook kuendesa Ceph muboka reKubernetes;
- Tichagovera ruzivo rwedu uye maonerwo ekushandisa Rook mukugadzira;
- Ngatikuudzei chikonzero nei tichiti βHongu!β kuna Rook, uye nezvezvirongwa zvedu kwaari.
Ngatitangei ne general concepts ne theory.
"Ndine mukana weimwe Rook!" (asingazivikanwe chess mutambi)
Imwe yemabhenefiti makuru eRook ndeyekuti kudyidzana nezvitoro zvedata kunoitwa kuburikidza neKubernetes nzira. Izvi zvinoreva kuti iwe hauchadi kutevedzera mirairo kugadzirisa Ceph kubva pashizha kupinda mukoni.
- Iwe unoda kuendesa CephFS musumbu? Ingonyora YAML faira!
- Chii? Iwe unoda zvakare kuendesa chitoro chechinhu neS3 API? Ingonyora yechipiri YAML faira!
Rook inogadzirwa zvinoenderana nemitemo yese yeanojairwa opareta. Kudyidzana naye kunoitika kushandisa
Ngatitarisei kune chaiwo tichishandisa muenzaniso wekugadzira Chitoro cheChinhu, kana kuti - 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 }}
Iwo maparamendi anoratidzwa mune rondedzero akajairwa uye haatomboda makomendi, asi zvakakosha kutarisisa kune iyo yakagoverwa kune template machinjiro.
Hurongwa hwese hwebasa hunouya kunyaya yekuti isu "tinoodha" zviwanikwa kuburikidza neYAML faira, iyo mushandisi anoita mirairo inodiwa uye anotidzosera "kwete-chaiyo-chaiyo" chakavanzika chatinogona kuwedzera kushanda nacho. (ona pazasi). Uye kubva pane zvakasiyana-siyana zvakanyorwa pamusoro, murairo uye zita rakavanzika richaumbwa.
Ichi chikwata cherudzii? Paunenge uchigadzira mushandisi wekuchengetedza chinhu, iyo Rook opareta mukati mepodhi achaita zvinotevera:
radosgw-admin user create --uid="rook-user" --display-name="{{ .Values.s3.username }}"
Mhedzisiro yekuita uyu murairo ichave JSON chimiro:
{
"user_id": "rook-user",
"display_name": "{{ .Values.s3.username }}",
"keys": [
{
"user": "rook-user",
"access_key": "NRWGT19TWMYOB1YDBV1Y",
"secret_key": "gr1VEGIV7rxcP3xvXDFCo4UDwwl2YoNrmtRlIAty"
}
],
...
}
Keys
- ndeapi maapplication achazoda kuwana chinhu chekuchengetedza kuburikidza neS3 API. Mushandi weRook anovasarudza nemutsa uye anoisa munzvimbo yake yezita nenzira yechakavanzika ine zita rook-ceph-object-user-{{ $.Values.s3.crdName }}-{{ $.Values.s3.username }}
.
Kuti ushandise iyo data kubva kune ichi chakavanzika, ingoiwedzera kune mudziyo seyakasiyana siyana. Semuenzaniso, ini ndichapa template yeJobho, umo isu tinongogadzira mabhakiti ega ega mushandisi nharaunda:
{{- 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 }}
Zvese zviito zvakanyorwa mune ino Jobho zvakaitwa mukati meiyo Kubernetes. Izvo zvimiro zvinotsanangurwa mumafaira eYAML zvinochengetwa muGit repository uye zvinoshandiswazve kakawanda. Isu tinoona izvi sekuwedzera kukuru kune DevOps mainjiniya uye iyo CI/CD maitiro ese.
Ndinofara naRook naRados
Kushandisa iyo Ceph + RBD musanganiswa inoisa zvimwe zvirambidzo pakukwira mavhoriyamu kumapodhi.
Kunyanya, iyo nzvimbo yezita inofanira kunge iine chakavanzika chekuwana Ceph kuitira kuti zvikumbiro zvine musoro zvishande. Zvakanaka kana uine 2-3 nharaunda munzvimbo dzavo dzemazita: unogona kuenda uye kukopa chakavanzika pamaoko. Asi ko kana pane chimwe nechimwe nharaunda yakaparadzana ine zita rayo pachayo yakagadzirwa kune vanogadzira?
Isu takagadzirisa dambudziko iri isu tichishandisa
#! /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
Nekudaro, kana uchishandisa Rook dambudziko iri harisipo. Iyo yekumisikidza maitiro inoitika uchishandisa madhiraivha ayo zvichienderana
Rook inogadzirisa otomatiki matambudziko mazhinji, ayo anotikurudzira kuishandisa mumapurojekiti matsva.
Kukombwa kweRook
Ngatipedzei chikamu chinoshanda nekuisa Rook neCeph kuitira kuti isu tiite zvedu zviedzo. Kuita kuti zvive nyore kuputira shongwe iyi isingapindike, vagadziri vakagadzirira Helm package. Ngatitorei
$ helm fetch rook-master/rook-ceph --untar --version 1.0.0
Mufaira rook-ceph/values.yaml
unogona kuwana akawanda akasiyana marongero. Chinhu chinonyanya kukosha ndechekutsanangura kushivirira kwevamiririri uye kutsvaga. Isu takatsanangura zvakadzama izvo zvinosvibisa / kushivirira nzira inogona kushandiswa mairi
Muchidimbu, isu hatidi kuti mutengi application mapodhi ave panzvimbo dzakafanana nemadhisiki ekuchengetedza data. Chikonzero chiri nyore: nenzira iyi basa reRook agents harizokanganisa mashandisirwo acho.
Saka, vhura faira rook-ceph/values.yaml
neyako yaunofarira mupepeti uye wedzera inotevera block kumagumo:
discover:
toleration: NoExecute
tolerationKey: node-role/storage
agent:
toleration: NoExecute
tolerationKey: node-role/storage
mountSecurityMode: Any
Kune imwe neimwe node yakachengeterwa kuchengetedza data, wedzera inoenderana taint:
$ kubectl taint node ${NODE_NAME} node-role/storage="":NoExecute
Wobva waisa Helm chati nemurairo:
$ helm install --namespace ${ROOK_NAMESPACE} ./rook-ceph
Iye zvino unoda kugadzira sumbu uye tsanangura nzvimbo
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"
Kutarisa chimiro cheCeph - tarisira kuona 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
Panguva imwecheteyo, ngatitarisei kuti mapods ane mutengi application haapere pane node dzakachengeterwa Ceph:
$ kubectl -n ${APPLICATION_NAMESPACE} get pods -o custom-columns=NAME:.metadata.name,NODE:.spec.nodeName
Uyezve, zvimwe zvikamu zvinogona kugadzirwa sezvaunoda. Mamwe mashoko pamusoro pavo anoratidzwa mu
Rook uye zvikorekedzo: Rook inokwana kune zvese here?
Sezvauri kuona, kuvandudzwa kweRook kuri kuzara. Asi kuchine matambudziko asingatibvumidze kusiya zvachose manyorero eCeph:
- Hapana Rook Driver
handikwanise ekisipoti metrics pakushandiswa kweakaiswa mabhuroki, ayo anotitadzisa kutarisa. - Flexvolume uye CSI
handizivi kuti sei shandura saizi yemavhoriyamu (kusiyana neiyo RBD), saka Rook inonyimwa inobatsira (uye dzimwe nguva inodiwa zvakanyanya!) - Rook haisati yave kuchinjika seyakajairwa Ceph. Kana isu tichida kugadzirisa dziva reCephFS metadata kuti ichengetwe paSSD, uye iyo data pachayo kuti ichengetwe paHDD, isu tichada kunyoresa mapoka akasiyana emidziyo mumamepu eCRUSH nemaoko.
- Kunyangwe ichokwadi chekuti rook-ceph-operator inoonekwa seyakagadzikana, pane parizvino mamwe matambudziko pakuvandudza Ceph kubva mushanduro 13 kusvika 14.
zvakawanikwa
"Parizvino Rook akavharirwa kunze kwenyika nemapawn, asi isu tinotenda kuti rimwe zuva achatora chikamu chakakosha mumutambo!" (Mashoko akagadzirwa zvakanangana nechinyorwa chino)
Chirongwa cheRook pasina mubvunzo chakunda moyo yedu - tinotenda kuti [nezvese zvayakanakira nezvayakaipira] inofanirwa kutariswa nemi.
Zvirongwa zvedu zveramangwana zvinofashamira kugadzira rook-ceph module ye
PS
Verenga zvakare pablog yedu:
- Β«
Rook - "self-service" data warehouse yeKubernetes "; - Β«
Kugadzira inoenderera kuchengetedza nekupa muKubernetes yakavakirwa paCeph "; - Β«
Databases uye Kubernetes (wongororo uye vhidhiyo mushumo) "; - Β«
Kusuma shell-operator: kugadzira vashandisi veKubernetes zvangove nyore "; - Β«
Vashandi veKubernetes: maitiro ekumhanyisa maapplication ".
Source: www.habr.com