helm 安装后相关 pod 列表中缺少 SonarQube 应用程序 pod
SonarQube application pod missing in related pod list after helm installation
我想安装 SonarQube on Kubernets with the corresponding stable Helm Chart。这在第一次起作用。但后来我注意到 LDAP 不起作用,所以我修改了 values.yaml
以安装图表中提到的插件:
plugins:
install:
- "https://github.com/SonarSource/sonar-ldap/releases/download/2.2-RC3/sonar-ldap-plugin-2.2.0.601.jar"
由于 pods 没有更新,我尝试重新安装图表:
helm delete --purge sonarqube
helm install stable/sonarqube --namespace sonarqube --name sonarqube -f values.yaml
问题是现在不再创建与 SonarQube 相关的主要 pod,正如我们在 helm install
结果中看到的那样:
NAME: sonarqube
LAST DEPLOYED: Wed Sep 25 16:04:25 2019
NAMESPACE: sonarqube2
STATUS: DEPLOYED
RESOURCES:
==> v1/Secret
NAME TYPE DATA AGE
sonarqube-postgresql Opaque 1 0s
==> v1/ConfigMap
NAME DATA AGE
sonarqube-sonarqube-config 0 0s
sonarqube-sonarqube-copy-plugins 1 0s
sonarqube-sonarqube-install-plugins 1 0s
sonarqube-sonarqube-tests 1 0s
==> v1/PersistentVolumeClaim
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
sonarqube-postgresql Pending nfs-client 0s
==> v1/Service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
sonarqube-postgresql ClusterIP 10.14.45.251 <none> 5432/TCP 0s
sonarqube-sonarqube ClusterIP 10.14.38.122 <none> 9000/TCP 0s
==> v1beta1/Deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
sonarqube-postgresql 1 1 1 0 0s
sonarqube-sonarqube 1 0 0 0 0s
==> v1beta1/Ingress
NAME HOSTS ADDRESS PORTS AGE
sonarqube-sonarqube sonarqube-test.mycluster.internal 80, 443 0s
==> v1/Pod(related)
NAME READY STATUS RESTARTS AGE
sonarqube-postgresql-b78f87cd7-ht845 0/1 Pending 0 0s
NOTES:
1. Get the application URL by running these commands:
http://sonarqube-test.mycluster.internal
此外 kubectl get pod
几分钟后仅显示 Postgresql pod:
NAME READY STATUS RESTARTS AGE
sonarqube-postgresql-b78f87cd7-ht845 1/1 Running 0 6m
在第一次运行时,我还有一个包含 SonarQube 本身的第二个 pod。可以想象,应用程序无法在 sonarqube-test.mycluster.internal
上访问,它显示 503 内部服务器错误 。
为什么 SonarQube 不存在了?
我看不出有什么理由这样做,并且已经尝试多次清理所有内容,例如删除 helm 版本,删除整个命名空间并尽可能减少我的 values.yaml
。也只使用 helm install stable/sonarqube
而没有任何 values.yaml
,SonarQube pod 仍然缺失。
所有节点在 Kubernetes 1.11.3 上都是 运行,所以我们满足了 SonarQubes 要求的 Kubernetes 1.6+ 的标准。
values.yaml
文件:
replicaCount: 1
service:
type: ClusterIP
port: 80
ingress:
enabled: true
hosts:
- name: sonarqube-test.mycluster.internal
path: /
tls:
- hosts:
- sonarqube-test.mycluster.internal
persistence:
storageClass: nfs-client
size: 10Gi
postgresql:
enabled: true
更新:它应该是什么样子
我在我们的生产集群上尝试了相同的 values.yaml
和相应的调整主机名(这个问题的问题在我们的测试集群上)并且它按预期工作。
helm-install
的相关摘录是这里的第二行:
==> v1/Pod(related)
NAME READY STATUS RESTARTS AGE
sonarqube-postgresql-6765fd498b-gnd8w 0/1 ContainerCreating 0 0s
sonarqube-sonarqube-6c9cc8869c-45tmk 0/1 Init:0/1 0 0s
产品与测试的区别是
- 较新的 Kubernetes 版本(1.13.5 而不是 1.13.3)
- 较新的 Docker 版本(18.9.6 而不是 1.13.1)
我有一个类似的问题是由我们的默认 PSP 引起的,它限制了特权容器。 SonarQube 有一个特权初始化容器来设置 Elasticsearch 所需的 sysctl 参数。通过查看日志,我看到了以下事件:
$ kubectl get events
LAST SEEN FIRST SEEN COUNT NAME KIND SUBOBJECT TYPE REASON SOURCE MESSAGE
8m 1h 21 sonarqube-xxx ReplicaSet Warning FailedCreate replicaset-controller Error creating: pods "sonarqube-xxx-" is forbidden: unable to validate against any pod security policy: [spec.initContainers[0].securityContext.privileged: Invalid value: true: Privileged containers are not allowed]
其他环境目前没有启用 PSP,因为我们正在评估它们。这解释了为什么它在两个 clusters.Since 之间的反应不一致它是一个测试系统,我只是删除了 PSP。作为一个长期解决方案,我想提取一个额外的 values.yaml
参数来禁用特权初始化容器。
我们已经在我们的集群上使用 Ansible 调整了 sysctl 参数,我们的目标是为了安全没有特权容器 reasons.If 你可以使用特权容器,你也可以为特权容器创建一个 PSP .在 Kubernetes 文档中查找更多详细信息:https://kubernetes.io/docs/concepts/policy/pod-security-policy/
我想安装 SonarQube on Kubernets with the corresponding stable Helm Chart。这在第一次起作用。但后来我注意到 LDAP 不起作用,所以我修改了 values.yaml
以安装图表中提到的插件:
plugins:
install:
- "https://github.com/SonarSource/sonar-ldap/releases/download/2.2-RC3/sonar-ldap-plugin-2.2.0.601.jar"
由于 pods 没有更新,我尝试重新安装图表:
helm delete --purge sonarqube
helm install stable/sonarqube --namespace sonarqube --name sonarqube -f values.yaml
问题是现在不再创建与 SonarQube 相关的主要 pod,正如我们在 helm install
结果中看到的那样:
NAME: sonarqube
LAST DEPLOYED: Wed Sep 25 16:04:25 2019
NAMESPACE: sonarqube2
STATUS: DEPLOYED
RESOURCES:
==> v1/Secret
NAME TYPE DATA AGE
sonarqube-postgresql Opaque 1 0s
==> v1/ConfigMap
NAME DATA AGE
sonarqube-sonarqube-config 0 0s
sonarqube-sonarqube-copy-plugins 1 0s
sonarqube-sonarqube-install-plugins 1 0s
sonarqube-sonarqube-tests 1 0s
==> v1/PersistentVolumeClaim
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
sonarqube-postgresql Pending nfs-client 0s
==> v1/Service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
sonarqube-postgresql ClusterIP 10.14.45.251 <none> 5432/TCP 0s
sonarqube-sonarqube ClusterIP 10.14.38.122 <none> 9000/TCP 0s
==> v1beta1/Deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
sonarqube-postgresql 1 1 1 0 0s
sonarqube-sonarqube 1 0 0 0 0s
==> v1beta1/Ingress
NAME HOSTS ADDRESS PORTS AGE
sonarqube-sonarqube sonarqube-test.mycluster.internal 80, 443 0s
==> v1/Pod(related)
NAME READY STATUS RESTARTS AGE
sonarqube-postgresql-b78f87cd7-ht845 0/1 Pending 0 0s
NOTES:
1. Get the application URL by running these commands:
http://sonarqube-test.mycluster.internal
此外 kubectl get pod
几分钟后仅显示 Postgresql pod:
NAME READY STATUS RESTARTS AGE
sonarqube-postgresql-b78f87cd7-ht845 1/1 Running 0 6m
在第一次运行时,我还有一个包含 SonarQube 本身的第二个 pod。可以想象,应用程序无法在 sonarqube-test.mycluster.internal
上访问,它显示 503 内部服务器错误 。
为什么 SonarQube 不存在了?
我看不出有什么理由这样做,并且已经尝试多次清理所有内容,例如删除 helm 版本,删除整个命名空间并尽可能减少我的 values.yaml
。也只使用 helm install stable/sonarqube
而没有任何 values.yaml
,SonarQube pod 仍然缺失。
所有节点在 Kubernetes 1.11.3 上都是 运行,所以我们满足了 SonarQubes 要求的 Kubernetes 1.6+ 的标准。
values.yaml
文件:
replicaCount: 1
service:
type: ClusterIP
port: 80
ingress:
enabled: true
hosts:
- name: sonarqube-test.mycluster.internal
path: /
tls:
- hosts:
- sonarqube-test.mycluster.internal
persistence:
storageClass: nfs-client
size: 10Gi
postgresql:
enabled: true
更新:它应该是什么样子
我在我们的生产集群上尝试了相同的 values.yaml
和相应的调整主机名(这个问题的问题在我们的测试集群上)并且它按预期工作。
helm-install
的相关摘录是这里的第二行:
==> v1/Pod(related)
NAME READY STATUS RESTARTS AGE
sonarqube-postgresql-6765fd498b-gnd8w 0/1 ContainerCreating 0 0s
sonarqube-sonarqube-6c9cc8869c-45tmk 0/1 Init:0/1 0 0s
产品与测试的区别是
- 较新的 Kubernetes 版本(1.13.5 而不是 1.13.3)
- 较新的 Docker 版本(18.9.6 而不是 1.13.1)
我有一个类似的问题是由我们的默认 PSP 引起的,它限制了特权容器。 SonarQube 有一个特权初始化容器来设置 Elasticsearch 所需的 sysctl 参数。通过查看日志,我看到了以下事件:
$ kubectl get events
LAST SEEN FIRST SEEN COUNT NAME KIND SUBOBJECT TYPE REASON SOURCE MESSAGE
8m 1h 21 sonarqube-xxx ReplicaSet Warning FailedCreate replicaset-controller Error creating: pods "sonarqube-xxx-" is forbidden: unable to validate against any pod security policy: [spec.initContainers[0].securityContext.privileged: Invalid value: true: Privileged containers are not allowed]
其他环境目前没有启用 PSP,因为我们正在评估它们。这解释了为什么它在两个 clusters.Since 之间的反应不一致它是一个测试系统,我只是删除了 PSP。作为一个长期解决方案,我想提取一个额外的 values.yaml
参数来禁用特权初始化容器。
我们已经在我们的集群上使用 Ansible 调整了 sysctl 参数,我们的目标是为了安全没有特权容器 reasons.If 你可以使用特权容器,你也可以为特权容器创建一个 PSP .在 Kubernetes 文档中查找更多详细信息:https://kubernetes.io/docs/concepts/policy/pod-security-policy/