k8sConfigs/efk_cluster/elasticsearch-cluster.yaml
2025-03-24 19:12:41 +08:00

343 lines
9.2 KiB
YAML

# PVC 定义(已存在,无需重复创建)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: elasticsearch-data-pvc-elasticsearch-0
namespace: efk
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 300Gi
volumeName: elasticsearch-hot-pv
storageClassName: ""
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: elasticsearch-data-pvc-elasticsearch-1
namespace: efk
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 128Gi
volumeName: elasticsearch-warm-pv
storageClassName: ""
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: elasticsearch-data-pvc-elasticsearch-2
namespace: efk
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 500Gi
volumeName: elasticsearch-cold-pv
storageClassName: ""
---
# StatefulSet for elasticsearch-0 (hot)
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: elasticsearch-0
namespace: efk
spec:
serviceName: elasticsearch-service
replicas: 1
selector:
matchLabels:
app: elasticsearch
template:
metadata:
labels:
app: elasticsearch
spec:
initContainers:
- name: init-sysctl
image: busybox
command: ["sysctl", "-w", "vm.max_map_count=262144"]
securityContext:
privileged: true
- name: init-dirs
image: busybox
command: ["sh", "-c", "mkdir -p /data/data /data/config"]
securityContext:
runAsUser: 0 # 以 root 运行
volumeMounts:
- name: data
mountPath: /data
containers:
- name: elasticsearch
image: docker.elastic.co/elasticsearch/elasticsearch:8.8.0
securityContext:
runAsUser: 0 # 以 root 运行
ports:
- containerPort: 9200
name: http
- containerPort: 9300
name: transport
env:
- name: cluster.name
value: "my-es-cluster"
- name: node.name
value: "elasticsearch-0"
- name: discovery.seed_hosts
value: "elasticsearch-0.elasticsearch-service.efk.svc.cluster.local,elasticsearch-1.elasticsearch-service.efk.svc.cluster.local,elasticsearch-2.elasticsearch-service.efk.svc.cluster.local"
- name: cluster.initial_master_nodes
value: "elasticsearch-0"
- name: xpack.security.enabled
value: "true"
- name: ELASTIC_PASSWORD
valueFrom:
secretKeyRef:
name: elasticsearch-secret
key: elastic_password
- name: ES_JAVA_OPTS
value: "-Xms2g -Xmx4g"
- name: node.roles
value: "[master, data]"
- name: node.attr.data-tier
value: "hot"
resources:
requests:
memory: "4Gi"
cpu: "1"
limits:
memory: "6Gi"
cpu: "2"
volumeMounts:
- name: data
mountPath: /usr/share/elasticsearch/data
subPath: data
- name: data
mountPath: /usr/share/elasticsearch/config
subPath: config
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values: ["elasticsearch"]
topologyKey: "kubernetes.io/hostname"
volumes:
- name: data
persistentVolumeClaim:
claimName: "elasticsearch-data-pvc-elasticsearch-0"
---
# StatefulSet for elasticsearch-1 (warm)
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: elasticsearch-1
namespace: efk
spec:
serviceName: elasticsearch-service
replicas: 1
selector:
matchLabels:
app: elasticsearch
template:
metadata:
labels:
app: elasticsearch
spec:
initContainers:
- name: init-sysctl
image: busybox
command: ["sysctl", "-w", "vm.max_map_count=262144"]
securityContext:
privileged: true
- name: init-dirs
image: busybox
command: ["sh", "-c", "mkdir -p /data/data /data/config"]
securityContext:
runAsUser: 0 # 以 root 运行
volumeMounts:
- name: data
mountPath: /data
containers:
- name: elasticsearch
image: docker.elastic.co/elasticsearch/elasticsearch:8.8.0
securityContext:
runAsUser: 0 # 以 root 运行
ports:
- containerPort: 9200
name: http
- containerPort: 9300
name: transport
env:
- name: cluster.name
value: "my-es-cluster"
- name: node.name
value: "elasticsearch-1"
- name: discovery.seed_hosts
value: "elasticsearch-0.elasticsearch-service.efk.svc.cluster.local,elasticsearch-1.elasticsearch-service.efk.svc.cluster.local,elasticsearch-2.elasticsearch-service.efk.svc.cluster.local"
- name: cluster.initial_master_nodes
value: "elasticsearch-0"
- name: xpack.security.enabled
value: "true"
- name: ELASTIC_PASSWORD
valueFrom:
secretKeyRef:
name: elasticsearch-secret
key: elastic_password
- name: ES_JAVA_OPTS
value: "-Xms2g -Xmx4g"
- name: node.roles
value: "[data]"
- name: node.attr.data-tier
value: "warm"
resources:
requests:
memory: "4Gi"
cpu: "1"
limits:
memory: "6Gi"
cpu: "2"
volumeMounts:
- name: data
mountPath: /usr/share/elasticsearch/data
subPath: data
- name: data
mountPath: /usr/share/elasticsearch/config
subPath: config
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values: ["elasticsearch"]
topologyKey: "kubernetes.io/hostname"
volumes:
- name: data
persistentVolumeClaim:
claimName: "elasticsearch-data-pvc-elasticsearch-1"
---
# StatefulSet for elasticsearch-2 (cold)
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: elasticsearch-2
namespace: efk
spec:
serviceName: elasticsearch-service
replicas: 1
selector:
matchLabels:
app: elasticsearch
template:
metadata:
labels:
app: elasticsearch
spec:
initContainers:
- name: init-sysctl
image: busybox
command: ["sysctl", "-w", "vm.max_map_count=262144"]
securityContext:
privileged: true
- name: init-dirs
image: busybox
command: ["sh", "-c", "mkdir -p /data/data /data/config"]
securityContext:
runAsUser: 0 # 以 root 运行
volumeMounts:
- name: data
mountPath: /data
containers:
- name: elasticsearch
image: docker.elastic.co/elasticsearch/elasticsearch:8.8.0
securityContext:
runAsUser: 0 # 以 root 运行
ports:
- containerPort: 9200
name: http
- containerPort: 9300
name: transport
env:
- name: cluster.name
value: "my-es-cluster"
- name: node.name
value: "elasticsearch-2"
- name: discovery.seed_hosts
value: "elasticsearch-0.elasticsearch-service.efk.svc.cluster.local,elasticsearch-1.elasticsearch-service.efk.svc.cluster.local,elasticsearch-2.elasticsearch-service.efk.svc.cluster.local"
- name: cluster.initial_master_nodes
value: "elasticsearch-0"
- name: xpack.security.enabled
value: "true"
- name: ELASTIC_PASSWORD
valueFrom:
secretKeyRef:
name: elasticsearch-secret
key: elastic_password
- name: ES_JAVA_OPTS
value: "-Xms2g -Xmx4g"
- name: node.roles
value: "[data]"
- name: node.attr.data-tier
value: "cold"
resources:
requests:
memory: "4Gi"
cpu: "1"
limits:
memory: "6Gi"
cpu: "2"
volumeMounts:
- name: data
mountPath: /usr/share/elasticsearch/data
subPath: data
- name: data
mountPath: /usr/share/elasticsearch/config
subPath: config
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values: ["elasticsearch"]
topologyKey: "kubernetes.io/hostname"
volumes:
- name: data
persistentVolumeClaim:
claimName: "elasticsearch-data-pvc-elasticsearch-2"
---
apiVersion: v1
kind: Service
metadata:
name: elasticsearch-service
namespace: efk
spec:
clusterIP: None
selector:
app: elasticsearch
ports:
- port: 9200
name: http
- port: 9300
name: transport
---
apiVersion: v1
kind: Secret
metadata:
name: elasticsearch-secret
namespace: efk
type: Opaque
data:
elastic_password: bXluZXdwYXNzd29yZA== # 示例密码 "mynewpassword"