SonarQubeをkubernetesで動かす
はじめに
あまりkubernetesに詳しくありませんが、SonarQubeを立てる必要があったため、手っ取り早く実施した事を記録しました。
SonarQubeは、導入が楽なDocker版を利用し、社内の他のインスタンスと整合性をとるためV7.9 LTS版を選択してます。
kubenetes環境は、諸事情によりIBM Cloudを利用しています。
最初に、dockerhubのsonarqubeのページを一読しておきましょう。
https://hub.docker.com/_/sonarqube
kubernetesクラスターの作成
kubernetesクラスターの作成の作成は、オプションが多いためIBM Cloudの画面上から実施しました。
可用性がそこまで必要ないため、1インスタンスで稼働する想定です。SonarQube自身も、複数のインスタンスで設定やDBを共用する事はサポートされないとしています。
kubernetesのバージョンは選択可能な最新を選びました。
スペックも最小にものに変更し、ワーカーノードを1つに変更しています。
あとは、デフォルト値で作成し、作成完了までしばらくまちます。
クラスター作成後、自分の端末からkubectlが実行できる環境を整えます。ここは、作成したクラスターのアクセスというページでやるべきことがおおよそわかります。
CLIツールやログインを済ませたら、以下のコマンドでクラスターと接続します。
ibmcloud ks cluster config --cluster bvXXXXXXXXXXXXXXXXhg
Persistent Volumeの作成
設定や情報をコンテナ外でのこすため、以下のPersistent Volumeを作成します。
- /opt/sonarqube/conf: for Version 7.9.x only, configuration files, such as sonar.properties.
- /opt/sonarqube/data: data files, such as the embedded H2 database and Elasticsearch indexes
- /opt/sonarqube/logs: contains SonarQube logs about access, web process, CE process, Elasticsearch logs
- /opt/sonarqube/extensions: plugins, such as language analyzers
pvc用のyamlの基本形が以下です。nameを変更して4つ分作成しました。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: sonar-pvc-conf
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
storageClassName: default
つづいて、pvcを作成。
kubectl apply -f pvc-conf.yaml
kubectl apply -f pvc-data.yaml
kubectl apply -f pvc-logs.yaml
kubectl apply -f pvc-ext.yaml
4つがBound状態になるまで待ちます。
kubectl get pvc
Deploymentの作成
続いて本丸のDeploymentを作成します。
なお、4つのpvcをマウントする必要がありますが、IBM Cloudでは初期状態で権限エラーとなるため、
initContainerでディレクトリ権限を変更する処理を追加しています。
apiVersion: apps/v1
kind: Deployment
metadata:
name: sonarqube-deploy
spec:
replicas: 1
selector:
matchLabels:
app: sonarqube
template:
metadata:
labels:
app: sonarqube
spec:
initContainers:
- name: volume-mount-hack
image: busybox
command: ["sh", "-c", "chown -R 999:999 /opt/sonarqube/conf && chown -R 999:999 /opt/sonarqube/data && chown -R 999:999 /opt/sonarqube/logs && chown -R 999:999 /opt/sonarqube/extensions"]
volumeMounts:
- mountPath: "/opt/sonarqube/conf"
name: sonar-pvc-conf
- mountPath: "/opt/sonarqube/data"
name: sonar-pvc-data
- mountPath: "/opt/sonarqube/logs"
name: sonar-pvc-logs
- mountPath: "/opt/sonarqube/extensions"
name: sonar-pvc-extensions
containers:
- name: sonarqube
image: sonarqube:lts
ports:
- containerPort: 9000
volumeMounts:
- mountPath: "/opt/sonarqube/conf"
name: sonar-pvc-conf
- mountPath: "/opt/sonarqube/data"
name: sonar-pvc-data
- mountPath: "/opt/sonarqube/logs"
name: sonar-pvc-logs
- mountPath: "/opt/sonarqube/extensions"
name: sonar-pvc-extensions
volumes:
- name: sonar-pvc-conf
persistentVolumeClaim:
claimName: sonar-pvc-conf
- name: sonar-pvc-data
persistentVolumeClaim:
claimName: sonar-pvc-data
- name: sonar-pvc-logs
persistentVolumeClaim:
claimName: sonar-pvc-logs
- name: sonar-pvc-extensions
persistentVolumeClaim:
claimName: sonar-pvc-extensions
Deploymentを作成します。
kubectl apply -f sonar-deploy.yaml
Podが上がってきてSonarQubeの初期化が走るので、SonarQubeの上がったというログが出るまで待ちます。
kubectl get pods
でpodのidを控えて
kubectl logs <控えたid>
ログの最後に以下が出ていたら正常起動です。
2020.12.02 08:38:46 INFO app[][o.s.a.SchedulerImpl] Process[ce] is up
2020.12.02 08:38:46 INFO app[][o.s.a.SchedulerImpl] SonarQube is up
(option) Serviceの作成
VPN経由でアクセスさせるべきですが、ここではSonarQubeをVPNを利用せずに外部からアクセスできるようにします。
apiVersion: v1
kind: Service
metadata:
labels:
app: sonarqube
name: sonar-lb
spec:
ports:
- port: 80
protocol: TCP
targetPort: 9000
selector:
app: sonarqube
type: LoadBalancer
上記のyamlファイルよりServiceを作成します。
kubectl apply -f sonar-service.yaml
外部IPアドレスを確認します。
kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP xxx.xx.0.1 <none> 443/TCP 141m
sonar-lb LoadBalancer xxx.xx.xx.xxx yyy.yyy.yyy.yyy 80:31105/TCP 86m
上記の、EXTERNAL-IPの値を確認したら、ブラウザでアクセスしてみましょう。
SonarQubeのセットアップ
SonarQubeの画面が出てきたら、最初にadminのパスワードを変更しましょう。
パスワードがバレバレなのでソースコードが盗まれてしまいます。
Author And Source
この問題について(SonarQubeをkubernetesで動かす), 我々は、より多くの情報をここで見つけました https://qiita.com/junn8k/items/2522770e65c162ba5698著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .