SonarQube는 하위에 여러 오픈소스가 배포된다. PostgreSQL, ElasticSearch 를 포함하여 여러 오픈소스가 install된다.
SonarQube 공식사이트에 Docker 기반 배포에 대한 가이드가 있는데, 약간 부실하다. 디테일이 빠져있다.
https://docs.sonarsource.com/sonarqube/8.9/setup-and-upgrade/deploy-sonarqube-on-kubernetes/
Deploy SonarQube on Kubernetes
Learn how to deploy SonarQube on Kubernetes.
docs.sonarsource.com
우선 서두에 언급한 바와 같이 SonarQube는 여러 컨테이너로 구성되어 있는데, 이중 sonarqube -postgresql-0 이라는 컨테이너는 PV를 별도로 생성해주어야 한다.
필자의 경우 PV를 사용하는 컨테이너가 있으면 배포될 노드를 지정한다. 공유볼륨을 사용하면 모르겠지만 그냥 로컬 볼륨을 할당할 수 있기 때문에 배포할 노드를 지정하는것이 편하다.
SonarQube 배포할 Worker Node에도 Label을 추가하자
labels:
app: sonarqube
sonarqube: "true"
이제 노드를 고정시켜 배포할 수 있도록 조치완료하였으므로 Physical Volume을 해당 노드에 생성한다.
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-sonarqube
namespace: sonarqube
labels:
app.kubernetes.io/instance: sonarqube
app.kubernetes.io/name: postgresql
role: primary
spec:
capacity:
storage: 20Gi
accessModes:
- ReadWriteOnce
hostPath:
path: /data/sonarqube
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: sonarqube
operator: In
values:
- "true"
그리고 물리적인 로컬볼륨의 권한을 바꾸어 주어야 한다. 왜냐하면 sonarqube-postgresql이 runAsUser 가 1001이기 때문이다.
$ chown -R 1001:1001 /data
이제 helm으로 SonarQube를 배포한다.
$ helm repo add sonarqube https://SonarSource.github.io/helm-chart-sonarqube
$ helm repo update
$ kubectl create namespace sonarqube
$ helm upgrade --install -n sonarqube sonarqube sonarqube/sonarqube
이때 helm으로 배포된 sonarqube-postgresql StatefulSet 에 아래와 같은 Selector가 적용되어 있는지 확인하자. 없다면 추가.
selector:
matchLabels:
app: sonarqube
sonarqube-postgresql이 잘 Running되었는지 확인하고..
만약 sonarqube-sonarqube 가 말썽인 경우 다음 포스팅을 참고바란다. 아마 initContainer에서 permissoin deny가 발생하였을 것이다.
https://armyost.tistory.com/441
permission denied on key "vm.max_map_count", ignoring 오류 해결하기
컨테이너로 오픈소스를 배포하다보면 아래와같이 init container에서 권한오류가 발생하는 경우가 종종있다. 특히 ElasticSearch 를 배포하는 경우 자주 발생한다. sysctl: permission denied on key "vm.max_map_coun
armyost.tistory.com
다음과 같이 잘 Running 중이라면 이제 Ingress를 뚤어 서비스로 접속해보자.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: sonar-ingress
namespace: sonarqube
annotations:
nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
spec:
ingressClassName: "nginx"
rules:
- host: sonar.armyost.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: sonarqube-sonarqube
port:
number: 9000
접속해보면 잘 뜬다.
'PaaS > Kubernetes' 카테고리의 다른 글
Failed to scrape node .. because it doesn't contain any IP SANs 오류 해결 (0) | 2023.11.20 |
---|---|
permission denied on key "vm.max_map_count", ignoring 오류 해결하기 (2) | 2023.11.19 |
k8s init Container에서 오류가 발생했을때 트러블 슈팅방법 (0) | 2023.11.16 |
k8s 에서 Database Provisioning시 Permission denied (0) | 2023.11.16 |
KubeScape 란? (0) | 2023.11.15 |