我Elastic Search(v7.6.1)在Kubernetes(v1.19)集群上使用。
檔案建議禁用交換:
https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-configuration-memory.html
我的 yaml:
apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
name: elastic-cluster-1
spec:
version: 7.6.1
image: docker.elastic.co/elasticsearch/elasticsearch:7.6.1
nodeSets:
- name: default
count: 3
config:
node.master: true
node.data: true
node.ingest: true
podTemplate:
metadata:
labels:
# additional labels for pods
type: elastic-master-node
spec:
nodeSelector:
node-pool: <NODE_POOL>
initContainers:
# Increase linux map count to allow elastic to store large memory maps
- name: sysctl
securityContext:
privileged: true
command: ['sh', '-c', 'sysctl -w vm.max_map_count=262144']
containers:
- name: elasticsearch
# specify resource limits and requests
resources:
limits:
memory: 11.2Gi
requests:
cpu: 3200m
env:
- name: ES_JAVA_OPTS
value: "-Xms6g -Xmx6g"
# Request persistent data storage for pods
volumeClaimTemplates:
- metadata:
name: elasticsearch-data
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 50Gi
storageClassName: ssd
- name: data
count: 2
config:
node.master: false
node.data: true
node.ingest: true
podTemplate:
metadata:
labels:
# additional labels for pods
type: elastic-data-node
spec:
nodeSelector:
node-pool: <NODE_POOL>
initContainers:
# Increase linux map count to allow elastic to store large memory maps
- name: sysctl
securityContext:
privileged: true
command: ['sh', '-c', 'sysctl -w vm.max_map_count=262144']
containers:
- name: elasticsearch
# specify resource limits and requests
resources:
limits:
memory: 11.2Gi
requests:
cpu: 3200m
env:
- name: ES_JAVA_OPTS
value: "-Xms6g -Xmx6g"
# Request persistent data storage for pods
volumeClaimTemplates:
- metadata:
name: elasticsearch-data
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 50Gi
storageClassName: ssd
# Google cloud storage credentials
secureSettings:
- secretName: "gcs-credentials"
http:
service:
spec:
# expose this cluster Service with a LoadBalancer
type: LoadBalancer
tls:
certificate:
secretName: elasticsearch-certificate
我不清楚如何更改此 yaml 以正確禁用交換。手動更改每個選項都不是一種選擇,因為在每次重新啟動時,配置都會丟失。
我怎樣才能做到這一點?
uj5u.com熱心網友回復:
首先,k8s 集群默認會禁用交換,這實際上是一個強制性要求。對于大多數情況;特別是符合要求的云管理集群,您無需擔心交換問題。即使對于 1.22,啟用交換也只是一個 alpha 功能。
如果出于某種原因需要處理此問題,可以考慮將bootstrap.memory_lock設定為 true。
...
containers:
- name: elasticsearch
env:
- name: bootstrap.memory_lock
value: "true"
...
uj5u.com熱心網友回復:
直到最近,Kubernetes 還無法控制交換。
從 1.22 開始,有一個新的 alpha 功能可以做到這一點。CRI 規范確實允許交換分配。在 Pod 規范中,我在這方面沒有發現任何新內容:據我所知,目前,您可以允許容器使用盡可能多的交換(UnlimitedSwap),或者將交換 記憶體使用限制為任何您在容器上設定的記憶體限制 (LimitedSwap)。
由于您運行的是 1.19,因此您現在不必擔心。部署集群時的一個好做法是確保節點上根本沒有交換,或者將交換設定設定為 0 或 1。檢查 Kubespray 劇本,我們可以看到它們仍然會無條件地禁用交換。
您可以連接您的節點 (ssh),確保沒有交換 - 否則禁用它。您無法直接在 ElasticSearch 物件中執行任何操作。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/368712.html
標籤:弹性搜索 Kubernetes
上一篇:動態地將特定函式應用于不同的變數
下一篇:Python類按子類更新父變數
