天天看點

k8s部署es叢集和kibana

文章目錄

  • ​​一、建立命名空間elk​​
  • ​​二、安裝NFS​​
  • ​​三、建立StorageClass​​
  • ​​四、建立es有狀态服務es-cluster.yaml​​
  • ​​五、建立es服務es-service.yaml​​
  • ​​六、檢查es叢集​​
  • ​​七、部署kibana​​
  • ​​八、通路kibana​​
  • ​​九、參考文章​​

一、建立命名空間elk

kubectl create ns elk      

二、安裝NFS

ubuntu16.04.4 部署NFS共享

mkdir /nfs_data/es
chmod -R 777 /nfs_data/es
vim /etc/exports
#添加如下内容
/nfs_data/es    192.168.0.0/16(rw,sync,no_subtree_check,no_root_squash)

#重新開機nfs
systemctl restart nfs

#檢視共享目錄
showmount -e 192.168.1.2      

傳回值如下,表示建立成功

k8s部署es叢集和kibana

三、建立StorageClass

參考文章:K8S之持久卷(PV和PVC)

k8s部署es叢集和kibana

四、建立es有狀态服務es-cluster.yaml

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: es-cluster
  namespace: elk
spec:
  # 必須設定
  serviceName: es-cluster-svc
  replicas: 3
  selector:
    # 設定标簽
    matchLabels:
      app: es-cluster
  template:
    metadata:
      # 此處必須要與上面的matchLabels相同
      labels:
        app: es-cluster
    spec:
      # 初始化容器
      # 初始化容器的作用是在應用容器啟動之前做準備工作,每個init容器都必須在下一個啟動之前成功完成
      initContainers:
        - name: increase-vm-max-map
          image: busybox:1.32
          command: ["sysctl", "-w", "vm.max_map_count=262144"]
          securityContext:
            privileged: true
        - name: increase-fd-ulimit
          image: busybox:1.32
          command: ["sh", "-c", "ulimit -n 65536"]
          securityContext:
            privileged: true

      # 初始化容器結束後,才能繼續建立下面的容器
      containers:
        - name: es-container
          image: elasticsearch:7.9.1
          ports:
            # 容器内端口
            - name: rest
              containerPort: 9200
              protocol: TCP

          # 限制CPU數量
          resources:
            limits:
              memory: 1536Mi
              cpu: 1000m
            requests:
              cpu: 100m
              memory: 1536Mi
          # 設定挂載目錄
          volumeMounts:
            - name: es-data
              mountPath: /usr/share/elasticsearch/data
            - name: es-plugins
              mountPath: /usr/share/elasticsearch/plugins

          # 設定環境變量
          env:
            # 自定義叢集名
            - name: cluster.name
              value: k8s-es
            # 定義節點名,使用metadata.name名稱
            - name: node.name
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            # 初始化叢集時,ES從中選出master節點
            - name: cluster.initial_master_nodes
              # 對應metadata.name名稱加編号,編号從0開始
              value: "es-cluster-0,es-cluster-1,es-cluster-2"
            - name: discovery.zen.minimum_master_nodes
              value: "2"

            # 發現節點的位址,discovery.seed_hosts的值應包括所有master候選節點
            # 如果discovery.seed_hosts的值是一個域名,且該域名解析到多個IP位址,那麼es将處理其所有解析的IP位址。
            - name: discovery.seed_hosts
              value: "es-cluster-0.es-cluster-svc,es-cluster-1.es-cluster-svc,es-cluster-2.es-cluster-svc"
            # 配置記憶體
            - name: ES_JAVA_OPTS
              value: "-Xms512m -Xmx512m"
            - name: network.host
              value: "0.0.0.0"

  volumeClaimTemplates:
    - metadata:
        # 對應容器中volumeMounts.name
        name: es-data
        labels:
          app: es-volume
      spec:
        # 存儲卷可以被單個節點讀寫
        accessModes: [ "ReadWriteOnce" ]

        # 對應es-nfs-storage-class.yaml中的metadata.name
        storageClassName: managed-nfs-storage

        # 申請資源的大小
        resources:
          requests:
            storage: 10Gi
    - metadata:
        # 對應容器中volumeMounts.name
        name: es-plugins
      spec:
        # 存儲卷可以被單個節點讀寫
        accessModes: [ "ReadWriteOnce" ]

        # 對應es-nfs-storage-class.yaml中的metadata.name
        storageClassName: managed-nfs-storage
        # 申請資源的大小
        resources:
          requests:
            storage:      

五、建立es服務es-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: es-cluster-svc
  namespace: elk
spec:
  selector:
    # 注意一定要與"es-cluster.yaml"中spec.selector.matchLabels相同
    app: es-cluster

  # 設定服務類型
  type: NodePort
  ports:
    - name: rest
      # 服務端口
      port: 9200
      # 應用端口(Pod端口)
      targetPort: 9200
      # 映射到主機的端口,端口範圍是30000~32767
      nodePort: 29200      

六、檢查es叢集

檢視叢集節點:http://192.168.1.2:29200/_cat/nodes?v

k8s部署es叢集和kibana

檢視叢集健康狀态:http://192.168.1.2:29200/_cat/health?v

k8s部署es叢集和kibana

七、部署kibana

apiVersion: apps/v1
kind: Deployment
metadata:
  name: kibana
  namespace: elk
spec:
  selector:
    matchLabels:
      app: kibana
  replicas: 1
  template:
    metadata:
      labels:
        app: kibana
    spec:
      restartPolicy: Always
      containers:
        - name: kibana
          image: kibana:7.9.1
          imagePullPolicy: Always
          ports:
            - containerPort: 5601
          env:
            - name: ELASTICSEARCH_HOSTS
              value: http://es-cluster-svc:9200
            - name: I18N.LOCALE
              value: zh-CN    #漢化
          resources:
            requests:
              memory: 1024Mi
              cpu: 50m
            limits:
              memory: 1024Mi
              cpu: 1000m
---
apiVersion: v1
kind: Service
metadata:
  name: kibana
  namespace: elk
spec:
  type: NodePort
  ports:
    - name: kibana
      port: 5601
      targetPort: 5601
      nodePort: 25601
  selector:
    app:      

八、通路kibana

​​http://192.168.1.2:25601​​

九、參考文章

繼續閱讀