k8s 使用 helm 文件部署 8.12.2 es 分角色集群

只开启了用户密码的认证,并没有开启 https

添加 helm 仓库

helm repo add elastic https://helm.elastic.co

下载 elasticsearch chart 包

helm pull elastic/elasticsearch --version 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 证书,指定证书有效期
    • Please enter the desired output file [elastic-stack-ca.p12] 要求写 ca 证书的文件名字,可以回车,默认名字是 elastic-stack-ca.p12
    • Enter password for elastic-stack-ca.p12 : 给 ca 证书设置密码,根据实际场景选择
elasticsearch-certutil ca --days 36500
  • 生成 cert 证书文件
    • 上面有配置 ca 证书输出文件名称的,把 elastic-stack-ca.p12 改成自己对应的名字
    • Enter password for CA (elastic-stack-ca.p12) : 输入创建 ca 证书时候的密码,没设置直接回车
    • Please enter the desired output file [elastic-certificates.p12]: 设置 cert 证书文件的名字,默认是 elastic-certificates.p12
    • Enter password for elastic-certificates.p12 : cert 证书设置密码,根据实际场景选择
elasticsearch-certutil cert --ca elastic-stack-ca.p12 --days 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

生成 secret,后期可以导出成 yaml,去其他环境直接使用

kubectl create secret -n es-logs generic elastic-certificates --from-file=elastic-certificates.p12

用户名和密码

  • elastic 是用户名
  • Passw0rd@123 是对应的密码
  • 写入 secret 是需要 base64 加密的
  • 一定要使用 echo -n,避免换行导致 readiness 脚本失败
cat <<EOF > elastic-credentials-secret.yaml
---
apiVersion: v1
kind: Secret
metadata:
  name: elastic-credentials
  namespace: es-logs
  labels:
    app: "elasticsearch"
type: Opaque
data:
  username: $(echo -n 'elastic' | base64)
  password: $(echo -n 'Passw0rd@123' | base64)
EOF

应用到 k8s 集群

kubectl apply -f elastic-credentials-secret.yaml

解压包

tar xf elasticsearch-8.5.1.tgz

备份 values.yaml 文件

mv elasticsearch/values.yaml{,.tmp}

完整 value 文件比较长,以下配置文件,仅提供需要修改的内容

部署 master 节点

注意:master 节点需要存储集群的信息,所以,生产环境一定要给 master 节点也配置相关的持久化存储,否则master 节点全部宕机后,会导致集群数据丢失,数据节点无法加入集群

cd elasticsearch
# 复制一份 master-values.yaml
cp values.yaml.tmp master-values.yaml

修改 master-values.yaml 文件

# es 集群的名称
clusterName: "es-cluster"
# es 节点的角色
roles:
  - master
minimumMasterNodes: 1
esConfig:
  elasticsearch.yml: |
    cluster.initial_master_nodes: ["es-cluster"]
    xpack.security.enabled: true
    xpack.security.transport.ssl.enabled: true
    xpack.security.transport.ssl.verification_mode: certificate
    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: false
# 创建的用户密码要赋值,注意 secret 名字别错了,这个影响 readiness 探针
extraEnvs:
  - name: ELASTIC_PASSWORD
    valueFrom:
      secretKeyRef:
        name: elastic-credentials
        key: password
  - name: ELASTIC_USERNAME
    valueFrom:
      secretKeyRef:
        name: elastic-credentials
        key: username
# 用户密码为了不在 value 文件里面明文展示,前期手动创建了 secret
secret:
  enabled: false
# 配置 ssl secret 的 volume 挂载
secretMounts:
  - name: elastic-certificates
    secretName: elastic-certificates
    path: /usr/share/elasticsearch/config/certs
    defaultMode: 0755
# 部署的镜像 tag
imageTag: "8.12.2"
# 配置 es 的 jvm
esJavaOpts: "-Xmx1g -Xms1g"
# 配置 pod 资源限制
## limits.memory 配置成上面 jvm 的值乘以 1.25 或者 1.5,这些需要根据实际的资源来配置
## requests.cpu 和 requests.memory 也要根据实际集群资源来配置,超出了集群现有的 request 会导致 pod 无法被调度
resources:
  requests:
    cpu: "1000m"
    memory: "1Gi"
  limits:
    cpu: "1000m"
    memory: "2Gi"
# 此处做实验,master 节点不做数据持久化了,但是生产一定要开持久化
persistence:
  enabled: false
# 节点亲和性,如果需要 es 启动到固定的几个节点,需要配置一下
nodeAffinity:
  requiredDuringSchedulingIgnoredDuringExecution:
    nodeSelectorTerms:
    - matchExpressions:
      - key: kubernetes.io/hostname
        operator: In
        values:
        - 192.168.11.192
        - 192.168.11.194
        - 192.168.11.195
# 没有开启 https 的配置,这个参数会影响 readiness 探针
protocol: http
# 是否启动测试 pod 测试集群状态,默认是开启,可以自定义
tests:
  enabled: false

部署 master 节点

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

返回下面这些信息,说明 es 正在启动

NAME: es-master
LAST DEPLOYED: Tue Jul  2 23<
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值