使用 yaml 文件配置运行 Kubectl

hol*_*lms 5 docker kubernetes

这里有一个类似的问题,但我想我想要不同的东西。对于那些熟悉 docker-compose 的人来说,有一个出色的命令可以在容器中运行命令一次,这对于在每次部署之前启动迁移非常有帮助:

docker-compose -f docker-compose.prod.yml run web npm run migrate
Run Code Online (Sandbox Code Playgroud)

另外,因为这是一个单行命令,所以它很适合自动化目的:就像使用 Makefile 或 ansible/chef/saltstack 一样。

我唯一发现的是kubectl run哪个更类似于docker run. 但docker-compose run允许我们使用配置文件,而 docker-run 则不允许:

 kubectl run rp2migrate --command -- npm run migrate
Run Code Online (Sandbox Code Playgroud)

这可能会起作用,但我需要列出 20 个环境变量,并且真的不想在命令行中执行此操作。相反,我想传递一个标志来指定 yaml 配置,如下所示:

 kubectl run rp2migrate  -f k8s/rp2/rp2-deployment.yaml --command -- npm run migrate
Run Code Online (Sandbox Code Playgroud)

man*_*lds 2

编辑:

Kubernetes 还获得了init containersBeta 功能(截至目前) - http://kubernetes.io/docs/user-guide/product-pods/#handling-initialization


您可能应该利用 Kubernetes PostStart 挂钩。像下面这样:

lifecycle:
  postStart:
    exec:
      command:
      - "npm"
      - "run"
      - "migrate"
Run Code Online (Sandbox Code Playgroud)

http://kubernetes.io/docs/user-guide/container-environment/

为您的 pod 指定的环境变量也将可用:

此外,pod 定义中的用户定义的环境变量也可用于容器,就像 Docker 映像中静态指定的任何环境变量一样