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

学习使人进步

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

目 录CONTENT

文章目录
k8s

k8s持久化存储GlusterFS

Administrator
2024-07-09 / 0 评论 / 0 点赞 / 134 阅读 / 7005 字

k8s持久化存储GlusterFS

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

### GlusterFS 集群安装和配置

#### 环境准备

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

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

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

sudo yum install centos-release-gluster

sudo yum install glusterfs-server

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

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

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 服务,并设置其在启动时自动启动:

sudo systemctl start glusterd

sudo systemctl enable glusterd


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

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

1. 在一个主机上创建卷

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

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 卷

启动新创建的卷:

sudo gluster volume start myvolume

3. 验证设置

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

sudo gluster volume info

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

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

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

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 文件中定义如下内容:

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 地址。

应用配置:

kubectl apply -f glusterfs-endpoints.yaml

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

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

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

  apiVersion: v1
  kind: PersistentVolume
  metadata:
    name: glusterfs-pv
  spec:
    capacity:
      storage: 1Gi
    accessModes:
      - ReadWriteMany
    glusterfs:
      endpoints: glusterfs-cluster
      path: /myvolume
      readOnly: false

应用配置:

kubectl apply -f glusterfs-pv.yaml

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

  apiVersion: v1
  kind: PersistentVolumeClaim
  metadata:
    name: glusterfs-pvc
  spec:
    accessModes:
      - ReadWriteMany
    resources:
      requests:
        storage: 1Gi

应用配置:

kubectl apply -f glusterfs-pvc.yaml

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

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

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:

kubectl exec -it mypod -- /bin/bash

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

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

3. 确认文件已创建:

cat /mnt/glusterfs/hello.txt

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

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

ls /data/brick1/gv0

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

cat /data/brick1/gv0/hello.txt

### 详细说明

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

### 高可用性验证

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

1. 停止一台 GlusterFS 服务器

sudo systemctl stop glusterd

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

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

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

### 总结

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

0

评论区