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

产品与测试的区别是

我有一个类似的问题是由我们的默认 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/