本篇文章介绍如何在k8s集群中部署elasticsearch单节点,以及如何使用NFS持久化es的数据
点击查看
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
name: elasticsearch
spec:
type: NodePort
ports:
- name: db
nodePort: 30920
port: 9200
protocol: TCP
targetPort: 9200
- name: transport
nodePort: 30930
port: 9300
protocol: TCP
targetPort: 9300
selector:
run: elasticsearch
status:
loadBalancer: {}
---
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
run: elasticsearch
name: elasticsearch
spec:
replicas: 1
selector:
matchLabels:
run: elasticsearch
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
run: elasticsearch
spec:
containers:
- env:
- name: discovery.type
value: single-node
image: docker.elastic.co/elasticsearch/elasticsearch:6.3.1
name: elasticsearch
ports:
- containerPort: 9200
name: db
protocol: TCP
- containerPort: 9300
name: tramsport
protocol: TCP
resources:
limits:
cpu: 500m
memory: 2Gi
requests:
cpu: 500m
memory: 2Gi
status: {}
[root@master elasticsearch]# kubectl apply -f pod.yml
service/elasticsearch created
deployment.apps/elasticsearch created
[root@master elasticsearch]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
elasticsearch NodePort 10.99.172.33 <none> 9200:30920/TCP,9300:30930/TCP 26m
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 7h36m
[root@master elasticsearch]# kubectl get pods
NAME READY STATUS RESTARTS AGE
elasticsearch-5f66d4cf58-2cftw 0/1 ContainerCreating 0 10s
[root@master elasticsearch]# kubectl get pods
NAME READY STATUS RESTARTS AGE
elasticsearch-5f66d4cf58-2cftw 1/1 Running 0 2m24s
此时用head工具连接集群任意节点ip:30920验证即可
[root@node1 ~]# showmount -e
Export list for node1:
/home/summer/elasticsearch/data *
[root@node1 ~]#
点击查看
apiVersion: v1
kind: PersistentVolume
metadata:
name: nes-pv
labels:
pv: nes-pv
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 1Gi
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs
nfs:
path: "/home/summer/elasticsearch/data"
server: 192.168.0.96
点击查看
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: nes-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: nfs
selector:
matchLabels:
pv: nes-pv
点击查看
apiVersion: v1
kind: Service
metadata:
name: elasticsearch
labels:
app: elasticsearch
spec:
type: NodePort
ports:
- name: db
nodePort: 30920
port: 9200
protocol: TCP
targetPort: 9200
- name: transport
nodePort: 30930
port: 9300
protocol: TCP
targetPort: 9300
selector:
app: elasticsearch
点击查看
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: elasticsearch
labels:
name: elasticsearch
spec:
serviceName: elasticsearch
replicas: 1
selector:
matchLabels:
app: elasticsearch
template:
metadata:
labels:
app: elasticsearch
spec:
containers:
- env:
- name: discovery.type
value: single-node
image: docker.elastic.co/elasticsearch/elasticsearch:6.3.1
name: elasticsearch
ports:
- containerPort: 9200
name: db
protocol: TCP
- containerPort: 9300
name: tramsport
protocol: TCP
resources:
limits:
cpu: 500m
memory: 2Gi
requests:
cpu: 500m
memory: 2Gi
volumeMounts:
- mountPath: /usr/share/elasticsearch/data/
name: vol-data
volumes:
- name: vol-data
persistentVolumeClaim:
claimName: nes-pvc
注意顺序,一般先创建PV,然后PVC申请PV资源,再创建服务与pod
[root@master ~]# kubectl create -f ${DIR}/elasticsearch/pv.yml
[root@master ~]# kubectl create -f ${DIR}/elasticsearch/pvc.yml
[root@master ~]# kubectl create -f ${DIR}/elasticsearch/service.yml
[root@master ~]# kubectl create -f ${DIR}/elasticsearch/pod.yml
[root@master ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
elasticsearch NodePort 10.110.160.63 <none> 9200:30920/TCP,9300:30930/TCP 42h
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
elasticsearch-0 1/1 Running 0 42h
[root@master ~]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
nes-pv 1Gi RWO Retain Bound default/nes-pvc nfs 46h
[root@master ~]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
nes-pvc Bound nes-pv 1Gi RWO nfs 46h
[root@master ~]#