Vagrant Worker 节点的 CoreOS-Kubernetes 云配置
CoreOS-Kubernetes Cloud Config for Vagrant Worker Node
背景
CoreOS-Kubernetes 在 Vagrant 上有一个多节点项目:
https://github.com/coreos/coreos-kubernetes
https://coreos.com/kubernetes/docs/latest/kubernetes-on-vagrant.html
他们有用于 etcd 节点的自定义云配置,但 none 用于工作节点。对于那些,Vagrant 文件引用 shell 脚本,其中包含一些云配置但主要是 Kubernetes yaml:
https://github.com/coreos/coreos-kubernetes/blob/master/multi-node/generic/worker-install.sh
Objective
我正在尝试将 NFS 目录挂载到 coreOS 工作节点上,以便在 Kubernetes pod 中使用。根据我在文档和教程中阅读的有关 Kubernetes 的内容,我想首先将节点作为持久卷安装在节点上,例如 docker:
http://www.emergingafrican.com/2015/02/enabling-docker-volumes-and-kubernetes.html
我看到一些帖子说挂载到 pod 本身可能有问题,我想通过先挂载到 coreOS worker 节点来避免它:
Kubernetes NFS volume mount fail with exit status 32
如果正确安装在 pod 中是标准方式,请告诉我,我会这样做。
问题
是否有为工作节点自定义云配置的选项?我正要开始破解那个 shell 脚本,但我想我应该先检查一下。我查看了文档,但找不到任何内容。
这是我要添加到 Vagrant 文件的 coreOS 云配置:
https://coreos.com/os/docs/latest/mounting-storage.html#mounting-nfs-exports
不需要在 coreOS 上挂载 NFS。 Kubernetes 将在 pod 中为您完成:
http://kubernetes.io/v1.1/examples/nfs/README.html
检查 nfs-busybox 复制控制器:
http://kubernetes.io/v1.1/examples/nfs/nfs-busybox-rc.yaml
我运行这个并让它向服务器写入文件。这帮助我调试了应用程序。请注意,即使当您通过 ssh 进入 kubernetes 节点和 运行 docker -it 运行 /bin/bash 时 nfs 挂载不会显示,它们也会挂载在 kubernetes pod 中。这就是我的大部分误解发生的地方。我猜你必须在手动执行时将挂载参数添加到命令中。
此外,我的应用程序 gogs 将其配置文件存储在 /data 中。为了让它工作,我首先将 nfs 安装到 /mnt。然后,就像在 kubernetes nfs-busybox 示例中一样,我创建了一个命令,它将 /data 中的所有文件夹复制到 /mnt 。在复制控制器 yaml 中,在 container
节点下,我放了一条命令:
command:
- sh
- -c
- 'sleep 300; cp -a /data /mnt; done'
这给了我足够的时间 运行 我的应用程序的初始配置。然后我就等休眠时间到了,文件复制过来了。
然后我将挂载点更改为 /data,现在应用程序会在 pod 重新启动时从它停止的地方开始。加上外部 mysql 服务器,到目前为止它看起来像是无状态的。
背景
CoreOS-Kubernetes 在 Vagrant 上有一个多节点项目:
https://github.com/coreos/coreos-kubernetes https://coreos.com/kubernetes/docs/latest/kubernetes-on-vagrant.html
他们有用于 etcd 节点的自定义云配置,但 none 用于工作节点。对于那些,Vagrant 文件引用 shell 脚本,其中包含一些云配置但主要是 Kubernetes yaml:
https://github.com/coreos/coreos-kubernetes/blob/master/multi-node/generic/worker-install.sh
Objective
我正在尝试将 NFS 目录挂载到 coreOS 工作节点上,以便在 Kubernetes pod 中使用。根据我在文档和教程中阅读的有关 Kubernetes 的内容,我想首先将节点作为持久卷安装在节点上,例如 docker:
http://www.emergingafrican.com/2015/02/enabling-docker-volumes-and-kubernetes.html
我看到一些帖子说挂载到 pod 本身可能有问题,我想通过先挂载到 coreOS worker 节点来避免它:
Kubernetes NFS volume mount fail with exit status 32
如果正确安装在 pod 中是标准方式,请告诉我,我会这样做。
问题
是否有为工作节点自定义云配置的选项?我正要开始破解那个 shell 脚本,但我想我应该先检查一下。我查看了文档,但找不到任何内容。
这是我要添加到 Vagrant 文件的 coreOS 云配置:
https://coreos.com/os/docs/latest/mounting-storage.html#mounting-nfs-exports
不需要在 coreOS 上挂载 NFS。 Kubernetes 将在 pod 中为您完成:
http://kubernetes.io/v1.1/examples/nfs/README.html
检查 nfs-busybox 复制控制器:
http://kubernetes.io/v1.1/examples/nfs/nfs-busybox-rc.yaml
我运行这个并让它向服务器写入文件。这帮助我调试了应用程序。请注意,即使当您通过 ssh 进入 kubernetes 节点和 运行 docker -it 运行 /bin/bash 时 nfs 挂载不会显示,它们也会挂载在 kubernetes pod 中。这就是我的大部分误解发生的地方。我猜你必须在手动执行时将挂载参数添加到命令中。
此外,我的应用程序 gogs 将其配置文件存储在 /data 中。为了让它工作,我首先将 nfs 安装到 /mnt。然后,就像在 kubernetes nfs-busybox 示例中一样,我创建了一个命令,它将 /data 中的所有文件夹复制到 /mnt 。在复制控制器 yaml 中,在 container
节点下,我放了一条命令:
command:
- sh
- -c
- 'sleep 300; cp -a /data /mnt; done'
这给了我足够的时间 运行 我的应用程序的初始配置。然后我就等休眠时间到了,文件复制过来了。
然后我将挂载点更改为 /data,现在应用程序会在 pod 重新启动时从它停止的地方开始。加上外部 mysql 服务器,到目前为止它看起来像是无状态的。