【发布时间】:2023-03-14 14:14:01
【问题描述】:
有什么方法可以使用 kubernetes 进行 AWS 部署,其中我的应用程序的 pod 数量可变且可扩展,但单个主机的 VM 上的环境不同?
基本上,我希望我的一个 pod 执行一项其他 pod 不会一直执行的任务。我打算使用环境变量来控制它。
【问题讨论】:
-
您需要为每个单独部署。
标签: amazon-web-services kubernetes
有什么方法可以使用 kubernetes 进行 AWS 部署,其中我的应用程序的 pod 数量可变且可扩展,但单个主机的 VM 上的环境不同?
基本上,我希望我的一个 pod 执行一项其他 pod 不会一直执行的任务。我打算使用环境变量来控制它。
【问题讨论】:
标签: amazon-web-services kubernetes
您可以进行多个部署,但是如果您需要在 pod 之间使用 uniqueness,则应考虑使用 statefulsets 而非部署。但是,在 statefulset 和 deployment 之间做出选择主要取决于应用程序的类型,这是一个重大决定。因此,使用 statefulset 可能无法 100% 替代部署。
在statefulsets 中,每个 pod 通过其主机名获得其唯一但非随机的身份。
例如,您可以使用以下命令创建mysql statefulset:
apiVersion: apps/v1
kind: StatefulSet
metadata:
creationTimestamp: null
labels:
app: foo
name: foo
spec:
serviceName: mysql
replicas: 3
selector:
matchLabels:
app: foo
template:
metadata:
creationTimestamp: null
labels:
app: foo
spec:
containers:
- image: mysql
name: mysql
containers:
- env:
- name: MYSQL_ROOT_PASSWORD
value: root
image: mysql
name: mysql
这将创建 pod 的三个副本:
k get pod -l app=foo
NAME READY STATUS RESTARTS AGE
foo-0 1/1 Running 0 5m17s
foo-1 1/1 Running 0 5m14s
foo-2 1/1 Running 0 5m10s
现在您可以获取 pod 的主机名,第一个 pod 将始终以0 为后缀,第二个以1 为后缀,依此类推。
exec -it foo-0 -- hostname
foo-0
k exec -it foo-1 -- hostname
foo-1
k exec -it foo-2 -- hostname
foo-2
您可以使用 hostname 作为选择器来决定在哪个 pod 上需要执行什么操作。 Here 是一本非常好的读物。
【讨论】: