0

我在一个容器中有一个 Go Lang REST 服务和 ETCD DB,使用 Deployment 类型部署在 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

我希望数据库即使重新启动也能够连接到 pod

4

1 回答 1

1

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

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

于 2019-05-01T17:07:37.500 回答