赞
踩
link: k8s 部署NFS Provisioner设置动态存储-CSDN博客
link: K8s 部署filebeat 并收集 nginx 日志-CSDN博客
1、创建es命名空间
[root@k8s-master elk]# cat elk-ns.yaml
- apiVersion: v1
- kind: Namespace
- metadata:
- name: elk-ns
2、创建es configmap
vi es-config.yaml
- apiVersion: v1
- kind: ConfigMap
- metadata:
- name: elastic-config
- namespace: elk-ns
- data:
- elasticsearch.yml: |-
- cluster.name: es-cluster #设置集群的名称
- node.name: ${HOSTNAME} #设置节点的名称,无法为每个POD单独设置配置文件,因此采用POD环境变量来设置
- path.data: /data/elastic/data #数据存储路径
- http.port: 9200
- network.host: 0.0.0.0
- 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
- cluster.initial_master_nodes: ["es-cluster-0","es-cluster-1","es-cluster-2"]
- transport.tcp.port: 9300
- node.data: true
- node.master: true
- node.max_local_storage_nodes: 3
- discovery.zen.fd.ping_timeout: 120s
- discovery.zen.fd.ping_retries: 6
- discovery.zen.fd.ping_interval: 30s
- http.cors.enabled: true
- http.cors.allow-origin: "*"
3、创建ES statefulset
vi es-sts.yaml
- apiVersion: apps/v1 #api版本号
- kind: StatefulSet #控制器类型为statfulset
- metadata: #定义元数据
- labels: #定义标签
- k8s-app: es-cluster
- version: v7.17.15
- name: es-cluster #指定控制器名称
- namespace: elk-ns #指定资源所在的命名空间
- spec: #定义属性
- replicas: 3 #设置副本数
- selector: #定义标签选择器,指定去管理哪些pod
- matchLabels:
- k8s-app: es-cluster
- version: v7.17.15
- serviceName: es-cluster #指定servicename,也就是容器的主机名,第一个pod就是es-cluster-0以此类推
- template: #定义pod模板信息
- metadata: #定义元数据
- labels: #定义标签
- k8s-app: es-cluster
- version: v7.17.15
- spec: #定义pod的属性
- containers: #定义容器
- - name: es-cluster #容器的名称
- image: 192.168.178.137/elastic/elasticsearch:7.17.15 #镜像的版本号
- ports: #定义容器开放的端口号
- - containerPort: 9200
- name: db
- protocol: TCP
- - containerPort: 9300
- name: transport
- protocol: TCP
- env: #定义环境变量
- - name: ES_JAVA_OPTS #ES_JAVA_OPTS变量会替换对应配置文件中的内容
- value: "-Xms512m -Xmx512m"
- volumeMounts: #定义存储卷挂载
- - name: es-cluster-data #挂载卷的名称
- mountPath: /data/elastic/data # 挂载到容器的指定路径
- - name: elastic-config #挂载卷的名称
- mountPath: /usr/share/elasticsearch/config/elasticsearch.yml #挂载到容器的指定路径
- subPath: elasticsearch.yml #由于是只挂载一个文件,而不是覆盖整个目录,因此需要声明挂载的文件名称
- initContainers: #定义初始化容器,初始化容器在主容器启动执行进行系统调优
- - name: es-cluster-init #初始化容器的名称
- image: 192.168.178.137/elastic/alpine:v1 #初始化容器的版本号
- command: ["/sbin/sysctl","-w","vm.max_map_count=262144"] #初始化容器执行的命令,整个目录就是调整一个内核参数
- securityContext: #开启特权模式,如果不开启特权模式,容器将无权限执行命令
- privileged: true
- - name: es-cluster-permissions #定义第二个初始化容器的名称
- image: 192.168.178.137/elastic/alpine:v1 #初始化容器的版本号
- command: ["sh", "-c", "chown -R 1000:1000 /usr/share/elasticsearch/data"] #执行命令,这个命令主要是将主容器挂载的数据路径权限进行调整,否则主容器启动后无权限在里面写入数据
- securityContext: #开启特权模式
- privileged: true
- volumeMounts: #定义存储卷挂载,这里主要是将主容器挂载的存储首先挂载到初始化容器,权限调整后,主容器方可使用
- - name: es-cluster-data
- mountPath: /usr/share/elasticsearch/data
- volumes: #定义存储卷
- - name: elastic-config #定义存储卷的名称
- configMap: #存储卷的类型为configMap
- name: elastic-config #指定的configMap名称
- volumeClaimTemplates: #定义pvc模板,由于es是有状态的服务,每个pod都需要单独存储数据,因此需要使用StorageClass动态创建pv
- - metadata: #定义元数据
- name: es-cluster-data #定义pvc的名称,容器挂载pvc的名称要与这里的名称保持一致
- spec: #定义属性
- storageClassName: "managed-nfs-storage"
- #指定使用哪个StorageClass动态创建pv
- accessModes: #访问模式为多主机可读可写
- - ReadWriteMany
- resources: #设置存储卷的容量
- requests:
- storage: 10Gi
4、创建svc NodePort
vi es-svc.yaml
- apiVersion: v1
- kind: Service
- metadata:
- labels:
- k8s-app: es-cluster
- name: es-cluster
- namespace: elk-ns
- spec:
- ports:
- - port: 9200
- targetPort: 9200
- name: outer
- nodePort: 30001
- selector:
- k8s-app: es-cluster
- type: NodePort
检验集群
- # 检验集群
- [root@k8s-master elk]# curl 192.168.178.129:30001/_cat/nodes
- 10.244.1.67 29 65 1 0.79 0.63 0.42 cdfhilmrstw - es-cluster-0
- 10.244.2.105 59 73 3 0.41 0.47 0.38 cdfhilmrstw * es-cluster-1
- 10.244.0.56 39 96 6 1.08 1.11 0.95 cdfhilmrstw - es-cluster-2
1. kibana的配置文件
- [root@k8s-master elk]# cat kibana.yaml
- apiVersion: v1
- kind: ConfigMap
- metadata:
- name: kibana-config
- namespace: elk-ns
- data:
- kibana.yml: |-
- server.port: 5601
- server.host: ${POD_IP}
- i18n.locale: "zh-CN"
- 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
- [root@k8s-master elk]# cat kibana-deploy.yaml
- apiVersion: apps/v1 #api版本号
- kind: Deployment #控制器类型为depolyment
- metadata: #定义元数据
- labels: #定义标签
- k8s-app: es-kibana
- version: v7.17.15
- name: es-kibana #指定控制器名称
- namespace: elk-ns #指定资源所在的命名空间
- spec: #定义属性
- replicas: 1 #设置副本数
- selector: #定义标签选择器,指定去管理哪些pod
- matchLabels:
- k8s-app: es-kibana
- version: v7.17.15
- template: #定义pod模板信息
- metadata: #定义元数据
- labels: #定义标签
- k8s-app: es-kibana
- version: v7.17.15
- spec: #定义pod的属性
- containers: #定义容器
- - name: es-kibana #容器的名称
- image: 192.168.178.137/elastic/kibana:7.17.15 #镜像的版本号
- # command: ["/bin/bash","-ce","tail -f /dev/null"]
- ports: #定义容器开放的端口号
- - containerPort: 5601
- name: kibana
- protocol: TCP
- env:
- - name: POD_IP #定义一个PODIP的环境变量,用于configmap调用
- valueFrom:
- fieldRef:
- fieldPath: status.podIP
- volumeMounts: #定义存储卷挂载
- - name: kibana-config #挂载卷的名称
- mountPath: /usr/share/kibana/config/kibana.yml #挂载到容器的指定路径
- subPath: kibana.yml #由于是只挂载一个文件,而不是覆盖整个目录,因此需要声明挂载的文件名称
- volumes: #定义存储卷
- - name: kibana-config #定义存储卷的名称
- configMap: #存储卷的类型为configMap
- name: kibana-config #指定的configMap名称
3. kibana的svc
- [root@k8s-master elk]# cat kibana-svc.yaml
- apiVersion: v1
- kind: Service
- metadata:
- labels:
- k8s-app: es-kibana
- name: es-kibana
- namespace: elk-ns
- spec:
- ports:
- - port: 5601
- targetPort: 5601
- name: outer
- nodePort: 30002
- selector:
- k8s-app: es-kibana
- type: NodePort
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。