AKS(Azure Kubernetes Service)とGitLab CI/CDを連携させるときの備忘録


# 概要
- `AKS`と`GitLab CI/CD`を連携させたい
- 今回は`Ubuntu`でセットアップ
- ローカルで`k8s`を使用するときは`minikube`を使用する

# 参考
https://docs.gitlab.com/ee/user/clusters/agent/ci_cd_workflow.html

https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/

https://learn.microsoft.com/ja-jp/cli/azure/install-azure-cli-linux?pivots=apt

https://minikube.sigs.k8s.io/docs/start/

# Minikubeを使用してローカル環境でKubernetesを動かす
## インストール
```
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
```
## クラスターをスタート
```
minikube start
```
## クラスターとのアクセス
※適切なバージョンのkubectlをダウンロード
```
minikube kubectl -- get po -A
```
## デプロイ
```
kubectl create deployment hello-minikube --image=kicbase/echo-server:1.0
kubectl expose deployment hello-minikube --type=NodePort --port=8080
```
## デプロイができているかの確認
```
kubectl get services hello-minikube
```
## ブラウザでの確認
```
kubectl port-forward service/hello-minikube 7080:8080
```

## minikubeクラスターを消すとき
```
minikube delete --all
```


# Linux に Azure CLI をインストールする（オプション）
## インストール プロセスに必要なパッケージを取得
```
sudo apt-get update
sudo apt-get install ca-certificates curl apt-transport-https lsb-release gnupg
```

## Microsoft の署名キーをダウンロードしてインストール
```
curl -sL https://packages.microsoft.com/keys/microsoft.asc |
    gpg --dearmor |
    sudo tee /etc/apt/trusted.gpg.d/microsoft.gpg > /dev/null
```

## Azure CLI ソフトウェア リポジトリを追加
※ドキュメント通りに進めると、`Malformed entry 1 in list file /etc/apt/sources.list.d/azure-cli.list (Component)`というエラーが発生するので以下コマンドに変更
```
echo "deb [arch=amd64] https://packages.microsoft.com/repos/azure-cli/ wheezy main" | \
     sudo tee /etc/apt/sources.list.d/azure-cli.list
```

## リポジトリ情報を更新し、azure-cli パッケージをインストール
```
sudo apt-get update
sudo apt-get install azure-cli
```

# Gitlabにエージェントを登録する
- `Connect a cluster`を押下し、名前を入力する（なんでもOK）
- access token が発行されるので保存しておく
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2684448/6287907f-9b37-5489-b040-8ebb580dd4aa.png)
- 以下のようなコマンドが発行されるのでコピーしておく
```
helm repo add gitlab https://charts.gitlab.io
helm repo update
helm upgrade --install test-agent gitlab/gitlab-agent \
    --namespace gitlab-agent-test-agent \
    --create-namespace \
    --set image.tag=v15.7.0-rc1 \
    --set config.token=dtsVBzNXXNibasVA8xq8_4mZkxdU1MLxicMnqZ5ZA7JEHYvMsw \
    --set config.kasAddress=wss://kas.gitlab.com
```
# クラスターにエージェントを登録する
- [helm](https://helm.sh/docs/intro/install/)をインストールする
- ターミナルを開く
- 先ほどコピーしたコマンドを実行する

```
NAME: test-agent
LAST DEPLOYED: Wed Dec  7 17:23:31 2022
NAMESPACE: gitlab-agent-test-agent
STATUS: deployed
REVISION: 1
TEST SUITE: None
```

# .gitlab-ci.yml ファイルの編集
```yml
deploy:
  image:
    name: bitnami/kubectl:latest
    entrypoint: ['']
  script:
    - kubectl config get-contexts
    - kubectl config use-context path/to/agent/repository:agent-name
    - kubectl get pods
```
※今回は`minikube`を使用

# デプロイ完了
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2684448/4ad299bb-888b-1906-e5c2-e64a0305deaf.png)

# Troubleshooting
minikube startできないとき。。。
以下を試す。

```
$ minikube stop
$ minikube delete
$ rm -rf ~/.minikube
$ minikube start
```