K8S部署ES集群

2023-10-09 01:31

1。使用 NFS 配置持久存储
1)在NFS服务器(172.16.60.238)上通过nfs创建es和filebeat共享目录
[root@k8s-harbor01 k8s]# mkdir -p /data/storage/k8s/es

  

2) 为 NFS 创建 rbac
[root@k8s-master01 k8s_project]# cd
[root@k8s-master01 ~]# cd /opt/k8s/k8s_project/
[root@k8s-master01 k8s_project]# mkdir elk
[root@k8s-master01 k8s_project]# cd elk/
[root@k8s-master01 elk]# vim nfs-rbac.yaml
---
api版本:v1
种类:服务帐户
元数据:
名称:nfs-provisioner
命名空间:wiseco
---
种类:集群角色
api版本:m.gsm-guard.net/v1
元数据:
名称:nfs-provisioner-runner
命名空间:wiseco
规则:
- api 组:[""]
资源:[“持久卷”]
动词:[“获取”、“列表”、“监视”、“创建”、“删除”]
- api 组:[""]
资源:[“持久卷声明”]
动词:[“获取”、“列表”、“观看”、“更新”]
- apiGroups:[“m.gsm-guard.net”]
资源:[“存储类”]
动词:[“获取”、“列表”、“观看”]- api 组:[""]
资源:[“事件”]
动词:[“观看”、“创建”、“更新”、“补丁”]
- api 组:[""]
资源:[“服务”,“端点”]
动词:[“获取”、“创建”、“列表”、“观看”、“更新”]
- apiGroups:[“扩展”]
资源:[“podsecuritypolicies”]
资源名称:[“nfs-provisioner”]
动词:[“使用”]
---
种类:ClusterRoleBinding
api版本:m.gsm-guard.net/v1
元数据:
名称:运行 nfs-provisioner
科目:
- 种类:服务帐户
名称:nfs-provisioner
命名空间:wiseco
角色参考:
种类:集群角色
名称:nfs-provisioner-runner
apiGroup:m.gsm-guard.net

创建和查看

[root@k8s-master01 elk]# kubectl apply -f nfs-rbac.yaml
已创建服务帐户/nfs-provisioner
创建 m.gsm-guard.net/nfs-provisioner-runner
创建 m.gsm-guard.net/run-nfs-provisioner
[root@k8s-master01 elk]# kubectl get sa -nwiseco|grep nfs
nfs-供应者 1 4s[root@k8s-master01 elk]# kubectl get clusterrole -nwiseco|grep nfs
nfs-provisioner-runner 2021-02-19T08:39:05Z
[root@k8s-master01 elk]# kubectl 获取集群角色绑定 -nwiseco|grep nfs
运行 nfs-provisioner ClusterRole/nfs-provisioner-runner

  

2。 ES集群部署
ES7.0+新版本放弃了原来的discovery.zen.ping.unicast.hosts和discovery.zen.minimum_master_nodes的检测方式,改为discovery.seed_hosts和cluster.initial_master_nodes。
1)创建es集群的存储
[root@k8s-master01 elk]# pwd
/opt/k8s/k8s_project/elk
[root@k8s-master01 elk]# mkdir es
[root@k8s-master01 elk]# cd es/
[root@k8s-master01 es]# vim es-nfs-class.yaml
api版本:m.gsm-guard.net/v1beta1
种类:存储类
元数据:
名称:es-nfs-存储
命名空间:wiseco
提供者:es/nfs
回收政策:保留

创建并查看

[root@k8s-master01 es]# kubectl apply -f es-nfs-class.yaml已创建 m.gsm-guard.net/es-nfs-storage
[root@k8s-master01 es]# kubectl get sc -nwiseco
名称配置程序回收策略卷绑定模式允许卷扩展年龄
es-nfs-storage es/nfs 保留立即 false 10s

  

2)创建es集群的nfs-client-provisioner
[root@k8s-master01 es]# vim es-nfs.yml
api版本:apps/v1
种类:部署
元数据:
名称:es-nfs-client-provisioner
命名空间:wiseco
规格:
副本:1
选择器:
匹配标签:
应用程序:es-nfs-client-provisioner
战略:
类型:重新创建
模板:
元数据:
标签:
应用程序:es-nfs-client-provisioner
规格:
服务帐户:nfs-provisioner
容器:
- 名称:es-nfs-client-provisioner
图片:m.gsm-guard.net/open-ali/nfs-client-provisioner
imagePullPolicy:IfNotPresent
体积安装:
- 名称:nfs-客户端-root
挂载路径:/persistentvolumes
环境:
- 名称:PROVISIONER_NAME
值:es/nfs- 名称:NFS_SERVER
值:172.16.60.238
- 名称:NFS_PATH
值:/数据/存储/k8s/es
卷:
- 名称:nfs-客户端-root
网络文件系统:
服务器:172.16.60.238
路径:/data/storage/k8s/es

创建并查看

[root@k8s-master01 es]# kubectl apply -f es-nfs.yml
创建了deployment.apps/es-nfs-client-provisioner
[root@k8s-master01 es]# kubectl get pods -nwiseco|grep nfs
es-nfs-client-provisioner-5c989d9b5-nkpdb 1/1 运行 0 4s

  

3)创建ES集群的镜像(jdk镜像、es镜像)
注:
ES 7.6.2启动要求jdk是java11以上版本,否则es启动时会报错:
Elasticsearch 的未来版本将需要 Java 11; [/usr/java/jdk1.8.0_192/jre] 中的 Java 版本不符合此要求
然后创建es集群的镜像
下载elasticsearch-7.6.2-linux-x86_64.tar.gz安装包,准备好elasticsearch.yml配置文件,将这两个文件一起放入镜像镜像中。
[root@k8s-master01 图片]# pwd
/opt/k8s/k8s_project/elk/es/images
[root@k8s-master01 图片]#ll
总计 0drwxr-xr-x 2 根 根 63 二月 20 16:11 jdk_images
[root@k8s-master01 images]# mkdir es_images/
[root@k8s-master01 图片]#ll
总计 0
drwxr-xr-x 2 根根 96 二月 20 15:49 es_images
drwxr-xr-x 2 根 根 63 二月 20 16:11 jdk_images
[root@k8s-master01 images]# cd es_images/
[root@k8s-master01 es_images]#
[root@k8s-master01 es_images]# wget https://m.gsm-guard.net/downloads/elasticsearch/elasticsearch-7.6.2-linux-x86_64.tar.gz
[root@k8s-master01 es_images]# ll
总计 289540
-rw-r--r-- 1 root root 718 二月 20 17:34 Dockerfile
-rw-r--r-- 1根根296477546 2020年3月31日elasticsearch-7.6.2-linux-x86_64.tar.gz
-rw-r--r-- 1 root root 448 二月 20 17:49 elasticsearch.yml
这里要注意:节点主机名必须使用正确解析的完全解析域名:pod名称.服务名称.命名空间名称.svc.cluster.local
[root@k8s-master01 es_images]# cat elasticsearch.yml
m.gsm-guard.net: es-cluster
节点名称:${MY_POD_NAME}.es-svc.wiseco.svc.cluster.local
路径.数据:/opt/elasticsearch-7.6.2/data路径.logs:/opt/elasticsearch-7.6.2/logs
网络主机:0.0.0.0
http.端口:9200
http.cors.enabled: true
http.cors.allow-origin: "*"
节点.master: true
节点数据:true
discovery.seed_hosts:[“es-0.es-svc.wiseco.svc.cluster.local”,“es-1.es-svc.wiseco.svc.cluster.local”,“m.gsm-guard.net-svc。 wiseco.svc.cluster.local"]
cluster.initial_master_nodes: ["es-0.es-svc.wiseco.svc.cluster.local","es-1.es-svc.wiseco.svc.cluster.local","m.gsm-guard.net-svc. wiseco.svc.cluster.local"]
镜像文件内容:
[root@k8s-master01 es_images]# cat Dockerfile
来自 172.16.60.238/wiseco/jdk13.0.2
运行 rm -f /etc/localtime \
&& ln -sv /usr/share/zoneinfo/Asia/上海 /etc/localtime \
&& echo "亚洲/上海" > /etc/timezone
ENV LANG en_US.UTF-8
添加elasticsearch-7.6.2-linux-x86_64.tar.gz /opt
运行 mkdir -p /opt/elasticsearch-7.6.2/data \
&& mkdir -p /opt/elasticsearch-7.6.2/logs \
&& 用户添加elasticsearch \
&& chown -R elasticsearch:elasticsearch /opt \
&& chmod -R 777 /opt \&& setfacl -R -m u:elasticsearch:rwx /opt \
&& setfacl -R -m u:elasticsearch:rwx /opt \
&& rm -f /opt/elasticsearch-7.6.2/config/elasticsearch.yml
复制 elasticsearch.yml /opt/elasticsearch-7.6.2/config/
用户弹性搜索
曝光 9200 9300
CMD [“/opt/elasticsearch-7.6.2/bin/elasticsearch”]

  

制作图片并上传到Harbor仓库
[root@k8s-master01 images]# docker build -t 172.16.60.238/wiseco/elasticsearch-7.6.2 .
[root@k8s-master01 images]# docker Push 172.16.60.238/wiseco/elasticsearch-7.6.2

  

4)部署ES集群容器
注:这里使用初始化容器来修改系统参数。
[root@k8s-master01 es]# pwd
/opt/k8s/k8s_project/elk/es
[root@k8s-master01 es]# mkdir 部署/
[root@k8s-master01 es]# cd 部署/
[root@k8s-master01 部署]#
[root@k8s-master01 部署]# cat es_cluster.yaml
api版本:v1
种类: 服务
元数据:
名称: es-svc
命名空间:wiseco
标签:
应用程序:es
规格:
端口:
- 端口:9200
目标端口:9200
名称:外
- 端口:9300目标端口:9300
名称:内
集群IP:无
选择器:
应用程序:es
---
api版本:apps/v1
种类:StatefulSet
元数据:
名称: es
命名空间:wiseco
规格:
服务名称:“es-svc”
副本:3
选择器:
匹配标签:
应用程序:es
模板:
元数据:
标签:
应用程序:es
规格:
亲和力:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- 标签选择器:
匹配表达式:
- 键:“应用程序”
运算符:In
价值观:
- es
拓扑键:“m.gsm-guard.net/hostname”
初始化容器:
- 名称:增加-vm-max-map
图片:busybox
命令:[“sysctl”,“-w”,“vm.max_map_count = 262144”]
安全上下文:
特权:真实
-名称:增加-fd-ulimit
图片:busybox
命令:[“sh”,“-c”,“ulimit -n 65536”]
安全上下文:
特权:真实
终止宽限期秒:60
容器:
- 名称:es
图片:172.16.60.238/wiseco/elasticsearch-7.6.2
imagePullPolicy:始终
端口:
- 集装箱端口:9200
名称:外
- 集装箱端口:9300
名称:内
环境:
- 名称:MY_POD_NAME
值来自:
字段参考:字段路径:元数据.名称
资源:
要求:
内存:1024Mi
中央处理器:500m
限制:
内存:2048Mi
中央处理器:1500m
生命周期:
开始后:
执行:
命令:[“/ bin / sh”,“-c”,“touch / tmp / health”]
活性探针:
执行:
命令:[“测试”,“-e”,“/tmp/health”]
初始延迟秒数:5
超时秒数:5
周期秒:10
准备情况探针:
tcp套接字:
端口:外端口
初始延迟秒数:15
超时秒数:5
周期秒:20
体积安装:
- 名称:es-日期
挂载路径:/opt/elasticsearch-7.6.2/data
- 名称:es-log
挂载路径:/opt/local/elasticsearch-7.6.2/logs
只读:假
卷:
- 名称:es-log
主机路径:
路径:/var/log/k8s-log/es
体积声明模板:
- 元数据:
名称:es-日期
注释:
m.gsm-guard.net/storage-class:“es-nfs-storage”
规格:
访问模式:
- 读写很多
资源:
要求:
存储:10Gi

创建和查看

[root@k8s-master01 部署]# kubectl apply -f es_cluster.yaml
已创建服务/es-svc
创建了 statefulset.apps/es[root@k8s-master01 部署]# kubectl get pods -nwiseco -o Wide
名称就绪状态重新启动年龄 IP 节点指定节点就绪门
es-0 1/1 运行 0 9m36s 172.30.85.230 k8s-node01  
es-1 1/1 运行 0 8m7s 172.30.217.85 k8s-node04  
es-2 1/1 运行 0 6m1s 172.30.135.154 k8s-node03  
[root@k8s-master01 部署]# kubectl get svc -nwiseco|grep es
es-svc ClusterIP 无  9200/TCP,9300/TCP 9m53s
入口-nginx NodePort 10.254.99.100  80:30080/TCP,443:30443/TCP 70d
[root@k8s-master01 部署]# kubectl get statefulset -nwiseco|grep es
es 3/3 10m

  

5) 查看 NFS 共享存储
NFS服务器(172.16.60.238),查看共享目录/data/storage/k8s/es
[root@k8s-harbor01 ~]# cd /data/storage/k8s/es/
[root@k8s-harbor01 es]# ll
总计 0
drwxrwxrwx 3根根2月21日19日21:36wiseco-es-date-es-0-pvc-3607865a-ae40-4eeb-aa04-cf5ddab1599f
drwxrwxrwx 3根根2月21日19日21:39wiseco-es-date-es-1-pvc-3c1e1329-73b1-4477-b6b1-0b2c63e702d2
drwxrwxrwx 3根根2月21日19日21:40wiseco-es-date-es-2-pvc-ecdff54e-2c28-4b33-8a5a-2e42c5b9c139
[root@k8s-harbor01 es]# ll ./*
./wiseco-es-date-es-0-pvc-3607865a-ae40-4eeb-aa04-cf5ddab1599f:
总计 0
drwxr-xr-x 3 1000 1000 2月21日15日 21:36 节点
./wiseco-es-date-es-1-pvc-3c1e1329-73b1-4477-b6b1-0b2c63e702d2:
总计 0
drwxr-xr-x 3 1000 1000 2月21日15日 21:39 节点
./wiseco-es-date-es-2-pvc-ecdff54e-2c28-4b33-8a5a-2e42c5b9c139:
总计 0
drwxr-xr-x 3 1000 1000 2月21日15日 21:40 节点

  

6) ES集群访问地址
ES集群在k8s中的内部访问地址:es-svc.wiseco.svc.cluster.local:9200
ES集群在k8s外部访问
需要配置ingress,提供域名供外部访问。例如:
[root@k8s-master01 ingress]# cat ingress.yml
api版本:扩展/v1beta1
种类: 入口
元数据:
名称:智慧入口
命名空间:wiseco
注释:
m.gsm-guard.net/ingress.class:“nginx”
规格:
规则:
- 主机:m.gsm-guard.net
http:
路径:
- 后端:
服务名称:es-svc
服务端口:9200

这样在K8S集群外访问这个ES集群,访问地址为:http://m.gsm-guard.net

7)ES集群连接及信息查看
可以登录其中一个es节点进行es集群访问测试
[root@k8s-master01 部署]# kubectl exec -ti es-0 -nwiseco --/bin/bash
[elasticsearch@es-0 /]$curl http://es-svc.wiseco.svc.cluster.local:9200
{
“名称”:“es-0.es-svc.wiseco.svc.cluster.local”,
"cluster_name" : "es-cluster",
"cluster_uuid": "K-AFavs-RaKjq60rMQG1WQ",
“版本” : {
“数字”:“7.6.2”,
"build_flavor" : "默认",
“构建类型”:“焦油”,“build_hash”:“ef48eb35cf30adf4db14086e8aabd07ef6fb113f”,
“构建日期”:“2020-03-26T06:34:37.794943Z”,
“build_snapshot”:假,
“lucene_version”:“8.4.0”,
"minimum_wire_compatibility_version": "6.8.0",
“minimum_index_compatibility_version”:“6.0.0-beta1”
},
"tagline" : "你知道,用于搜索"
}

  

查看ES集群状态

[elasticsearch@es-0 /]$curl -XGET“http://es-svc.wiseco.svc.cluster.local:9200/_cat/nodes”
172.30.135.154 11 54 2 0.13 0.31 0.25 迪尔姆 - es-2.es-svc.wiseco.svc.cluster.local
172.30.85.230 10 66 2 0.11 0.29 0.46 迪尔姆 * es-0.es-svc.wiseco.svc.cluster.local
172.30.217.85 6 65 1 0.22 0.21 0.21 迪尔姆 - es-1.es-svc.wiseco.svc.cluster.local
查看集群详细信息,后面添加“?v”
注:*号表示当前主节点
[elasticsearch@es-0 /]$ curl -XGET 'http://es-svc.wiseco.svc.cluster.local:9200/_cat/nodes?v'
ip             heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
172.30.135.154           12          54   2    0.09    0.29     0.25 dilm      -      es-2.es-svc.wiseco.svc.cluster.local
172.30.85.230            12          66   1    0.07    0.27     0.45 dilm      *      es-0.es-svc.wiseco.svc.cluster.local
172.30.217.85             8          65   3    0.22    0.21     0.21 dilm      -      es-1.es-svc.wiseco.svc.cluster.local
查询集群状态方法
[elasticsearch@es-0 /]$ curl -XGET 'http://es-svc.wiseco.svc.cluster.local:9200/_cluster/state/nodes?pretty'
{
"cluster_name" : "es-cluster",
"cluster_uuid" : "K-AFavs-RaKjq60rMQG1WQ",
"nodes" : {
"HTD4h0xZRcO3uypCzmxfpQ" : {
"name" : "es-2.es-svc.wiseco.svc.cluster.local",
"ephemeral_id" : "OyTHKFt9Ska6-XGp1ucRsQ",
"transport_address" : "172.30.135.154:9300",
"attributes" : {
"ml.machine_memory" : "8370167808",
"ml.max_open_jobs" : "20",
"xpack.installed" : "true"
}
},
"ZyL8_6pHTjOwLXCzJDRyVw" : {
"name" : "es-0.es-svc.wiseco.svc.cluster.local",
"ephemeral_id" : "JATRby-lTzicDZb9oBoqUQ",
"transport_address" : "172.30.85.230:9300",
"attributes" : {
"ml.machine_memory" : "8366628864",
"xpack.installed" : "true",
"ml.max_open_jobs" : "20"
}
},
"KGQQtVrqR0CeajjARZY4LQ" : {
"name" : "es-1.es-svc.wiseco.svc.cluster.local",
"ephemeral_id" : "5NKITiKTTMWUI0QAXXX6qg",
"transport_address" : "172.30.217.85:9300",
"attributes" : {
"ml.machine_memory" : "8370184192",
"ml.max_open_jobs" : "20",
"xpack.installed" : "true"
}
}
}
}
查询集群中的master(下面两个命令都可以)
[elasticsearch@es-0 /]$ curl -XGET 'http://es-svc.wiseco.svc.cluster.local:9200/_cluster/state/master_node?pretty'
{
"cluster_name" : "es-cluster",
"cluster_uuid" : "K-AFavs-RaKjq60rMQG1WQ",
"master_node" : "ZyL8_6pHTjOwLXCzJDRyVw"
}
[elasticsearch@es-0 /]$ curl -XGET 'http://es-svc.wiseco.svc.cluster.local:9200/_cat/master?v'
id                     host          ip            node
ZyL8_6pHTjOwLXCzJDRyVw 172.30.85.230 172.30.85.230 es-0.es-svc.wiseco.svc.cluster.local
查询集群的健康状态(一共三种状态:green、yellow,red;其中green表示健康)
下面两个命令都可以
[elasticsearch@es-0 /]$ curl -XGET 'http://es-svc.wiseco.svc.cluster.local:9200/_cat/health?v'
epoch      timestamp cluster    status m.gsm-guard.net m.gsm-guard.net shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1613915456 13:50:56  es-cluster green           3         3      0   0    0    0        0             0                  -                100.0%
[elasticsearch@es-0 /]$ curl -XGET 'http://es-svc.wiseco.svc.cluster.local:9200/_cluster/health?pretty'
{
"cluster_name" : "es-cluster",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 3,
"number_of_data_nodes" : 3,
"active_primary_shards" : 0,
"active_shards" : 0,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0
}