裸机/私有云上的 Kubernetes 存储
Posted
技术标签:
【中文标题】裸机/私有云上的 Kubernetes 存储【英文标题】:Kubernetes Storage on bare-metal/private cloud 【发布时间】:2015-07-04 01:50:43 【问题描述】:我刚开始在 2 个私有云服务器上设置 2 个节点(主从)上的 Kubernetes。我已经安装了它,做了基本的配置,让它运行一些简单的从 master 到 minion 的 pods/services。
我的问题是:
如何在不使用 Google Cloud 时将持久存储与 Pod 一起使用?
在我的第一次测试中,我运行了一个 Ghost 博客 pod,但如果我撕毁 pod,更改就会丢失。尝试将卷添加到 pod,但实际上找不到任何关于不在 GC 上时如何完成的文档。
我的尝试:
apiVersion: v1beta1
id: ghost
kind: Pod
desiredState:
manifest:
version: v1beta1
id: ghost
containers:
- name: ghost
image: ghost
volumeMounts:
- name: ghost-persistent-storage
mountPath: /var/lib/ghost
ports:
- hostPort: 8080
containerPort: 2368
volumes:
- name: ghost-persistent-storage
source:
emptyDir:
找到这个:Persistent Installation of mysql and WordPress on Kubernetes
不知道如何将存储(NFS?)添加到我的测试安装中。
【问题讨论】:
【参考方案1】:NFS 示例: https://github.com/kubernetes/kubernetes/tree/master/examples/volumes/nfs
GlusterFS 示例: https://github.com/kubernetes/kubernetes/tree/master/examples/volumes/glusterfs
希望有帮助!
【讨论】:
谢谢,NFS 正是我需要的。今天要试一试:) 很好,它可以使用 nfs 从 master 挂载到 pod,但是当我重新启动 pod 时,它会删除挂载目录中的所有内容:/【参考方案2】:您可以尝试https://github.com/suquant/glusterd 解决方案。
Kubernetes 集群中的 Glusterfs 服务器
想法很简单,集群管理器监听kubernetes api并添加到/etc/hosts“metadata.name”和pod ip地址。
1。创建 pod
gluster1.yaml
apiVersion: v1
kind: Pod
metadata:
name: gluster1
namespace: mynamespace
labels:
component: glusterfs-storage
spec:
nodeSelector:
host: st01
containers:
- name: glusterfs-server
image: suquant/glusterd:3.6.kube
imagePullPolicy: Always
command:
- /kubernetes-glusterd
args:
- --namespace
- mynamespace
- --labels
- component=glusterfs-storage
ports:
- containerPort: 24007
- containerPort: 24008
- containerPort: 49152
- containerPort: 38465
- containerPort: 38466
- containerPort: 38467
- containerPort: 2049
- containerPort: 111
- containerPort: 111
protocol: UDP
volumeMounts:
- name: brick
mountPath: /mnt/brick
- name: fuse
mountPath: /dev/fuse
- name: data
mountPath: /var/lib/glusterd
securityContext:
capabilities:
add:
- SYS_ADMIN
- MKNOD
volumes:
- name: brick
hostPath:
path: /opt/var/lib/brick1
- name: fuse
hostPath:
path: /dev/fuse
- name: data
emptyDir:
gluster2.yaml
apiVersion: v1
kind: Pod
metadata:
name: gluster2
namespace: mynamespace
labels:
component: glusterfs-storage
spec:
nodeSelector:
host: st02
containers:
- name: glusterfs-server
image: suquant/glusterd:3.6.kube
imagePullPolicy: Always
command:
- /kubernetes-glusterd
args:
- --namespace
- mynamespace
- --labels
- component=glusterfs-storage
ports:
- containerPort: 24007
- containerPort: 24008
- containerPort: 49152
- containerPort: 38465
- containerPort: 38466
- containerPort: 38467
- containerPort: 2049
- containerPort: 111
- containerPort: 111
protocol: UDP
volumeMounts:
- name: brick
mountPath: /mnt/brick
- name: fuse
mountPath: /dev/fuse
- name: data
mountPath: /var/lib/glusterd
securityContext:
capabilities:
add:
- SYS_ADMIN
- MKNOD
volumes:
- name: brick
hostPath:
path: /opt/var/lib/brick1
- name: fuse
hostPath:
path: /dev/fuse
- name: data
emptyDir:
3。运行 pod
kubectl create -f gluster1.yaml
kubectl create -f gluster2.yaml
2。管理 glusterfs 服务器
kubectl --namespace=mynamespace exec -ti gluster1 -- sh -c "gluster peer probe gluster2"
kubectl --namespace=mynamespace exec -ti gluster1 -- sh -c "gluster peer status"
kubectl --namespace=mynamespace exec -ti gluster1 -- sh -c "gluster volume create media replica 2 transport tcp,rdma gluster1:/mnt/brick gluster2:/mnt/brick force"
kubectl --namespace=mynamespace exec -ti gluster1 -- sh -c "gluster volume start media"
3。用法
gluster-svc.yaml
kind: Service
apiVersion: v1
metadata:
name: glusterfs-storage
namespace: mynamespace
spec:
ports:
- name: glusterfs-api
port: 24007
targetPort: 24007
- name: glusterfs-infiniband
port: 24008
targetPort: 24008
- name: glusterfs-brick0
port: 49152
targetPort: 49152
- name: glusterfs-nfs-0
port: 38465
targetPort: 38465
- name: glusterfs-nfs-1
port: 38466
targetPort: 38466
- name: glusterfs-nfs-2
port: 38467
targetPort: 38467
- name: nfs-rpc
port: 111
targetPort: 111
- name: nfs-rpc-udp
port: 111
targetPort: 111
protocol: UDP
- name: nfs-portmap
port: 2049
targetPort: 2049
selector:
component: glusterfs-storage
运行服务
kubectl create -f gluster-svc.yaml
在你可以通过主机名“glusterfs-storage.mynamespace”在集群中挂载NFS之后
【讨论】:
【参考方案3】:在新 API (v1beta3) 中,我们添加了更多卷类型,包括 NFS volumes。 NFS 卷类型假定您已经有一个 NFS 服务器在某个地方运行以指向 pod。试一试,如果您有任何问题,请告诉我们!
【讨论】:
v1beta3 链接坏了,只能找到v1.请更新链接,可能使用提交 ID。以上是关于裸机/私有云上的 Kubernetes 存储的主要内容,如果未能解决你的问题,请参考以下文章