Kubernetes 仅当我向部署中添加第二个常规容器时,init容器的部署引发错误
您好,我目前正在尝试使用DB cloudsql实例在GKE中部署sonarqube 7.8-community 这需要2个容器(一个用于sonarqube,另一个用于cloudproxy,以便连接到DB) 然而,Sonarqube容器也需要一个init容器来满足一些特殊的内存需求 当我仅使用sonarqube映像和init容器创建部署时,它可以正常工作,但这没有任何用处,因为我需要cloudsql代理容器连接到外部数据库。当我添加这个容器时,部署突然出现以下错误Kubernetes 仅当我向部署中添加第二个常规容器时,init容器的部署引发错误,kubernetes,deployment,sonarqube,init,Kubernetes,Deployment,Sonarqube,Init,您好,我目前正在尝试使用DB cloudsql实例在GKE中部署sonarqube 7.8-community 这需要2个容器(一个用于sonarqube,另一个用于cloudproxy,以便连接到DB) 然而,Sonarqube容器也需要一个init容器来满足一些特殊的内存需求 当我仅使用sonarqube映像和init容器创建部署时,它可以正常工作,但这没有任何用处,因为我需要cloudsql代理容器连接到外部数据库。当我添加这个容器时,部署突然出现以下错误 deirdrerodgers@c
deirdrerodgers@cloudshell:~ (meta-gear-306013)$ kubectl create -f initsonar.yaml
The Deployment "sonardeploy" is invalid:spec.template.spec.initContainers[0].volumeMounts[0].name: Not found: "init-sysctl"
这是包含init容器和其他两个容器的完整yaml文件。我想知道问题是不是因为它不知道将init容器应用到哪个容器
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: sonardeploy
name: sonardeploy
namespace: sonar
spec:
replicas: 1
selector:
matchLabels:
app: sonardeploy
strategy: {}
template:
metadata:
labels:
app: sonardeploy
spec:
initContainers:
- name: init-sysctl
image: busybox:1.32
imagePullPolicy: IfNotPresent
securityContext:
privileged: true
resources:
{}
command: ["sh",
"-e",
"/tmp/scripts/init_sysctl.sh"]
volumeMounts:
- name: init-sysctl
mountPath: /tmp/scripts/
volumes:
- name: init-sysctl
configMap:
name: sonarqube-sonarqube-init-sysctl
items:
- key: init_sysctl.sh
path: init_sysctl.sh
spec:
containers:
- image: sonarqube:7.8-community
name: sonarqube
env:
- name: SONARQUBE_JDBC_USERNAME
valueFrom:
secretKeyRef:
name: sonarsecret
key: username
- name: SONARQUBE_JDBC_PASSWORD
valueFrom:
secretKeyRef:
name: sonarsecret
key: password
- name: SONARQUBE_JDBC_URL
value: jdbc:postgresql://localhost:5432/sonar
ports:
- containerPort: 9000
name: sonarqube
- name: cloudsql-proxy
image: gcr.io/cloudsql-docker/gce-proxy:1.17
command: ["/cloud_sql_proxy",
"-instances=meta-gear-306013:us-central1:sonardb=tcp:5432",
"-credential_file=/secrets/service_account.json"]
securityContext:
runAsNonRoot: true
volumeMounts:
- name: cloudsql-instance-credentials-volume
mountPath: /secrets/
readOnly: true
volumes:
- name: cloudsql-instance-credentials-volume
secret:
secretName: cloudsql-instance-credentials
您的yaml文件不正确。您有两个
spec:
块。应该只有一个。你需要把它结合起来。在spec
下,block应该是initContainers
block,然后是containers
,最后是volumes
block。查看下面正确的yaml文件:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: sonardeploy
name: sonardeploy
namespace: sonar
spec:
replicas: 1
selector:
matchLabels:
app: sonardeploy
strategy: {}
template:
metadata:
labels:
app: sonardeploy
spec:
initContainers:
- name: init-sysctl
image: busybox:1.32
imagePullPolicy: IfNotPresent
securityContext:
privileged: true
resources:
{}
command: ["sh",
"-e",
"/tmp/scripts/init_sysctl.sh"]
volumeMounts:
- name: init-sysctl
mountPath: /tmp/scripts/
containers:
- image: sonarqube:7.8-community
name: sonarqube
env:
- name: SONARQUBE_JDBC_USERNAME
valueFrom:
secretKeyRef:
name: sonarsecret
key: username
- name: SONARQUBE_JDBC_PASSWORD
valueFrom:
secretKeyRef:
name: sonarsecret
key: password
- name: SONARQUBE_JDBC_URL
value: jdbc:postgresql://localhost:5432/sonar
ports:
- containerPort: 9000
name: sonarqube
- name: cloudsql-proxy
image: gcr.io/cloudsql-docker/gce-proxy:1.17
command: ["/cloud_sql_proxy",
"-instances=meta-gear-306013:us-central1:sonardb=tcp:5432",
"-credential_file=/secrets/service_account.json"]
securityContext:
runAsNonRoot: true
volumeMounts:
- name: cloudsql-instance-credentials-volume
mountPath: /secrets/
readOnly: true
volumes:
- name: cloudsql-instance-credentials-volume
secret:
secretName: cloudsql-instance-credentials
- name: init-sysctl
configMap:
name: sonarqube-sonarqube-init-sysctl
items:
- key: init_sysctl.sh
path: init_sysctl.sh
您有两个
spec:
块;把它们结合在一起。在这种情况下,您应该有initContainers:
,containers:
,以及一个卷:
,列出了两个卷(按任意顺序)。@DavidMaze这是有效的!非常感谢。