k8s 使用 helm 文件部署 8.12.2 es 分角色集群?k8s部署es集群的几种方式

k8s 使用 helm 文件部署 8.12.2 es 分角色集群 文章目录 [toc] 环境介绍添加 helm 仓库下载 elasticsearch chart 包配置 secret 文件tls 证书用户名和密码 部署 master 节点部

文章目录

@[话题]

部署环境,下载helm仓库,elasticsearch Chart的包配置,添加secret文件,tls证书,用户名密码

部署主节点部署摄取节点部署数据数据节点创建PV和PVC

节点验证部署kibana 配置秘密文件用户名和密码随机密钥

创建kibana_login用户下载kibana图表包部署kibana

仅启用用户密码验证,禁用https。

环境介绍

节点

添加 helm 仓库

添加Helm 存储库Elastic https://helm.elastic.co

下载 elasticsearch chart 包

Helm pull elastic/elasticsearch –版本8.5.1

配置 secret 文件

自动创建的官方证书有效期很短,因此您必须自行创建证书。

使用es镜像创建Docker容器

docker run -it –rm –name es-cert-create docker.elastic.co/elasticsearch/elasticsearch:8.12.2 bash

tls 证书

生成CA证书并指定证书有效期

输入所需的输出文件[elastic-stack-ca.p12] ca 证书文件名是必需的。按Enter 键。默认名称为elastic-stack-ca.p12。输入elastic-stack-ca密码。 p12 : ca 给出证书设置密码,根据实际场景选择

elasticsearch-certutil ca –天36500

生成证书证书文件

上面设置了CA证书的输出文件名。将elastic-stack-ca.p12重命名为相应的名称。输入CA 密码(elastic-stack-ca.p12)。 否则,请在创建CA 证书时输入密码。如果设置了则直接返回。输入所需的输出文件[elastic-certificates.p12] : 证书设置证书文件的名称。默认为elastic-certificates.p12。请输入elastic-certificates.p12的密码。 设置密码。证书根据您的实际场景选择

elasticsearch-certutil 证书–ca elastic-stack-ca.p12 –天36500

检查证书到期日期

# 将p12证书转换为pem证书,过程中输入一次密码

openssl pkcs12 -in elastic-certificates.p12 -out cert.pem -nodes

# 检查证书有效期

openssl x509 -in cert.pem -noout -enddate

从容器复制

docker cp es-cert-create:/usr/share/elasticsearch/elastic-certificates.p12 ./elastic-certificates.p12

生成一个秘密。稍后可以将其导出到yaml 并直接在其他环境中使用。

kubectl 创建秘密-ns es-logs 通用弹性证书–from-file=elastic-certificates.p12

用户名和密码

弹性是你的用户名。 Passw0rd@123 是写入机密的相应密码。这需要使用echo -n 来避免换行,从而导致准备脚本失败。

cat EOF elastic-credentials-secret.yaml

api版本: v1

kind: 秘密

元数据:

name: 弹性凭证

命名空间:的eslog

标签:

app: \’弹性搜索\’

:型不透明

数据:

用户名: $(echo -n \’弹性\’ | Base64)

密码: $(echo -n \’Passw0rd@123\’ | Base64)

结束后

应用于k8s集群

kubectl apply -f elastic-credentials-secret.yaml

解压包

tar xf elasticsearch-8.5.1.tgz

备份value.yaml 文件。

mv elasticsearch/values.yaml{,tmp}

完整值文件比较长。以下配置文件仅提供需要更改的内容。

部署 master 节点

cd 弹性搜索

# 创建master-values.yaml 的副本

cp value.yaml.tmp 主值.yaml

修改master-values.yaml文件

#es集群名称

集群名称: \’es-cluster\’

#es节点的作用

角色:

-掌握

最低主节点: 1

esConfig:

弹性搜索.yml: |

cluster.initial_master_nodes: [\’es-cluster\’]

xpack.security.enabled: true

xpack.security.transport.ssl.enabled: true

xpack.security.transport.ssl.verification_mode: 证书

xpack.security.transport.ssl.keystore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12

xpack.security.transport.ssl.truststore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12

# 我自己创建了证书。这里不需要自动创建

createCert: 假

# 创建的用户密码必须赋值。这会影响就绪探针。

额外环境:

– name: 弹性密码

起价:

SecretKeyRef:

name: 弹性凭证

key: 的密码

– name: ELASTIC_USERNAME

起价:

SecretKeyRef:

name: 弹性凭证

key: 用户名

# 我在初始阶段手动创建了秘密,以避免在值文件中以明文形式看到用户的密码。

秘密:

valid: 假

# 为ssl 密钥配置卷挂载

秘密坐骑:

– name:弹性证书

SecretName: 弹性证书

路径: /usr/share/elasticsearch/config/certs

默认模式: 0755

# 部署的镜像标签

imageTag:“8.12.2”

# 配置es jvm

esJavaOpts: \’-Xmx1g -Xms1g\’

# 配置pod的资源限制

##limits.memory 设置为上面jvm 值的1.25 或1.5 倍。这些要根据实际资源来配置。

## 如果超出集群的现有请求,则无法调度Pod。

资源:

请求:

cpu:“1000m”

内存:“1Gi”

限额:

cpu:“1000m”

内存:“2Gi”

# 主节点不需要数据持久化

坚持:

valid: 假

# 节点亲和力。如果需要针对某些固定节点启动,则需要进行配置

节点亲和力:

忽略所需的计划正在运行:

节点选择器术语:

– 匹配表达式:

– key: kubernetes.io/主机名

与操作员:

价值:

– 192.168.11.192

– 192.168.11.194

– 192.168.11.195

# 没有启用https 的设置。该参数影响Readiness Probe。

协议: http

# 是否启动测试pod来测试集群的状态。默认启用并且可以自定义。

测试:

valid: 假

部署主节点

helm install es-master ./-f master-values.yaml -ns es-logs

返回如下信息,表明es正在启动:

NAME: S 大师

最终部署: 2024 年7 月2 日星期二23:25:28

NAMESPACE: 的Eslog

STATUS: 已部署

修订版: 1

测试套件: 无

注释:

1. 验证所有集群成员是否已启动。

$ kubectl get pod –namespace=es-logs -l app=es-cluster-master -w

2. 获取您的Elastic 用户的密码。

$ kubectl get Secrets –namespace=es-logs es-cluster-master-credentials -ojsonpath=\'{.data.password}\’ |

部署 ingest 节点

# 复制ingest-values.yaml

cp value.yaml.tmp 导入value.yaml

修改ingest-values.yaml 文件

集群名称: \’es-cluster\’

节点组:“摄取”

角色:

-摄取

-远程集群客户端

esConfig:

弹性搜索.yml: |

cluster.initial_master_nodes: [\’es-cluster\’]

discovery.seed_hosts: [\’es-cluster-master-headless\’]

xpack.security.enabled: true

xpack.security.transport.ssl.enabled: true

xpack.security.transport.ssl.verification_mode: 证书

xpack.security.transport.ssl.keystore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12

xpack.security.transport.ssl.truststore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12

# 我自己创建了证书。这里不需要自动创建

createCert: 假

# 创建的用户密码必须赋值。这会影响就绪探针。

额外环境:

– name: 弹性密码

起价:

SecretKeyRef:

name: 弹性凭证

key: 的密码

– name: ELASTIC_USERNAME

起价:

SecretKeyRef:

name: 弹性凭证

key: 用户名

# 我在初始阶段手动创建了秘密,以避免在值文件中以明文形式看到用户的密码。

秘密:

valid: 假

# 为ssl 密钥配置卷挂载

秘密坐骑:

– name:弹性证书

SecretName: 弹性证书

路径: /usr/share/elasticsearch/config/certs

默认模式: 0755

# 部署的镜像标签

imageTag:“8.12.2”

# 配置es jvm

esJavaOpts: \’-Xmx1g -Xms1g\’

# 配置pod的资源限制

##limits.memory 设置为上面jvm 值的1.25 或1.5 倍。这些要根据实际资源来配置。

## 如果超出集群的现有请求,则无法调度Pod。

资源:

请求:

cpu:“1000m”

内存:“1Gi”

限额:

cpu:“1000m”

内存:“2Gi”

# Ingest节点不需要数据持久化

坚持:

valid: 假

# 节点亲和力。如果需要针对某些固定节点启动,则需要进行配置

节点亲和力:

忽略所需的计划正在运行:

节点选择器术语:

– 匹配表达式:

– key: kubernetes.io/主机名

与操作员:

价值:

– 192.168.11.192

– 192.168.11.194

– 192.168.11.195

# 没有启用https 的设置。该参数影响Readiness Probe。

协议: http

# 是否启动测试pod来测试集群的状态。默认启用并且可以自定义。

测试:

valid: 假

部署摄取节点

helm install es-ingest ./-f ingest-values.yaml -nes-logs

部署 data 数据节点

# 创建data-values.yaml 的副本

cp value.yaml.tmp 数据value.yaml

修改data-values.yaml文件

集群名称: \’es-cluster\’

节点组:“数据”

角色:

-数据

-数据内容

-data_hot

-data_warm

– 数据冷

-摄取

-毫升

-远程集群客户端

– 转换

esConfig:

弹性搜索.yml: |

cluster.initial_master_nodes: [\’es-cluster-master\’]

discovery.seed_hosts: [\’es-cluster-master-headless\’]

xpack.security.enabled: true

xpack.security.transport.ssl.enabled: true

xpack.security.transport.ssl.verification_mode: 证书

xpack.security.transport.ssl.keystore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12

xpack.security.transport.ssl.truststore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12

# 我自己创建了证书。这里不需要自动创建

createCert: 假

# 创建的用户密码必须赋值。这会影响就绪探针。

额外环境:

– name: 弹性密码

起价:

SecretKeyRef:

name: 弹性凭证

key: 的密码

– name: ELASTIC_USERNAME

起价:

SecretKeyRef:

name: 弹性凭证

key: 用户名

# 我在初始阶段手动创建了秘密,以避免在值文件中以明文形式看到用户的密码。

秘密:

valid: 假

# 为ssl 密钥配置卷挂载

秘密坐骑:

– name:弹性证书

SecretName: 弹性证书

路径: /usr/share/elasticsearch/config/certs

默认模式: 0755

# 部署的镜像标签

imageTag:“8.12.2”

# 配置es jvm

esJavaOpts: \’-Xmx1g -Xms1g\’

# 配置pod的资源限制

##limits.memory 设置为上面jvm 值的1.25 或1.5 倍。这些要根据实际资源来配置。

## 如果超出集群的现有请求,则无法调度Pod。

资源:

请求:

cpu:“1000m”

内存:“1Gi”

限额:

cpu:“1000m”

内存:“2Gi”

# 节点亲和力。如果需要针对某些固定节点启动,则需要进行配置

节点亲和力:

忽略所需的计划正在运行:

节点选择器术语:

– 匹配表达式:

– key: kubernetes.io/主机名

与操作员:

价值:

– 192.168.11.198

– 192.168.11.194

– 192.168.11.195

# 没有启用https 的设置。该参数影响Readiness Probe。

协议: http

# 是否启动测试pod来测试集群的状态。默认启用并且可以自定义。

测试:

valid: 假

创建 pv 和 pvc

本地创建一个目录。进入es所在的节点,创建对应的目录。

mkdir -p /elastic/es-cluster-data-0

mkdir -p /elastic/es-cluster-data-1

mkdir -p /elastic/es-cluster-data-2

chmod -R 777 /elastic/es-cluster-data-0

chmod -R 777 /elastic/es-cluster-data-1

chmod -R 777 /elastic/es-cluster-data-2

直接使用localpath的pv创建的持久化pvc的名称为clusterName-nodeGroup-clusterName-nodeGroup-sts副本序列号。根据配置文件,一共有三份,pvc名为es-cluster-。数据集群。 -data-0、es-cluster-data-es-cluster-data-1、es-cluster-data-es-cluster-data-2

api版本: v1

kind: 持久卷

元数据:

name: es-cluster-data-es-cluster-data-0

规格:

访问模式:

– 读写一次

容量:

存储: 30Gi

索赔编号Ref:

api版本: v1

kind: 持久卷声明

name: es-cluster-data-es-cluster-data-0

命名空间:的eslog

主机路径:

路径: /elastic/es-cluster-data

-0
type: \”DirectoryOrCreate\”
persistentVolumeReclaimPolicy: Retain
nodeAffinity:
required:
nodeSelectorTerms:
– matchExpressions:
– key: kubernetes.io/hostname
operator: In
values:
– 192.168.11.198

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: es-cluster-data-es-cluster-data-0
namespace: es-logs
spec:
accessModes:
– ReadWriteOnce
resources:
requests:
storage: 30Gi
volumeName: es-cluster-data-es-cluster-data-0

apiVersion: v1
kind: PersistentVolume
metadata:
name: es-cluster-data-es-cluster-data-1
spec:
accessModes:
– ReadWriteOnce
capacity:
storage: 30Gi
claimRef:
apiVersion: v1
kind: PersistentVolumeClaim
name: es-cluster-data-es-cluster-data-1
namespace: es-logs
hostPath:
path: /elastic/es-cluster-data-1
type: \”DirectoryOrCreate\”
persistentVolumeReclaimPolicy: Retain
nodeAffinity:
required:
nodeSelectorTerms:
– matchExpressions:
– key: kubernetes.io/hostname
operator: In
values:
– 192.168.11.194

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: es-cluster-data-es-cluster-data-1
namespace: es-logs
spec:
accessModes:
– ReadWriteOnce
resources:
requests:
storage: 30Gi
volumeName: es-cluster-data-es-cluster-data-1

apiVersion: v1
kind: PersistentVolume
metadata:
name: es-cluster-data-es-cluster-data-2
spec:
accessModes:
– ReadWriteOnce
capacity:
storage: 30Gi
claimRef:
apiVersion: v1
kind: PersistentVolumeClaim
name: es-cluster-data-es-cluster-data-2
namespace: es-logs
hostPath:
path: /elastic/es-cluster-data-2
type: \”DirectoryOrCreate\”
persistentVolumeReclaimPolicy: Retain
nodeAffinity:
required:
nodeSelectorTerms:
– matchExpressions:
– key: kubernetes.io/hostname
operator: In
values:
– 192.168.11.195

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: es-cluster-data-es-cluster-data-2
namespace: es-logs
spec:
accessModes:
– ReadWriteOnce
resources:
requests:
storage: 30Gi
volumeName: es-cluster-data-es-cluster-data-2

生成 pv 和 pvc

k apply -f pv-pvc.yaml

查看 pvc 是不是显示 Bound

k get pvc -n es-logs

部署 data

helm install es-data ./ -f data-values.yaml -n es-logs

节点验证

k exec -it -n es-logs es-cluster-master-0 — curl -s -u \”elastic:Passw0rd@123\” \”localhost:9200/_cat/nodes?v\”

这里是 3 个 master,3 个 ingest 和 3 个 data

ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
172.22.27.22 43 87 1 0.37 0.84 0.55 cdhilrstw – es-cluster-data-1
172.22.11.101 37 87 1 0.07 0.43 0.29 ir – es-cluster-ingest-0
172.22.84.48 36 86 1 2.26 1.61 0.85 ir – es-cluster-ingest-1
172.22.92.6 39 87 1 0.04 0.11 0.12 cdhilrstw – es-cluster-data-0
172.22.84.49 38 86 1 2.26 1.61 0.85 cdhilrstw – es-cluster-data-2
172.22.27.20 20 43 1 0.37 0.84 0.55 m – es-cluster-master-2
172.22.11.100 53 45 2 0.07 0.43 0.29 m * es-cluster-master-0
172.22.84.47 69 43 1 2.26 1.61 0.85 m – es-cluster-master-1
172.22.27.21 44 87 1 0.37 0.84 0.55 ir – es-cluster-ingest-2

部署 kibana

配置 secret 文件

用户名和密码

上面的方法部署的 es,默认生成的 kibana_system 会没有权限访问,8.12 版本的 kibana 不允许使用 superuser 角色来访问 es 集群,这里要重新创建一个用户,所以先创建一个 secret 文件

kibana_login 是用户名Passw0rd@123 是对应的密码写入 secret 是需要 base64 加密的一定要使用 echo -n,避免换行导致 readiness 脚本失败

cat <<EOF > elastic-credentials-kibana-secret.yaml

apiVersion: v1
kind: Secret
metadata:
name: elastic-credentials-kibana
namespace: es-logs
labels:
app: \”kibana\”
type: Opaque
data:
username: $(echo -n \’kibana_login\’ | base64)
password: $(echo -n \’Passw0rd@123\’ | base64)
EOF

随机密钥

cat <<EOF > elastic-encryptionkey-kibana-secret.yaml

apiVersion: v1
kind: Secret
metadata:
name: elastic-encryptionkey-kibana
namespace: es-logs
labels:
app: \”kibana\”
type: Opaque
data:
reporting: $(cat /dev/urandom | tr -dc \’_A-Za-z0-9\’ | head -c 50 | base64)
security: $(cat /dev/urandom | tr -dc \’_A-Za-z0-9\’ | head -c 50 | base64)
encryptedsavedobjects: $(cat /dev/urandom | tr -dc \’_A-Za-z0-9\’ | head -c 50 | base64)
EOF

应用到 k8s 集群

k apply -f elastic-credentials-kibana-secret.yaml
k apply -f elastic-encryptionkey-kibana-secret.yaml

创建 kibana_login 用户

k exec -it -n es-logs es-cluster-master-0 — curl -s -XPOST -u \”elastic:Passw0rd@123\” \”localhost:9200/_security/user/kibana_login\” -H \’Content-Type: application/json\’ -d \’
{
\”password\” : \”Passw0rd@123\”,
\”roles\” : [ \”kibana_system\”,\”superuser\” ],
\”full_name\” : \”kibana_login\”,
\”email\” : \”kibana_login@mail.com\”,
\”metadata\” : {
\”intelligence\” : 7
}
}\’

返回 {\”created\”:true} 说明用户创建成功了,用这个用户访问一下,能返回节点信息,说明这个用户可以被 kibana 使用

k exec -it -n es-logs es-cluster-master-0 — curl -s -XGET -u \”kibana_login:Passw0rd@123\” \”localhost:9200/_nodes?filter_path=nodes.*.version%2Cnodes.*.http.publish_address%2Cnodes.*.ip\”

下载 kibana chart 包

helm pull elastic/kibana –version 8.5.1

解压 chart 包

tar xf kibana-8.5.1.tgz

部署 kibana

备份 values.yaml

cd kibana
cp values.yaml{,.tmp}

修改 values.yaml

# 让 kibana 连接 ingest
elasticsearchHosts: \”http://es-cluster-ingest-headless:9200\”
elasticsearchCertificateSecret: elastic-certificates
elasticsearchCertificateAuthoritiesFile: elastic-certificates.p12
# 改成上面创建的 kibana_login 用户这个 secret 名字
elasticsearchCredentialSecret: elastic-credentials-kibana
# 增加一个变量,kibana 中文界面
extraEnvs:
– name: I18N_LOCALE
value: zh-CN
– name: ELASTICSEARCH_PASSWORD
valueFrom:
secretKeyRef:
name: elastic-credentials-kibana
key: password
– name: ELASTICSEARCH_USERNAME
valueFrom:
secretKeyRef:
name: elastic-credentials-kibana
key: username
– name: KIBANA_REPORTING_KEY
valueFrom:
secretKeyRef:
name: elastic-encryptionkey-kibana
key: reporting
– name: KIBANA_SECURITY_KEY
valueFrom:
secretKeyRef:
name: elastic-encryptionkey-kibana
key: security
– name: KIBANA_ENCRYPTEDSAVEDOBJECTS_KEY
valueFrom:
secretKeyRef:
name: elastic-encryptionkey-kibana
key: encryptedsavedobjects
# 修改 tag
imageTag: \”8.12.2\”
kibanaConfig:
kibana.yml: |
elasticsearch.requestTimeout: 300000
xpack.encryptedSavedObjects.encryptionKey: ${KIBANA_ENCRYPTEDSAVEDOBJECTS_KEY}
xpack.reporting.encryptionKey: ${KIBANA_REPORTING_KEY}
xpack.security.encryptionKey: ${KIBANA_SECURITY_KEY}
server.maxPayload: 10485760
elasticsearch.username: ${ELASTICSEARCH_USERNAME}
elasticsearch.password: ${ELASTICSEARCH_PASSWORD}
# 开个 nodeport
service:
type: NodePort
# 可以自定义,也可以不写,让 k8s 自己随机一个
nodePort: \”31560\”

修改 templates/deployment.yaml

## volumes 下面的
– name: elasticsearch-certs
secret:
secretName: {{ .Values.elasticsearchCertificateSecret }}
## env 下面的
– name: ELASTICSEARCH_SSL_CERTIFICATEAUTHORITIES
value: \”{{ template \”kibana.home_dir\” . }}/config/certs/{{ .Values.elasticsearchCertificateAuthoritiesFile }}\”
– name: ELASTICSEARCH_SERVICEACCOUNTTOKEN
valueFrom:
secretKeyRef:
name: {{ template \”kibana.fullname\” . }}-es-token
key: token
optional: false
## volumeMounts 下面的
– name: elasticsearch-certs
mountPath: {{ template \”kibana.home_dir\” . }}/config/certs
readOnly: true

部署 kibana

helm install kibana ./ -f values.yaml -n es-logs –no-hooks

#以上关于k8s 使用 helm 文件部署 8.12.2 es 分角色集群的相关内容来源网络仅供参考,相关信息请以官方公告为准!

原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92988.html

(0)
CSDN's avatarCSDN
上一篇 2024年7月4日 下午7:40
下一篇 2024年7月4日 下午8:35

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注