安装

Operator: ECK

官方提供了yaml, 用于快速部署 operator 等基本服务

下载链接: https://www.elastic.co/cn/downloads/elastic-cloud-kubernetes

wget <https://download.elastic.co/downloads/eck/1.0.1/all-in-one.yaml>
kubectl apply -f all-in-one.yaml

Elastic Node & Kibana

然后创建 es 节点与 kibana 节点

# file: eck.yaml
apiVersion: elasticsearch.k8s.elastic.co/v1beta1
kind: Elasticsearch
metadata:
  namespace: log
  name: log-elastic
spec:
  version: 7.6.1
  http:
    tls:
      selfSignedCertificate:
        disabled: true  # 关闭ssl
  nodeSets:
    - name: default
      count: 3
      podTemplate:
        spec:
          affinity:
            podAntiAffinity:
              preferredDuringSchedulingIgnoredDuringExecution:
              - weight: 100
                podAffinityTerm:
                  labelSelector:
                    matchLabels:
                      elasticsearch.k8s.elastic.co/cluster-name: log-elastic
                  topologyKey: kubernetes.io/hostname   # 基于hostname的拓扑
          initContainers:
            - name: sysctl
              securityContext:
                privileged: true
              command: ['sh', '-c', 'sysctl -w vm.max_map_count=262144']
          containers:
            - name: elasticsearch
              env:
                - name: ES_JAVA_OPTS
                  value: "-Xms1536m -Xmx1536m"
              resources:
                requests:
                  memory: 2Gi
                  cpu: 0.5
                limits:
                  memory: 3Gi
                  cpu: 2
      volumeClaimTemplates:
        - metadata:
            name: elasticsearch-data
          spec:
            accessModes:
              - ReadWriteOnce
            resources:
              requests:
                storage: 100Gi
            storageClassName: log-es-local-storage  # 填写有效的storageclass
      config:
        node.master: true  # 作为master节点可以参与选举
        node.data: true
        node.ingest: true
        node.store.allow_mmap: false  # 关闭内存映射功能
---
apiVersion: kibana.k8s.elastic.co/v1beta1
kind: Kibana
metadata:
  namespace: log
  name: log-kibana
spec:
  version: 7.6.1
  http:
    tls:
      selfSignedCertificate:
        disabled: true
  count: 1
  elasticsearchRef:
    name: log-elastic
  podTemplate:
    spec:
      containers:
        - name: kibana
          env:
            - name: ES_JAVA_OPTS
              value: "-Xms512m -Xmx1024m"
          resources:
            requests:
              memory: 1Gi
              cpu: 0.5
            limits:
              memory: 2Gi
              cpu: 2

执行 kubectl apply -f eck.yaml 创建es集群.

获取集群用户密码

NAME=log-elastic  # 集群名字
PASSWORD=$(kubectl get secret $NAME-es-elastic-user -n log -o=jsonpath='{.data.elastic}' | base64 --decode)

获取集群的SSL证书

如果有启用ssl的话

kubectl get secret "$NAME-es-http-certs-public" -n log -o go-template='{{index .data "tls.crt" | base64decode }}' > tls.crt

测试集群是否搭建成功

# curl -u "elastic:$PASSWORD" -k "<https://localhost:9200>"  # 集群启用letls
curl -u "elastic:$PASSWORD" "<http://localhost:9200>"

参考