【问题标题】:SonarQube application pod missing in related pod list after helm installationhelm 安装后,相关 pod 列表中缺少 SonarQube 应用程序 pod
【发布时间】:2020-01-25 18:32:32
【问题描述】:

我想在 Kubernetes 上安装 SonarQube 和对应的 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"

由于 pod 没有更新,我尝试重新安装图表:

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 吊舱仍然丢失。

所有节点都在 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

从 prod 到 test 的区别是

  • 较新的 Kubernetes 版本(1.13.5 而不是 1.13.3)
  • 较新的 Docker 版本(18.9.6 而不是 1.13.1)

【问题讨论】:

标签: kubernetes sonarqube kubernetes-helm


【解决方案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,因为我们正在评估它们。这就解释了为什么它在两个集群之间的反应不一致。由于它是一个测试系统,我只是删除了 PSP。作为一个长期的解决方案,我想拉一个额外的values.yaml 参数来禁用特权初始化容器。

我们已经在集群上使用 Ansible 调整了 sysctl 参数,出于安全原因,我们的目标是不使用特权容器。如果您对特权容器没问题,您还可以为特权容器创建 PSP。在 Kubernetes 文档中查找更多详细信息:https://kubernetes.io/docs/concepts/policy/pod-security-policy/

【讨论】:

    猜你喜欢
    • 2020-11-13
    • 2021-01-10
    • 2022-12-06
    • 2021-08-01
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 2016-09-13
    • 1970-01-01
    相关资源
    最近更新 更多