如何使用 pod affinity
How to use pod affinity
我有这个吊舱
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
labels:
app: myapp
myapp: db
subdomain: name
annotations:
app.myapp.com/uuid: some-uuid
app.myapp.com/domain: domain
我想用this让另一个pod等待mysql,可以吗?
Pod 亲和性只是一种告诉调度程序相对于其他容器放置 pods 位置的方法。然而,调度程序在执行此操作时不会查看 Pod 状态。因此,无法使用 pod 亲和力来“等待 mysql”。
通常,在 pods 启动期间实现一些“等待某事”的简单方法是添加一些 initContainer。
在 StatefulSets、Deployments、ReplicationControllers、Daemonsets 等中,除了描述容器的 containers
数组应该始终是 运行 之外,还有一个可选的 initContainers
数组。这个是为了列出容器,这些容器将在 containers
数组中的容器启动之前启动,然后退出。
参见:https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
文档给出了以下示例:
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
spec:
containers:
- name: myapp-container
image: busybox:1.28
command: ['sh', '-c', 'echo The app is running! && sleep 3600']
initContainers:
- name: init-myservice
image: busybox:1.28
command: ['sh', '-c', "until nslookup myservice.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for myservice; sleep 2; done"]
[...]
我不确定我是否会使用一些 nslookup...通常,由于您的主容器映像具有适当的运行时来查询您的数据库,您应该能够 re-use 它与您的 init 容器。
在你的情况下,它可能会从你的 mysql 数据库中列出 table,然后重试直到你得到答案。
我有这个吊舱
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
labels:
app: myapp
myapp: db
subdomain: name
annotations:
app.myapp.com/uuid: some-uuid
app.myapp.com/domain: domain
我想用this让另一个pod等待mysql,可以吗?
Pod 亲和性只是一种告诉调度程序相对于其他容器放置 pods 位置的方法。然而,调度程序在执行此操作时不会查看 Pod 状态。因此,无法使用 pod 亲和力来“等待 mysql”。
通常,在 pods 启动期间实现一些“等待某事”的简单方法是添加一些 initContainer。
在 StatefulSets、Deployments、ReplicationControllers、Daemonsets 等中,除了描述容器的 containers
数组应该始终是 运行 之外,还有一个可选的 initContainers
数组。这个是为了列出容器,这些容器将在 containers
数组中的容器启动之前启动,然后退出。
参见:https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
文档给出了以下示例:
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
spec:
containers:
- name: myapp-container
image: busybox:1.28
command: ['sh', '-c', 'echo The app is running! && sleep 3600']
initContainers:
- name: init-myservice
image: busybox:1.28
command: ['sh', '-c', "until nslookup myservice.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for myservice; sleep 2; done"]
[...]
我不确定我是否会使用一些 nslookup...通常,由于您的主容器映像具有适当的运行时来查询您的数据库,您应该能够 re-use 它与您的 init 容器。
在你的情况下,它可能会从你的 mysql 数据库中列出 table,然后重试直到你得到答案。