kubernetes實踐之二十六:GlusterFS
一:前言
GlusterFS是Scale-Out儲存解決方案Gluster的核心,它是一個開源的分散式檔案系統,具有強大的橫向擴充套件能力,透過擴充套件能夠支援數PB儲存容量和處理數千客戶端。GlusterFS藉助TCP/IP或InfiniBand RDMA網路將物理分佈的儲存資源聚集在一起,使用單一全域性名稱空間來管理資料。GlusterFS基於可堆疊的使用者空間設計,可為各種不同的資料負載提供優異的效能。
伺服器:
10.116.137.196 k8s_master
10.116.82.28 k8s_node1
10.116.36.57 k8s_node2
二:安裝glusterfs
我們直接在物理機上使用yum安裝,在三臺伺服器上分別執行以下安裝命令。
1.先安裝 gluster 源
yum install centos-release-gluster -y
2.安裝 glusterfs 元件
yum install -y glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma glusterfs-geo-replication glusterfs-devel
3.建立 glusterfs 目錄
mkdir /mnt/glusterd
4.修改 glusterd 目錄
5.啟動glusterfs
systemctl enable glusterd.service
systemctl start glusterd.service
systemctl status glusterd.service
三:配置 glusterfs
1.開放埠
iptables -I INPUT -p tcp --dport 24007 -j ACCEPT
2.建立儲存目錄
mkdir /opt/gfs_data
3.新增節點到叢集
在10.116.137.196上執行以下操作:
gluster peer probe 10.116.82.28
gluster peer probe 10.116.36.57
4.檢視叢集狀態
gluster peer status
四:配置 volume
1.volume的模式
a.分佈卷(預設模式):即DHT, 也叫 分佈卷: 將檔案已hash演算法隨機分佈到 一臺伺服器節點中儲存。
b.複製模式:即AFR, 建立volume 時帶 replica x 數量: 將檔案複製到 replica x 個節點中。
c.條帶模式:即Striped, 建立volume 時帶 stripe x 數量: 將檔案切割成資料塊,分別儲存到 stripe x 個節點中 ( 類似raid 0 )。
d.分散式條帶模式:最少需要4臺伺服器才能建立。 建立volume 時 stripe 2 server = 4 個節點: 是DHT 與 Striped 的組合型。
e.分散式複製模式:最少需要4臺伺服器才能建立。 建立volume 時 replica 2 server = 4 個節點:是DHT 與 AFR 的組合型。
f.條帶複製卷模式:最少需要4臺伺服器才能建立。 建立volume 時 stripe 2 replica 2 server = 4 個節點: 是 Striped 與 AFR 的組合型。
g.三種模式混合: 至少需要8臺 伺服器才能建立。 stripe 2 replica 2 , 每4個節點 組成一個 組。
2.建立分佈卷
gluster volume create k8s-volume transport tcp 10.116.137.196:/mnt/gfs_data 10.116.82.28:/mnt/gfs_data 10.116.36.57:/mnt/gfs_data force
3.檢視volume狀態
gluster volume info
4.啟動分佈卷
gluster volume start k8s-volume
五:Glusterfs調優
1.開啟指定volume的配額
gluster volume quota k8s-volume enable
2.限制指定volume的配額
gluster volume quota k8s-volume limit-usage / 5GB
3.設定cache大小, 預設32MB
gluster volume set k8s-volume performance.cache-size 64MB
4.設定io執行緒, 太大會導致程式崩潰
gluster volume set k8s-volume performance.io-thread-count 16
5.設定網路檢測時間, 預設42s
gluster volume set k8s-volume network.ping-timeout 10
6.設定寫緩衝區的大小, 預設1M
gluster volume set k8s-volume performance.write-behind-window-size 512MB
六:Kubernetes中配置glusterfs
1.配置 endpoints(glusterfs-endpoints.json)
kubectl apply -f glusterfs-endpoints.json
2.配置 service(glusterfs-service.json)
kubectl apply -f glusterfs-service.json
3.建立測試 pod
kubectl apply -f glusterfs-pod.json 在Pod所在的Node節點上執行 df -h 可以檢視k8s-volume掛載目錄
4.配置PersistentVolume(glusterfs-pv.yaml)
kubectl apply -f glusterfs-pv.yaml
5.配置PVC(glusterfs-pvc.yaml)
kubectl apply -f glusterfs-pvc.yaml
6.建立nginx deployment 掛載 volume(nginx-deployment.yaml)
kubectl apply -f nginx-deployment.yaml
a.檢視 deployment
kubectl get pods |grep nginx-dm
b.檢視掛載
kubectl exec -it nginx-dm-64dcbb8d55-pp9vn -- df -h
c.建立檔案測試
kubectl exec -it nginx-dm-64dcbb8d55-pp9vn -- touch /usr/share/nginx/html/index.html
kubectl exec -it nginx-dm-64dcbb8d55-sclj6 -- ls -lt /usr/share/nginx/html/index.html
d.驗證 glusterfs
因為我們使用分佈卷,所以可以看到某個節點中有檔案
ls /mnt/gfs_data/
index.html
GlusterFS是Scale-Out儲存解決方案Gluster的核心,它是一個開源的分散式檔案系統,具有強大的橫向擴充套件能力,透過擴充套件能夠支援數PB儲存容量和處理數千客戶端。GlusterFS藉助TCP/IP或InfiniBand RDMA網路將物理分佈的儲存資源聚集在一起,使用單一全域性名稱空間來管理資料。GlusterFS基於可堆疊的使用者空間設計,可為各種不同的資料負載提供優異的效能。
伺服器:
10.116.137.196 k8s_master
10.116.82.28 k8s_node1
10.116.36.57 k8s_node2
二:安裝glusterfs
我們直接在物理機上使用yum安裝,在三臺伺服器上分別執行以下安裝命令。
1.先安裝 gluster 源
yum install centos-release-gluster -y
2.安裝 glusterfs 元件
yum install -y glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma glusterfs-geo-replication glusterfs-devel
3.建立 glusterfs 目錄
mkdir /mnt/glusterd
4.修改 glusterd 目錄
點選(此處)摺疊或開啟
-
volume management
-
type mgmt/glusterd
-
option working-directory /mnt/glusterd
-
option transport-type socket,rdma
-
option transport.socket.keepalive-time 10
-
option transport.socket.keepalive-interval 2
-
option transport.socket.read-fail-log off
-
option ping-timeout 0
-
option event-threads 1
-
# option lock-timer 180
-
# option transport.address-family inet6
-
# option base-port 49152
- end-volume
systemctl enable glusterd.service
systemctl start glusterd.service
systemctl status glusterd.service
三:配置 glusterfs
1.開放埠
iptables -I INPUT -p tcp --dport 24007 -j ACCEPT
2.建立儲存目錄
mkdir /opt/gfs_data
3.新增節點到叢集
在10.116.137.196上執行以下操作:
gluster peer probe 10.116.82.28
gluster peer probe 10.116.36.57
4.檢視叢集狀態
gluster peer status
點選(此處)摺疊或開啟
-
Number of Peers: 2
-
-
Hostname: 10.116.82.28
-
Uuid: f73138ca-e32e-4d87-a99d-cf842fc29447
-
State: Peer in Cluster (Connected)
-
-
Hostname: 10.116.36.57
-
Uuid: 18e22d2c-049b-4b0c-8cc7-2560319e6c05
-
State: Peer in Cluster (Connected)
-
[root@iZwz95trb3stk6afg8oozuZ kubernetes]# clear
-
[root@iZwz95trb3stk6afg8oozuZ kubernetes]# gluster volume create k8s-volume transport tcp 10.116.137.196:/mnt/gfs_data 10.116.82.28:/mnt/gfs_data 10.116.36.57:/mnt/gfs_data force
-
volume create: k8s-volume: success: please start the volume to access data
-
[root@iZwz95trb3stk6afg8oozuZ kubernetes]# gluster volume info
-
-
Volume Name: k8s-volume
-
Type: Distribute
-
Volume ID: 62900029-02c9-4870-951c-38fafd5f5d9b
-
Status: Created
-
Snapshot Count: 0
-
Number of Bricks: 3
-
Transport-type: tcp
-
Bricks:
-
Brick1: 10.116.137.196:/mnt/gfs_data
-
Brick2: 10.116.82.28:/mnt/gfs_data
-
Brick3: 10.116.36.57:/mnt/gfs_data
-
Options Reconfigured:
-
transport.address-family: inet
- nfs.disable: on
四:配置 volume
1.volume的模式
a.分佈卷(預設模式):即DHT, 也叫 分佈卷: 將檔案已hash演算法隨機分佈到 一臺伺服器節點中儲存。
b.複製模式:即AFR, 建立volume 時帶 replica x 數量: 將檔案複製到 replica x 個節點中。
c.條帶模式:即Striped, 建立volume 時帶 stripe x 數量: 將檔案切割成資料塊,分別儲存到 stripe x 個節點中 ( 類似raid 0 )。
d.分散式條帶模式:最少需要4臺伺服器才能建立。 建立volume 時 stripe 2 server = 4 個節點: 是DHT 與 Striped 的組合型。
e.分散式複製模式:最少需要4臺伺服器才能建立。 建立volume 時 replica 2 server = 4 個節點:是DHT 與 AFR 的組合型。
f.條帶複製卷模式:最少需要4臺伺服器才能建立。 建立volume 時 stripe 2 replica 2 server = 4 個節點: 是 Striped 與 AFR 的組合型。
g.三種模式混合: 至少需要8臺 伺服器才能建立。 stripe 2 replica 2 , 每4個節點 組成一個 組。
2.建立分佈卷
gluster volume create k8s-volume transport tcp 10.116.137.196:/mnt/gfs_data 10.116.82.28:/mnt/gfs_data 10.116.36.57:/mnt/gfs_data force
3.檢視volume狀態
gluster volume info
點選(此處)摺疊或開啟
-
Volume Name: k8s-volume
-
Type: Distribute
-
Volume ID: 62900029-02c9-4870-951c-38fafd5f5d9b
-
Status: Created
-
Snapshot Count: 0
-
Number of Bricks: 3
-
Transport-type: tcp
-
Bricks:
-
Brick1: 10.116.137.196:/mnt/gfs_data
-
Brick2: 10.116.82.28:/mnt/gfs_data
-
Brick3: 10.116.36.57:/mnt/gfs_data
-
Options Reconfigured:
-
transport.address-family: inet
- nfs.disable: on
gluster volume start k8s-volume
五:Glusterfs調優
1.開啟指定volume的配額
gluster volume quota k8s-volume enable
2.限制指定volume的配額
gluster volume quota k8s-volume limit-usage / 5GB
3.設定cache大小, 預設32MB
gluster volume set k8s-volume performance.cache-size 64MB
4.設定io執行緒, 太大會導致程式崩潰
gluster volume set k8s-volume performance.io-thread-count 16
5.設定網路檢測時間, 預設42s
gluster volume set k8s-volume network.ping-timeout 10
6.設定寫緩衝區的大小, 預設1M
gluster volume set k8s-volume performance.write-behind-window-size 512MB
六:Kubernetes中配置glusterfs
1.配置 endpoints(glusterfs-endpoints.json)
點選(此處)摺疊或開啟
-
{
-
"kind": "Endpoints",
-
"apiVersion": "v1",
-
"metadata": {
-
"name": "glusterfs-cluster"
-
},
-
"subsets": [
-
{
-
"addresses": [
-
{
-
"ip": "10.116.137.196"
-
}
-
],
-
"ports": [
-
{
-
"port": 1990
-
}
-
]
-
}
-
]
- }
2.配置 service(glusterfs-service.json)
點選(此處)摺疊或開啟
-
{
-
"kind": "Service",
-
"apiVersion": "v1",
-
"metadata": {
-
"name": "glusterfs-cluster"
-
},
-
"spec": {
-
"ports": [
-
{"port": 1990}
-
]
-
}
- }
3.建立測試 pod
點選(此處)摺疊或開啟
-
{
-
"apiVersion": "v1",
-
"kind": "Pod",
-
"metadata": {
-
"name": "glusterfs"
-
},
-
"spec": {
-
"containers": [
-
{
-
"name": "glusterfs",
-
"image": "registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0",
-
"volumeMounts": [
-
{
-
"mountPath": "/mnt/glusterfs",
-
"name": "glusterfsvol"
-
}
-
]
-
}
-
],
-
"volumes": [
-
{
-
"name": "glusterfsvol",
-
"glusterfs": {
-
"endpoints": "glusterfs-cluster",
-
"path": "k8s-volume",
-
"readOnly": true
-
}
-
}
-
]
-
}
- }
4.配置PersistentVolume(glusterfs-pv.yaml)
點選(此處)摺疊或開啟
-
apiVersion: v1
-
kind: PersistentVolume
-
metadata:
-
name: gluster-dev-volume
-
spec:
-
capacity:
-
storage: 1Gi
-
accessModes:
-
- ReadWriteMany
-
glusterfs:
-
endpoints: "glusterfs-cluster"
-
path: "k8s-volume"
- readOnly: false
5.配置PVC(glusterfs-pvc.yaml)
點選(此處)摺疊或開啟
-
kind: PersistentVolumeClaim
-
apiVersion: v1
-
metadata:
-
name: glusterfs-nginx
-
spec:
-
accessModes:
-
- ReadWriteMany
-
resources:
-
requests:
- storage: 1Gi
6.建立nginx deployment 掛載 volume(nginx-deployment.yaml)
點選(此處)摺疊或開啟
-
apiVersion: extensions/v1beta1
-
kind: Deployment
-
metadata:
-
name: nginx-dm
-
spec:
-
replicas: 2
-
template:
-
metadata:
-
labels:
-
name: nginx
-
spec:
-
containers:
-
- name: nginx
-
image: nginx:latest
-
imagePullPolicy: IfNotPresent
-
ports:
-
- containerPort: 80
-
volumeMounts:
-
- name: gluster-dev-volume
-
mountPath: "/usr/share/nginx/html"
-
volumes:
-
- name: gluster-dev-volume
-
persistentVolumeClaim:
- claimName: glusterfs-nginx
a.檢視 deployment
kubectl get pods |grep nginx-dm
點選(此處)摺疊或開啟
-
nginx-dm-64dcbb8d55-pp9vn 1/1 Running 0 1h
- nginx-dm-64dcbb8d55-sclj6 1/1 Running 0 1h
kubectl exec -it nginx-dm-64dcbb8d55-pp9vn -- df -h
點選(此處)摺疊或開啟
-
Filesystem Size Used Avail Use% Mounted on
-
overlay 40G 23G 16G 60% /
-
tmpfs 3.7G 0 3.7G 0% /dev
-
tmpfs 3.7G 0 3.7G 0% /sys/fs/cgroup
-
/dev/xvda1 40G 23G 16G 60% /etc/hosts
-
shm 64M 0 64M 0% /dev/shm
-
10.116.137.196:k8s-volume 5.0G 0 5.0G 0% /usr/share/nginx/html
- tmpfs 3.7G 12K 3.7G 1% /run/secrets/kubernetes.io/serviceaccount
kubectl exec -it nginx-dm-64dcbb8d55-pp9vn -- touch /usr/share/nginx/html/index.html
kubectl exec -it nginx-dm-64dcbb8d55-sclj6 -- ls -lt /usr/share/nginx/html/index.html
d.驗證 glusterfs
因為我們使用分佈卷,所以可以看到某個節點中有檔案
ls /mnt/gfs_data/
index.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28624388/viewspace-2153444/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- kubernetes實踐之二十七:Harbor
- kubernetes實踐之二十:網路原理
- kubernetes實踐之二十二:Pod
- kubernetes實踐之二十三:ReplicationControllerController
- kubernetes實踐之二十四:Service
- kubernetes實踐之五十六:雲原生
- kubernetes實踐之十六:RBAC 角色訪問控制
- kubernetes實踐之二十九:Kubernetes+Harbor+Gitlab+Jenkins+Maven DevOpsGitlabJenkinsMavendev
- kubernetes實踐之二:建立TLS證書和金鑰TLS
- kubernetes實踐之二十一:物件與元件簡介物件元件
- GlusterFS在Kubernetes中的應用實戰(一)
- kubernetes實踐之二十五:儲存卷 PV&PVC
- kubernetes實踐之四十六:分散式負載測試Locust分散式負載
- kubernetes實踐之六十六:Istio實現金絲雀釋出原理
- kubernetes實踐之二十八:使用Harbor作為私有映象倉庫
- kubernetes實踐之三十六:在容器內獲取Pod資訊 Downward APIAPI
- Kubernetes監控實踐
- Serverless Kubernetes 落地實踐Server
- Kubernetes Deployment 最佳實踐
- kubernetes實踐之六十:Cabin-Manage Kubernetes
- Docker進階與實踐之二:NamespaceDockernamespace
- kubernetes實踐之十一:EFK
- Kubernetes 微服務最佳實踐微服務
- 2023年Kubernetes最佳實踐
- Kubernetes 最佳安全實踐指南
- kubernetes實踐之十:Kubernetes-dashboard+Heapster+InfluxDB+GrafanaUXGrafana
- Kubernetes在宜信落地實踐
- kubernetes實踐之三十一:kubectl
- kubernetes實踐之五十七:PodPreset
- kubernetes實踐之五十八:CronJob
- kubernetes實踐之五十二:Helm
- kubernetes實踐之五十九:NetworkPolicy
- VPGAME 的 Kubernetes 遷移實踐GAM
- VPGAME的Kubernetes遷移實踐GAM
- Kubernetes YAML最佳實踐和策略YAML
- kubernetes1.13.X實踐-部署
- kubernetes實踐之十九:API概述API
- kubernetes實踐之十七:架構架構