【问题标题】:Keep same loadbalancer when redeploying pods部署 Pod 时保持相同的负载均衡器
【发布时间】:2023-03-28 09:43:01
【问题描述】:

我在一个 pod 上部署了一个 web 服务器,并创建了一个像这样的负载平衡服务 kubectl expose deployment api --port=80 --target-port=8080 --name api-LB --type=LoadBalancer

但是,当我重新部署 pod 时,假设进行了一些更新,似乎失去了与 LoadBalancer 的绑定。所以我必须从顶部创建一个负载平衡服务,以便获得一个外部 ip。

我想问一下,是否有办法绑定负载均衡器和 Pod,这样每次执行新的 Pod 部署时就不需要将 Pod 暴露给负载均衡器。

API 开发 yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: api-dev
  namespace: default
spec:
  template:
    metadata:
      name: api-dev

    spec:
      volumes:
      - name: nfs-volume
        nfs:
          # URL for the NFS server
          server: xxxx
          path: xxxx

      containers:
      - name: api-dev
        image: docker-image-at-registry
        ports:
          - containerPort: 80
            name: server

        volumeMounts:
          - name: nfs-volume
            mountPath: /var/nfs

      imagePullSecrets:
        - name: regcred

  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/name: api-dev

  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0

【问题讨论】:

  • 可以分享开发api的文件yaml吗?
  • 您使用的是哪个版本的 Kubernetes,您是如何设置集群的?您是否使用裸机安装或某些云提供商?重现您的问题很重要。
  • 您好@MikołajGłodziak,我正在使用 VMware 的 PKS。 NVM 我找到了一个为特定应用程序部署负载均衡器服务的解决方案。谢谢你的时间:)

标签: kubernetes kubernetes-service


【解决方案1】:

必须在 deploymet api 中添加标签吗?
看起来像:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: api-dev
  namespace: default
spec: 
  template:
    metadata:
      name: api-dev
      labels:
        app: api-dev

    spec:
      volumes:
      - name: nfs-volume
        nfs:
          # URL for the NFS server
          server: xxxx
          path: xxxx

      containers:
      - name: api-dev
        image: docker-image-at-registry
        ports:
          - containerPort: 80
            name: server

        volumeMounts:
          - name: nfs-volume
            mountPath: /var/nfs

      imagePullSecrets:
        - name: regcred

  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/name: api-dev
      app: api-dev

  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0

那么,试试这个

kubectl expose deployment api --port=80 --target-port=8080 --name api-LB --type=LoadBalancer --selector=app=api-dev

【讨论】:

  • 您好,刚刚也分享了部署文件
  • 感谢您的回答,但我收到了error. unexpected label spec: api-dev
  • 你在yaml文件中添加标签了吗?
  • 哪些标签?我尝试了您在上面提供的公开命令
  • 像这样使用 --selector=app=api-dev :kubectl expose deployment api --port=80 --target-port=8080 --name api-LB --type=LoadBalancer --selector=app=api-dev
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多