问题描述
既然问题提到了here。
我想知道是否可以引用命名空间 n2 中的 serviceAccountName: "test-sa"
例如在命名空间 n1
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,则它们需要在同一命名空间中;如果 Service 通过标签选择 Pod,则这些 Pod 需要位于相同的命名空间中。有几个例外,尤其是 RBAC,但通常这些东西需要一起部署。
在 Helm 图表的上下文中,我只会创建一个新的 ServiceAccount,而不是尝试重用现有的 ServiceAccount。如果它使用典型的 {{ .Release.Name }}-{{ .Chart.Name }}
命名模式,通常不会出现命名冲突。