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 服务器,到目前为止它看起来像是无状态的。