侧边栏壁纸
博主头像
CYC的个人博客博主等级

学习使人进步

  • 累计撰写 99 篇文章
  • 累计创建 11 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录
k8s

k8s持久化存储GlusterFS

Administrator
2024-07-09 / 0 评论 / 0 点赞 / 121 阅读 / 7510 字

k8s持久化存储GlusterFS

理解!我们来完善一下关于 GlusterFS 集群安装和如何结合 Kubernetes 使用的步骤。

### GlusterFS 集群安装和配置

#### 环境准备

假设你有三台运行 CentOS 7 的主机:`server1`、`server2` 和 server3。它们将用于构建一个 GlusterFS 高可用性集群。

#### 步骤 1: 安装 GlusterFS 软件包

在每台主机上安装 GlusterFS 软件包:

```bash

sudo yum install centos-release-gluster

sudo yum install glusterfs-server

```

#### 步骤 2: 配置防火墙

确保在每台主机上打开 GlusterFS 所需的端口:

```bash

sudo firewall-cmd --zone=public --add-port=24007-24008/tcp --permanent

sudo firewall-cmd --zone=public --add-port=24009/tcp --permanent

sudo firewall-cmd --zone=public --add-port=49152-49153/tcp --permanent

sudo firewall-cmd --reload

```

#### 步骤 3: 启动并设置 GlusterFS 服务

在每台主机上启动 GlusterFS 服务,并设置其在启动时自动启动:

```bash

sudo systemctl start glusterd

sudo systemctl enable glusterd


# 添加节点到 集群
# 执行操作的本机不需要probe 本机
gluster peer probe node1
gluster peer probe node2

#### 步骤 4: 创建和配置 GlusterFS 卷

1. 在一个主机上创建卷

server1 上创建一个 GlusterFS 卷,并添加其他两台主机到卷中:

```bash

sudo gluster volume create myvolume replica 3 transport tcp \

server1:/data/brick1/gv0 \

server2:/data/brick1/gv0 \

server3:/data/brick1/gv0

```

- myvolume 是卷的名称。

- replica 3 指定了复制因子为 3,确保数据的冗余性。

- transport tcp 指定使用 TCP 传输。

2. 启动 GlusterFS 卷

启动新创建的卷:

```bash

sudo gluster volume start myvolume

```

3. 验证设置

确保卷已正确创建并处于运行状态:

```bash

sudo gluster volume info

```

输出应显示卷的详细信息,包括状态和副本信息。

#### 步骤 5: 挂载 GlusterFS 卷

在需要访问 GlusterFS 卷的系统上,挂载它:

```bash

sudo mkdir /mnt/glusterfs

sudo mount -t glusterfs server1:/myvolume /mnt/glusterfs

vim /etc/fstab

192.168.1.244:/myvolume /mnt/glusterfs glusterfs defaults,_netdev 0 0

```

### 结合 Kubernetes 使用 GlusterFS

现在,我们将了解如何在 Kubernetes 集群中使用 GlusterFS。

#### 步骤 1: 配置 GlusterFS Endpoints

为了让 Kubernetes 访问 GlusterFS 卷,我们需要创建一个 Kubernetes Endpoint 对象来表示 GlusterFS 服务。在 glusterfs-endpoints.yaml 文件中定义如下内容:

```yaml

apiVersion: v1

kind: Endpoints

metadata:

name: glusterfs-cluster

subsets:

- addresses:

- ip: server1-ip

- ip: server2-ip

- ip: server3-ip

ports:

- port: 24007

name: glusterfs

```

替换 server1-ip、`server2-ip` 和 server3-ip 为你的 GlusterFS 服务器的 IP 地址。

应用配置:

```bash

kubectl apply -f glusterfs-endpoints.yaml

```

#### 步骤 2: 创建 PersistentVolume (PV) 和 PersistentVolumeClaim (PVC)

在 Kubernetes 中,创建 PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) 来管理 GlusterFS 卷的访问。

- 创建 PersistentVolume (PV),在 glusterfs-pv.yaml 文件中定义如下内容:

```yaml

apiVersion: v1

kind: PersistentVolume

metadata:

name: glusterfs-pv

spec:

capacity:

storage: 1Gi

accessModes:

- ReadWriteMany

glusterfs:

endpoints: glusterfs-cluster

path: /myvolume

readOnly: false

```

应用配置:

```bash

kubectl apply -f glusterfs-pv.yaml

```

- 创建 PersistentVolumeClaim (PVC),在 glusterfs-pvc.yaml 文件中定义如下内容:

```yaml

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

name: glusterfs-pvc

spec:

accessModes:

- ReadWriteMany

resources:

requests:

storage: 1Gi

```

应用配置:

```bash

kubectl apply -f glusterfs-pvc.yaml

```

#### 步骤 3: 在 Pod 中使用 PersistentVolumeClaim (PVC)

现在可以在 Kubernetes Pod 的配置中引用上面创建的 PVC (`glusterfs-pvc`),以便使用 GlusterFS 提供的存储。

```yaml

apiVersion: v1

kind: Pod

metadata:

name: mypod

spec:

containers:

- name: mycontainer

image: nginx

volumeMounts:

- mountPath: "/mnt/glusterfs"

name: glusterfs-volume

volumes:

- name: glusterfs-volume

persistentVolumeClaim:

claimName: glusterfs-pvc

```

### 总结

通过以上步骤,你已经完成了 GlusterFS 集群的安装、配置,并成功将其集成到 Kubernetes 中作为持久化存储。确保根据你的实际环境和需求进行适当调整和配置。

在 Kubernetes Pod 中使用 GlusterFS 作为存储后,任何写入到挂载路径(在此例中为 /mnt/glusterfs)的数据都会存储到 GlusterFS 卷中。你可以通过在 GlusterFS 服务器上查看数据来验证这一点。

### 验证在 GlusterFS 中的数据

假设你的 GlusterFS 卷路径为 /data/brick1/gv0,这是在创建 GlusterFS 卷时指定的路径。

#### 在 Pod 中写入数据

首先,我们在 Pod 中创建一个文件以确认数据写入 GlusterFS。

1. 进入 Pod:

```bash

kubectl exec -it mypod -- /bin/bash

```

2. 在挂载的 GlusterFS 路径中创建一个文件:

```bash

echo "Hello, GlusterFS!" > /mnt/glusterfs/hello.txt

```

3. 确认文件已创建:

```bash

cat /mnt/glusterfs/hello.txt

```

#### 在 GlusterFS 服务器上查看数据

1. 在任何一台 GlusterFS 服务器上,导航到对应的砖路径(brick path),假设路径为 /data/brick1/gv0

```bash

ls /data/brick1/gv0

```

2. 你应该能看到在 Pod 中创建的文件 hello.txt

```bash

cat /data/brick1/gv0/hello.txt

```

### 详细说明

每当在 Pod 中写入数据到 /mnt/glusterfs,数据都会被写入到 GlusterFS 卷中。由于 GlusterFS 提供了数据冗余,每个副本都会保存一份数据。因此,在任意一台 GlusterFS 服务器上,都可以看到相同的数据。

### 高可用性验证

由于 GlusterFS 提供高可用性和数据冗余,任意一台服务器故障后,数据仍然可以从其他副本中获取。你可以通过以下步骤验证:

1. 停止一台 GlusterFS 服务器

```bash

sudo systemctl stop glusterd

```

2. 再次访问 Pod 并读取文件

```bash

kubectl exec -it mypod -- cat /mnt/glusterfs/hello.txt

```

即使一台服务器停止,数据仍然可用,因为 Kubernetes 会通过其他副本访问 GlusterFS。

### 总结

在 Pod 中使用 GlusterFS 存储后,所有的数据操作(如文件的创建、读取、写入等)都将反映在 GlusterFS 中。通过在 GlusterFS 服务器上查看数据,可以验证数据的持久化和高可用性。

0

评论区