ES
- Elasticsearch是一个分布式可扩展的实时搜索和分析引擎,有restful接口,设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
创建nfs存储类
mkdir es
cd es/
tee es-storageclass.yaml <<'EOF'
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: nfs
provisioner: example.com/nfs
EOF
部署ES
docker load -i busybox.tar.gz
docker load -i elasticsearch.tar.gz
kubectl create ns es
apiVersion: v1
kind: ConfigMap
metadata:
name: sirc-elasticsearch-config
namespace: es
labels:
app: elasticsearch
data: #具体挂载的配置文件
elasticsearch.yml: |+
cluster.name: es-test
#配置的集群名称,默认是elasticsearch,es服务会通过广播方式自动连接在同一网段下的es服务,通过多播方式进行通信,同一网段下可以有多个集群,通过集群名称这个属性来区分不同的集群。
node.name: ${MY_POD_NAME}
#环境变量,通过kubectl explain pod.spec.containers.env.valueFrom.fieldRef获取,当前配置所在机器的节点名,你不设置就默认随机指定一个name列表中名字,该name列表在es的jar包中config文件夹里name.txt文件中。当创建ES集群时,保证同一集群中的cluster.name名称是相同的,node.name节点名称是不同的。
path.data: /usr/share/elasticsearch/data
#设置索引数据的存储路径,默认是es根目录下的data文件夹,可以设置多个存储路径,用逗号隔开,例:path.data: /path/to/data1,/path/to/data2
path.logs: /usr/share/elasticsearch/logs
#设置日志文件的存储路径,默认是es根目录下的logs文件夹
network.host: 0.0.0.0 #全网地址
http.port: 9200 #设置对外服务的http端口,默认为9200。
transport.tcp.port: 9300 #设置节点之间交互的tcp端口,默认是9300。 如我搭建多节点,我的配置分别是9300、9302、9304
discovery.zen.ping.unicast.hosts: ["elasticsearch-0.elasticsearch-cluster.es:9300","elasticsearch-1.elasticsearch-cluster.es:9300","elasticsearch-2.elasticsearch-cluster.es:9300"]
#设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点。
node.master: true
#指定该节点是否有资格被选举成为node(注意这里只是设置成有资格, 不代表该node一定就是master),默认是true,es是默认集群中的第一台机器为master,如果这台机挂了就会重新选举master。
node.data: true #指定该节点是否存储索引数据,默认为true。
http.cors.enabled: true #支持跨域
http.cors.allow-origin: "*"
#当设置允许跨域,默认为*,表示支持所有域名,如果我们只是允许某些网站能访问,那么可以使用正则表达式。比如只允许本地地址。 /https?:\ /\ /localhost(:[0-9]+)?/
bootstrap.system_call_filter: false #启动进行系统检测
xpack.security.enabled: false #不用密码登录
indices.fielddata.cache.size: 60%
indices.queries.cache.size: 40%
- 创建StatefulSet,ES属于数据库类型的应用,此类应用适合StatefulSet类型
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: elasticsearch
namespace: es
spec:
serviceName: "elasticsearch-cluster" #填写没有IP的service
replicas: 3
selector:
matchLabels:
app: elasticsearch
template:
metadata:
labels:
app: elasticsearch
spec:
initContainers:
- name: fix-permissions
image: busybox
imagePullPolicy: IfNotPresent
command: ["sh", "-c", "chown -R 1000:1000 /usr/share/elasticsearch/data"]
securityContext:
privileged: true
volumeMounts:
- name: es-data
mountPath: /usr/share/elasticsearch/data
- name: increase-vm-max-map
image: busybox
imagePullPolicy: IfNotPresent
command: ["sysctl", "-w", "vm.max_map_count=262144"]
securityContext:
privileged: true
- name: increase-fd-ulimit
image: busybox
imagePullPolicy: IfNotPresent
command: ["sh", "-c", "ulimit -n 65536"]
securityContext:
privileged: true
containers:
- name: elasticsearch
image: docker.elastic.co/elasticsearch/elasticsearch:6.0.0
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9200
name: elasticsearch
env:
- name: MY_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name #metadata.name获取自己pod名称添加到变量MY_POD_NAME,status.hostIP获取自己ip等等可以自己去百度
- name: ES_JAVA_OPTS
value: "-Xms1g -Xmx1g"
volumeMounts:
- name: elasticsearch-config #挂载配置
mountPath: /usr/share/elasticsearch/config/elasticsearch.yml
subPath: elasticsearch.yml
- name: es-data #挂载数据
mountPath: /usr/share/elasticsearch/data
volumes:
- name: elasticsearch-config
configMap: #configMap挂载
name: sirc-elasticsearch-config
volumeClaimTemplates: #这步自动创建pvc,并挂载动态pv
- metadata:
name: es-data
spec:
accessModes: ["ReadWriteMany"]
storageClassName: nfs
resources:
requests:
storage: 1Gi
#创建Service
---
apiVersion: v1
kind: Service
metadata:
name: elasticsearch-cluster #无头服务的名称,需要通过这个获取ip,与主机的对应关系
namespace: es
labels:
app: elasticsearch
spec:
ports:
- port: 9200
name: elasticsearch
clusterIP: None
selector:
app: elasticsearch
---
apiVersion: v1
kind: Service
metadata:
name: elasticsearch #service服务的名称,向外暴露端口
namespace: es
labels:
app: elasticsearch
spec:
type: NodePort
selector:
app: elasticsearch
ports:
- port: 9200
name: elasticsearch
- 访问ES集群:任意node IP加NodePort