【发布时间】:2019-07-15 08:29:47
【问题描述】:
我 learned recently 知道 Kubernetes 有一个名为 Init Containers 的功能。太棒了,因为我可以使用此功能等待我的 postgres 服务并在我的 Web 应用程序服务运行之前创建/迁移数据库。
但是,Init Containers 似乎只能在 Pod yaml 文件中配置。有没有办法通过部署 yaml 文件来做到这一点?还是我必须选择?
【问题讨论】:
标签: kubernetes
我 learned recently 知道 Kubernetes 有一个名为 Init Containers 的功能。太棒了,因为我可以使用此功能等待我的 postgres 服务并在我的 Web 应用程序服务运行之前创建/迁移数据库。
但是,Init Containers 似乎只能在 Pod yaml 文件中配置。有没有办法通过部署 yaml 文件来做到这一点?还是我必须选择?
【问题讨论】:
标签: kubernetes
为避免混淆,请回答您的具体问题。我同意 oswin 的观点,您可能需要考虑另一种方法。
是的,您可以在部署中使用初始化容器。这是一个使用旧样式(1.6 之前)的示例,但它应该可以工作
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: 'nginx'
spec:
replicas: 1
selector:
matchLabels:
app: 'nginx'
template:
metadata:
labels:
app: 'nginx'
annotations:
pod.beta.kubernetes.io/init-containers: '[
{
"name": "install",
"image": "busybox",
"imagePullPolicy": "IfNotPresent",
"command": ["wget", "-O", "/application/index.html", "http://kubernetes.io/index.html"],
"volumeMounts": [
{
"name": "application",
"mountPath": "/application"
}
]
}
]'
spec:
volumes:
- name: 'application'
emptyDir: {}
containers:
- name: webserver
image: 'nginx'
ports:
- name: http
containerPort: 80
volumeMounts:
- name: 'application'
mountPath: '/application'
【讨论】:
initContainers 放入部署yaml
【讨论】:
initContainers。我看不出数据库放置(集群内或其他地方)与您如何运行迁移有什么关系,迁移是应用程序逻辑,而不是数据库服务器逻辑。所以我认为初始化容器无论如何都是相关的。您可以将迁移逻辑放入应用程序启动中或放入同一个 pod 中的 initContainer 中,我认为两者都是合理且符合预期目的的方法。