はじめに
HelmでローカルにSonarQubeを構築してみます。
今回はHelmとhelmfileを使います。helmfileについては、下記で解説していますが、Helmチャートを宣言的にデプロイできるツールです。

【Helm】helmfile使ってみる
はじめにHelmfileについてざっくり解説し、シンプルな例で実際に使ってみたいと思います。Helmについては下記で解説しています。HelmfileとはHelmfileとは、Helmチャートを宣言的にデプロイするツールです。Helmfile...
SonarQubeとは
SonarQubeとは、コードの品質を保つための静的解析ツールです。
CIパイプラインに組み込むことで、継続的にコードの品質をチェック、改善することができるようになります。
用意するファイルとディレクトリ構成
用意するファイルは下記2つになります。
.
├── helmfile.yaml
└── values.yaml
helmfile.yamlの作成
helmfile.yaml
は下記の通りです。
releases:
- name: sonarqube
namespace: sonarqube
chart: sonarqube/sonarqube
values:
- ./values.yaml
values.yamlの作成
values.yaml
は下記の通りです。基本的にデフォルトの値のままにしていますが、一部のみ抜粋してみました。
deploymentType: "StatefulSet"
replicaCount: 1
edition: "community"
image:
repository: sonarqube
tag: 9.8.0-{{ .Values.edition }}
service:
type: ClusterIP
externalPort: 9000
internalPort: 9000
plugins:
install: []
resources:
limits:
cpu: 800m
memory: 4Gi
requests:
cpu: 400m
memory: 2Gi
# sonarProperties:
# sonar.forceAuthentication: true
# sonar.security.realm: LDAP
# ldap.url: ldaps://organization.com
postgresql:
enabled: true
postgresqlUsername: "sonarUser"
postgresqlPassword: "sonarPass"
postgresqlDatabase: "sonarDB"
service:
port: 5432
resources:
limits:
cpu: 2
memory: 2Gi
requests:
cpu: 100m
memory: 200Mi
persistence:
enabled: true
accessMode: ReadWriteOnce
size: 20Gi
同じデータベースに接続するSonarQubeのインスタンスは1より大きくすることができないようで、レプリカ数は0か1しかサポートしていないみたいです。
helm-chart-sonarqube/values.yaml at master · SonarSource/helm-chart-sonarqube
ContributetoSonarSource/helm-chart-sonarqubedevelopmentbycreatinganaccountonGitHub.
helmfileでデプロイ
Helmとhelmfileを使ってデプロイしていきます。
まずは、チャートのリポジトリを追加します。
helm repo add sonarqube https://SonarSource.github.io/helm-chart-sonarqube
helm repo update
helmfileでデプロイします。
helmfile apply
デプロイされたものを確認してみます。
❯ kubectl get -n sonarqube sts,pod,svc,pv,pvc
NAME READY AGE
statefulset.apps/sonarqube-postgresql 1/1 39m
statefulset.apps/sonarqube-sonarqube 1/1 39m
NAME READY STATUS RESTARTS AGE
pod/sonarqube-postgresql-0 1/1 Running 1 (21m ago) 39m
pod/sonarqube-sonarqube-0 1/1 Running 1 (21m ago) 39m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/sonarqube-postgresql ClusterIP 10.100.200.104 <none> 5432/TCP 39m
service/sonarqube-postgresql-headless ClusterIP None <none> 5432/TCP 39m
service/sonarqube-sonarqube ClusterIP 10.106.122.133 <none> 9000/TCP 39m
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/pvc-e8242d96-31c2-45b4-84c9-e48f90633465 20Gi RWO Delete Bound sonarqube/data-sonarqube-postgresql-0 hostpath 39m
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/data-sonarqube-postgresql-0 Bound pvc-e8242d96-31c2-45b4-84c9-e48f90633465 20Gi RWO hostpath 39m
アクセスしてみる
ポートフォワードすると、ローカルからアクセスできるようになります。
kubectl -n sonarqube port-forward svc/sonarqube-sonarqube 9000:9000