当前位置:   article > 正文

K8S 通过statefulset部署 elasticsearch 集群 v7.17.15_kibana7.17.15

kibana7.17.15

link: k8s 部署NFS Provisioner设置动态存储-CSDN博客

link: K8s 部署filebeat 并收集 nginx 日志-CSDN博客

一、部署ES集群

1、创建es命名空间

[root@k8s-master elk]# cat elk-ns.yaml

  1. apiVersion: v1
  2. kind: Namespace
  3. metadata:
  4. name: elk-ns

2、创建es configmap

vi es-config.yaml

  1. apiVersion: v1
  2. kind: ConfigMap
  3. metadata:
  4. name: elastic-config
  5. namespace: elk-ns
  6. data:
  7. elasticsearch.yml: |-
  8. cluster.name: es-cluster #设置集群的名称
  9. node.name: ${HOSTNAME} #设置节点的名称,无法为每个POD单独设置配置文件,因此采用POD环境变量来设置
  10. path.data: /data/elastic/data #数据存储路径
  11. http.port: 9200
  12. network.host: 0.0.0.0
  13. discovery.zen.ping.unicast.hosts: ["es-cluster-0.es-cluster.elk-ns.svc.cluster.local", "es-cluster-1.es-cluster.elk-ns.svc.cluster.local","es-cluster-2.es-cluster.elk-ns.svc.cluster.local"] #集群节点列表,我们利用k8s的coredns通过域名来找到对应的pod
  14. cluster.initial_master_nodes: ["es-cluster-0","es-cluster-1","es-cluster-2"]
  15. transport.tcp.port: 9300
  16. node.data: true
  17. node.master: true
  18. node.max_local_storage_nodes: 3
  19. discovery.zen.fd.ping_timeout: 120s
  20. discovery.zen.fd.ping_retries: 6
  21. discovery.zen.fd.ping_interval: 30s
  22. http.cors.enabled: true
  23. http.cors.allow-origin: "*"

3、创建ES statefulset

vi es-sts.yaml

  1. apiVersion: apps/v1 #api版本号
  2. kind: StatefulSet #控制器类型为statfulset
  3. metadata: #定义元数据
  4. labels: #定义标签
  5. k8s-app: es-cluster
  6. version: v7.17.15
  7. name: es-cluster #指定控制器名称
  8. namespace: elk-ns #指定资源所在的命名空间
  9. spec: #定义属性
  10. replicas: 3 #设置副本数
  11. selector: #定义标签选择器,指定去管理哪些pod
  12. matchLabels:
  13. k8s-app: es-cluster
  14. version: v7.17.15
  15. serviceName: es-cluster #指定servicename,也就是容器的主机名,第一个pod就是es-cluster-0以此类推
  16. template: #定义pod模板信息
  17. metadata: #定义元数据
  18. labels: #定义标签
  19. k8s-app: es-cluster
  20. version: v7.17.15
  21. spec: #定义pod的属性
  22. containers: #定义容器
  23. - name: es-cluster #容器的名称
  24. image: 192.168.178.137/elastic/elasticsearch:7.17.15 #镜像的版本号
  25. ports: #定义容器开放的端口号
  26. - containerPort: 9200
  27. name: db
  28. protocol: TCP
  29. - containerPort: 9300
  30. name: transport
  31. protocol: TCP
  32. env: #定义环境变量
  33. - name: ES_JAVA_OPTS #ES_JAVA_OPTS变量会替换对应配置文件中的内容
  34. value: "-Xms512m -Xmx512m"
  35. volumeMounts: #定义存储卷挂载
  36. - name: es-cluster-data #挂载卷的名称
  37. mountPath: /data/elastic/data # 挂载到容器的指定路径
  38. - name: elastic-config #挂载卷的名称
  39. mountPath: /usr/share/elasticsearch/config/elasticsearch.yml #挂载到容器的指定路径
  40. subPath: elasticsearch.yml #由于是只挂载一个文件,而不是覆盖整个目录,因此需要声明挂载的文件名称
  41. initContainers: #定义初始化容器,初始化容器在主容器启动执行进行系统调优
  42. - name: es-cluster-init #初始化容器的名称
  43. image: 192.168.178.137/elastic/alpine:v1 #初始化容器的版本号
  44. command: ["/sbin/sysctl","-w","vm.max_map_count=262144"] #初始化容器执行的命令,整个目录就是调整一个内核参数
  45. securityContext: #开启特权模式,如果不开启特权模式,容器将无权限执行命令
  46. privileged: true
  47. - name: es-cluster-permissions #定义第二个初始化容器的名称
  48. image: 192.168.178.137/elastic/alpine:v1 #初始化容器的版本号
  49. command: ["sh", "-c", "chown -R 1000:1000 /usr/share/elasticsearch/data"] #执行命令,这个命令主要是将主容器挂载的数据路径权限进行调整,否则主容器启动后无权限在里面写入数据
  50. securityContext: #开启特权模式
  51. privileged: true
  52. volumeMounts: #定义存储卷挂载,这里主要是将主容器挂载的存储首先挂载到初始化容器,权限调整后,主容器方可使用
  53. - name: es-cluster-data
  54. mountPath: /usr/share/elasticsearch/data
  55. volumes: #定义存储卷
  56. - name: elastic-config #定义存储卷的名称
  57. configMap: #存储卷的类型为configMap
  58. name: elastic-config #指定的configMap名称
  59. volumeClaimTemplates: #定义pvc模板,由于es是有状态的服务,每个pod都需要单独存储数据,因此需要使用StorageClass动态创建pv
  60. - metadata: #定义元数据
  61. name: es-cluster-data #定义pvc的名称,容器挂载pvc的名称要与这里的名称保持一致
  62. spec: #定义属性
  63. storageClassName: "managed-nfs-storage"
  64. #指定使用哪个StorageClass动态创建pv
  65. accessModes: #访问模式为多主机可读可写
  66. - ReadWriteMany
  67. resources: #设置存储卷的容量
  68. requests:
  69. storage: 10Gi

 4、创建svc NodePort

vi es-svc.yaml

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. labels:
  5. k8s-app: es-cluster
  6. name: es-cluster
  7. namespace: elk-ns
  8. spec:
  9. ports:
  10. - port: 9200
  11. targetPort: 9200
  12. name: outer
  13. nodePort: 30001
  14. selector:
  15. k8s-app: es-cluster
  16. type: NodePort

检验集群

  1. # 检验集群
  2. [root@k8s-master elk]# curl 192.168.178.129:30001/_cat/nodes
  3. 10.244.1.67 29 65 1 0.79 0.63 0.42 cdfhilmrstw - es-cluster-0
  4. 10.244.2.105 59 73 3 0.41 0.47 0.38 cdfhilmrstw * es-cluster-1
  5. 10.244.0.56 39 96 6 1.08 1.11 0.95 cdfhilmrstw - es-cluster-2

二、部署kibana

1. kibana的配置文件

  1. [root@k8s-master elk]# cat kibana.yaml
  2. apiVersion: v1
  3. kind: ConfigMap
  4. metadata:
  5. name: kibana-config
  6. namespace: elk-ns
  7. data:
  8. kibana.yml: |-
  9. server.port: 5601
  10. server.host: ${POD_IP}
  11. i18n.locale: "zh-CN"
  12. elasticsearch.hosts: ["http://192.168.178.129:30001","http://192.168.178.130:30001","http://192.168.178.131:30001"] # 因为ES svc是 NodePort的方式 所以选择了主机加端口的 如果用cluster方式 这里可以写为 svc-name.svc-namespace

2. deployment部署kibana

  1. [root@k8s-master elk]# cat kibana-deploy.yaml
  2. apiVersion: apps/v1 #api版本号
  3. kind: Deployment #控制器类型为depolyment
  4. metadata: #定义元数据
  5. labels: #定义标签
  6. k8s-app: es-kibana
  7. version: v7.17.15
  8. name: es-kibana #指定控制器名称
  9. namespace: elk-ns #指定资源所在的命名空间
  10. spec: #定义属性
  11. replicas: 1 #设置副本数
  12. selector: #定义标签选择器,指定去管理哪些pod
  13. matchLabels:
  14. k8s-app: es-kibana
  15. version: v7.17.15
  16. template: #定义pod模板信息
  17. metadata: #定义元数据
  18. labels: #定义标签
  19. k8s-app: es-kibana
  20. version: v7.17.15
  21. spec: #定义pod的属性
  22. containers: #定义容器
  23. - name: es-kibana #容器的名称
  24. image: 192.168.178.137/elastic/kibana:7.17.15 #镜像的版本号
  25. # command: ["/bin/bash","-ce","tail -f /dev/null"]
  26. ports: #定义容器开放的端口号
  27. - containerPort: 5601
  28. name: kibana
  29. protocol: TCP
  30. env:
  31. - name: POD_IP #定义一个PODIP的环境变量,用于configmap调用
  32. valueFrom:
  33. fieldRef:
  34. fieldPath: status.podIP
  35. volumeMounts: #定义存储卷挂载
  36. - name: kibana-config #挂载卷的名称
  37. mountPath: /usr/share/kibana/config/kibana.yml #挂载到容器的指定路径
  38. subPath: kibana.yml #由于是只挂载一个文件,而不是覆盖整个目录,因此需要声明挂载的文件名称
  39. volumes: #定义存储卷
  40. - name: kibana-config #定义存储卷的名称
  41. configMap: #存储卷的类型为configMap
  42. name: kibana-config #指定的configMap名称

3. kibana的svc

  1. [root@k8s-master elk]# cat kibana-svc.yaml
  2. apiVersion: v1
  3. kind: Service
  4. metadata:
  5. labels:
  6. k8s-app: es-kibana
  7. name: es-kibana
  8. namespace: elk-ns
  9. spec:
  10. ports:
  11. - port: 5601
  12. targetPort: 5601
  13. name: outer
  14. nodePort: 30002
  15. selector:
  16. k8s-app: es-kibana
  17. type: NodePort

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号