Rook เจœเจพเจ‚ เจจเจนเฉ€เจ‚ Rook, เจ‡เจน เจธเจตเจพเจฒ เจนเฉˆ

Rook เจœเจพเจ‚ เจจเจนเฉ€เจ‚ Rook, เจ‡เจน เจธเจตเจพเจฒ เจนเฉˆ

เจ‡เจธ เจฎเจนเฉ€เจจเฉ‡ เจฆเฉ€ เจธเจผเฉเจฐเฉ‚เจ†เจค เจตเจฟเฉฑเจš, 3 เจฎเจˆ เจจเฉ‚เฉฐ, "เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจตเจฟเฉฑเจš เจตเฉฐเจกเฉ‡ เจ—เจ เจกเฉ‡เจŸเจพ เจธเจŸเฉ‹เจฐเฉ‡เจœ เจฒเจˆ เจชเฉเจฐเจฌเฉฐเจงเจจ เจชเฉเจฐเจฃเจพเจฒเฉ€" เจฆเฉ€ เจ‡เฉฑเจ• เจตเฉฑเจกเฉ€ เจฐเจฟเจฒเฉ€เจœเจผ เจฆเจพ เจเจฒเจพเจจ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจธเฉ€ - เจฐเฉ‚เจ• 1.0.0. เจ‡เฉฑเจ• เจธเจพเจฒ เจคเฉ‹เจ‚ เจตเฉฑเจง เจชเจนเจฟเจฒเจพเจ‚ เจ…เจธเฉ€เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจชเฉเจฐเจ•เจพเจธเจผเจฟเจค Rook เจฆเฉ€ เจ†เจฎ เจธเฉฐเจ–เฉ‡เจช เจœเจพเจฃเจ•เจพเจฐเฉ€. เจซเจฟเจฐ เจธเจพเจจเฉ‚เฉฐ เจ‰เจธเจฆเฉ‡ เจ…เจจเฉเจญเจต เจฌเจพเจฐเฉ‡ เจ—เฉฑเจฒ เจ•เจฐเจจ เจฒเจˆ เจ•เจฟเจนเจพ เจ—เจฟเจ† เจ…เจญเจฟเจ†เจธ เจตเจฟเฉฑเจš เจตเจฐเจคเฉ‹ โ€” เจ…เจคเฉ‡ เจนเฉเจฃ, เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฆเฉ‡ เจ‡เจคเจฟเจนเจพเจธ เจตเจฟเฉฑเจš เจ…เจœเจฟเจนเฉ‡ เจ‡เฉฑเจ• เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจฎเฉ€เจฒ เจชเฉฑเจฅเจฐ เจฆเฉ‡ เจธเจฎเฉ‡เจ‚ เจตเจฟเฉฑเจš, เจ…เจธเฉ€เจ‚ เจ†เจชเจฃเฉ‡ เจธเฉฐเจšเจฟเจค เจชเฉเจฐเจญเจพเจต เจธเจพเจ‚เจเฉ‡ เจ•เจฐเจจ เจตเจฟเฉฑเจš เจ–เฉเจธเจผ เจนเจพเจ‚เฅค

เจธเฉฐเจ–เฉ‡เจช เจตเจฟเฉฑเจš, Rook เจ‡เฉฑเจ• เจธเฉˆเฉฑเจŸ เจนเฉˆ เจ†เจชเจฐเฉ‡เจŸเจฐ เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจฒเจˆ, เจœเฉ‹ เจ•เจฟ Ceph, EdgeFS, Minio, Cassandra, CockroachDB เจตเจฐเจ—เฉ‡ เจกเฉ‡เจŸเจพ เจธเจŸเฉ‹เจฐเฉ‡เจœ เจนเฉฑเจฒเจพเจ‚ เจฆเฉ€ เจคเฉˆเจจเจพเจคเฉ€, เจชเฉเจฐเจฌเฉฐเจงเจจ, เจ†เจŸเฉ‹เจฎเฉˆเจŸเจฟเจ• เจฐเจฟเจ•เจตเจฐเฉ€ เจฆเจพ เจชเฉ‚เจฐเจพ เจจเจฟเจฏเฉฐเจคเจฐเจฃ เจฒเฉˆเจ‚เจฆเฉ‡ เจนเจจเฅค

เจ‡เจธ เจธเจฎเฉ‡เจ‚ เจธเจญ เจคเฉ‹เจ‚ เจตเจฟเจ•เจธเจค (เจ…เจคเฉ‡ เจธเจฟเจฐเจซ เจ‡เฉฑเจ• ะฒ เจธเจฅเจฟเจฐ เจชเฉœเจพเจ…) เจฆเจพ เจนเฉฑเจฒ เจนเฉˆ rook-ceph-operator.

เจŸเจฟเฉฑเจชเจฃเฉ€: Ceph เจจเจพเจฒ เจธเจฌเฉฐเจงเจค Rook 1.0.0 เจฐเฉ€เจฒเฉ€เจœเจผ เจตเจฟเฉฑเจš เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจคเจฌเจฆเฉ€เจฒเฉ€เจ†เจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚, เจ…เจธเฉ€เจ‚ Ceph Nautilus เจฒเจˆ เจธเจฎเจฐเจฅเจจ เจ…เจคเฉ‡ CephFS เจœเจพเจ‚ RGW เจฌเจพเจฒเจŸเฉ€เจ†เจ‚ เจฒเจˆ NFS เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเฉ€ เจฏเฉ‹เจ—เจคเจพ เจจเฉ‚เฉฐ เจจเฉ‹เจŸ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚เฅค เจฌเฉ€เจŸเจพ เจชเฉฑเจงเจฐ เจคเฉฑเจ• EdgeFS เจธเจฎเจฐเจฅเจจ เจฆเฉ€ เจชเจฐเจฟเจชเฉฑเจ•เจคเจพ เจฆเฉ‚เจœเจฟเจ†เจ‚ เจตเจฟเฉฑเจš เจ•เฉ€ เจนเฉˆเฅค

เจ‡เจธ เจฒเจˆ, เจ‡เจธ เจฒเฉ‡เจ– เจตเจฟเจš เจ…เจธเฉ€เจ‚:

  • เจ†เจ“ เจ‡เจธ เจธเจตเจพเจฒ เจฆเจพ เจœเจตเจพเจฌ เจฆเฉ‡เจˆเจ เจ•เจฟ เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจ•เจฒเฉฑเจธเจŸเจฐ เจตเจฟเฉฑเจš เจธเฉ‡เจซ เจจเฉ‚เฉฐ เจคเฉˆเจจเจพเจค เจ•เจฐเจจ เจฒเจˆ เจฐเฉ‚เจ• เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจตเจฟเฉฑเจš เจ…เจธเฉ€เจ‚ เจ•เจฟเจนเฉœเฉ‡ เจซเจพเจ‡เจฆเฉ‡ เจฆเฉ‡เจ–เจฆเฉ‡ เจนเจพเจ‚;
  • เจ…เจธเฉ€เจ‚ เจ‰เจคเจชเจพเจฆเจจ เจตเจฟเฉฑเจš เจฐเฉ‚เจ• เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเฉ‡ เจ†เจชเจฃเฉ‡ เจ…เจจเฉเจญเจต เจ…เจคเฉ‡ เจชเฉเจฐเจญเจพเจตเจพเจ‚ เจจเฉ‚เฉฐ เจธเจพเจ‚เจเจพ เจ•เจฐเจพเจ‚เจ—เฉ‡;
  • เจ†เจ“ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฆเฉฑเจธเจฆเฉ‡ เจนเจพเจ‚ เจ•เจฟ เจ…เจธเฉ€เจ‚ เจฐเฉเจ• เจจเฉ‚เฉฐ โ€œเจนเจพเจ‚!โ€ เจ•เจฟเจ‰เจ‚ เจ•เจนเจฟเฉฐเจฆเฉ‡ เจนเจพเจ‚, เจ…เจคเฉ‡ เจ‰เจธ เจฒเจˆ เจธเจพเจกเฉ€เจ†เจ‚ เจฏเฉ‹เจœเจจเจพเจตเจพเจ‚ เจฌเจพเจฐเฉ‡เฅค

เจ†เจ‰ เจ†เจฎ เจงเจพเจฐเจจเจพเจตเจพเจ‚ เจ…เจคเฉ‡ เจธเจฟเจงเจพเจ‚เจค เจจเจพเจฒ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเฉ€เจเฅค

"เจฎเฉˆเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจฐเฉ‚เจ• เจฆเจพ เจซเจพเจ‡เจฆเจพ เจนเฉˆ!" (เจ…เจฃเจœเจพเจฃ เจธเจผเจคเจฐเฉฐเจœ เจ–เจฟเจกเจพเจฐเฉ€)

Rook เจœเจพเจ‚ เจจเจนเฉ€เจ‚ Rook, เจ‡เจน เจธเจตเจพเจฒ เจนเฉˆ

เจฐเฉ‚เจ• เจฆเฉ‡ เจฎเฉเฉฑเจ– เจซเจพเจ‡เจฆเจฟเจ†เจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ‡เฉฑเจ• เจ‡เจน เจนเฉˆ เจ•เจฟ เจกเฉ‡เจŸเจพ เจธเจŸเฉ‹เจฐเจพเจ‚ เจจเจพเจฒ เจ—เฉฑเจฒเจฌเจพเจค เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจตเจฟเจงเฉ€ เจฆเฉเจ†เจฐเจพ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆเฅค เจ‡เจธเจฆเจพ เจฎเจคเจฒเจฌ เจนเฉˆ เจ•เจฟ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจนเฉเจฃ เจธเจผเฉ€เจŸ เจคเฉ‹เจ‚ เจ•เจจเจธเฉ‹เจฒ เจตเจฟเฉฑเจš 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 เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจฒเจˆ เจ‡เฉฑเจ• เจตเจฟเจธเจผเจพเจฒ เจชเจฒเฉฑเจธ เจตเจœเฉ‹เจ‚ เจฆเฉ‡เจ–เจฆเฉ‡ เจนเจพเจ‚เฅค

Rook เจ…เจคเฉ‡ Rados เจจเจพเจฒ เจ–เฉเจธเจผ

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

เจ‡เจธ เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ, เจตเจพเจงเฉ‚ เจญเจพเจ—เจพเจ‚ เจจเฉ‚เฉฐ เจฒเฉ‹เฉœ เจ…เจจเฉเจธเจพเจฐ เจธเฉฐเจฐเจšเจฟเจค เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค เจ‰เจนเจจเจพเจ‚ เจฌเจพเจฐเฉ‡ เจนเฉ‹เจฐ เจตเฉ‡เจฐเจตเฉ‡ เจตเจฟเฉฑเจš เจฆเจฐเจธเจพเจ เจ—เจ เจนเจจ เจฆเจธเจคเจพเจตเฉ‡เจœเจผ. เจชเฉเจฐเจธเจผเจพเจธเจจ เจฒเจˆ, เจ…เจธเฉ€เจ‚ เจกเฉˆเจธเจผเจฌเฉ‹เจฐเจก เจ…เจคเฉ‡ เจŸเฉ‚เจฒเจฌเจพเจ•เจธ เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเจจ เจฆเฉ€ เจœเจผเฉ‹เจฐเจฆเจพเจฐ เจธเจฟเจซเจพเจฐเจธเจผ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚เฅค

เจฐเฉ‚เจ• เจ…เจคเฉ‡ เจนเฉเฉฑเจ•เจธ: เจ•เฉ€ เจฐเฉ‚เจ• เจนเจฐ เจšเฉ€เจœเจผ เจฒเจˆ เจ•เจพเจซเจผเฉ€ เจนเฉˆ?

เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจคเฉเจธเฉ€เจ‚ เจฆเฉ‡เจ– เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจฐเฉ‚เจ• เจฆเจพ เจตเจฟเจ•เจพเจธ เจชเฉ‚เจฐเฉ‡ เจœเจผเฉ‹เจฐเจพเจ‚ 'เจคเฉ‡ เจนเฉˆ. เจชเจฐ เจ…เจœเฉ‡ เจตเฉ€ เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจนเจจ เจœเฉ‹ เจธเจพเจจเฉ‚เฉฐ เจธเฉ‡เจซ เจฆเฉ€ เจฎเฉˆเจจเฉ‚เจ…เจฒ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐเฉ‡เจธเจผเจจ เจจเฉ‚เฉฐ เจชเฉ‚เจฐเฉ€ เจคเจฐเฉเจนเจพเจ‚ เจ›เฉฑเจกเจฃ เจฆเฉ€ เจ†เจ—เจฟเจ† เจจเจนเฉ€เจ‚ เจฆเจฟเฉฐเจฆเฉ€เจ†เจ‚:

  • เจ•เฉ‹เจˆ เจฐเฉเฉฑเจ• เจกเจฐเจพเจˆเจตเจฐ เจจเจนเฉ€เจ‚ เจจเจนเฉ€เจ‚ เจ•เจฐ เจธเจ•เจฆเจพ เจฎเจพเจŠเจ‚เจŸ เจ•เฉ€เจคเฉ‡ เจฌเจฒเจพเจ•เจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ 'เจคเฉ‡ เจจเจฟเจฐเจฏเจพเจค เจฎเฉˆเจŸเฉเจฐเจฟเจ•เจธ, เจœเฉ‹ เจธเจพเจจเฉ‚เฉฐ เจจเจฟเจ—เจฐเจพเจจเฉ€ เจคเฉ‹เจ‚ เจตเจพเจ‚เจเฉ‡ เจฐเฉฑเจ–เจฆเจพ เจนเฉˆเฅค
  • Flexvolume เจ…เจคเฉ‡ CSI เจชเจคเจพ เจจเจนเฉ€เจ‚ เจ•เจฟเจตเฉ‡เจ‚ เจตเจพเจฒเฉ€เจ…เจฎ เจฆเจพ เจ†เจ•เจพเจฐ เจฌเจฆเจฒเฉ‹ (เจ‡เฉฑเจ•เฉ‹ RBD เจฆเฉ‡ เจ‰เจฒเจŸ), เจ‡เจธเจฒเจˆ Rook เจ‡เฉฑเจ• เจ‰เจชเจฏเฉ‹เจ—เฉ€ (เจ…เจคเฉ‡ เจ•เจˆ เจตเจพเจฐ เจ—เฉฐเจญเฉ€เจฐ เจคเฉŒเจฐ 'เจคเฉ‡ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ‡!) เจŸเฉ‚เจฒ เจคเฉ‹เจ‚ เจตเจพเจ‚เจเจพ เจนเฉˆเฅค
  • เจฐเฉ‚เจ• เจ…เจœเฉ‡ เจตเฉ€ เจจเจฟเจฏเจฎเจค เจธเฉ‡เจซ เจœเจฟเฉฐเจจเจพ เจฒเจšเจ•เจฆเจพเจฐ เจจเจนเฉ€เจ‚ เจนเฉˆ. เจœเฉ‡เจ•เจฐ เจ…เจธเฉ€เจ‚ CephFS เจฎเฉˆเจŸเจพเจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ SSD 'เจคเฉ‡ เจธเจŸเฉ‹เจฐ เจ•เจฐเจจ เจฒเจˆ เจชเฉ‚เจฒ เจจเฉ‚เฉฐ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐ เจ•เจฐเจจเจพ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเจพเจ‚, เจ…เจคเฉ‡ เจกเจพเจŸเจพ เจ–เฉเจฆ HDD 'เจคเฉ‡ เจธเจŸเฉ‹เจฐ เจ•เฉ€เจคเจพ เจœเจพเจฃเจพ เจนเฉˆ, เจคเจพเจ‚ เจธเจพเจจเฉ‚เฉฐ CRUSH เจจเจ•เจธเจผเจฟเจ†เจ‚ เจตเจฟเฉฑเจš เจกเจฟเจตเจพเจˆเจธเจพเจ‚ เจฆเฉ‡ เจตเฉฑเจ–เจฐเฉ‡ เจธเจฎเฉ‚เจนเจพเจ‚ เจจเฉ‚เฉฐ เจนเฉฑเจฅเฉ€เจ‚ เจฐเจœเจฟเจธเจŸเจฐ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉ‹เจตเฉ‡เจ—เฉ€เฅค
  • เจ‡เจธ เจคเฉฑเจฅ เจฆเฉ‡ เจฌเจพเจตเจœเฉ‚เจฆ เจ•เจฟ rook-ceph-operator เจจเฉ‚เฉฐ เจธเจฅเจฟเจฐ เจฎเฉฐเจจเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจตเจฐเจคเจฎเจพเจจ เจตเจฟเฉฑเจš Ceph เจจเฉ‚เฉฐ เจตเจฐเจœเจจ 13 เจคเฉ‹เจ‚ 14 เจคเฉฑเจ• เจ…เฉฑเจชเจ—เจฐเฉ‡เจก เจ•เจฐเจจ เจตเฉ‡เจฒเฉ‡ เจ•เฉเจ เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจนเจจเฅค

เจธเจฟเฉฑเจŸเจพ

"เจ‡เจธ เจธเจฎเฉ‡เจ‚ เจฐเฉ‚เจ• เจจเฉ‚เฉฐ เจฌเจพเจนเจฐเฉ€ เจฆเฉเจจเฉ€เจ† เจคเฉ‹เจ‚ เจฌเฉฐเจฆเจฟเจ†เจ‚ เจฆเฉเจ†เจฐเจพ เจฌเฉฐเจฆ เจ•เจฐ เจฆเจฟเฉฑเจคเจพ เจ—เจฟเจ† เจนเฉˆ, เจชเจฐ เจธเจพเจจเฉ‚เฉฐ เจตเจฟเจธเจผเจตเจพเจธ เจนเฉˆ เจ•เจฟ เจ‡เฉฑเจ• เจฆเจฟเจจ เจ‰เจน เจ–เฉ‡เจก เจตเจฟเฉฑเจš เจจเจฟเจฐเจฃเจพเจ‡เจ• เจญเฉ‚เจฎเจฟเจ•เจพ เจจเจฟเจญเจพเจเจ—เฉ€!" (เจ‡เจธ เจฒเฉ‡เจ– เจฒเจˆ เจตเจฟเจธเจผเฉ‡เจธเจผ เจคเฉŒเจฐ 'เจคเฉ‡ เจ–เฉ‹เจœ เจ•เฉ€เจคเฉ€ เจ—เจˆ เจนเจตเจพเจฒเจพ)

เจฐเฉ‚เจ• เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจจเฉ‡ เจฌเจฟเจจเจพเจ‚ เจธเจผเฉฑเจ• เจธเจพเจกเฉ‡ เจฆเจฟเจฒ เจœเจฟเฉฑเจค เจฒเจ เจนเจจ - เจ…เจธเฉ€เจ‚ เจตเจฟเจธเจผเจตเจพเจธ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ เจ•เจฟ [เจ‡เจธเจฆเฉ‡ เจธเจพเจฐเฉ‡ เจšเฉฐเจ—เฉ‡ เจ…เจคเฉ‡ เจจเฉเจ•เจธเจพเจจ เจฆเฉ‡ เจจเจพเจฒ] เจ‡เจน เจฏเจ•เฉ€เจจเฉ€ เจคเฉŒเจฐ 'เจคเฉ‡ เจคเฉเจนเจพเจกเฉ‡ เจงเจฟเจ†เจจ เจฆเจพ เจนเฉฑเจ•เจฆเจพเจฐ เจนเฉˆเฅค

เจธเจพเจกเฉ€เจ†เจ‚ เจญเจตเจฟเฉฑเจ– เจฆเฉ€เจ†เจ‚ เจฏเฉ‹เจœเจจเจพเจตเจพเจ‚ เจฐเฉ‚เจ•-เจธเฉ‡เจซ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจฎเฉ‹เจกเฉ€เจŠเจฒ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจ‰เจฌเจพเจฒเจฆเฉ€เจ†เจ‚ เจนเจจ addon-operator, เจœเฉ‹ เจธเจพเจกเฉ‡ เจ•เจˆ เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจ•เจฒเฉฑเจธเจŸเจฐเจพเจ‚ เจตเจฟเฉฑเจš เจ‡เจธเจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจจเฉ‚เฉฐ เจนเฉ‹เจฐ เจตเฉ€ เจธเจฐเจฒ เจ…เจคเฉ‡ เจตเจงเฉ‡เจฐเฉ‡ เจธเฉเจตเจฟเจงเจพเจœเจจเจ• เจฌเจฃเจพเจตเฉ‡เจ—เจพเฅค

PS

เจธเจพเจกเฉ‡ เจฌเจฒเฉŒเจ— 'เจคเฉ‡ เจตเฉ€ เจชเฉœเฉเจนเฉ‹:

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹