Helm/Kubernetes - StatefulSet:是否可以使用来自不同命名空间的 serviceAccount

Helm/Kubernetes - StatefulSet: is that possible use serviceAccount from different namespace

自从提到问题后

我想知道是否可以引用命名空间 n2 中的 serviceAccountName: "test-sa" 例如在命名空间 n1[=20] 中创建 statefulset =]

apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: "{{.Values.ContainerName}}"
  namespace: n1
  labels:
    name: "{{.Values.ReplicaName}}"
    app: "{{.Values.ContainerName}}"
    chart: "{{.Chart.Name}}-{{.Chart.Version}}"
  annotations:
    "helm.sh/created": {{.Release.Time.Seconds | quote }}
spec:
  selector:
    matchLabels:
      app: "{{.Values.ContainerName}}"
  serviceName: "{{.Values.ContainerName}}"
  replicas: 2
  template:
    metadata:
      labels:
        app: "{{.Values.ContainerName}}"
    spec:
      serviceAccountName: "test-sa"
      securityContext:
        fsGroup: 26
      terminationGracePeriodSeconds: 10
      containers:
      - name: {{.Values.ContainerName}}
        image: "{{.Values.PostgresImage}}"
        ports:
        - containerPort: 5432
          name: postgres
        resources:
          requests:
            cpu: {{default "100m" .Values.Cpu}}
            memory: {{default "100M" .Values.Memory}}
        env:
        - name: PGHOST
          value: /tmp
        - name: PG_PRIMARY_USER
          value: primaryuser
        - name: PG_MODE
          value: set
        - name: PG_PRIMARY_HOST
          value: "{{.Values.PrimaryName}}"
        - name: PG_PRIMARY_PORT
          value: "5432"
        - name: PG_PRIMARY_PASSWORD
          value: "{{.Values.PrimaryPassword}}"
        - name: PG_USER
          value: testuser
        - name: PG_PASSWORD
          value: "{{.Values.UserPassword}}"
        - name: PG_DATABASE
          value: userdb
        - name: PG_ROOT_PASSWORD
          value: "{{.Values.RootPassword}}"
        volumeMounts:
        - name: pgdata
          mountPath: "/pgdata"
          readOnly: false
      volumes:
      - name: pgdata
        persistentVolumeClaim:
          claimName: {{.Values.PVCName}}

你不能;他们需要在同一个命名空间中。

这是一个更通用的规则。每当一个对象引用另一个对象时,它们通常需要在同一个命名空间中,或者目标需要是一个集群全局对象。如果 Pod 引用 ConfigMap 中的数据或挂载 PersistentVolumeClaim,则它们需要位于相同的命名空间中;如果服务按标签选择 Pods,则这些标签需要位于同一名称空间中。有几个例外,特别是围绕 RBAC,但通常这些东西需要一起部署。

在 Helm 图表的上下文中,我只是创建一个新的 ServiceAccount,而不是尝试重用现有的。如果它使用典型的 {{ .Release.Name }}-{{ .Chart.Name }} 命名模式,通常不会出现命名冲突。