HelmでローカルにSonarQubeを構築してみる

スポンサーリンク

はじめに

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

参考

タイトルとURLをコピーしました