GitLab Operatorを使用してGKEにGitLab環境を用意する

# はじめに
GitLab Operatorは、Kubernetesクラスタ内でGitLabをデプロイ、構成、および管理するためのオープンソースツールです。GKE（Google Kubernetes Engine）は、Google Cloud PlatformでホストされているマネージドKubernetesサービスです。GKEを使用すると、開発者や運用チームは、クラスタを手動でセットアップする必要なく、簡単にKubernetesクラスタを構築および管理できます。GitLab OperatorをGKE上で使用すると、GitLabの管理と構成がより簡単になり、より効率的な方法でアプリケーションをデプロイおよび実行できます。

![logo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229633/1a2014fe-80fa-1fa4-6868-b905d0c22be4.png)

https://docs.gitlab.com/operator/

GitLab Operatorを使用してGKEにGitLab環境を用意する方法をざっくりとまとめました。

## GitLab Operatorのインストール方法について
### 1. Kubernetesクラスタの準備
GitLab Operatorをインストールする前に、Kubernetesクラスタを用意する必要があります。Kubernetesクラスタは、マスターノードとワーカーノードから構成され、それぞれのノードが正しく動作していることを確認してください。

#### GKEクラスタの作成
Google Cloud ConsoleからGKEクラスタを作成します。GKEクラスタは、Kubernetesの実行環境を提供します。以下の手順に従って、GKEクラスタを作成します。

- Google Cloud Consoleにログインします。
- メニューから「Kubernetes Engine」を選択します。
- 「クラスタ」ページを開き、「クラスタを作成する」をクリックします。
- 必要な情報を入力し、クラスタを作成します。必要な情報は、クラスタ名、ゾーン、ノードの数、ノードのタイプなどです。

### 2. Helmのインストール
Helmは、Kubernetesのパッケージマネージャーであり、複数のKubernetesオブジェクトを含むアプリケーションを作成、共有、および管理するためのツールです。

![helm_logo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229633/9daa9568-081d-3e51-d98f-1afe5dd18089.png)

https://helm.sh/docs/intro/install/

GitLab OperatorはHelmを使ってインストールするため、Helmをインストールする必要があります。
以下のコマンドを実行して、Helmをインストールします。
```
$ curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
```
バージョンを確認します。
```
$ helm version
```
以上で、Helmが正常にインストールされました。

#### 補足
**Tillerのインストール**
Helm v3では、Tillerは不要となっています。そのため、インストールの必要はありません。

**Helmリポジトリの追加** 
Helmリポジトリを追加することで、Helmチャートをインストールできるようになります。
```
$ helm repo add stable https://charts.helm.sh/stable
```

**Helmのアップグレード**
Helmをアップグレードする場合は、以下のコマンドを実行します。 
```
$ helm repo update
```

### 3.GitLab Operatorのインストール
GitLab Operatorをインストールするために、以下の手順に従います。

- GitLab Operatorのリリースページから、最新のリリースをダウンロードします。
- ダウンロードしたリリースを展開し、GitLab Operatorのマニフェストファイルを取得します。
- GitLab Operatorのマニフェストファイルを編集して、必要に応じて設定を変更します。
- 以下のコマンドを実行して、GitLab Operatorをインストールします。
```
$ helm install gitlab-operator ./gitlab-operator-<version>.tgz
```
今回は以下のコマンドを実行して、GitLab Operatorをインストールします。
```
$ helm install gitlab-operator ./gitlab-operator-1.9.0+chart.1.tgz
```
以下のコマンドを実行して、GitLab Operatorが正しくインストールされたことを確認します。
```
$ kubectl get deployment -n gitlab-managed-apps
```

以上がGitLab Operatorのインストール方法になります。ただし、バージョンやディレクトリ構造などが変更されることがあるため、公式ドキュメントを参照しながらインストールすることをおすすめします。

https://docs.gitlab.com/operator/installation.html

## GitLabのインストールとセットアップについて
### GitLabのインストール
GitLab Operatorを使用してGitLabをインストールするために、以下の手順に従います。

GitLab Operatorを使用して、GitLabをインストールするには、GitLabリソースを定義するカスタムリソース定義（CRD）を作成する必要があります。
例えば、以下のようなGitLab CRDを定義できます。

```
apiVersion: gitlab.com/v1
kind: GitLab
metadata:
  name: example-gitlab
spec:
  hostname: <gitlab-url>
  initialRootPassword: <password>
```
`<gitlab-url>` はGitLabインスタンスのURL、 `<password>` は初期管理者パスワードを指定します。

GitLabのインスタンスを作成します。
```
$ kubectl apply -f gitlab.yaml
```

これで、GitLab Operatorを使用してGitLabをインストールする手順が完了しました。

### GitLabのセットアップ
GitLabがインストールされたら、WebブラウザからGitLabにアクセスし、初期セットアップを行います。初期セットアップには、管理者ユーザーの作成やGitLabの設定が含まれます。

**1. ブラウザからGitLabのURLにアクセスし、管理者アカウントを作成します。**
**2. GitLabの管理者ダッシュボードにログインします。**
**3. 管理者ダッシュボードで、以下の設定を行います。**
* メール設定：SMTPサーバー、送信元アドレスなどの設定
* SSL設定：HTTPS接続を有効にする設定
* LDAP/AD設定：LDAP/ADを使用する場合の設定
* サポート設定：GitLabサポートからのサポートIDを取得する設定
* GitLabの権限設定を行います。

**4. プロジェクトを作成し、アクセス制御を設定します。**
* ユーザーとグループの権限を設定します。
* パブリックリポジトリのアクセス設定を行います。

**5. GitLabの機能拡張を設定します。**
* 統合設定：Slack、JIRA、Redmineなどのサードパーティアプリケーションとの統合設定
* Webフック設定：外部サービスとの連携設定
* CI/CD設定：CI/CDパイプラインの設定

以上がGitLabのセットアップ手順です。必要に応じて、セキュリティ設定やバックアップ設定など、その他の設定を行うことができます。

## 参考になる本
* [GCPの教科書](https://amzn.to/3FjfKIV)
* [GCPの教科書II 【コンテナ開発編】](https://amzn.to/41XfIQC)
* [GitLab実践ガイド impress top gearシリーズ](https://amzn.to/3FcPNun)
* [インフラCI実践ガイド Ansible/GitLabを使ったインフラ改善サイクルの実現](https://amzn.to/3JxxvH3)