рдпрд╕ рдорд╣рд┐рдирд╛рдХреЛ рд╕реБрд░реБрдорд╛, рдореЗ 3 рдорд╛, "рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рдорд╛ рд╡рд┐рддрд░рд┐рдд рдбрд╛рдЯрд╛ рднрдгреНрдбрд╛рд░рдгрдХреЛ рд▓рд╛рдЧрд┐ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдкреНрд░рдгрд╛рд▓реА" рдХреЛ рдПрдХ рдкреНрд░рдореБрдЦ рд░рд┐рд▓реАрдЬ рдШреЛрд╖рдгрд╛ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ -
рдЫреЛрдЯрдХрд░реАрдорд╛, рд░реБрдХ рдПрдХ рд╕реЗрдЯ рд╣реЛ
рдпрд╕ рд╕рдордпрдорд╛ рд╕рдмреИрднрдиреНрджрд╛ рд╡рд┐рдХрд╕рд┐рдд (рд░
рднрдиреНрдиреБ: Ceph рд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд Rook 1.0.0 рд░рд┐рд▓реАрдЬрдорд╛ рднрдПрдХрд╛ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдордзреНрдпреЗ, рд╣рд╛рдореА Ceph Nautilus рдХреЛ рд╕рдорд░реНрдерди рд░ CephFS рд╡рд╛ RGW рдмрдХреЗрдЯрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ NFS рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдХреНрд╖рдорддрд╛рд▓рд╛рдИ рдиреЛрдЯ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред рдЕрд░реВрдХреЛ рдмреАрдЪрдорд╛ рдХреЗ рдмрд╛рд╣рд┐рд░ рдЦрдбрд╛ рдЫ рдмреАрдЯрд╛ рд╕реНрддрд░рдорд╛ EdgeFS рд╕рдорд░реНрдердирдХреЛ рдкрд░рд┐рдкрдХреНрд╡рддрд╛ред
рддреНрдпрд╕реЛрднрдП, рдпрд╕ рд▓реЗрдЦрдорд╛ рд╣рд╛рдореА:
- рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░рдорд╛ рд╕реЗрдл рддреИрдирд╛рде рдЧрд░реНрди рд░реБрдХ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрд╛ рд╣рд╛рдореАрд▓реЗ рдХреЗ рдлрд╛рдЗрджрд╛рд╣рд░реВ рджреЗрдЦреНрдЫреМрдВ рднрдиреНрдиреЗ рдкреНрд░рд╢реНрдирдХреЛ рдЬрд╡рд╛рдл рджрд┐рдиреБрд╣реЛрд╕реН;
- рд╣рд╛рдореА рдЙрддреНрдкрд╛рджрдирдорд╛ рд░реБрдХ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рд╣рд╛рдореНрд░реЛ рдЕрдиреБрднрд╡ рд░ рдкреНрд░рднрд╛рд╡рд╣рд░реВ рд╕рд╛рдЭрд╛ рдЧрд░реНрдиреЗрдЫреМрдВ;
- рд░реБрдХрд▓рд╛рдИ рд╣рд╛рдореАрд▓реЗ рдХрд┐рди тАЬрд╣реЛ!тАЭ рднрдиреНрдпреМрдВ, рд░ рдЙрд╣рд╛рдБрдХрд╛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореНрд░реЛ рдпреЛрдЬрдирд╛рд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рдмрддрд╛рдЙрдиреБрд╣реЛрд╕реНред
рд╕рд╛рдорд╛рдиреНрдп рдЕрд╡рдзрд╛рд░рдгрд╛ рд░ рд╕рд┐рджреНрдзрд╛рдиреНрдд рд╕рдВрдЧ рд╕реБрд░реБ рдЧрд░реМрдВред
"рдорд╕рдБрдЧ рдПрдЙрдЯрд╛ рд░реБрдХрдХреЛ рдлрд╛рдЗрджрд╛ рдЫ!" (рдЕрдЬреНрдЮрд╛рдд рдЪреЗрд╕ рдЦреЗрд▓рд╛рдбреА)
рд░реБрдХрдХреЛ рдореБрдЦреНрдп рдлрд╛рдЗрджрд╛рд╣рд░реВ рдордзреНрдпреЗ рдПрдХ рдпреЛ рд╣реЛ рдХрд┐ рдбрд╛рдЯрд╛ рд╕реНрдЯреЛрд░рд╣рд░реВрд╕рдБрдЧ рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛ Kubernetes рд╕рдВрдпрдиреНрддреНрд░рд╣рд░реВ рдорд╛рд░реНрдлрдд рдЧрд░рд┐рдиреНрдЫред рдпрд╕рдХреЛ рдорддрд▓рдм рдпреЛ рд╣реЛ рдХрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдЕрдм рдХрдиреНрд╕реЛрд▓рдорд╛ рдкрд╛рдирд╛рдмрд╛рдЯ Ceph рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрди рдЖрджреЗрд╢рд╣рд░реВ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫреИрдиред
тАФ рдХреЗ рддрдкрд╛рдИрдВ рдХреНрд▓рд╕реНрдЯрд░рдорд╛ CephFS рдбрд┐рдкреНрд▓реЛрдп рдЧрд░реНрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫ? рдХреЗрд╡рд▓ YAML рдлрд╛рдЗрд▓ рд▓реЗрдЦреНрдиреБрд╣реЛрд╕реН!
- рдХреЗ? рдХреЗ рддрдкрд╛рдЗрдБ S3 API рд╕рдБрдЧ рдХреБрдиреИ рд╡рд╕реНрддреБ рд╕реНрдЯреЛрд░ рдкрдирд┐ рдбрд┐рдкреНрд▓реЛрдп рдЧрд░реНрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫ? рдХреЗрд╡рд▓ рджреЛрд╕реНрд░реЛ 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 рдлрд╛рдЗрд▓ рдорд╛рд░реНрдлрдд рд╕реНрд░реЛрддрд╣рд░реВ "рдЕрд░реНрдбрд░" рдЧрд░реНрдЫреМрдВ, рдЬрд╕рдХреЛ рд▓рд╛рдЧрд┐ рдЕрдкрд░реЗрдЯрд░рд▓реЗ рдЖрд╡рд╢реНрдпрдХ рдЖрджреЗрд╢рд╣рд░реВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрджрдЫ рд░ рд╣рд╛рдореАрд▓рд╛рдИ "рдЕрддреНрдпрдиреНрддреИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ" рдЧреЛрдкреНрдп рдлрд░реНрдХрд╛рдЙрдБрдЫ рдЬрд╕рдХреЛ рд╕рд╛рде рд╣рд╛рдореА рдердк рдХрд╛рдо рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред (рддрд▓ рд╣реЗрд░)ред рд░ рдорд╛рдерд┐ рд╕реВрдЪреАрдмрджреНрдз рдЪрд░рд╣рд░реВрдмрд╛рдЯ, рдЖрджреЗрд╢ рд░ рдЧреЛрдкреНрдп рдирд╛рдо рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░рд┐рдиреЗрдЫред
рдпреЛ рдХрд╕реНрддреЛ рдЯрд┐рдо рд╣реЛ ? рд╡рд╕реНрддреБ рднрдгреНрдбрд╛рд░рдгрдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрд╛, рдкреЛрдб рднрд┐рддреНрд░рдХреЛ рд░реБрдХ рдЕрдкрд░реЗрдЯрд░рд▓реЗ рдирд┐рдореНрди рдХрд╛рд░реНрдп рдЧрд░реНрдиреЗрдЫ:
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 }}
рдпрд╕ рдХрд╛рд░реНрдпрдорд╛ рд╕реВрдЪреАрдмрджреНрдз рд╕рдмреИ рдХрд╛рд░реНрдпрд╣рд░реВ Kubernetes рдХреЛ рдврд╛рдБрдЪрд╛ рднрд┐рддреНрд░ рдкреНрд░рджрд░реНрд╢рди рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛред 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
рдЕрдм рддрдкрд╛рдИрдВрд▓реЗ рдХреНрд▓рд╕реНрдЯрд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд░ рд╕реНрдерд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ
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 рдХреЛ рд╡рд┐рдкрд░реАрдд), рддреНрдпрд╕реИрд▓реЗ Rook рдЙрдкрдпреЛрдЧреА (рд░ рдХрд╣рд┐рд▓реЗрдХрд╛рд╣реАрдБ рдЖрд▓реЛрдЪрдирд╛рддреНрдордХ рд░реВрдкрдорд╛ рдЖрд╡рд╢реНрдпрдХ рдЫ!) рдЙрдкрдХрд░рдгрдмрд╛рдЯ рд╡рдЮреНрдЪрд┐рдд рдЫред - рд░реБрдХ рдЕрдЭреИ рдкрдирд┐ рдирд┐рдпрдорд┐рдд Ceph рдЬрддреНрддрд┐рдХреИ рд▓рдЪрд┐рд▓реЛ рдЫреИрдиред рдпрджрд┐ рд╣рд╛рдореА CephFS рдореЗрдЯрд╛рдбреЗрдЯрд╛ SSD рдорд╛ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдкреВрд▓ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреМрдВ, рд░ рдбреЗрдЯрд╛ рдЖрдлреИ HDD рдорд╛ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрди, рд╣рд╛рдореАрд▓реЗ CRUSH рдирдХреНрд╕рд╛рдорд╛ рдореНрдпрд╛рдиреБрдЕрд▓ рд░реВрдкрдорд╛ рдпрдиреНрддреНрд░рд╣рд░реВрдХреЛ рдЕрд▓рдЧ рд╕рдореВрд╣ рджрд░реНрддрд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рд╣реБрдиреЗрдЫред
- рд░реБрдХ-рд╕реЗрдл-рдЕрдкрд░реЗрдЯрд░рд▓рд╛рдИ рд╕реНрдерд┐рд░ рдорд╛рдирд┐рдиреНрдЫ рднрдиреНрдиреЗ рддрдереНрдпрдХреЛ рдмрд╛рд╡рдЬреБрдж, рд╕рдВрд╕реНрдХрд░рдг 13 рдмрд╛рдЯ 14 рдмрд╛рдЯ Ceph рд╕реНрддрд░рд╡реГрджреНрдзрд┐ рдЧрд░реНрджрд╛ рд╣рд╛рд▓ рдХреЗрд╣реА рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рдЫрдиреНред
рдирд┐рд╖реНрдХрд░реНрд╖
"рдЕрд╣рд┐рд▓реЗ рд░реБрдХ рдмрд╛рд╣рд┐рд░реА рд╕рдВрд╕рд╛рд░рдмрд╛рдЯ рдкреНрдпрд╛рджрд╛рд╣рд░реВрджреНрд╡рд╛рд░рд╛ рдмрдиреНрдж рдЫ, рддрд░ рд╣рд╛рдореА рд╡рд┐рд╢реНрд╡рд╛рд╕ рдЧрд░реНрдЫреМрдВ рдХрд┐ рдПрдХ рджрд┐рди рдЙрдирд▓реЗ рдЦреЗрд▓рдорд╛ рдирд┐рд░реНрдгрд╛рдпрдХ рднреВрдорд┐рдХрд╛ рдЦреЗрд▓реНрдиреЗрдЫрдиреН!" (рдЙрджреНрдзрд░рдг рд╡рд┐рд╢реЗрд╖ рдЧрд░реА рдпрд╕ рд▓реЗрдЦрдХреЛ рд▓рд╛рдЧрд┐ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдЧрд░рд┐рдПрдХреЛ)
рд░реБрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рд▓реЗ рдирд┐рд╕реНрд╕рдиреНрджреЗрд╣ рд╣рд╛рдореНрд░реЛ рдорди рдЬрд┐рддреЗрдХреЛ рдЫ - рд╣рд╛рдореА рд╡рд┐рд╢реНрд╡рд╛рд╕ рдЧрд░реНрдЫреМрдВ рдХрд┐ [рдпрд╕рдХрд╛ рд╕рдмреИ рдлрд╛рдЗрджрд╛ рд░ рд╡рд┐рдкрдХреНрд╖рдХрд╛ рд╕рд╛рде] рдпреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдкрдорд╛ рддрдкрд╛рдИрдВрдХреЛ рдзреНрдпрд╛рдирдХреЛ рдпреЛрдЧреНрдп рдЫред
рд╣рд╛рдореНрд░рд╛ рднрд╛рд╡реА рдпреЛрдЬрдирд╛рд╣рд░реВ рд░реБрдХ-рд╕реЗрдлрд▓рд╛рдИ рдореЛрдбреНрдпреБрд▓ рдмрдирд╛рдЙрдирдХрд╛ рд▓рд╛рдЧрд┐ рдЙрдмрд▓рд┐рдПрдХрд╛ рдЫрдиреН
PS
рд╣рд╛рдореНрд░реЛ рдмреНрд▓рдЧрдорд╛ рдкрдирд┐ рдкрдвреНрдиреБрд╣реЛрд╕реН:
- ┬л
рд░реБрдХ - Kubernetes рдХреЛ рд▓рд╛рдЧрд┐ "рд╕реНрд╡-рд╕реЗрд╡рд╛" рдбрд╛рдЯрд╛ рдЧреЛрджрд╛рдо ┬╗; - ┬л
Ceph рдорд╛ рдЖрдзрд╛рд░рд┐рдд Kubernetes рдорд╛ рдкреНрд░рд╛рд╡рдзрд╛рди рд╕рдВрдЧ рд▓рдЧрд╛рддрд╛рд░ рднрдгреНрдбрд╛рд░рдг рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджреИ ┬╗; - ┬л
рдбрд╛рдЯрд╛рдмреЗрд╕ рд░ Kubernetes (рд╕рдореАрдХреНрд╖рд╛ рд░ рднрд┐рдбрд┐рдпреЛ рд░рд┐рдкреЛрд░реНрдЯ) ┬╗; - ┬л
рд╢реЗрд▓-рдЕрдкрд░реЗрдЯрд░рдХреЛ рдкрд░рд┐рдЪрдп рджрд┐рдБрджреИ: Kubernetes рдХреЛ рд▓рд╛рдЧрд┐ рдЕрдкрд░реЗрдЯрд░рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕рдЬрд┐рд▓реЛ рднрдпреЛ ┬╗; - ┬л
Kubernetes рдХреЛ рд▓рд╛рдЧреА рдЕрдкрд░реЗрдЯрд░рд╣рд░реВ: рд╕реНрдЯреЗрдЯрдлреБрд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВ рдХрд╕рд░реА рдЪрд▓рд╛рдЙрдиреЗ "ред
рд╕реНрд░реЛрдд: www.habr.com