grasys blog
grasysブログ

GKEのyamlファイルの管理どうしてる?

こんにちはtsunodaです。
もう11月、、小さい頃は年末ってワクワクしましたよね!小さい頃は!

GKEを触ってて思ったのが、
みんなyamlファイルどこにどう置いて管理してるの?
です。
terraformのディレクトリ管理どうしてる?的な。

Dockerfile、cloudbuild.yaml、ingressやpvcなどのyamlファイルの管理について。

GKEでnginxを立ち上げた時を例に、その時私はこうしました、をさらっと紹介しようと思います。基礎です。

置いてみる

まずはDockerfile、GKE用のディレクトリを掘っておもむろにスッと置きます。

gke_nginx
├── Dockerfile

そして今回cloudbuildも使ったので、cloudbuild.yamlもDockerfileと同じ階層に置きます。

gke_nginx
├── Dockerfile
├── cloudbuild.yaml

アクセス先のindex.htmlも同じ階層に置けばイジりやすいよねってことでindex.htmlも同じ階層に。

gke_nginx
├── Dockerfile
├── cloudbuild.yaml
├── index.html

残りの作りたいyamlは以下です。
・configmap.yaml
・deployment.yaml
・ingress.yaml
・pvc.yaml
・service.yaml

この辺は manifest ってことで階層を分けて管理がしたいので、1個ディレクトリを掘りました。
最終的にこんな感じになりました。

gke_nginx
├── Dockerfile
├── cloudbuild.yaml
├── index.html
└── manifests
      ├── configmap.yaml
      ├── deployment.yaml
      ├── ingress.yaml
      ├── pvc.yaml
      └── service.yaml

いかがでしょうか、nginxであればこんな感じで十分かなと思います。

yamlファイル同士の紐付け系

どのファイルにどれ紐付けるっけ?
今回のnginxを例に基礎的なyamlファイルの関連付けについて簡単にまとめ。

○configmap.yaml
ここにnginxのconfを記載、このconfigmapに名前も付ける。

○pvc.yaml
マウントするディスクの名前付ける、サイズなども書く。

○service.yaml
serviceのタイプを決めて、serviceの名前もつける。
selectorでpodも選択しておく。

○ingress.yaml
ingressに名前つける。backendにservice.yamlで作ったserviceの名前指定する。

○deployment.yaml
deployの名前つける。selectorでpod選択する。
configmap.yamlに書いたnginxのconfをコンテナにマウントするべくマウントするpathも含めて記載する。
pvc.yamlで書いたdiskをマウントするべくマウントするpathも含めて記載する。

○cloudbuild.yaml
ここでmanifests/配下のファイルを指定してgke-deployを実行する。

おまけ

実際にサービス運用として環境も分けてわちゃわちゃ作っていくときは、
cloudbuild用ディレクトリ、nginxのDockerfileとconf用ディレクトリ、manifests用ディレクトリといった具合に分けて、
base,overlaysを用いてkustomizeでデプロイなんかも。

gke_sample
├── cloudbuild
│     ├── cloudbuild_dev.yaml
│     ├── cloudbuild_prd.yaml
│     └── cloudbuild_stg.yaml
├── kustomize
│     ├── base
│     │     ├── deployment.yaml
│     │     ├── kustomization.yaml
│     │     └── etc...
│     └── overlays
│             ├── dev
│             │     ├── deployment.yaml
│             │     ├── kustomization.yaml
│             │     └── etc...
│             ├── prd
│             │     ├── deployment.yaml
│             │     ├── kustomization.yaml
│             │     └── etc...
│             └── stg
│                     ├── deployment.yaml
│                     ├── kustomization.yaml
│                     └── etc...
├── kustomize_dev.sh
├── kustomize_prd.sh
├── kustomize_stg.sh
├── manifests
│     ├── dev
│     │     ├── configmap_dev.yaml
│     │     ├── deployment_dev.yaml
│     │     ├── namespace_dev.yaml
│     │     └── etc...
│     ├── prd
│     │     ├── configmap_prd.yaml
│     │     ├── deployment_prd.yaml
│     │     └── etc...
│     └── stg
│             ├── configmap_stg.yaml
│             ├── deployment_stg.yaml
│             └── etc...
└── nginx
       ├── Dockerfile
       └── nginx.conf