【问题标题】:Kubernetes deployment where one of the pods gets different envKubernetes 部署,其中一个 pod 获得不同的环境
【发布时间】:2023-03-14 14:14:01
【问题描述】:

有什么方法可以使用 kubernetes 进行 AWS 部署,其中我的应用程序的 pod 数量可变且可扩展,但单个主机的 VM 上的环境不同?

基本上,我希望我的一个 pod 执行一项其他 pod 不会一直执行的任务。我打算使用环境变量来控制它。

【问题讨论】:

  • 您需要为每个单独部署。

标签: amazon-web-services kubernetes


【解决方案1】:

您可以进行多个部署,但是如果您需要在 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 是一本非常好的读物。

【讨论】:

  • 超级有用的信息。非常感谢!
猜你喜欢
  • 2019-03-08
  • 1970-01-01
  • 1970-01-01
  • 2018-12-16
  • 1970-01-01
  • 2019-11-16
  • 1970-01-01
  • 2019-02-03
  • 1970-01-01
相关资源
最近更新 更多