Kubernetes 在服务背后的复制控制器中更新 Pod

Kubernetes 在服务背后的复制控制器中更新 Pod

我们在 Kubernetes 中部署了一个 API。该 API 通过复制控制器部署到 pod 和管理 rc。我想使用滚动更新将配置更新到 API pod。我可以这样做,但是我让滚动更新命令不出错的唯一方法是更改​​ RC 的名称。但这样做会破坏从我的服务(作为负载平衡器公开)到 RC 的链接,并且它再也找不到我的 pod。有人有在不更改名称的情况下更新复制控制器的示例配置吗?

apiVersion: v1
kind: ReplicationController
metadata:
    name: my-api
    labels:
        name: my-api
spec:
    replicas: 4
    selector:
        name: my-api
    template:
        metadata:
            labels:
                name: my-api
        spec:
            containers:
              - name: my-api
                image: docker-registry.example.com/mynamespace/my-api
                command: [ "sh", "-c", "/do/the/thing/run"]
                resources:
                    limits:
                        cpu: 0
                ports:
                  - name: web
                    containerPort: 80
                env:
                  - name: "HELLO"
                    value: "WORLD"

例如,我想将环境变量“HELLO”更改为“Bob”或其他内容。

答案1

所以我想出了一个可能有效的策略。我所研究的大多数文档都基于 pod 的名称来选择服务。这行不通,因为执行滚动更新时名称必须更改。最好将 service.spec.selector 设置为“type=api-server”或其他元数据标签,然后将 type=api-server 添加到您的 pod。(请记住,服务直接指向 pod,而不是 RC)

复制控制器:

apiVersion: v1
kind: ReplicationController
metadata:
    name: my-api-{{randomDigits}}
    labels:
        name: my-api-{{randomDigits}}
spec:
    replicas: 4
    selector:
        name: my-api-{{randomDigits}}
    template:
        metadata:
            labels:
                name: my-api-{{randomDigits}}
                type: api-server
        spec:
            containers:
              - name: my-api
                image: docker-registry.example.com/mynamespace/my-api
                command: [ "sh", "-c", "/do/the/thing/run"]
                resources:
                    limits:
                        cpu: 0
                ports:
                  - name: web
                    containerPort: 80
                env:
                  - name: "HELLO"
                    value: "WORLD"

服务:

apiVersion: v1
kind: Service
metadata:
    name: my-api-service
    labels:
        name: my-api-service
spec:
    type: LoadBalancer
    ports:
      - port: 80
    selector:
        type: api-server

然后,如果您想更新您的 pod 的配置,您只需将 {{randomDigits}} 更改为新的内容,您就可以执行滚动更新,而无需破坏从您的服务到您的 pod 的链接。

相关内容