рдЗрд╕ рдорд╣реАрдиреЗ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, 3 рдордИ рдХреЛ, "рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдбреЗрдЯрд╛ рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рдмрдВрдзрди рдкреНрд░рдгрд╛рд▓реА" рдХреА рдПрдХ рдмрдбрд╝реА рд░рд┐рд▓реАрдЬ рдХреА рдШреЛрд╖рдгрд╛ рдХреА рдЧрдИ рдереА -
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рд░реВрдХ рдПрдХ рд╕рдореБрдЪреНрдЪрдп рд╣реИ
рдлрд┐рд▓рд╣рд╛рд▓ рд╕рдмрд╕реЗ рд╡рд┐рдХрд╕рд┐рдд (рдФрд░
рдиреЛрдЯ: рд╕реЗрдл рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд░реВрдХ 1.0.0 рд░рд┐рд▓реАрдЬ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрджрд▓рд╛рд╡реЛрдВ рдХреЗ рдмреАрдЪ, рд╣рдо рд╕реЗрдл рдиреЙрдЯрд┐рд▓рд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдФрд░ рд╕реЗрдлрдПрдлрдПрд╕ рдпрд╛ рдЖрд░рдЬреАрдбрдмреНрд▓реНрдпреВ рдмрдХреЗрдЯ рдХреЗ рд▓рд┐рдП рдПрдирдПрдлрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдиреЛрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рджреВрд╕рд░реЛрдВ рдХреЗ рдмреАрдЪ рдЬреЛ рдмрд╛рдд рд╕рдмрд╕реЗ рдЕрд▓рдЧ рд╣реИ рд╡рд╣ рд╣реИ рдПрдЬрдПрдлрдПрд╕ рд╕рдкреЛрд░реНрдЯ рдХрд╛ рдмреАрдЯрд╛ рд╕реНрддрд░ рдкрд░ рдкрд░рд┐рдкрдХреНрд╡ рд╣реЛрдирд╛ред
рддреЛ, рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо:
- рдЖрдЗрдП рдЗрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрдВ рдХрд┐ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рд╕реЗрдл рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╣рдореЗрдВ рдХреНрдпрд╛ рдлрд╛рдпрджреЗ рдорд┐рд▓рддреЗ рд╣реИрдВ;
- рд╣рдо рдЙрддреНрдкрд╛рджрди рдореЗрдВ рд░реВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдФрд░ рдЫрд╛рдкреЛрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВрдЧреЗ;
- рдЖрдЗрдП рдЖрдкрдХреЛ рдмрддрд╛рдПрдВ рдХрд┐ рд╣рдо рд░реВрдХ рдХреЛ "рд╣рд╛рдВ!" рдХреНрдпреЛрдВ рдХрд╣рддреЗ рд╣реИрдВ, рдФрд░ рдЙрд╕рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реА рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред
рдЖрдЗрдП рд╕рд╛рдорд╛рдиреНрдп рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдФрд░ рд╕рд┐рджреНрдзрд╛рдВрдд рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВред
"рдореБрдЭреЗ рдПрдХ рд░реВрдХ рдХрд╛ рдлрд╛рдпрджрд╛ рд╣реИ!" (рдЕрдЬреНрдЮрд╛рдд рд╢рддрд░рдВрдЬ рдЦрд┐рд▓рд╛рдбрд╝реА)
рд░реВрдХ рдХрд╛ рдПрдХ рдореБрдЦреНрдп рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рддрдВрддреНрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЕрдм рдЖрдкрдХреЛ рд╢реАрдЯ рд╕реЗ рдХрдВрд╕реЛрд▓ рдореЗрдВ рд╕реЗрдл рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рдХреЛ рдХреЙрдкреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
тАФ рдХреНрдпрд╛ рдЖрдк 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 }}
рдЗрд╕ рдХрд╛рд░реНрдп рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рд╕рднреА рдХрд╛рд░реНрдп рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░ рдХрд┐рдП рдЧрдП рдереЗред YAML рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕рдВрд░рдЪрдирд╛рдПрдБ Git рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛рддреА рд╣реИрдВ рдФрд░ рдХрдИ рдмрд╛рд░ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИрдВред рд╣рдо рдЗрд╕реЗ DevOps рдЗрдВрдЬреАрдирд┐рдпрд░реЛрдВ рдФрд░ рд╕рдордЧреНрд░ рд░реВрдк рд╕реЗ CI/CD рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝реЗ рд▓рд╛рдн рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВред
рд░реВрдХ рдФрд░ рд░рд╛рдбреЛрд╕ рд╕реЗ рдЦреБрд╢
рд╕реЗрдл + рдЖрд░рдмреАрдбреА рд╕рдВрдпреЛрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреЙрдбреНрд╕ рдкрд░ рдмрдврд╝рддреЗ рд╡реЙрд▓реНрдпреВрдо рдкрд░ рдХреБрдЫ рдкреНрд░рддрд┐рдмрдВрдз рд▓рдЧрд╛рддрд╛ рд╣реИред
рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╕реНрдЯреЗрдЯрдлреБрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреЗрдорд╕реНрдкреЗрд╕ рдореЗрдВ рд╕реЗрдл рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд╣рд╕реНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдареАрдХ рд╣реИ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЙрдирдХреЗ рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ 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
рд╣рд╛рд▓рд╛рдБрдХрд┐, рд░реВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдореМрдЬреВрдж рд╣реА рдирд╣реАрдВ рд╣реИред рдорд╛рдЙрдВрдЯрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╣реЛрддреА рд╣реИ
рд░реВрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрдИ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реИред
рд░реВрдХ рдХреА рдШреЗрд░рд╛рдмрдВрджреА
рдЖрдЗрдП рд░реВрдХ рдФрд░ рд╕реЗрдл рдХреЛ рддреИрдирд╛рдд рдХрд░рдХреЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рднрд╛рдЧ рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдВ рддрд╛рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░рдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВред рдЗрд╕ рдЕрднреЗрджреНрдп рдЯрд╛рд╡рд░ рдкрд░ рдзрд╛рд╡рд╛ рдмреЛрд▓рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдПрдХ рд╣реЗрд▓реНрдо рдкреИрдХреЗрдЬ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рд╣реИред рдЖрдЗрдП рдЗрд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ:
$ 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"
рд╕реЗрдл рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдБрдЪ - рджреЗрдЦрдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИ 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
рдЙрд╕реА рд╕рдордп, рдЖрдЗрдП рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд╛рд▓реЗ рдкреЙрдбреНрд╕ рд╕реЗрдл рдХреЗ рд▓рд┐рдП рдЖрд░рдХреНрд╖рд┐рдд рдиреЛрдбреНрд╕ рдкрд░ рд╕рдорд╛рдкреНрдд рди рд╣реЛрдВ:
$ kubectl -n ${APPLICATION_NAMESPACE} get pods -o custom-columns=NAME:.metadata.name,NODE:.spec.nodeName
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрддрд┐рд░рд┐рдХреНрдд рдШрдЯрдХреЛрдВ рдХреЛ рдЗрдЪреНрдЫрд╛рдиреБрд╕рд╛рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рджреА рдЧрдИ рд╣реИ
рд░реВрдХ рдФрд░ рд╣реБрдХ: рдХреНрдпрд╛ рд░реВрдХ рд╣рд░ рдЪреАрдЬ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ?
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд░реВрдХ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рдЬреЛрд░реЛрдВ рдкрд░ рд╣реИред рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдРрд╕реА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ рд╕реЗрдл рдХреЗ рдореИрдиреНрдпреБрдЕрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рддреНрдпрд╛рдЧрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреА рд╣реИрдВ:
- рдХреЛрдИ рд░реВрдХ рдбреНрд░рд╛рдЗрд╡рд░ рдирд╣реАрдВ
рдирд╣реА рд╕рдХрддрд╛ рдорд╛рдЙрдВрдЯреЗрдб рдмреНрд▓реЙрдХреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рдирд┐рд░реНрдпрд╛рдд рдореЗрдЯреНрд░рд┐рдХреНрд╕, рдЬреЛ рд╣рдореЗрдВ рдирд┐рдЧрд░рд╛рдиреА рд╕реЗ рд╡рдВрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИред - рдлреНрд▓реЗрдХреНрд╕рд╡реЙрд▓реНрдпреВрдо рдФрд░ рд╕реАрдПрд╕рдЖрдИ
рдкрддрд╛ рдирд╣реАрдВ рдХреИрд╕реЗ рд╡реЙрд▓реНрдпреВрдо рдХрд╛ рдЖрдХрд╛рд░ рдмрджрд▓реЗрдВ (рдЙрд╕реА рдЖрд░рдмреАрдбреА рдХреЗ рд╡рд┐рдкрд░реАрдд), рдЗрд╕рд▓рд┐рдП рд░реВрдХ рдПрдХ рдЙрдкрдпреЛрдЧреА (рдФрд░ рдХрднреА-рдХрднреА рдЧрдВрднреАрд░ рд░реВрдк рд╕реЗ рдЖрд╡рд╢реНрдпрдХ!) рдЯреВрд▓ рд╕реЗ рд╡рдВрдЪрд┐рдд рд╣реИред - рд░реВрдХ рдЕрднреА рднреА рдирд┐рдпрдорд┐рдд рд╕реЗрдл рдЬрд┐рддрдирд╛ рд▓рдЪреАрд▓рд╛ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рд╣рдо SSD рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд CephFS рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдкреВрд▓ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдбреЗрдЯрд╛ рдХреЛ HDD рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ CRUSH рдорд╛рдирдЪрд┐рддреНрд░реЛрдВ рдореЗрдВ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдореВрд╣реЛрдВ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
- рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ rook-ceph-рдСрдкрд░реЗрдЯрд░ рдХреЛ рд╕реНрдерд┐рд░ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╡рд░реНрддрдорд╛рди рдореЗрдВ Ceph рдХреЛ рд╕рдВрд╕реНрдХрд░рдг 13 рд╕реЗ 14 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рддреЗ рд╕рдордп рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВред
рдирд┐рд╖реНрдХрд░реНрд╖
"рдЕрднреА рдкреНрдпрд╛рджреЛрдВ рджреНрд╡рд╛рд░рд╛ рд░реВрдХ рдХреЛ рдмрд╛рд╣рд░реА рджреБрдирд┐рдпрд╛ рд╕реЗ рджреВрд░ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдПрдХ рджрд┐рди рд╡рд╣ рдЦреЗрд▓ рдореЗрдВ рдирд┐рд░реНрдгрд╛рдпрдХ рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рдПрдЧреА!" (рдЗрд╕ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЙрджреНрдзрд░рдг)
рд░реВрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдиреЗ рдирд┐рд╕реНрд╕рдВрджреЗрд╣ рд╣рдорд╛рд░рд╛ рджрд┐рд▓ рдЬреАрдд рд▓рд┐рдпрд╛ рд╣реИ - рд╣рдорд╛рд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ [рдЗрд╕рдХреЗ рд╕рднреА рдлрд╛рдпрджреЗ рдФрд░ рдиреБрдХрд╕рд╛рди рдХреЗ рд╕рд╛рде] рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИред
рд╣рдорд╛рд░реА рднрд╡рд┐рд╖реНрдп рдХреА рдпреЛрдЬрдирд╛рдПрдБ rook-ceph рдХреЛ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдиреЗ рддрдХ рд╕реАрдорд┐рдд рд╣реИрдВ
рдкреБрдирд╢реНрдЪ
рд╣рдорд╛рд░реЗ рдмреНрд▓реЙрдЧ рдкрд░ рднреА рдкрдврд╝реЗрдВ:
- ┬л
рд░реВрдХ - рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП "рд╕реНрд╡рдпрдВ-рд╕реЗрд╡рд╛" рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ "; - ┬л
рд╕реЗрдлрд╝ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рдкреНрд░рд╛рд╡рдзрд╛рди рдХреЗ рд╕рд╛рде рд╕рддрдд рднрдВрдбрд╛рд░рдг рдмрдирд╛рдирд╛ "; - ┬л
рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ (рд╕рдореАрдХреНрд╖рд╛ рдФрд░ рд╡реАрдбрд┐рдпреЛ рд░рд┐рдкреЛрд░реНрдЯ) "; - ┬л
рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдкрд░рд┐рдЪрдп: рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдСрдкрд░реЗрдЯрд░ рдмрдирд╛рдирд╛ рдЕрдм рдЖрд╕рд╛рди рд╣реЛ рдЧрдпрд╛ рд╣реИ "; - ┬л
рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдСрдкрд░реЗрдЯрд░: рд╕реНрдЯреЗрдЯрдлреБрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреИрд╕реЗ рдЪрд▓рд╛рдПрдВ '.
рд╕реНрд░реЛрдд: www.habr.com