2

我有一个附加卷的 Scylla 数据库的 Kubernetes 部署。它有一个副本,清单类似于以下内容:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: scylla
  labels:
    app: myapp
    role: scylla
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myapp
      role: scylla
  template:
    metadata:
      labels:
        app: myapp
        role: scylla
    spec:
      containers:
        - name: scylla
          image: scylladb/scylla
          imagePullPolicy: Always
          volumeMounts:
            - mountPath: /var/lib/scylla/data
              name: scylladb
      volumes:
        - name: scylladb
          hostPath:
            path: /var/myapp/scylla/
            type: DirectoryOrCreate

当我执行更新时,它将终止旧 pod 并在旧 pod 停止之前启动一个新 pod。这会导致新 pod 上的数据库失败,因为它无法访问存储在卷中的数据库文件(因为旧 pod 仍在使用它)。如何使一次只有一个 pod 使用该卷?(短暂的停机时间是可以的)

4

1 回答 1

3

您可以在 Deployment 中使用Recreate Strategy来做到这一点。这将在创建新 Pod 之前杀死所有现有 Pod。参考:Kubernetes 文档。因此,他们将因此而停机。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: scylla
  labels:
    app: myapp
    role: scylla
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myapp
      role: scylla
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: myapp
        role: scylla
    spec:
      containers:
        - name: scylla
          image: scylladb/scylla
          imagePullPolicy: Always
          volumeMounts:
            - mountPath: /var/lib/scylla/data
              name: scylladb
      volumes:
        - name: scylladb
          hostPath:
            path: /var/myapp/scylla/
            type: DirectoryOrCreate
于 2019-02-26T04:08:15.907 回答