《Kubernetes部署篇:Kubernetes持久化部署elasticsearch7.15.0分布式集群》



一、背景

现阶段由于业务需要,我们需要在k8s集群中部署一个高可用的elasticsearch集群,数据需要进行持久化,经过再三考虑,决定使用nfs做为后端存储。


二、资源下载

Kubernetes持久化部署elasticsearch7.15.0分布式集群

资源目录如下图所示:
在这里插入图片描述
资源目录说明内容如下:

es3为3节点elasticsearch集群,3个节点分别为1个主节点,1个数据节点,1个客户端节点
es5为5节点elasticsearch集群,5个节点分别为3个主节点,1个数据节点,1个客户端节点
es7为7节点elasticsearch集群,7个节点分别为3个主节点,3个数据节点,1个客户端节点
images为elasticsearch7.15.0及busybox镜像文件
nfs为nfs-client实现stroagecalss的yaml资源文件及镜像文件

三、使用nfs-client实现storageclass

当前业务系统需要对监控的数据进行持久化存储,这里使用nfs作为动态storageClass存储,对prometheus监控数据进行持久化存储。


3.1、安装nfs服务端

说明:建议找一台单独且磁盘容量足够大的服务器作为nfs-server端。

# 1、安装nfs-server端
yum -y install nfs-utils rpcbind
systemctl start nfs && systemctl enable nfs
systemctl start rpcbind && systemctl enable rpcbind

# 3、创建共享目录
mkdir -p /data/volumes/{
    
    v1,v2,v3} 

# 3、编辑配置文件
cat > /etc/exports << EOF
/data/volumes/v1  192.168.1.0/24(rw,no_root_squash,no_all_squash)
/data/volumes/v2  192.168.1.0/24(rw,no_root_squash,no_all_squash)
/data/volumes/v3  192.168.1.0/24(rw,no_root_squash,no_all_squash)
EOF

# 4、发布
[root@k8s-client volumes]# exportfs -arv
exporting 192.168.1.0/24:/data/volumes/v1
exporting 192.168.1.0/24:/data/volumes/v2
exporting 192.168.1.0/24:/data/volumes/v3

# 5、查看
[root@k8s-client ~]# showmount -e 192.168.1.17
Export list for 192.168.1.17:
/data/volumes/v1 192.168.1.0/24
/data/volumes/v2 192.168.1.0/24
/data/volumes/v3 192.168.1.0/24

3.2、安装nfs客户端

说明:当前环境kubernetes集群master节点和worker节点则为nfs客户端。

# 客户端不需要创建共享目录和编辑配置文件,只安装服务就行
yum -y install nfs-utils

3.3、安装nfs插件

说明:具有kubectl权限的主机。

官方测试资源下载
NFS动态存储StorageClass资源清单文件

1、修改deployment.yaml文件
在这里插入图片描述
2、创建账号

扫描二维码关注公众号,回复: 14226375 查看本文章
kubectl create -f rbac.yaml

3、创建nfs-client

kubectl create -f deployment.yaml

4、创建nfs-client kubernetes storage class

kubectl create -f class.yaml

5、设置StorageClass为默认
说明:默认的 StorageClass 将被用于动态的为没有特定 storage class 需求的PersistentVolumeClaims 配置存储:(只能有一个默认StorageClass),如果没有默认StorageClass,PVC 也没有指定storageClassName 的值,那么意味着它只能够跟 storageClassName相同的PV进行绑定。

kubectl patch storageclass managed-nfs-storage -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

如下图所示:
在这里插入图片描述
6、测试pvc

[root@k8s-master-227 nfs]# kubectl apply -f test-claim.yaml

问题:创建的pvc一直处于pending状态
在这里插入图片描述
解决方案:分别在三个master节点上,修改/etc/kubernetes/manifests/kube-apiserver.yaml 文件,添加添加–feature-gates=RemoveSelfLink=false,当前kubernetes集群是使用kubeadm部署的,修改kube-apiserver.yaml 文件会自动重启apiserver服务,不用手动重启,如下图所示:
在这里插入图片描述
如下图所示,则表明pvc创建成功
在这里插入图片描述
7、测试pod

[root@k8s-master-227 nfs]# kubectl apply -f test-pod.yaml

如下图所示,则表示pod运行成功
在这里插入图片描述
查看nfs-server主机上共享目录/data/volumes/v1/,下面有SUCCESS文件
在这里插入图片描述


三、部署分布式elasticsearch7.15.0集群

3.1、elasticsearch集群节点说明

1、客户端节点:当主节点和数据节点配置都设置为false的时候,该节点只能处理路由请求,处理搜索,分发索引操作等,从本质上来说该客户节点表现为智能负载平衡器。独立的客户端节点在一个比较大的集群中是非常有用的,他协调主节点和数据节点,客户端节点加入集群可以得到集群的状态,根据集群的状态可以直接路由请求。
2、数据节点:数据节点主要是存储索引数据的节点,主要对文档进行增删改查操作,聚合操作等。数据节点对cpu,内存,io要求较高, 在优化的时候需要监控数据节点的状态,当资源不够的时候,需要在集群中添加新的节点。
3、主节点:主节点的主要职责是和集群操作相关的内容,如创建或删除索引,跟踪哪些节点是群集的一部分,并决定哪些分片分配给相关的节点。稳定的主节点对集群的健康是非常重要的,默认情况下任何一个集群中的节点都有可能被选为主节点,索引数据和搜索查询等操作会占用大量的cpu,内存,io资源,为了确保一个集群的稳定,分离主节点和数据节点是一个比较好的选择。

建议:在一个生产集群中我们可以对这些节点的职责进行划分,建议集群中设置3台以上的节点作为master节点,这些节点只负责成为主节点,维护整个集群的状态。再根据数据量设置一批data节点,这些节点只负责存储数据,后期提供建立索引和查询索引的服务,这样的话如果用户请求比较频繁,这些节点的压力也会比较大,所以在集群中建议再设置一批client节点(node.master: false node.data: false),这些节点只负责处理用户请求,实现请求转发,负载均衡等功能。


3.2、部署三节点分布式elasticsearch7.15.0集群

1、创建名称空间

[root@k8s-master-227 kubernete-logging]# kubectl create ns kube-elastic
namespace/kube-elastic created

2、执行yaml文件
在这里插入图片描述
3、生成elasticsearch集群密码
在这里插入图片描述
4、将elastic用户名和密码也添加到Kubernetes的Secret对象中

[root@k8s-master-227 kubernete-logging]# kubectl create secret generic elasticsearch-pw-elastic -n kube-elastic --from-literal password=gK3orwzGXZCTxzUo2QjR
secret/elasticsearch-pw-elastic created

5、获取默认用户名elastic的密码

[root@k8s-master-227 kubernete-logging]# kubectl get secrets elasticsearch-pw-elastic -n kube-elastic -o jsonpath='{.data}'
{
    
    "password":"Z0szb3J3ekdYWkNUeHpVbzJRalI="}
[root@k8s-master-227 kubernete-logging]# echo 'Z0szb3J3ekdYWkNUeHpVbzJRalI=' | base64 -d
gK3orwzGXZCTxzUo2QjR

6、访问elasticsearch集群
在这里插入图片描述


3.3、部署五节点分布式elasticsearch7.15.0集群

1、创建名称空间

[root@k8s-master-227 kubernete-logging]# kubectl create ns kube-elastic
namespace/kube-elastic created

2、执行yaml文件
在这里插入图片描述
3、生成elasticsearch集群密码
在这里插入图片描述
4、将elastic用户名和密码也添加到Kubernetes的Secret对象中

[root@k8s-master-227 kubernete-logging]# kubectl create secret generic elasticsearch-pw-elastic -n kube-elastic --from-literal password=41NKb0eO5lTzTUFnaQJ6
secret/elasticsearch-pw-elastic created

5、获取默认用户名elastic的密码

[root@k8s-master-227 kubernete-logging]# kubectl get secrets elasticsearch-pw-elastic -n kube-elastic -o jsonpath='{.data}'
{
    
    "password":"NDFOS2IwZU81bFR6VFVGbmFRSjY="}
[root@k8s-master-227 kubernete-logging]# echo 'NDFOS2IwZU81bFR6VFVGbmFRSjY=' | base64 -d
41NKb0eO5lTzTUFnaQJ6

6、访问elasticsearch集群
在这里插入图片描述


3.4、部署七节点分布式elasticsearch7.15.0集群

1、创建名称空间

[root@k8s-master-227 kubernete-logging]# kubectl create ns kube-elastic
namespace/kube-elastic created

2、执行yaml文件
在这里插入图片描述
3、生成elasticsearch集群密码
在这里插入图片描述
4、将elastic用户名和密码也添加到Kubernetes的Secret对象中

[root@k8s-master-227 kubernete-logging]# kubectl create secret generic elasticsearch-pw-elastic -n kube-elastic --from-literal password=T7GaAlGEcIYV40BODh2i
secret/elasticsearch-pw-elastic created

5、获取默认用户名elastic的密码

[root@k8s-master-227 kubernete-logging]# kubectl get secrets elasticsearch-pw-elastic -n kube-elastic -o jsonpath='{.data}'
{
    
    "password":"VDdHYUFsR0VjSVlWNDBCT0RoMmk="}
[root@k8s-master-227 kubernete-logging]# echo 'VDdHYUFsR0VjSVlWNDBCT0RoMmk=' | base64 -d
T7GaAlGEcIYV40BODh2i

6、访问elasticsearch集群
在这里插入图片描述


总结:整理不易,如果对你有帮助,可否点赞关注一下?

更多详细内容请参考:企业级K8s集群运维实战

猜你喜欢

转载自blog.csdn.net/m0_37814112/article/details/122965720