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 服务器上查看数据,可以验证数据的持久化和高可用性。
评论区