ரூக்கிற்கு அல்லது ரூக்கிற்கு - அதுதான் கேள்வி

ரூக்கிற்கு அல்லது ரூக்கிற்கு - அதுதான் கேள்வி

இந்த மாத தொடக்கத்தில், மே 3 அன்று, "குபெர்னெட்ஸில் விநியோகிக்கப்பட்ட தரவு சேமிப்பகத்திற்கான மேலாண்மை அமைப்பு" ஒரு பெரிய வெளியீடு அறிவிக்கப்பட்டது - ரூக் 1.0.0. ஒரு வருடத்திற்கும் மேலாக நாங்கள் ஏற்கனவே வெளியிடப்பட்டது ரூக்கின் பொதுவான கண்ணோட்டம். அப்போது அவருடைய அனுபவத்தைப் பற்றி பேசும்படி கேட்டோம் நடைமுறையில் பயன்படுத்தவும் - இப்போது, ​​திட்டத்தின் வரலாற்றில் இது போன்ற ஒரு குறிப்பிடத்தக்க மைல்கல் இருக்கும் நேரத்தில், எங்கள் திரட்டப்பட்ட பதிவுகளைப் பகிர்ந்து கொள்வதில் நாங்கள் மகிழ்ச்சியடைகிறோம்.

சுருக்கமாக, ரூக் ஒரு தொகுப்பு ஆபரேட்டர்கள் Ceph, EdgeFS, Minio, Cassandra, CockroachDB போன்ற தரவு சேமிப்பக தீர்வுகளின் வரிசைப்படுத்தல், மேலாண்மை, தானியங்கு மீட்பு ஆகியவற்றின் முழுக் கட்டுப்பாட்டை எடுக்கும் குபெர்னெட்டஸுக்கு.

இந்த நேரத்தில் மிகவும் வளர்ந்த (மற்றும் ஒன்றே ஒன்று в நிலையான நிலை) தீர்வு ரூக்-செஃப்-ஆபரேட்டர்.

கருத்து: Ceph தொடர்பான Rook 1.0.0 வெளியீட்டில் உள்ள குறிப்பிடத்தக்க மாற்றங்களில், Ceph Nautilus க்கான ஆதரவு மற்றும் CephFS அல்லது RGW பக்கெட்டுகளுக்கு NFS ஐப் பயன்படுத்தும் திறனைக் குறிப்பிடலாம். பீட்டா நிலைக்கு எட்ஜ்எஃப்எஸ் ஆதரவின் முதிர்ச்சிதான் மற்றவற்றில் தனித்து நிற்கிறது.

எனவே, இந்த கட்டுரையில் நாம்:

  • குபெர்னெட்டஸ் கிளஸ்டரில் செஃப்பை பயன்படுத்த ரூக்கைப் பயன்படுத்துவதில் என்ன நன்மைகளைப் பார்க்கிறோம் என்ற கேள்விக்கு பதிலளிப்போம்;
  • தயாரிப்பில் ரூக்கைப் பயன்படுத்துவதற்கான எங்கள் அனுபவத்தையும் பதிவுகளையும் பகிர்ந்து கொள்வோம்;
  • ரூக்கிடம் “ஆம்!” என்று ஏன் சொல்கிறோம் என்பதையும், அவருக்கான எங்கள் திட்டங்களைப் பற்றியும் கூறுவோம்.

பொதுவான கருத்துக்கள் மற்றும் கோட்பாட்டுடன் ஆரம்பிக்கலாம்.

"எனக்கு ஒரு ரூக்கின் நன்மை உள்ளது!" (தெரியாத செஸ் வீரர்)

ரூக்கிற்கு அல்லது ரூக்கிற்கு - அதுதான் கேள்வி

ரூக்கின் முக்கிய நன்மைகளில் ஒன்று, தரவுக் கடைகளுடனான தொடர்பு குபெர்னெட்ஸ் வழிமுறைகள் மூலம் மேற்கொள்ளப்படுகிறது. தாளில் இருந்து கன்சோலில் Ceph ஐ உள்ளமைக்க நீங்கள் இனி கட்டளைகளை நகலெடுக்க வேண்டியதில்லை என்பதே இதன் பொருள்.

— நீங்கள் CephFS ஐ ஒரு கிளஸ்டரில் பயன்படுத்த விரும்புகிறீர்களா? ஒரு YAML கோப்பை எழுதவும்!
- என்ன? S3 API உடன் ஒரு பொருள் அங்காடியையும் பயன்படுத்த விரும்புகிறீர்களா? இரண்டாவது YAML கோப்பை எழுதவும்!

ஒரு பொதுவான ஆபரேட்டரின் அனைத்து விதிகளின்படி ரூக் உருவாக்கப்பட்டது. பயன்படுத்தி அவருடன் தொடர்பு ஏற்படுகிறது CRD (தனிப்பயன் வள வரையறைகள்), இதில் நமக்கு தேவையான Ceph நிறுவனங்களின் பண்புகளை விவரிக்கிறோம் (இது மட்டுமே நிலையான செயலாக்கம் என்பதால், இயல்பாகவே இந்தக் கட்டுரை Ceph பற்றிப் பேசும், இல்லையெனில் வெளிப்படையாகக் கூறப்படாவிட்டால்). குறிப்பிட்ட அளவுருக்கள் படி, ஆபரேட்டர் தானாகவே உள்ளமைவுக்கு தேவையான கட்டளைகளை இயக்கும்.

ஒரு பொருள் அங்காடியை உருவாக்கும் உதாரணத்தைப் பயன்படுத்தி பிரத்தியேகங்களைப் பார்ப்போம், அல்லது அதற்கு பதிலாக - 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 கோப்பு மூலம் வளங்களை "ஆர்டர்" செய்கிறோம் என்பதற்கு பொதுவான வேலைத் திட்டம் வருகிறது, அதற்காக ஆபரேட்டர் தேவையான கட்டளைகளை செயல்படுத்தி, "அவ்வளவு உண்மை இல்லாத" ரகசியத்தை எங்களுக்குத் தருகிறார், இதன் மூலம் நாம் மேலும் வேலை செய்யலாம். (கீழே பார்). மேலே பட்டியலிடப்பட்டுள்ள மாறிகளில் இருந்து, கட்டளை மற்றும் இரகசிய பெயர் தொகுக்கப்படும்.

இது என்ன மாதிரியான அணி? பொருள் சேமிப்பிற்காக ஒரு பயனரை உருவாக்கும் போது, ​​பாட்டின் உள்ளே இருக்கும் ரூக் ஆபரேட்டர் பின்வருவனவற்றைச் செய்யும்:

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 }}

இந்த வேலையில் பட்டியலிடப்பட்டுள்ள அனைத்து செயல்களும் குபெர்னெட்டஸின் கட்டமைப்பிற்குள் செய்யப்பட்டன. 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

இருப்பினும், ரூக்கைப் பயன்படுத்தும் போது இந்த சிக்கல் வெறுமனே இல்லை. அதன் சொந்த இயக்கிகளைப் பயன்படுத்தி பெருகிவரும் செயல்முறை நிகழ்கிறது Flexvolume அல்லது சிஎஸ்ஐ (இன்னும் பீட்டா நிலையில் உள்ளது) எனவே ரகசியங்கள் தேவையில்லை.

ரூக் தானாகவே பல சிக்கல்களைத் தீர்க்கிறது, இது புதிய திட்டங்களில் அதைப் பயன்படுத்த ஊக்குவிக்கிறது.

ரூக் முற்றுகை

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

இப்போது நீங்கள் ஒரு கிளஸ்டரை உருவாக்கி இருப்பிடத்தைக் குறிப்பிட வேண்டும் OSD:

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

மேலும், கூடுதல் கூறுகளை விரும்பியபடி கட்டமைக்க முடியும். அவர்களைப் பற்றிய கூடுதல் விவரங்கள் இதில் குறிப்பிடப்பட்டுள்ளன ஆவணங்கள். நிர்வாகத்திற்காக, டாஷ்போர்டு மற்றும் கருவிப்பெட்டியை நிறுவுமாறு கடுமையாக பரிந்துரைக்கிறோம்.

ரூக் மற்றும் கொக்கிகள்: எல்லாவற்றிற்கும் ரூக் போதுமா?

நீங்கள் பார்க்க முடியும் என, ரூக்கின் வளர்ச்சி முழு வீச்சில் உள்ளது. ஆனால் Ceph இன் கையேடு உள்ளமைவை முற்றிலுமாக கைவிட அனுமதிக்காத சிக்கல்கள் இன்னும் உள்ளன:

  • ரூக் டிரைவர் இல்லை முடியாது ஏற்றப்பட்ட தொகுதிகளின் பயன்பாட்டின் அளவீடுகளை ஏற்றுமதி செய்கிறோம், இது நம்மை கண்காணிப்பதை இழக்கிறது.
  • Flexvolume மற்றும் CSI எப்படி என்று தெரியவில்லை தொகுதிகளின் அளவை மாற்றவும் (அதே RBD க்கு மாறாக), அதனால் ரூக் ஒரு பயனுள்ள (மற்றும் சில சமயங்களில் முக்கியமான தேவை!) கருவியை இழக்கிறார்.
  • ரூக் இன்னும் வழக்கமான Ceph போல் நெகிழ்வாக இல்லை. SSD இல் சேமிக்கப்படும் CephFS மெட்டாடேட்டாவைக் கட்டமைக்க வேண்டும், மேலும் தரவு HDD இல் சேமிக்கப்பட வேண்டும் என்றால், CRUSH வரைபடத்தில் தனித்தனியான சாதனக் குழுக்களை கைமுறையாகப் பதிவு செய்ய வேண்டும்.
  • ரூக்-செஃப்-ஆபரேட்டர் நிலையானதாகக் கருதப்பட்டாலும், பதிப்பு 13 இலிருந்து 14 க்கு Ceph ஐ மேம்படுத்தும் போது தற்போது சில சிக்கல்கள் உள்ளன.

கண்டுபிடிப்புகள்

"இப்போது ரூக் சிப்பாய்களால் வெளி உலகத்திலிருந்து மூடப்பட்டுள்ளது, ஆனால் ஒரு நாள் அவள் விளையாட்டில் ஒரு தீர்க்கமான பாத்திரத்தை வகிப்பாள் என்று நாங்கள் நம்புகிறோம்!" (மேற்கோள் குறிப்பாக இந்த கட்டுரைக்காக கண்டுபிடிக்கப்பட்டது)

ரூக் திட்டம் சந்தேகத்திற்கு இடமின்றி எங்கள் இதயங்களை வென்றுள்ளது - [அதன் அனைத்து நன்மை தீமைகளுடனும்] இது நிச்சயமாக உங்கள் கவனத்திற்கு தகுதியானது என்று நாங்கள் நம்புகிறோம்.

எங்கள் எதிர்காலத் திட்டங்கள் ரூக்-செப்பை ஒரு தொகுதியாக மாற்றும் addon-operator, இது எங்கள் பல குபெர்னெட்ஸ் கிளஸ்டர்களில் அதன் பயன்பாட்டை இன்னும் எளிமையாகவும் வசதியாகவும் செய்யும்.

சோசலிஸ்ட் கட்சி

எங்கள் வலைப்பதிவிலும் படிக்கவும்:

ஆதாரம்: www.habr.com

கருத்தைச் சேர்