Kubernetes 中使用 Gluster FS

以 RC 形式运行在 Kubernetes 集群中的 Pod,会因为 Scale 等需要在不同的 Node 之间发生迁移,因此需要有独立于 Node 文件系统的共享存储服务,同时这一存储服务也应该符合集群的运行需要,简单的 NFS 不管是效率上还是可靠性上,都是不具备这一能力的。这里以 Gluster FS 作为存储引擎,为容器集群提供云存储服务。

K8S 的存储卷使用稍有点古怪,Gluster FS 的使用,需要首先定义一个 Endpoint + Service 形式的代理,来定义 Gluster FS 集群,然后就可以通过持久卷或者用 Pod 直接加载了。

定义 Service

首先用一个 YML 文件来定义 Endpoint 和 Service:

---
kind: List
apiVersion: v1
items:
- kind: Endpoints
  apiVersion: v1
  metadata:
    name: service_name
  subsets:
  - addresses:
    - ip: 12.34.56.78
    ports:
    - port: 111
- kind: Service
  apiVersion: v1
  metadata:
    name: service_name
  spec:
    ports:
      - port: 111
  • Port 可随意填写
  • Service Name 需要一致,这个值将会用到后面的引用中
  • ip:Gluster FS 的 IP 地址

定义文件生成结束后,利用 kubectl create -f xx.yaml 的方式加载到集群之中。可以用 kubectl get svc,endpoints 来验证结果。

接下来有两种加载方式可以选择:持久卷和 Pod 直接加载。

Pod 直接加载

可以在 Pod 中直接定义一个 Gluster FS 格式的卷来进行加载:

spec:
containers:
- name: nginx-docker-images
  image: nginx:latest
  volumeMounts:
    - mountPath: /glusterfs
      name: test-volume
volumes:
  - name: test-volume
    glusterfs:
      endpoints: glusterfs-cluster
      path: gv0
      readOnly: false
  • endpoints: 这里指定的就是上一届中定义的服务名称
  • path: gluster fs 中的卷名称
  • readOnly: 是否只读加载

持久卷加载

首先定义一个持久卷:

kind: PersistentVolume
apiVersion: v1
metadata:
  name: gluster-volumen-gv01
spec:
  capacity:
    storage: 1Mi
  accessModes:
    - ReadWriteMany
  glusterfs:
    endpoints: glusterfs-svc
    path: gv0

内容同上面的 Pod 卷定义大同小异,具体参数可以参考持久卷的相关文档。

然后定义一个 PVC

---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: myclaim2m
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 2Mi

最后,在 Pod 中利用 PVC 来进行卷加载

volumes:
  - name: test-volume
    persistentVolumeClaim:
      # 上面定义的 PVC 名称
      claimName: myclaim1m
Avatar
崔秀龙

简单,是大师的责任;我们凡夫俗子,能做到清楚就很不容易了。

comments powered by Disqus
下一页
上一页

相关