GCP Marketplaceを利用してGitLab on GKE

# はじめに
GCPのMarketplaceを利用して、GKE上にGitLabを構築します。
※外部公開のGitLabクラスタとなります。

# 必要なもの
- ドメイン　<font color="red">※今回は独自ドメインですが、取得方法は省略します。</font>
- SSL関連 　<font color="red">※今回は自己署名ですが、作成方法は省略します。</font>
    - SSL証明書
    - 秘密鍵

# 手順
## 1. GCPプロジェクトを作成

```
$ gcloud projects create <project_id>
```
## 2. GitLabを構成
- メニューから[Marketplace]を選択します。  
<img width="282" alt="image-1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/525869/af6835b3-2842-917c-f0bd-ca57e4152660.png">

-  "GitLab"を入力して検索します。
<img width="677" alt="image-2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/525869/1811c93b-0aa2-863b-5e00-e2701429eb5a.png">

- [GitLab]を選択します。
<img width="980" alt="image-3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/525869/d7cfcac9-8e47-c475-47bc-78553d989b10.png">

- [構成]を選択します。
<img width="596" alt="image-4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/525869/54912667-e142-a126-dc2d-8387726ceddf.png">

<font color="blue">※1分程、待機します。</font>

---
### <font color="green">プロジェクトに課金アカウントを設定していない場合</font>
- [課金を有効にする]を選択します。
<img width="614" alt="image-5.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/525869/5dda474c-f4b1-0a98-6d94-dc1936d3b321.png">

- [アカウントを設定]をクリックします。
![image-6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/525869/fefadbe6-9aeb-badf-54f7-3e028171c62e.png)

## ３. クラスタ作成 & GitLabデプロイ
- [Create Cluster]を選択します。（asia-northeast1を選択しました。 ）
![image-7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/525869/9f8938ba-902d-5524-852c-4fc3e4c94e03.png)
<font color="blue">※5分程、待機します。</font>

- [デプロイ]を選択します。  
![image-8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/525869/4e10c12f-70cc-cac9-d782-28861c6fb972.png)
<font color="blue">※5分程、待機します。</font>


- 以下の画面が表示されれば、完了です。
![image-9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/525869/e12af022-cf09-6678-65e3-feb0baff6b61.png)

## 4. 起動確認
### 4-1. クラスタの認証情報を取得  
- デフォルトプロジェクトを設定します。

```
$ gcloud config set project <project_id>
Updated property [core/project].
```

- クラスタの認証情報・エンドポイント情報を取得します。

```
$ gcloud container clusters get-credentials cluster-1
Fetching cluster endpoint and auth data.
kubeconfig entry generated for cluster-1.
```
- クラスタの認証情報・エンドポイント情報を取得します。  

```
$ gcloud container clusters get-credentials cluster-1
```
- 外部IPアドレスを取得します。  

```
$ kubectl get --namespace default ing gitlab-1-unicorn -o jsonpath='{.status.loadBalancer.ingress[0].ip}'
34.84.245.60
```
### 4-2. DNS設定
公開用ドメインに上記IPアドレスを設定するために、DNSにAレコードを登録します。
<font color="red">※今回はCloud DNSを利用しましたが、省略します。</font>

```
<my-fqdn> IN A 34.84.245.60
```

### 4-3. パスワードの取得
- 管理者パスワードを取得します。

```
$ kubectl get secret \
  --namespace default \
  gitlab-1-gitlab-initial-root-password \
  -ojsonpath={.data.password} \
  | base64 --decode
zQ5oJf9P9TBgKpxbKlOBtqJqIx9YEs2j2K66fGhDhnq9tiCbxg5pPLaHPPA8Mm1y
```

### 4-4. SSL設定
- 作成したSSL証明書・秘密鍵をオプションで指定し、TLSを設定します。

```
$ kubectl create secret tls \ 
  --namespace default \
  gitlab-1-wildcard-tls \
  --cert=<cert-file> \
  --key=<key-file> \
  --dry-run -o json \
  | kubectl apply -f -
```

### 4-5. ログイン
- ブラウザを起動して、以下のURLにアクセスします。
 
```
https://gitlab.<my-fqdn>/
```

- ユーザに「root」・パスワードに「先の手順で取得したパスワード」を入力してログインします。
<img width="1003" alt="image-10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/525869/0ea91c2f-26db-c145-d35e-c39a9b86d0eb.png">