ElasticSearch跟MySQL类似,都需要使用StatefulSet去部署这类有状态服务
es配置中常见的参数:
- cluster.name:集群名称,确保同一集群中的节点此配置名称相同
- node.name:节点名称,表示集群中节点名称
- network.host:es监听的IP地址
- discovery.seed_hosts:节点发现地址,配置成域名(域名下解析到多个IP地址),那么es将处理所有发现的IP地址
- cluster.initial_master_nodes:集群内所有的node.name
部署NFS storageclass
参考文章:https://1335402049.github.io/2020/09/16/Kubernetes%E4%B8%AD%E4%BD%BF%E7%94%A8NFS%E7%9A%84StorageClass/
创建namespace
apiVersion: v1 kind: Namespace metadata: name: log-system labels: name: log-system
|
创建configmap
apiVersion: v1 kind: ConfigMap metadata: name: es namespace: log-system data: elasticsearch.yml: | cluster.name: "es-cluster" node.name: "${POD_NAME}" network.host: 0.0.0.0 discovery.seed_hosts: "elasticsearch-discovery" cluster.initial_master_nodes: "es-0,es-1,es-2" http.cors.enabled: "true" http.cors.allow-origin: "*"
|
创建statefulset
apiVersion: apps/v1 kind: StatefulSet metadata: name: es namespace: log-system spec: replicas: 3 selector: matchLabels: app: es serviceName: es volumeClaimTemplates: - metadata: name: es-data annotations: volume.beta.kubernetes.io/storage-class: "managed-nfs-storage" spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi template: metadata: labels: app: es spec: initContainers: - name: increase-vm-max-map image: busybox imagePullPolicy: IfNotPresent command: - sysctl - -w - vm.max_map_count=262144 securityContext: privileged: true - name: increase-fd-ulimit image: busybox imagePullPolicy: IfNotPresent command: - sh - -c - ulimit -n 65536 securityContext: privileged: true containers: - name: elasticsearch image: elasticsearch:7.2.0 imagePullPolicy: IfNotPresent ports: - containerPort: 9200 name: es-cli - containerPort: 9300 name: es-iner env: - name: POD_NAME valueFrom: fieldRef: fieldPath: metadata.name volumeMounts: - mountPath: /usr/share/elasticsearch/data name: es-data - mountPath: /usr/share/elasticsearch/config/elasticsearch.yml name: es-config subPath: elasticsearch.yml volumes: - name: es-config configMap: name: es
|
创建service
apiVersion: v1 kind: Service metadata: name: es-out namespace: log-system spec: type: NodePort selector: app: es ports: - port: 9200 targetPort: 9200 --- apiVersion: v1 kind: Service metadata: name: elasticsearch-discovery namespace: log-system spec: clusterIP: None ports: - port: 9300 targetPort: 9300 selector: app: es
|
查看集群状态
查看pod,svc情况
kubectl get pods,svc -n log-system
|
使用curl访问es-out svc的9200端口,查看集群健康状态
curl http://10.1.213.20:9200/_cat/health?v
|
