{"id":317090,"date":"2021-01-28T09:01:23","date_gmt":"2021-01-28T09:01:23","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=317090"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=317090","title":{"rendered":"\u0410\u0432\u0430\u0440\u0438\u0438 \u043a\u0430\u043a \u043e\u043f\u044b\u0442 #2. \u041a\u0430\u043a \u0440\u0430\u0437\u0432\u0430\u043b\u0438\u0442\u044c Elasticsearch \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 Kubernetes"},"content":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1d7\/03f\/3fd\/1d703f3fd5cb80ca74b43b6932170e8e.png\" width=\"780\" height=\"450\"><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u043d\u0430\u0448\u0435\u0439 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 production-\u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u0435\u0441\u0442\u044c \u043d\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u044b\u0439 \u0443\u0447\u0430\u0441\u0442\u043e\u043a, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0431\u043a\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 Rook \u0434\u043b\u044f stateful-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. \u041d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u0440\u0430\u0431\u043e\u0442 \u044d\u0442\u0430 \u0447\u0430\u0441\u0442\u044c \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 Kubernetes-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0432\u0435\u0440\u0441\u0438\u0438 1.15, \u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044c \u0432 \u0435\u0433\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438.<\/p>\n<p>\u0417\u0430 \u0437\u0430\u043a\u0430\u0437 persistent volumes \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u043e\u0442\u0432\u0435\u0447\u0430\u043b Rook \u0432\u0435\u0440\u0441\u0438\u0438 0.9. \u041c\u0430\u043b\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u0431\u044b\u043b \u0441\u0442\u0430\u0440\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438, \u0435\u0433\u043e Helm-\u0440\u0435\u043b\u0438\u0437 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043b \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0441 deprecated-\u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 API, \u0447\u0442\u043e \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430. \u0420\u0435\u0448\u0438\u0432 \u043d\u0435 \u0432\u043e\u0437\u0438\u0442\u044c\u0441\u044f \u0441 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435\u043c Rook \u00ab\u0432\u0436\u0438\u0432\u0443\u044e\u00bb, \u043c\u044b \u0441\u0442\u0430\u043b\u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c \u0435\u0433\u043e.<\/p>\n<p><strong><em>\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435!<\/em><\/strong><em> \u042d\u0442\u043e \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043f\u0440\u043e\u0432\u0430\u043b\u0430: \u043d\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0439\u0442\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u043d\u0438\u0436\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0432 production, \u043d\u0435 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0432 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e \u043a\u043e\u043d\u0446\u0430.<\/em><\/p>\n<p>\u0418\u0442\u0430\u043a, \u0432\u044b\u043d\u043e\u0441 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 StorageClass\u2019\u043e\u0432, \u043d\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 Rook\u2019\u043e\u043c, \u0448\u0435\u043b \u0443\u0436\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u043e\u0432 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u2026<\/p>\n<hr>\n<h2>\u00ab\u0411\u0435\u0441\u043f\u0440\u043e\u0441\u0442\u043e\u0439\u043d\u0430\u044f\u00bb \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 Elasticsearch<\/h2>\n<p>\u2026 \u043a\u043e\u0433\u0434\u0430 \u0434\u0435\u043b\u043e \u0434\u043e\u0448\u043b\u043e \u0434\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u043e\u0433\u043e \u0432 Kubernetes \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 Elasticsearch \u0438\u0437 3-\u0445 \u0443\u0437\u043b\u043e\u0432:<\/p>\n<pre><code>~ $ kubectl -n kibana-production get po | grep elasticsearch elasticsearch-0                               1\/1     Running     0         77d2h elasticsearch-1                               1\/1     Running     0         77d2h elasticsearch-2                               1\/1     Running     0         77d2h<\/code><\/pre>\n<p>\u0414\u043b\u044f \u043d\u0435\u0433\u043e \u0431\u044b\u043b\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0435\u0437\u0434 \u043d\u0430 \u043d\u043e\u0432\u044b\u0435 PV \u0431\u0435\u0437 \u043f\u0440\u043e\u0441\u0442\u043e\u044f. \u041a\u043e\u043d\u0444\u0438\u0433 \u0432 ConfigMap \u0431\u044b\u043b \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d \u0438 \u0441\u044e\u0440\u043f\u0440\u0438\u0437\u043e\u0432 \u043d\u0435 \u043e\u0436\u0438\u0434\u0430\u043b\u043e\u0441\u044c. \u0425\u043e\u0442\u044f \u0432 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043f\u043e \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u0438 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u0430\u0440\u0430 \u043e\u043f\u0430\u0441\u043d\u044b\u0445 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u043e\u0432, \u0447\u0440\u0435\u0432\u0430\u0442\u044b\u0445 \u0430\u0432\u0430\u0440\u0438\u0435\u0439 \u043f\u0440\u0438 \u0432\u044b\u043f\u0430\u0434\u0435\u043d\u0438\u0438 \u0443\u0437\u043b\u043e\u0432 Kubernetes-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430, \u044d\u0442\u0438 \u0443\u0437\u043b\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u2026 \u0434\u0430 \u0438 \u0432\u043e\u043e\u0431\u0449\u0435: \u00ab\u042f \u0441\u0442\u043e \u0440\u0430\u0437 \u0442\u0430\u043a \u0434\u0435\u043b\u0430\u043b\u00bb, \u2014 \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u043e\u0435\u0445\u0430\u043b\u0438!<\/p>\n<p>1. \u0412\u043d\u043e\u0441\u0438\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 StatefulSet \u0432 Helm-\u0447\u0430\u0440\u0442\u0435 \u0434\u043b\u044f Elasticsearch (<code>es-data-statefulset.yaml<\/code>):<\/p>\n<pre><code>apiVersion: apps\/v1 kind: StatefulSet metadata:   labels:     component: {{ template \"fullname\" . }}     role: data   name: {{ template \"fullname\" . }} spec:   serviceName: {{ template \"fullname\" . }}-data \u2026   volumeClaimTemplates:   - metadata:       name: data       annotations:         volume.beta.kubernetes.io\/storage-class: \"high-speed\"<\/code><\/pre>\n<p>\u0412 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0441\u0442\u0440\u043e\u0447\u043a\u0435 (\u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c storage class) \u0431\u044b\u043b\u043e \u0440\u0430\u043d\u0435\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>rbd<\/code> \u0432\u043c\u0435\u0441\u0442\u043e \u043d\u044b\u043d\u0435\u0448\u043d\u0435\u0433\u043e <code>high-speed<\/code>.<\/p>\n<p>2. \u0423\u0434\u0430\u043b\u044f\u0435\u043c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 StatefulSet \u0441 <code>cascade=false<\/code>. \u042d\u0442\u043e \u043e\u043f\u0430\u0441\u043d\u044b\u0439 \u043f\u043e\u0432\u043e\u0440\u043e\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0435 pod\u2019\u043e\u0432 \u0441 ES \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f StatefulSet\u2019\u043e\u043c \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u043d\u0435\u0437\u0430\u043f\u043d\u043e\u0433\u043e \u043e\u0442\u043a\u0430\u0437\u0430 \u043a\u0430\u043a\u043e\u0433\u043e-\u043b\u0438\u0431\u043e K8s-\u0443\u0437\u043b\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0437\u0430\u043f\u0443\u0449\u0435\u043d pod \u0441 ES, \u044d\u0442\u043e\u0442 pod \u043d\u0435 \u00ab\u0432\u043e\u0437\u0440\u043e\u0434\u0438\u0442\u0441\u044f\u00bb \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438. \u041e\u0434\u043d\u0430\u043a\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u043d\u0435\u043a\u0430\u0441\u043a\u0430\u0434\u043d\u043e\u0433\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f StatefulSet \u0438 \u0435\u0433\u043e \u0440\u0435\u0434\u0435\u043f\u043b\u043e\u044f \u0441 \u043d\u043e\u0432\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u0435\u043a\u0443\u043d\u0434\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0438\u0441\u043a\u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b (\u0442.\u0435. \u0437\u0430\u0432\u0438\u0441\u044f\u0442 \u043e\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f, \u043a\u043e\u043d\u0435\u0447\u043d\u043e). <\/p>\n<p>\u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c:<\/p>\n<pre><code> $ kubectl -n kibana-production delete sts elasticsearch --cascade=false statefulset.apps \"elasticsearch\" deleted<\/code><\/pre>\n<p>3. \u0414\u0435\u043f\u043b\u043e\u0438\u043c \u0437\u0430\u043d\u043e\u0432\u043e \u043d\u0430\u0448 Elasticsearch, \u0430 \u0437\u0430\u0442\u0435\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c StatefulSet \u0434\u043e 6 \u0440\u0435\u043f\u043b\u0438\u043a:<\/p>\n<pre><code>~ $ kubectl -n kibana-production scale sts elasticsearch --replicas=6 statefulset.apps\/elasticsearch scaled<\/code><\/pre>\n<p>\u2026 \u0438 \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<pre><code>~ $ kubectl -n kibana-production get po | grep elasticsearch elasticsearch-0                               1\/1     Running     0         77d2h elasticsearch-1                               1\/1     Running     0         77d2h elasticsearch-2                               1\/1     Running     0         77d2h elasticsearch-3                               1\/1     Running     0         11m elasticsearch-4                               1\/1     Running     0         10m elasticsearch-5                               1\/1     Running     0         10m  ~ $ kubectl -n kibana-production exec -ti elasticsearch-0 bash [root@elasticsearch-0 elasticsearch]# curl --user admin:********** -sk https:\/\/localhost:9200\/_cat\/nodes 10.244.33.142  8 98 49 7.89 4.86 3.45 dim - elasticsearch-4 10.244.33.118 26 98 35 7.89 4.86 3.45 dim - elasticsearch-2 10.244.33.140  8 98 60 7.89 4.86 3.45 dim - elasticsearch-3 10.244.21.71   8 93 58 8.53 6.25 4.39 dim - elasticsearch-5 10.244.33.120 23 98 33 7.89 4.86 3.45 dim - elasticsearch-0 10.244.33.119  8 98 34 7.89 4.86 3.45 dim * elasticsearch-1<\/code><\/pre>\n<p>\u041a\u0430\u0440\u0442\u0438\u043d\u0430 \u0441 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0445:<\/p>\n<pre><code>~ $ kubectl -n kibana-production get get pvc | grep elasticsearch NAME                   STATUS        VOLUME       CAPACITY   ACCESS MODES   STORAGECLASS    AGE data-elasticsearch-0   Bound   pvc-a830fb81-...   12Gi       RWO            rbd             77d data-elasticsearch-1   Bound   pvc-02de4333-...   12Gi       RWO            rbd             77d data-elasticsearch-2   Bound   pvc-6ed66ff0-...   12Gi       RWO            rbd             77d data-elasticsearch-3   Bound   pvc-74f3b9b8-...   12Gi       RWO            high-speed      12m data-elasticsearch-4   Bound   pvc-16cfd735-...   12Gi       RWO            high-speed      12m data-elasticsearch-5   Bound   pvc-0fb9dbd4-...   12Gi       RWO            high-speed      12m<\/code><\/pre>\n<p>\u041e\u0442\u043b\u0438\u0447\u043d\u043e!<\/p>\n<p>4. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0431\u043e\u0434\u0440\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0443 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432 \u0432\u0430\u0441 \u0435\u0449\u0435 \u0436\u0438\u0432 \u0434\u0443\u0445 \u0430\u0432\u0430\u043d\u0442\u044e\u0440\u0438\u0437\u043c\u0430 \u0438 \u043d\u0435\u0443\u0434\u0435\u0440\u0436\u0438\u043c\u043e \u0432\u043b\u0435\u0447\u0435\u0442 \u043a \u043f\u0440\u0438\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f\u043c (\u0442.\u0435. \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0438 \u043d\u0435 \u0441\u0442\u043e\u043b\u044c \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u044b), \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043e\u0441\u0442\u0430\u0432\u0438\u0432 \u043e\u0434\u043d\u0443 \u0440\u0435\u043f\u043b\u0438\u043a\u0443 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432:<\/p>\n<pre><code>~ $ kubectl -n kibana-production exec -ti elasticsearch-0 bash [root@elasticsearch-0 elasticsearch]# curl --user admin:********** -H \"Content-Type: application\/json\" -X PUT -sk https:\/\/localhost:9200\/my-index-pattern-*\/_settings -d '{\"number_of_replicas\": 0}' {\"acknowledged\":true}<\/code><\/pre>\n<p>\u2026 \u043d\u043e \u043c\u044b, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0442\u0430\u043a \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u043c:<\/p>\n<pre><code>~ $ ^C ~ $ kubectl -n kibana-production exec -ti elasticsearch-0 bash [root@elasticsearch-0 elasticsearch]# curl --user admin:********** -H \"Content-Type: application\/json\" -X PUT -sk https:\/\/localhost:9200\/my-index-pattern-*\/_settings -d '{\"number_of_replicas\": 2}' {\"acknowledged\":true}<\/code><\/pre>\n<p>\u0418\u043d\u0430\u0447\u0435 \u0443\u0442\u0440\u0430\u0442\u0430 \u043e\u0434\u043d\u043e\u0433\u043e pod\u2019\u0430 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u043d\u0435\u043a\u043e\u043d\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043e \u0435\u0433\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f, \u0430 \u0443\u0442\u0440\u0430\u0442\u0430 \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u043d\u043e\u0433\u043e PV \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u043f\u043e\u0442\u0435\u0440\u0435 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u0423\u0432\u0435\u043b\u0438\u0447\u0438\u043c \u043b\u0438\u043c\u0438\u0442\u044b \u043f\u0435\u0440\u0435\u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0438:<\/p>\n<pre><code>[root@elasticsearch-0 elasticsearch]# curl --user admin:********** -XPUT -H 'Content-Type: application\/json' -sk https:\/\/localhost:9200\/_cluster\/settings?pretty -d '{ &gt;   \"transient\" :{ &gt;     \"cluster.routing.allocation.cluster_concurrent_rebalance\" : 20, &gt;     \"cluster.routing.allocation.node_concurrent_recoveries\" : 20, &gt;     \"cluster.routing.allocation.node_concurrent_incoming_recoveries\" : 10, &gt;     \"cluster.routing.allocation.node_concurrent_outgoing_recoveries\" : 10, &gt;     \"indices.recovery.max_bytes_per_sec\" : \"200mb\" &gt;   } &gt; }' {   \"acknowledged\" : true,   \"persistent\" : { },   \"transient\" : {     \"cluster\" : {       \"routing\" : {         \"allocation\" : {           \"node_concurrent_incoming_recoveries\" : \"10\",           \"cluster_concurrent_rebalance\" : \"20\",           \"node_concurrent_recoveries\" : \"20\",           \"node_concurrent_outgoing_recoveries\" : \"10\"         }       }     },     \"indices\" : {       \"recovery\" : {         \"max_bytes_per_sec\" : \"200mb\"       }     }   } } <\/code><\/pre>\n<p>5. \u0412\u044b\u0433\u043e\u043d\u0438\u043c \u0448\u0430\u0440\u0434\u044b \u0441 \u043f\u0435\u0440\u0432\u044b\u0445 \u0442\u0440\u0435\u0445 \u0441\u0442\u0430\u0440\u044b\u0445 \u0443\u0437\u043b\u043e\u0432 ES:<\/p>\n<pre><code>[root@elasticsearch-0 elasticsearch]# curl --user admin:********** -XPUT -H 'Content-Type: application\/json' -sk https:\/\/localhost:9200\/_cluster\/settings?pretty -d '{ &gt;   \"transient\" :{ &gt;       \"cluster.routing.allocation.exclude._ip\" : \"10.244.33.120,10.244.33.119,10.244.33.118\" &gt;    } &gt; }' {   \"acknowledged\" : true,   \"persistent\" : { },   \"transient\" : {     \"cluster\" : {       \"routing\" : {         \"allocation\" : {           \"exclude\" : {             \"_ip\" : \"10.244.33.120,10.244.33.119,10.244.33.118\"           }         }       }     }   } } <\/code><\/pre>\n<p>\u0412\u0441\u043a\u043e\u0440\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043f\u0435\u0440\u0432\u044b\u0435 3 \u0443\u0437\u043b\u0430 \u0431\u0435\u0437 \u0434\u0430\u043d\u043d\u044b\u0445:<\/p>\n<pre><code>[root@elasticsearch-0 elasticsearch]# curl --user admin:********** -sk https:\/\/localhost:9200\/_cat\/shards | grep 'elasticsearch-[0..2]' | wc -l 0 <\/code><\/pre>\n<p>6. \u041f\u0440\u0438\u0448\u043b\u0430 \u043f\u043e\u0440\u0430 \u043f\u043e \u043e\u0434\u043d\u043e\u0439 \u0443\u0431\u0438\u0442\u044c \u0441\u0442\u0430\u0440\u044b\u0435 \u0443\u0437\u043b\u044b Elasticsearch.<\/p>\n<p>\u0413\u043e\u0442\u043e\u0432\u0438\u043c \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0442\u0440\u0438 PersistentVolumeClaim \u0442\u0430\u043a\u043e\u0433\u043e \u0432\u0438\u0434\u0430:<\/p>\n<pre><code>~ $ cat pvc2.yaml --- apiVersion: v1 kind: PersistentVolumeClaim metadata:   name: data-elasticsearch-2 spec:   accessModes: [ \"ReadWriteOnce\" ]   resources:     requests:       storage: 12Gi   storageClassName: \"high-speed\"<\/code><\/pre>\n<p>\u0423\u0434\u0430\u043b\u044f\u0435\u043c \u043f\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u0438 PVC \u0438 pod \u0443 \u0440\u0435\u043f\u043b\u0438\u043a 0, 1 \u0438 2, \u0434\u0440\u0443\u0433 \u0437\u0430 \u0434\u0440\u0443\u0433\u043e\u043c. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u0435\u043c PVC \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0438 \u0443\u0431\u0435\u0436\u0434\u0430\u0435\u043c\u0441\u044f, \u0447\u0442\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 ES \u0432 \u043d\u043e\u0432\u043e\u043c pod\u2019\u0435, \u043f\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u043d\u043e\u043c StatefulSet\u2019\u043e\u043c, \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u00ab\u0437\u0430\u043f\u0440\u044b\u0433\u043d\u0443\u043b\u00bb \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 ES:<\/p>\n<pre><code>~ $ kubectl -n kibana-production delete pvc data-elasticsearch-2 persistentvolumeclaim \"data-elasticsearch-2\" deleted ^C  ~ $ kubectl -n kibana-production delete po elasticsearch-2 pod \"elasticsearch-2\" deleted  ~ $ kubectl -n kibana-production apply -f pvc2.yaml persistentvolumeclaim\/data-elasticsearch-2 created  ~ $ kubectl -n kibana-production get po | grep elasticsearch elasticsearch-0                               1\/1     Running     0         77d3h elasticsearch-1                               1\/1     Running     0         77d3h elasticsearch-2                               1\/1     Running     0         67s elasticsearch-3                               1\/1     Running     0         42m elasticsearch-4                               1\/1     Running     0         41m elasticsearch-5                               1\/1     Running     0         41m  ~ $ kubectl -n kibana-production exec -ti elasticsearch-0 bash [root@elasticsearch-0 elasticsearch]# curl --user admin:********** -sk https:\/\/localhost:9200\/_cat\/nodes 10.244.21.71  21 97 38 3.61 4.11 3.47 dim - elasticsearch-5 10.244.33.120 17 98 99 8.11 9.26 9.52 dim - elasticsearch-0 10.244.33.140 20 97 38 3.61 4.11 3.47 dim - elasticsearch-3 10.244.33.119 12 97 38 3.61 4.11 3.47 dim * elasticsearch-1 10.244.34.142 20 97 38 3.61 4.11 3.47 dim - elasticsearch-4 10.244.33.89  17 97 38 3.61 4.11 3.47 dim - elasticsearch-2<\/code><\/pre>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u0434\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0434\u043e ES-\u0443\u0437\u043b\u0430 \u21160: \u0443\u0434\u0430\u043b\u044f\u0435\u043c pod <code>elasticsearch-0<\/code>, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043e\u043d \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0441 \u043d\u043e\u0432\u044b\u043c storageClass, \u0437\u0430\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u0435\u0431\u0435 PV. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<pre><code>~ $ kubectl -n kibana-production exec -ti elasticsearch-0 bash [root@elasticsearch-0 elasticsearch]# curl --user admin:********** -sk https:\/\/localhost:9200\/_cat\/nodes 10.244.33.151 17 98 99 8.11 9.26 9.52 dim * elasticsearch-0<\/code><\/pre>\n<p>\u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432 \u0441\u043e\u0441\u0435\u0434\u043d\u0435\u043c pod\u2019\u0435:<\/p>\n<pre><code>~ $ kubectl -n kibana-production exec -ti elasticsearch-1 bash [root@elasticsearch-0 elasticsearch]# curl --user admin:********** -sk https:\/\/localhost:9200\/_cat\/nodes 10.244.21.71  16 97 27 2.59 2.76 2.57 dim - elasticsearch-5 10.244.33.140 20 97 38 2.59 2.76 2.57 dim - elasticsearch-3 10.244.33.35  12 97 38 2.59 2.76 2.57 dim - elasticsearch-1 10.244.34.142 20 97 38 2.59 2.76 2.57 dim - elasticsearch-4 10.244.33.89  17 97 98 7.20 7.53 7.51 dim * elasticsearch-2<\/code><\/pre>\n<p>\u041f\u043e\u0437\u0434\u0440\u0430\u0432\u043b\u044f\u044e: \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 <strong>split-brain \u0432 production<\/strong>! \u0418 \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u043e\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0441\u044b\u043f\u044f\u0442\u0441\u044f \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 ES!<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f74\/a53\/e6c\/f74a53e6cb6aa0de774ee96f2fb23f55.png\" width=\"300\" height=\"282\"><figcaption><\/figcaption><\/figure>\n<h2>\u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u0438 \u043f\u043e\u0442\u0435\u0440\u044f \u0434\u0430\u043d\u043d\u044b\u0445<\/h2>\n<p>\u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435, \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0432\u0448\u0435\u043c\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434 \u043d\u0430\u0437\u0430\u0434, \u043c\u044b \u0440\u0435\u0437\u043a\u043e \u043f\u0435\u0440\u0435\u0448\u043b\u0438 \u043e\u0442 \u043f\u043b\u0430\u043d\u043e\u0432\u044b\u0445 \u0440\u0430\u0431\u043e\u0442 \u043a \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c. \u0418 \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043e\u0441\u0442\u0440\u043e \u0441\u0442\u043e\u0438\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u0441\u0440\u043e\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043f\u0443\u0441\u0442\u043e\u0439 \u00ab\u043d\u0435\u0434\u043e\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u00bb ES, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0443\u0437\u043b\u0430.<\/p>\n<p>\u041c\u043e\u0436\u0435\u0442, \u0441\u043a\u0438\u043d\u0443\u0442\u044c label \u0443 pod\u2019\u0430 <code>elasticsearch-0<\/code>, \u0447\u0442\u043e\u0431\u044b \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0435\u0433\u043e \u0438\u0437 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 Service? \u041d\u043e \u0432\u0435\u0434\u044c, \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0432 pod, \u043c\u044b \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u043c \u0435\u0433\u043e \u00ab\u0437\u0430\u0442\u043e\u043b\u043a\u0430\u0442\u044c\u00bb \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 ES, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u0440\u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u0447\u043b\u0435\u043d\u043e\u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 \u0442\u043e\u0442 \u0436\u0435 Service!&nbsp;<\/p>\n<p>\u0417\u0430 \u044d\u0442\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f:<\/p>\n<pre><code>        env:         - name: DISCOVERY_SERVICE           value: elasticsearch<\/code><\/pre>\n<p>\u2026 \u0438 \u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 ConfigMap\u2019\u0435 <code>elasticsearch.yaml<\/code> (\u0441\u043c. <a href=\"https:\/\/www.elastic.co\/guide\/en\/elasticsearch\/reference\/7.x\/modules-discovery-settings.html\"><u>\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e<\/u><\/a>):<\/p>\n<pre><code>discovery:       zen:         ping.unicast.hosts: ${DISCOVERY_SERVICE}<\/code><\/pre>\n<p>\u0412 \u043e\u0431\u0449\u0435\u043c, \u043f\u043e \u0442\u0430\u043a\u043e\u043c\u0443 \u043f\u0443\u0442\u0438 \u043c\u044b \u043d\u0435 \u043f\u043e\u0439\u0434\u0435\u043c. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043b\u0443\u0447\u0448\u0435 \u0441\u0440\u043e\u0447\u043d\u043e \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c workers, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0438\u0448\u0443\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 ES \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u0442\u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c \u0432\u0441\u0435 \u0442\u0440\u0438 \u043d\u0443\u0436\u043d\u044b\u0445 deployment\u2019\u0430 \u0432 0. (\u041a \u0441\u043b\u043e\u0432\u0443, \u0445\u043e\u0440\u043e\u0448\u043e, \u0447\u0442\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0438 \u043d\u0435 \u043d\u0430\u0434\u043e \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0432\u0435\u0441\u044c \u0441\u0435\u0440\u0432\u0438\u0441 \u0446\u0435\u043b\u0438\u043a\u043e\u043c.)<\/p>\n<p>\u0418\u0442\u0430\u043a, \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u043e\u0441\u0440\u0435\u0434\u0438 \u0434\u043d\u044f, \u043f\u043e\u0436\u0430\u043b\u0443\u0439, \u0432\u0441\u0451 \u0436\u0435 \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c \u043d\u0430\u0440\u0430\u0441\u0442\u0430\u044e\u0449\u0430\u044f \u043f\u043e\u0442\u0435\u0440\u044f \u0434\u0430\u043d\u043d\u044b\u0445. \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f \u0432 \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u0445 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u0435\u0434\u0448\u0435\u0433\u043e \u0438 \u0434\u043e\u0431\u044c\u0435\u043c\u0441\u044f \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u043d\u0430\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430.<\/p>\n<h2>\u041f\u0440\u0438\u0447\u0438\u043d\u0430 \u0430\u0432\u0430\u0440\u0438\u0438 \u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0412 \u0447\u0435\u043c \u0436\u0435 \u0434\u0435\u043b\u043e? \u041f\u043e\u0447\u0435\u043c\u0443 \u0443\u0437\u0435\u043b \u21160 \u043d\u0435 \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0438\u043b\u0441\u044f \u043a \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0443? \u0415\u0449\u0435 \u0440\u0430\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b: \u0441 \u043d\u0438\u043c\u0438 \u0432\u0441\u0435 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435.<\/p>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0435\u0449\u0435 \u0440\u0430\u0437 Helm-\u0447\u0430\u0440\u0442\u044b\u2026 \u0432\u043e\u0442 \u0436\u0435 \u043e\u043d\u043e! \u0418\u0442\u0430\u043a, \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043d\u044b\u0439 <code>es-data-statefulset.yaml<\/code>:<\/p>\n<pre><code>apiVersion: apps\/v1 kind: StatefulSet metadata:   labels:     component: {{ template \"fullname\" . }}     role: data   name: {{ template \"fullname\" . }} \u2026       containers:       - name: elasticsearch         env:         {{- range $key, $value :=  .Values.data.env }}         - name: {{ $key }}           value: {{ $value | quote }}         {{- end }}         - name: cluster.initial_master_nodes     # !!!!!!           value: \"{{ template \"fullname\" . }}-0\" # !!!!!!         - name: CLUSTER_NAME           value: myesdb         - name: NODE_NAME           valueFrom:             fieldRef:               fieldPath: metadata.name         - name: DISCOVERY_SERVICE           value: elasticsearch         - name: KUBERNETES_NAMESPACE           valueFrom:             fieldRef:               fieldPath: metadata.namespace         - name: ES_JAVA_OPTS           value: \"-Xms{{ .Values.data.heapMemory }} -Xmx{{ .Values.data.heapMemory }} -Xlog:disable -Xlog:all=warning:stderr:utctime,level,tags -Xlog:gc=debug:stderr:utctime -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.host=127.0.0.1 -Djava.rmi.server.hostname=127.0.0.1 -Dcom.sun.management.jmxremote.port=9099 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false\" ...<\/code><\/pre>\n<p>\u0417\u0430\u0447\u0435\u043c \u0436\u0435 \u0442\u0430\u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b <code>initial_master_nodes<\/code>?! \u0417\u0434\u0435\u0441\u044c \u0437\u0430\u0434\u0430\u043d\u043e <em>(\u0441\u043c. <\/em><a href=\"https:\/\/www.elastic.co\/guide\/en\/elasticsearch\/reference\/7.x\/important-settings.html#initial_master_nodes\"><em><u>\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e<\/u><\/em><\/a><em>)<\/em> \u0436\u0435\u0441\u0442\u043a\u043e\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u043f\u0440\u0438 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u043c \u0441\u0442\u0430\u0440\u0442\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0432 \u0432\u044b\u0431\u043e\u0440\u0430\u0445 \u043c\u0430\u0441\u0442\u0435\u0440\u0430 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e 0-\u0439 \u0443\u0437\u0435\u043b. \u0422\u0430\u043a \u0438 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e: pod <code>elasticsearch-0<\/code> \u043f\u043e\u0434\u043d\u044f\u043b\u0441\u044f \u0441 \u043f\u0443\u0441\u0442\u044b\u043c PV, \u043d\u0430\u0447\u0430\u043b\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0431\u0443\u0442\u0441\u0442\u0440\u0430\u043f\u0430 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430, \u0430 \u043c\u0430\u0441\u0442\u0435\u0440 \u0432 pod\u2019\u0435 <code>elasticsearch-2<\/code> \u0431\u044b\u043b \u0431\u043b\u0430\u0433\u043e\u043f\u043e\u043b\u0443\u0447\u043d\u043e \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d. <\/p>\n<p>\u041e\u043a, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 ConfigMap \u00ab\u043d\u0430 \u0436\u0438\u0432\u0443\u044e\u00bb:&nbsp;<\/p>\n<pre><code>~ $ kubectl -n kibana-production edit cm elasticsearch  apiVersion: v1 data:   elasticsearch.yml: |-     cluster:       name: ${CLUSTER_NAME}       initial_master_nodes:         - elasticsearch-0         - elasticsearch-1         - elasticsearch-2 ...<\/code><\/pre>\n<p>\u2026 \u0438 \u0443\u0434\u0430\u043b\u0438\u043c \u044d\u0442\u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0438\u0437 StatefulSet:<\/p>\n<pre><code>~ $ kubectl -n kibana-production edit sts elasticsearch  ...       - env:         - name: cluster.initial_master_nodes           value: \"elasticsearch-0\" ...<\/code><\/pre>\n<p>StatefulSet \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u043a\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0435 pod\u2019\u044b \u043f\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438 RollingUpdate, \u0438 \u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u043e, \u0440\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u0441 \u043a\u043e\u043d\u0446\u0430, \u0442.\u0435. \u043e\u0442 5-\u0433\u043e pod\u2019\u0430 \u043a 0-\u043c\u0443:<\/p>\n<pre><code>~ $ kubectl -n kibana-production get po NAME              READY   STATUS        RESTARTS   AGE elasticsearch-0   1\/1     Running       0          11m elasticsearch-1   1\/1     Running       0          13m elasticsearch-2   1\/1     Running       0          15m elasticsearch-3   1\/1     Running       0          67m elasticsearch-4   1\/1     Running       0          67m elasticsearch-5   0\/1     Terminating   0          67m<\/code><\/pre>\n<p>\u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442, \u043a\u043e\u0433\u0434\u0430 \u043f\u0435\u0440\u0435\u043a\u0430\u0442 \u0434\u043e\u0439\u0434\u0435\u0442 \u0434\u043e \u043a\u043e\u043d\u0446\u0430? \u041a\u0430\u043a \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0431\u0443\u0442\u0441\u0442\u0440\u0430\u043f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430? \u0412\u0435\u0434\u044c \u043f\u0435\u0440\u0435\u043a\u0430\u0442 StatefulSet \u0438\u0434\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u043e\u2026 \u043a\u0430\u043a \u043f\u0440\u043e\u0439\u0434\u0443\u0442 \u0432\u044b\u0431\u043e\u0440\u044b \u0432 \u0442\u0430\u043a\u0438\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445, \u0435\u0441\u043b\u0438 \u0434\u0430\u0436\u0435 \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0437\u0430\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u00abauto-bootstrapping is inherently unsafe\u00bb? \u041d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043b\u0438 \u043c\u044b \u043a\u043b\u0430\u0441\u0442\u0435\u0440, \u0437\u0430\u0431\u0443\u0441\u0442\u0440\u0430\u043f\u043b\u0435\u043d\u043d\u044b\u0439 \u0438\u0437 0-\u0433\u043e \u0443\u0437\u043b\u0430 \u0441 \u00ab\u043e\u0433\u0440\u044b\u0437\u043a\u043e\u043c\u00bb \u0438\u043d\u0434\u0435\u043a\u0441\u0430?\u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0438\u0437-\u0437\u0430 \u0442\u0430\u043a\u0438\u0445 \u043c\u044b\u0441\u043b\u0435\u0439 \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u044c \u0437\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u043c \u0443 \u043c\u0435\u043d\u044f \u043d\u0443 \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u043b\u043e\u0441\u044c.<\/p>\n<p><strong><em>\u0417\u0430\u0431\u0435\u0433\u0430\u044f \u0432\u043f\u0435\u0440\u0451\u0434<\/em><\/strong><em>: \u043d\u0435\u0442, \u0432 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u0432\u0441\u0451 \u0431\u0443\u0434\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u043e. \u041e\u0434\u043d\u0430\u043a\u043e 100% \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0432 \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0435 \u0431\u044b\u043b\u043e. \u0410 \u0432\u0435\u0434\u044c \u044d\u0442\u043e production, \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043d\u043e\u0433\u043e, \u043e\u043d\u0438 \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u044b \u0434\u043b\u044f \u0431\u0438\u0437\u043d\u0435\u0441\u0430, \u0430 \u044d\u0442\u043e \u0447\u0440\u0435\u0432\u0430\u0442\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0432\u043e\u0437\u043d\u0435\u0439 \u0441 \u0431\u044d\u043a\u0430\u043f\u0430\u043c\u0438\u2026.<\/em><\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u043f\u043e\u043a\u0430 \u043f\u0435\u0440\u0435\u043a\u0430\u0442 \u043d\u0435 \u0434\u043e\u043a\u0430\u0442\u0438\u043b\u0441\u044f \u0434\u043e 0-\u0433\u043e pod\u2019\u0430, \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043c \u0438 \u0443\u0431\u044c\u0435\u043c \u0441\u0435\u0440\u0432\u0438\u0441, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0439 \u0437\u0430 discovery:<\/p>\n<pre><code>~ $ kubectl -n kibana-production get svc elasticsearch -o yaml &gt; elasticsearch.yaml  ~ $ kubectl -n kibana-production delete svc elasticsearch  service \"elasticsearch\" deleted<\/code><\/pre>\n<p>\u2026 \u0438 \u00ab\u043e\u0442\u043e\u0440\u0432\u0435\u043c\u00bb PVC \u0443 0-\u0433\u043e pod\u2019\u0430:<\/p>\n<pre><code>~ $ kubectl -n kibana-production delete pvc data-elasticsearch-0 persistentvolumeclaim \"data-elasticsearch-0\" deleted ^C <\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u043f\u0435\u0440\u0435\u043a\u0430\u0442 \u043f\u0440\u043e\u0448\u0435\u043b, <code>elasticsearch-0<\/code> \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 <em>Pending<\/em> \u0438\u0437-\u0437\u0430 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f PVC, \u0430 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0440\u0430\u0437\u0432\u0430\u043b\u0435\u043d, \u0442.\u043a. \u0443\u0437\u043b\u044b ES \u043f\u043e\u0442\u0435\u0440\u044f\u043b\u0438 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0430:<\/p>\n<pre><code>~ $ kubectl -n kibana-production exec -ti elasticsearch-1 bash [root@elasticsearch-1 elasticsearch]# curl --user admin:********** -sk https:\/\/localhost:9200\/_cat\/nodes Open Distro Security not initialized.<\/code><\/pre>\n<p>\u041d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043c ConfigMap \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code>~ $ kubectl -n kibana-production edit cm elasticsearch  apiVersion: v1 data:   elasticsearch.yml: |-     cluster:       name: ${CLUSTER_NAME}       initial_master_nodes:         - elasticsearch-3         - elasticsearch-4         - elasticsearch-5 ...<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u044b\u0439 \u043f\u0443\u0441\u0442\u043e\u0439 PV \u0434\u043b\u044f <code>elasticsearch-0<\/code>, \u0441\u043e\u0437\u0434\u0430\u0432 PVC:<\/p>\n<pre><code> $ kubectl -n kibana-production apply -f pvc0.yaml persistentvolumeclaim\/data-elasticsearch-0 created<\/code><\/pre>\n<p>\u0418 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0443\u0437\u043b\u044b \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 ConfigMap:<\/p>\n<pre><code>~ $ kubectl -n kibana-production delete po elasticsearch-0 elasticsearch-1 elasticsearch-2 elasticsearch-3 elasticsearch-4 elasticsearch-5 pod \"elasticsearch-0\" deleted pod \"elasticsearch-1\" deleted pod \"elasticsearch-2\" deleted pod \"elasticsearch-3\" deleted pod \"elasticsearch-4\" deleted pod \"elasticsearch-5\" deleted<\/code><\/pre>\n<p>\u041c\u043e\u0436\u043d\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043d\u0430 \u043c\u0435\u0441\u0442\u043e \u0441\u0435\u0440\u0432\u0438\u0441 \u0438\u0437 \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u043d\u0430\u043c\u0438 YAML-\u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u0430:<\/p>\n<pre><code>~ $ kubectl -n kibana-production apply -f elasticsearch.yaml  service\/elasticsearch created<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c:<\/p>\n<pre><code>~ $ kubectl -n kibana-production exec -ti elasticsearch-0 bash [root@elasticsearch-0 elasticsearch]# curl --user admin:********** -sk https:\/\/localhost:9200\/_cat\/nodes 10.244.98.100  11 98 32 4.95 3.32 2.87 dim - elasticsearch-0 10.244.101.157 12 97 26 3.15 3.00 2.10 dim - elasticsearch-3 10.244.107.179 10 97 38 1.66 2.46 2.52 dim * elasticsearch-1 10.244.107.180  6 97 38 1.66 2.46 2.52 dim - elasticsearch-2 10.244.100.94   9 92 36 2.23 2.03 1.94 dim - elasticsearch-5 10.244.97.25    8 98 42 4.46 4.92 3.79 dim - elasticsearch-4  [root@elasticsearch-0 elasticsearch]# curl --user admin:********** -sk https:\/\/localhost:9200\/_cat\/indices | grep -v green | wc -l 0<\/code><\/pre>\n<p>\u0423\u0440\u0430! \u0412\u044b\u0431\u043e\u0440\u044b \u043f\u0440\u043e\u0448\u043b\u0438 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e, \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0441\u043e\u0431\u0440\u0430\u043b\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e, \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u043d\u0430 \u043c\u0435\u0441\u0442\u0435.<\/p>\n<p>\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e:<\/p>\n<ol>\n<li>\n<p>\u0421\u043d\u043e\u0432\u0430 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432 ConfigMap \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code>initial_master_nodes<\/code> \u0434\u043b\u044f <code>elasticsearch-0..2<\/code>;<\/p>\n<\/li>\n<li>\n<p>\u0415\u0449\u0435 \u0440\u0430\u0437 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432\u0441\u0435 pod\u2019\u044b;<\/p>\n<\/li>\n<li>\n<p>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0448\u0430\u0433\u0443, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u043c\u0443 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438, \u0432\u044b\u0433\u043d\u0430\u0442\u044c \u0432\u0441\u0435 \u0448\u0430\u0440\u0434\u044b \u043d\u0430 \u0443\u0437\u043b\u044b 0..2 \u0438 \u043e\u0442\u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0441 6 \u0434\u043e 3-\u0445 \u0443\u0437\u043b\u043e\u0432;<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u044b\u0435 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0434\u043e\u043d\u0435\u0441\u0442\u0438 \u0434\u043e \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f.<\/p>\n<\/li>\n<\/ol>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u041a\u0430\u043a\u0438\u0435 \u0443\u0440\u043e\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u0438\u0437 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f?<\/p>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430\u044f \u0441 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 production, \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0432 \u0432\u0438\u0434\u0443, \u0447\u0442\u043e \u0447\u0442\u043e-\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0439\u0442\u0438 \u043d\u0435 \u0442\u0430\u043a: \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u043f\u0443\u0449\u0435\u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u0432\u043d\u0435\u0437\u0430\u043f\u043d\u0430\u044f \u0430\u0432\u0430\u0440\u0438\u044f \u0432 \u0426\u041e\u0414, \u043d\u0430\u0447\u043d\u0443\u0442\u0441\u044f \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b\u2026 \u0434\u0430 \u0432\u0441\u0435 \u0447\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043e! \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u0440\u0430\u0431\u043e\u0442 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u043d\u044f\u0442\u044b \u043c\u0435\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0442 \u043b\u0438\u0431\u043e \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u0430\u0432\u0430\u0440\u0438\u044e, \u043b\u0438\u0431\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043a\u0443\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u044f. \u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u00ab\u041f\u043b\u0430\u043d \u0411\u00bb.<\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430\u043c\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0431\u044b\u043b \u043d\u0435\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432 \u043a \u0432\u043d\u0435\u0437\u0430\u043f\u043d\u044b\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c. \u041f\u0435\u0440\u0435\u0434 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c \u044d\u0442\u0438\u0445 \u0440\u0430\u0431\u043e\u0442 \u0432 \u0431\u043e\u043b\u0435\u0435 \u0432\u0430\u0436\u043d\u043e\u043c \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0438 \u0431\u044b\u043b\u043e \u0431\u044b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e:<\/p>\n<ol>\n<li>\n<p>\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0435\u0437\u0434 \u0432 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u043c \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0438 \u0441 production-\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439 ES.<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u0435\u0440\u0432\u0438\u0441\u0430. \u041b\u0438\u0431\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440. (\u041f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439 \u043a \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438.) \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0441 \u043f\u0440\u043e\u0441\u0442\u043e\u0435\u043c \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043b\u043e \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c workers, \u043f\u0438\u0448\u0443\u0449\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 Elasticsearch, \u0441\u043d\u044f\u0442\u044c \u0437\u0430\u0442\u0435\u043c \u0441\u0432\u0435\u0436\u0443\u044e \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u0443\u044e \u043a\u043e\u043f\u0438\u044e, \u0430 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u0440\u0430\u0431\u043e\u0442\u0430\u043c \u043f\u043e \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043d\u043e\u0432\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435.<\/p>\n<\/li>\n<\/ol>\n<h2>P.S.<\/h2>\n<p>\u0427\u0438\u0442\u0430\u0439\u0442\u0435 \u0442\u0430\u043a\u0436\u0435 \u0432 \u043d\u0430\u0448\u0435\u043c \u0431\u043b\u043e\u0433\u0435:<\/p>\n<ul>\n<li>\n<p>\u00ab<a href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/535638\/\">\u0410\u0432\u0430\u0440\u0438\u0438 \u043a\u0430\u043a \u043e\u043f\u044b\u0442 #1. \u041a\u0430\u043a \u0441\u043b\u043e\u043c\u0430\u0442\u044c \u0434\u0432\u0430 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 ClickHouse, \u043d\u0435 \u0443\u0442\u043e\u0447\u043d\u0438\u0432 \u043e\u0434\u0438\u043d \u043d\u044e\u0430\u043d\u0441<\/a>\u00bb;<\/p>\n<\/li>\n<li>\n<p>\u00ab<a href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/490026\/\">\u041a\u0430\u043a \u043c\u044b Elasticsearch \u0432 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043b\u0438: \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445, \u043e\u0447\u0438\u0441\u0442\u043a\u0430, \u0431\u044d\u043a\u0430\u043f\u044b<\/a>\u00bb;<\/p>\n<\/li>\n<li>\n<p>\u00ab<a href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/532538\/\">elasticsearch-extractor \u2014 \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u0434\u043b\u044f \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0438\u0437 \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u043e\u0432 Elasticsearch<\/a>\u00bb.<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/539494\/\"> https:\/\/habr.com\/ru\/company\/flant\/blog\/539494\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u043d\u0430\u0448\u0435\u0439 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 production-\u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u0435\u0441\u0442\u044c \u043d\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u044b\u0439 \u0443\u0447\u0430\u0441\u0442\u043e\u043a, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0431\u043a\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 Rook \u0434\u043b\u044f stateful-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. \u041d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u0440\u0430\u0431\u043e\u0442 \u044d\u0442\u0430 \u0447\u0430\u0441\u0442\u044c \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 Kubernetes-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0432\u0435\u0440\u0441\u0438\u0438 1.15, \u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044c \u0432 \u0435\u0433\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438.<\/p>\n<p>\u0417\u0430 \u0437\u0430\u043a\u0430\u0437 persistent volumes \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u043e\u0442\u0432\u0435\u0447\u0430\u043b Rook \u0432\u0435\u0440\u0441\u0438\u0438 0.9. \u041c\u0430\u043b\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u0431\u044b\u043b \u0441\u0442\u0430\u0440\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438, \u0435\u0433\u043e Helm-\u0440\u0435\u043b\u0438\u0437 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043b \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0441 deprecated-\u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 API, \u0447\u0442\u043e \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430. \u0420\u0435\u0448\u0438\u0432 \u043d\u0435 \u0432\u043e\u0437\u0438\u0442\u044c\u0441\u044f \u0441 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435\u043c Rook \u00ab\u0432\u0436\u0438\u0432\u0443\u044e\u00bb, \u043c\u044b \u0441\u0442\u0430\u043b\u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c \u0435\u0433\u043e.<\/p>\n<p><strong><em>\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435!<\/em><\/strong><em> \u042d\u0442\u043e \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043f\u0440\u043e\u0432\u0430\u043b\u0430: \u043d\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0439\u0442\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u043d\u0438\u0436\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0432 production, \u043d\u0435 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0432 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e \u043a\u043e\u043d\u0446\u0430.<\/em><\/p>\n<p>\u0418\u0442\u0430\u043a, \u0432\u044b\u043d\u043e\u0441 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 StorageClass\u2019\u043e\u0432, \u043d\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 Rook\u2019\u043e\u043c, \u0448\u0435\u043b \u0443\u0436\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u043e\u0432 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u2026<\/p>\n<hr>\n<h2>\u00ab\u0411\u0435\u0441\u043f\u0440\u043e\u0441\u0442\u043e\u0439\u043d\u0430\u044f\u00bb \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 Elasticsearch<\/h2>\n<p>\u2026 \u043a\u043e\u0433\u0434\u0430 \u0434\u0435\u043b\u043e \u0434\u043e\u0448\u043b\u043e \u0434\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u043e\u0433\u043e \u0432 Kubernetes \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 Elasticsearch \u0438\u0437 3-\u0445 \u0443\u0437\u043b\u043e\u0432:<\/p>\n<pre><code>~ $ kubectl -n kibana-production get po | grep elasticsearch elasticsearch-0                               1\/1     Running     0         77d2h elasticsearch-1                               1\/1     Running     0         77d2h elasticsearch-2                               1\/1     Running     0         77d2h<\/code><\/pre>\n<p>\u0414\u043b\u044f \u043d\u0435\u0433\u043e \u0431\u044b\u043b\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0435\u0437\u0434 \u043d\u0430 \u043d\u043e\u0432\u044b\u0435 PV \u0431\u0435\u0437 \u043f\u0440\u043e\u0441\u0442\u043e\u044f. \u041a\u043e\u043d\u0444\u0438\u0433 \u0432 ConfigMap \u0431\u044b\u043b \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d \u0438 \u0441\u044e\u0440\u043f\u0440\u0438\u0437\u043e\u0432 \u043d\u0435 \u043e\u0436\u0438\u0434\u0430\u043b\u043e\u0441\u044c. \u0425\u043e\u0442\u044f \u0432 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043f\u043e \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u0438 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u0430\u0440\u0430 \u043e\u043f\u0430\u0441\u043d\u044b\u0445 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u043e\u0432, \u0447\u0440\u0435\u0432\u0430\u0442\u044b\u0445 \u0430\u0432\u0430\u0440\u0438\u0435\u0439 \u043f\u0440\u0438 \u0432\u044b\u043f\u0430\u0434\u0435\u043d\u0438\u0438 \u0443\u0437\u043b\u043e\u0432 Kubernetes-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430, \u044d\u0442\u0438 \u0443\u0437\u043b\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u2026 \u0434\u0430 \u0438 \u0432\u043e\u043e\u0431\u0449\u0435: \u00ab\u042f \u0441\u0442\u043e \u0440\u0430\u0437 \u0442\u0430\u043a \u0434\u0435\u043b\u0430\u043b\u00bb, \u2014 \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u043e\u0435\u0445\u0430\u043b\u0438!<\/p>\n<p>1. \u0412\u043d\u043e\u0441\u0438\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 StatefulSet \u0432 Helm-\u0447\u0430\u0440\u0442\u0435 \u0434\u043b\u044f Elasticsearch (<code>es-data-statefulset.yaml<\/code>):<\/p>\n<pre><code>apiVersion: apps\/v1 kind: StatefulSet metadata:   labels:     component: {{ template \"fullname\" . }}     role: data   name: {{ template \"fullname\" . }} spec:   serviceName: {{ template \"fullname\" . }}-data \u2026   volumeClaimTemplates:   - metadata:       name: data       annotations:         volume.beta.kubernetes.io\/storage-class: \"high-speed\"<\/code><\/pre>\n<p>\u0412 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0441\u0442\u0440\u043e\u0447\u043a\u0435 (\u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c storage class) \u0431\u044b\u043b\u043e \u0440\u0430\u043d\u0435\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>rbd<\/code> \u0432\u043c\u0435\u0441\u0442\u043e \u043d\u044b\u043d\u0435\u0448\u043d\u0435\u0433\u043e <code>high-speed<\/code>.<\/p>\n<p>2. \u0423\u0434\u0430\u043b\u044f\u0435\u043c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 StatefulSet \u0441 <code>cascade=false<\/code>. \u042d\u0442\u043e \u043e\u043f\u0430\u0441\u043d\u044b\u0439 \u043f\u043e\u0432\u043e\u0440\u043e\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0435 pod\u2019\u043e\u0432 \u0441 ES \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f StatefulSet\u2019\u043e\u043c \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u043d\u0435\u0437\u0430\u043f\u043d\u043e\u0433\u043e \u043e\u0442\u043a\u0430\u0437\u0430 \u043a\u0430\u043a\u043e\u0433\u043e-\u043b\u0438\u0431\u043e K8s-\u0443\u0437\u043b\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0437\u0430\u043f\u0443\u0449\u0435\u043d pod \u0441 ES, \u044d\u0442\u043e\u0442 pod \u043d\u0435 \u00ab\u0432\u043e\u0437\u0440\u043e\u0434\u0438\u0442\u0441\u044f\u00bb \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438. \u041e\u0434\u043d\u0430\u043a\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u043d\u0435\u043a\u0430\u0441\u043a\u0430\u0434\u043d\u043e\u0433\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f StatefulSet \u0438 \u0435\u0433\u043e \u0440\u0435\u0434\u0435\u043f\u043b\u043e\u044f \u0441 \u043d\u043e\u0432\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u0435\u043a\u0443\u043d\u0434\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0438\u0441\u043a\u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b (\u0442.\u0435. \u0437\u0430\u0432\u0438\u0441\u044f\u0442 \u043e\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f, \u043a\u043e\u043d\u0435\u0447\u043d\u043e). <\/p>\n<p>\u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c:<\/p>\n<pre><code> $ kubectl -n kibana-production delete sts elasticsearch --cascade=false statefulset.apps \"elasticsearch\" deleted<\/code><\/pre>\n<p>3. \u0414\u0435\u043f\u043b\u043e\u0438\u043c \u0437\u0430\u043d\u043e\u0432\u043e \u043d\u0430\u0448 Elasticsearch, \u0430 \u0437\u0430\u0442\u0435\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c StatefulSet \u0434\u043e 6 \u0440\u0435\u043f\u043b\u0438\u043a:<\/p>\n<pre><code>~ $ kubectl -n kibana-production scale sts elasticsearch --replicas=6 statefulset.apps\/elasticsearch scaled<\/code><\/pre>\n<p>\u2026 \u0438 \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<pre><code>~ $ kubectl -n kibana-production get po | grep elasticsearch elasticsearch-0                               1\/1     Running     0         77d2h elasticsearch-1                               1\/1     Running     0         77d2h elasticsearch-2                               1\/1     Running     0         77d2h elasticsearch-3                               1\/1     Running     0         11m elasticsearch-4                               1\/1     Running     0         10m elasticsearch-5                               1\/1     Running     0         10m  ~ $ kubectl -n kibana-production exec -ti elasticsearch-0 bash [root@elasticsearch-0 elasticsearch]# curl --user admin:********** -sk https:\/\/localhost:9200\/_cat\/nodes 10.244.33.142  8 98 49 7.89 4.86 3.45 dim - elasticsearch-4 10.244.33.118 26 98 35 7.89 4.86 3.45 dim - elasticsearch-2 10.244.33.140  8 98 60 7.89 4.86 3.45 dim - elasticsearch-3 10.244.21.71   8 93 58 8.53 6.25 4.39 dim - elasticsearch-5 10.244.33.120 23 98 33 7.89 4.86 3.45 dim - elasticsearch-0 10.244.33.119  8 98 34 7.89 4.86 3.45 dim * elasticsearch-1<\/code><\/pre>\n<p>\u041a\u0430\u0440\u0442\u0438\u043d\u0430 \u0441 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0445:<\/p>\n<pre><code>~ $ kubectl -n kibana-production get get pvc | grep elasticsearch NAME                   STATUS        VOLUME       CAPACITY   ACCESS MODES   STORAGECLASS    AGE data-elasticsearch-0   Bound   pvc-a830fb81-...   12Gi       RWO            rbd             77d data-elasticsearch-1   Bound   pvc-02de4333-...   12Gi       RWO            rbd             77d data-elasticsearch-2   Bound   pvc-6ed66ff0-...   12Gi       RWO            rbd             77d data-elasticsearch-3   Bound   pvc-74f3b9b8-...   12Gi       RWO            high-speed      12m data-elasticsearch-4   Bound   pvc-16cfd735-...   12Gi       RWO            high-speed      12m data-elasticsearch-5   Bound   pvc-0fb9dbd4-...   12Gi       RWO            high-speed      12m<\/code><\/pre>\n<p>\u041e\u0442\u043b\u0438\u0447\u043d\u043e!<\/p>\n<p>4. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0431\u043e\u0434\u0440\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0443 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432 \u0432\u0430\u0441 \u0435\u0449\u0435 \u0436\u0438\u0432 \u0434\u0443\u0445 \u0430\u0432\u0430\u043d\u0442\u044e\u0440\u0438\u0437\u043c\u0430 \u0438 \u043d\u0435\u0443\u0434\u0435\u0440\u0436\u0438\u043c\u043e \u0432\u043b\u0435\u0447\u0435\u0442 \u043a \u043f\u0440\u0438\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f\u043c (\u0442.\u0435. \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0438 \u043d\u0435 \u0441\u0442\u043e\u043b\u044c \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u044b), \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043e\u0441\u0442\u0430\u0432\u0438\u0432 \u043e\u0434\u043d\u0443 \u0440\u0435\u043f\u043b\u0438\u043a\u0443 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432:<\/p>\n<pre><code>~ $ kubectl -n kibana-production exec -ti elasticsearch-0 bash [root@elasticsearch-0 elasticsearch]# curl --user admin:********** -H \"Content-Type: application\/json\" -X PUT -sk https:\/\/localhost:9200\/my-index-pattern-*\/_settings -d '{\"number_of_replicas\": 0}' {\"acknowledged\":true}<\/code><\/pre>\n<p>\u2026 \u043d\u043e \u043c\u044b, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0442\u0430\u043a \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u043c:<\/p>\n<pre><code>~ $ ^C ~ $ kubectl -n kibana-production exec -ti elasticsearch-0 bash [root@elasticsearch-0 elasticsearch]# curl --user admin:********** -H \"Content-Type: application\/json\" -X PUT -sk https:\/\/localhost:9200\/my-index-pattern-*\/_settings -d '{\"number_of_replicas\": 2}' {\"acknowledged\":true}<\/code><\/pre>\n<p>\u0418\u043d\u0430\u0447\u0435 \u0443\u0442\u0440\u0430\u0442\u0430 \u043e\u0434\u043d\u043e\u0433\u043e pod\u2019\u0430 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u043d\u0435\u043a\u043e\u043d\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043e \u0435\u0433\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f, \u0430 \u0443\u0442\u0440\u0430\u0442\u0430 \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u043d\u043e\u0433\u043e PV \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u043f\u043e\u0442\u0435\u0440\u0435 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u0423\u0432\u0435\u043b\u0438\u0447\u0438\u043c \u043b\u0438\u043c\u0438\u0442\u044b \u043f\u0435\u0440\u0435\u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0438:<\/p>\n<pre><code>[root@elasticsearch-0 elasticsearch]# curl --user admin:********** -XPUT -H 'Content-Type: application\/json' -sk https:\/\/localhost:9200\/_cluster\/settings?pretty -d '{ &gt;   \"transient\" :{ &gt;     \"cluster.routing.allocation.cluster_concurrent_rebalance\" : 20, &gt;     \"cluster.routing.allocation.node_concurrent_recoveries\" : 20, &gt;     \"cluster.routing.allocation.node_concurrent_incoming_recoveries\" : 10, &gt;     \"cluster.routing.allocation.node_concurrent_outgoing_recoveries\" : 10, &gt;     \"indices.recovery.max_bytes_per_sec\" : \"200mb\" &gt;   } &gt; }' {   \"acknowledged\" : true,   \"persistent\" : { },   \"transient\" : {     \"cluster\" : {       \"routing\" : {         \"allocation\" : {           \"node_concurrent_incoming_recoveries\" : \"10\",           \"cluster_concurrent_rebalance\" : \"20\",           \"node_concurrent_recoveries\" : \"20\",           \"node_concurrent_outgoing_recoveries\" : \"10\"         }       }     },     \"indices\" : {       \"recovery\" : {         \"max_bytes_per_sec\" : \"200mb\"       }     }   } } <\/code><\/pre>\n<p>5. \u0412\u044b\u0433\u043e\u043d\u0438\u043c \u0448\u0430\u0440\u0434\u044b \u0441 \u043f\u0435\u0440\u0432\u044b\u0445 \u0442\u0440\u0435\u0445 \u0441\u0442\u0430\u0440\u044b\u0445 \u0443\u0437\u043b\u043e\u0432 ES:<\/p>\n<pre><code>[root@elasticsearch-0 elasticsearch]# curl --user admin:********** -XPUT -H 'Content-Type: application\/json' -sk https:\/\/localhost:9200\/_cluster\/settings?pretty -d '{ &gt;   \"transient\" :{ &gt;       \"cluster.routing.allocation.exclude._ip\" : \"10.244.33.120,10.244.33.119,10.244.33.118\" &gt;    } &gt; }' {   \"acknowledged\" : true,   \"persistent\" : { },   \"transient\" : {     \"cluster\" : {       \"routing\" : {         \"allocation\" : {           \"exclude\" : {             \"_ip\" : \"10.244.33.120,10.244.33.119,10.244.33.118\"           }         }       }     }   } } <\/code><\/pre>\n<p>\u0412\u0441\u043a\u043e\u0440\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043f\u0435\u0440\u0432\u044b\u0435 3 \u0443\u0437\u043b\u0430 \u0431\u0435\u0437 \u0434\u0430\u043d\u043d\u044b\u0445:<\/p>\n<pre><code>[root@elasticsearch-0 elasticsearch]# curl --user admin:********** -sk https:\/\/localhost:9200\/_cat\/shards | grep 'elasticsearch-[0..2]' | wc -l 0 <\/code><\/pre>\n<p>6. \u041f\u0440\u0438\u0448\u043b\u0430 \u043f\u043e\u0440\u0430 \u043f\u043e \u043e\u0434\u043d\u043e\u0439 \u0443\u0431\u0438\u0442\u044c \u0441\u0442\u0430\u0440\u044b\u0435 \u0443\u0437\u043b\u044b Elasticsearch.<\/p>\n<p>\u0413\u043e\u0442\u043e\u0432\u0438\u043c \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0442\u0440\u0438 PersistentVolumeClaim \u0442\u0430\u043a\u043e\u0433\u043e \u0432\u0438\u0434\u0430:<\/p>\n<pre><code>~ $ cat pvc2.yaml --- apiVersion: v1 kind: PersistentVolumeClaim metadata:   name: data-elasticsearch-2 spec:   accessModes: [ \"ReadWriteOnce\" ]   resources:     requests:       storage: 12Gi   storageClassName: \"high-speed\"<\/code><\/pre>\n<p>\u0423\u0434\u0430\u043b\u044f\u0435\u043c \u043f\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u0438 PVC \u0438 pod \u0443 \u0440\u0435\u043f\u043b\u0438\u043a 0, 1 \u0438 2, \u0434\u0440\u0443\u0433 \u0437\u0430 \u0434\u0440\u0443\u0433\u043e\u043c. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u0435\u043c PVC \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0438 \u0443\u0431\u0435\u0436\u0434\u0430\u0435\u043c\u0441\u044f, \u0447\u0442\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 ES \u0432 \u043d\u043e\u0432\u043e\u043c pod\u2019\u0435, \u043f\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u043d\u043e\u043c StatefulSet\u2019\u043e\u043c, \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u00ab\u0437\u0430\u043f\u0440\u044b\u0433\u043d\u0443\u043b\u00bb \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 ES:<\/p>\n<pre><code>~ $ kubectl -n kibana-production delete pvc data-elasticsearch-2 persistentvolumeclaim \"data-elasticsearch-2\" deleted ^C  ~ $ kubectl -n kibana-production delete po elasticsearch-2 pod \"elasticsearch-2\" deleted  ~ $ kubectl -n kibana-production apply -f pvc2.yaml persistentvolumeclaim\/data-elasticsearch-2 created  ~ $ kubectl -n kibana-production get po | grep elasticsearch elasticsearch-0                               1\/1     Running     0         77d3h elasticsearch-1                               1\/1     Running     0         77d3h elasticsearch-2                               1\/1     Running     0         67s elasticsearch-3                               1\/1     Running     0         42m elasticsearch-4                               1\/1     Running     0         41m elasticsearch-5                               1\/1     Running     0         41m  ~ $ kubectl -n kibana-production exec -ti elasticsearch-0 bash [root@elasticsearch-0 elasticsearch]# curl --user admin:********** -sk https:\/\/localhost:9200\/_cat\/nodes 10.244.21.71  21 97 38 3.61 4.11 3.47 dim - elasticsearch-5 10.244.33.120 17 98 99 8.11 9.26 9.52 dim - elasticsearch-0 10.244.33.140 20 97 38 3.61 4.11 3.47 dim - elasticsearch-3 10.244.33.119 12 97 38 3.61 4.11 3.47 dim * elasticsearch-1 10.244.34.142 20 97 38 3.61 4.11 3.47 dim - elasticsearch-4 10.244.33.89  17 97 38 3.61 4.11 3.47 dim - elasticsearch-2<\/code><\/pre>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u0434\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0434\u043e ES-\u0443\u0437\u043b\u0430 \u21160: \u0443\u0434\u0430\u043b\u044f\u0435\u043c pod <code>elasticsearch-0<\/code>, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043e\u043d \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0441 \u043d\u043e\u0432\u044b\u043c storageClass, \u0437\u0430\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u0435\u0431\u0435 PV. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<pre><code>~ $ kubectl -n kibana-production exec -ti elasticsearch-0 bash [root@elasticsearch-0 elasticsearch]# curl --user admin:********** -sk https:\/\/localhost:9200\/_cat\/nodes 10.244.33.151 17 98 99 8.11 9.26 9.52 dim * elasticsearch-0<\/code><\/pre>\n<p>\u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432 \u0441\u043e\u0441\u0435\u0434\u043d\u0435\u043c pod\u2019\u0435:<\/p>\n<pre><code>~ $ kubectl -n<\/code><\/pre>\n<\/hr>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-317090","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/317090","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=317090"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/317090\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=317090"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=317090"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=317090"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}