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 }}
命名模式,通常不会出现命名冲突。
自从提到问题后
我想知道是否可以引用命名空间 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 }}
命名模式,通常不会出现命名冲突。