文章目錄
- 一、建立命名空間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
傳回值如下,表示建立成功

三、建立StorageClass
參考文章:K8S之持久卷(PV和PVC)
四、建立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
檢視叢集健康狀态:http://192.168.1.2:29200/_cat/health?v
七、部署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