当pod重启时,服务失去与Etcd DB的连接

问题描述 投票:0回答:1

我在一个容器中有一个Go Lang REST服务和ETCD DB,使用部署类型部署在kubernetes集群中。每当我尝试重新启动服务pod时,服务失去与ETCD的连接,我尝试使用有状态集而不是部署但仍然没有帮助。我的部署类似于下面的内容。

由于此问题,ETCD无法重新启动:https://github.com/etcd-io/etcd/issues/10487

PVC:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
     name: XXXX
     namespace: XXXX
     annotations:
       volume.beta.kubernetes.io/storage-class: glusterfs-storage
    spec:
     accessModes:
      - ReadWriteMany
     resources:
       requests:
         storage: 1Gi

部署:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: XXX
      namespace: XXX
    spec:
      replicas: X
      XXXXXXX
      template:
    metadata:
      labels:
        app: rest-service
        version: xx
      spec:
        hostAliases:
        - ip: 127.0.0.1
          hostnames:
          - "etcd.xxxxx"
        containers:
        - name: rest-service
          image: xxxx
          imagePullPolicy: IfNotPresent
          ports:
          - containerPort: xxx
          securityContext:
            readOnlyRootFilesystem: false
            capabilities:
              add:
              - IPC_LOCK
        - name: etcd-db
          image: quay.io/coreos/etcd:v3.3.11
          imagePullPolicy: IfNotPresent
          command:
          - etcd
          - --name=etcd-db
          - --listen-client-urls=https://0.0.0.0:2379
          - --advertise-client-urls=https://etcd.xxxx:2379
          - --data-dir=/var/etcd/data
          - --client-cert-auth
          - --trusted-ca-file=xxx/ca.crt
          - --cert-file=xxx/tls.crt
          - --key-file=xxx/tls.key
          volumeMounts:
          - mountPath: /var/etcd/data
            name: etcd-data
            XXXX
          ports:
          - containerPort: 2379
        volumes:
        - name: etcd-data
          persistentVolumeClaim:
            claimName: XXXX

我希望DB能够连接到pod,即使它重新启动

kubernetes etcd etcd3
1个回答
1
投票

将应用程序和数据库保存在一个pod中是Kubernetes中最糟糕的做法之一。如果更新应用程序代码 - 则必须重新启动pod才能应用更改。所以你也重新启动数据库。

解决方案非常简单 - 您应该在一个部署和数据库中运行应用程序。这样您就可以更新应用程序而无需重新启动数据库在这种情况下,您还可以单独缩放app和DB,例如向app添加更多副本,同时将DB保持在1个副本,反之亦然。

© www.soinside.com 2019 - 2024. All rights reserved.