文章目录
@[话题]
部署环境,下载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