演示示例使用的是3.4.1,各版本有名字差异 功能是一样的
1.配置字典
名称:elasticsearch
键名:elasticsearch-conf
值:
network.host: 0.0.0.0
http.port: 9200
transport.port: 9300
# head 插件需要这打开这两个配置,解决跨域问题
http.cors.allow-origin: "*"
http.cors.enabled: true
http.max_content_length: 200mb
#关闭安全校验
xpack.security.enabled: false
#初始化数据恢复时,并发恢复线程的个数,默认 4 个
cluster.routing.allocation.node_initial_primaries_recoveries: 16
2.创建工作负载
名称:elasticsearch
这里使用的镜像是elasticsearch:7.17.15(镜像拉取不下来的自己想办法,这里用的是私有镜像仓库)
根据实际需要调整资源限制
使用默认镜像端口
勾选主机时区
配置环境变量
discovery.type=single-node
ES_JAVA_OPTS=-Xms1024m -Xmx1024m
single-node的配置是只es单节点配置,如果搭建集群,则配置需要修改
添加数据持久化
名称:elasticsearch-pvc
读写模式
容量:2Gb(根据实际需要自行调整)
读写:/usr/share/elasticsearch/data
挂载字典
选择第一步时添加的配置字典
模式:只读
路径:/usr/share/elasticsearch/config/elasticsearch.yml
子路径:elasticsearch.yml
选择特定键
elasticsearch.yml
一直下一步然后创建
创建好的工作负载yaml
kind: StatefulSet
apiVersion: apps/v1
metadata:
name: elasticsearch
namespace: gitee
labels:
app: elasticsearch
annotations:
kubesphere.io/creator: admin
spec:
replicas: 1
selector:
matchLabels:
app: elasticsearch
template:
metadata:
creationTimestamp: null
labels:
app: elasticsearch
annotations:
kubesphere.io/creator: admin
kubesphere.io/imagepullsecrets: '{"container-pfeuz6":"harbor"}'
logging.kubesphere.io/logsidecar-config: '{}'
spec:
volumes:
- name: host-time
hostPath:
path: /etc/localtime
type: ''
- name: volume-r7yv2y
configMap:
name: elasticsearch-conf
items:
- key: elasticsearch-conf
path: elasticsearch.yml
defaultMode: 420
containers:
- name: container-pfeuz6
image: '192.168.21.234:81/tools/elasticsearch:7.17.15'
ports:
- name: tcp-9200
containerPort: 9200
protocol: TCP
- name: tcp-9300
containerPort: 9300
protocol: TCP
env:
- name: discovery.type
value: single-node
- name: ES_JAVA_OPTS
value: '-Xms1024m -Xmx1024m'
resources:
limits:
cpu: '4'
memory: 2Gi
requests:
cpu: '2'
memory: 2Gi
volumeMounts:
- name: host-time
mountPath: /etc/localtime
- name: elasticsearch-pvc
mountPath: /usr/share/elasticsearch/data
- name: volume-r7yv2y
readOnly: true
mountPath: /usr/share/elasticsearch/config/elasticsearch.yml
subPath: elasticsearch.yml
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
imagePullPolicy: IfNotPresent
restartPolicy: Always
terminationGracePeriodSeconds: 30
dnsPolicy: ClusterFirst
serviceAccountName: default
serviceAccount: default
securityContext: {}
imagePullSecrets:
- name: harbor
schedulerName: default-scheduler
volumeClaimTemplates:
- kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: elasticsearch-pvc
namespace: gitee
creationTimestamp: null
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2Gi
storageClassName: local
volumeMode: Filesystem
status:
phase: Pending
serviceName: elasticsearch-rikg
podManagementPolicy: OrderedReady
updateStrategy:
type: RollingUpdate
rollingUpdate:
partition: 0
revisionHistoryLimit: 10
3.elasticsearch服务
默认创建的这个直接删掉(弹出的关联项目都不要勾选 仅删除服务!)
创建自定义服务
名称:elasticsearch
选择刚添加好的工作负载
端口号就是9200
高级设置
两种模式:
1、使用外部模式-NodePort
2、使用应用路由然后本地映射hosts进行访问
为了使用方便所以直接用的应用路由
创建
创建好的yaml
kind: Service
apiVersion: v1
metadata:
name: elasticsearch
namespace: gitee
labels:
app: elasticsearch
annotations:
kubesphere.io/creator: admin
spec:
ports:
- name: http-9200
protocol: TCP
port: 9200
targetPort: 9200
selector:
app: elasticsearch
clusterIP: 10.233.15.26
clusterIPs:
- 10.233.15.26
type: ClusterIP
sessionAffinity: None
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
internalTrafficPolicy: Cluster
4.应用路由
创建好的yaml
kind: Ingress
apiVersion: networking.k8s.io/v1
metadata:
name: elasticsearch
namespace: gitee
annotations:
kubesphere.io/creator: admin
spec:
rules:
- host: k8s.els.com
http:
paths:
- path: /
pathType: ImplementationSpecific
backend:
service:
name: elasticsearch
port:
number: 9200
修改hosts
集群ip 自定义域名
访问k8s.els.com出现一下信息标识els部署成功
5.部署Kibana
服务-无状态服务
名称:kibana
这里使用的是kibana:7.17.15版本
cpu、内存 根据情况分配
使用默认进行端口
同步主机时区
添加环境变量
ELASTICSEARCH_HOSTS=http://elasticsearch.gitee:9200
这个值并不是固定值而是根据实际情况取到的值,不知道怎么获取的往下继续看
找到服务中部署的elasticsearch
http://elasticsearch.gitee:9200
就是服务中的DNS加端点的端口号
至于DNS为什么是elasticsearch.gitee拆分出来就是,elasticsearch=服务名,gitee为项目名称
为什么kibana要填http://elasticsearch.gitee:9200这个路径呢,是因为k8s内部服务相互通信时可以直接通过服务进行内部访问
回到kibana中继续创建,一直下一步下一步 然后直接创建(这里没选外部端口是因为用域名访问更方便所以用应用路由)
创建应用路由
名称:kibana
域名:k8s.kibana.com
修改自己电脑的hosts访问k8s.kibana.com出现以下内容代表部署成功
补充:设置kibana为中文
- 添加配置字典
名称:kibana-conf
键:kibana-conf
值:
#
# ** THIS IS AN AUTO-GENERATED FILE **
#
# Default Kibana configuration for docker target
server.host: "0.0.0.0"
server.shutdownTimeout: "5s"
elasticsearch.hosts: [ "http://elasticsearch.gitee:9200" ]
i18n.locale: "zh-CN"
2. 修改kibana工作负载
挂载配置字典
3. 选择刚刚添加的配置字典
路径:/usr/share/kibana/config/kibana.yml
指定子路径:kibana.yml
特定值:kibana.yml
4. 等待重新部署成功