我想在SonarQube上安装stable Helm Chart在Kubernets上。这是第一次。但是后来我注意到LDAP不起作用,所以我修改了values.yaml
来安装图表中提到的插件:
plugins:
install:
- "https://github.com/SonarSource/sonar-ldap/releases/download/2.2-RC3/sonar-ldap-plugin-2.2.0.601.jar"
由于吊舱未更新,因此我尝试重新安装图表:
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窗格:
NAME READY STATUS RESTARTS AGE
sonarqube-postgresql-b78f87cd7-ht845 1/1 Running 0 6m
在第一次运行中,我还有一个包含SonarQube本身的第二个豆荚。可以想象,该应用程序在sonarqube-test.mycluster.internal
上无法访问,它显示 503内部服务器错误。
为什么SonarQube不再存在?
我没有理由这样做,并且已经尝试多次清理所有内容,例如删除helm版本,删除整个命名空间以及将我的values.yaml
减少到最小。 SonarQube窗格也仅使用helm install stable/sonarqube
而没有任何values.yaml
,因此仍不存在。
所有节点都在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
从产品到测试的差异是
答案 0 :(得分: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/