Help us understand the problem. What is going on with this article?

Google Cloud Container BuilderからGKE(kubectl)を操作したい

More than 1 year has passed since last update.

Google Cloud Container BuilderからGKE(kubectl)を操作したい

この辺の話です
https://github.com/GoogleCloudPlatform/cloud-builders/issues/22
https://github.com/GoogleCloudPlatform/cloud-builders/pull/2
https://gist.github.com/Philmod/290fdabf386646dbbc0b57b00952b944

GKE上で動いてるcontainerをGoogle Cloud Container Builder(以下GCCB)でbuildしたimageで自動更新したいなというのが出発点。

まずは手順

  1. gcloud commandでclusterに接続するための秘密鍵と証明書をexportしておく
  2. 同一GCP projectのcloud storageに配置しておく
  3. cloudbuild.yamlを書く

1. 秘密鍵と証明書をexport

これをみてよろしくやる

2. 同一GCP projectのcloud storageに配置しておく

  1. で作成したファイルをstorageに配置する

これは特別困ることもないはず普通にbucket作ってuploadするだけ
※ permissionにだけは注意

3. cloudbuild.yaml

ポイントは

  • 更新するイメージをimagesで自動pushされる前に明示的にpush
  • gcloud container起動後にkubectlをinstall
  • cluster接続用のファイルをcloud storageからgsutilでcopy
steps:
- id: 'build-master'
  name: 'gcr.io/cloud-builders/docker'
  args: ['build', '-t', 'gcr.io/$PROJECT_ID/app:$REVISION_ID', '.']
- id: 'push'
  name: 'gcr.io/cloud-builders/docker'
  args: ['push', 'gcr.io/$PROJECT_ID/app:$REVISION_ID']
- id: 'upgrade-server'
  name: 'gcr.io/cloud-builders/gcloud'
  entrypoint: 'bash'
  args:
  - '-c'
  - |
    gcloud components install kubectl
    gsutil cp gs://${YOUR_BUCKET}/ca.pem .
    gsutil cp gs://${YOUR_BUCKET}/client.pem .
    gsutil cp gs://${YOUR_BUCKET}/key.rsa .
    kubectl set image deployment/app app=gcr.io/$PROJECT_ID/app:$REVISION_ID --server https://xxx.xxx.xxx.xxx --client-certificate=client.pem --client-key=key.rsa --certificate-authority=ca.pem

kubectl install済みのcontainerをpushしておいたほうが手っ取り早いけどサンプルとして書いてます。


このやり方の問題点とか疑問

GCCBではpush後のstepが定義できないため、明示的にgcr.ioにpushしてしまっている。(imagesで成果物を指定してる前に 二重pushが発生する)

※コメントを頂いて修正
images を書かなければ二重pushは防げる

そもそもとしてGCCBをCIのような使い方していいものか?

恐らくGCCBではcontainerをbuildすること以外を目的をしておらず
build, push後に何かしたければせっかくpub/subにtopic作ってあるんだから、そこの通知を使って他でやれよってことなんだと思います。(どうなんだろ?)

その考え方自体は妥当性があると思っているので、
pub/sub triggerでCloudFunctionsを起動してなんとか出来ないと模索していたのですが、CloudFunctions上からGKE(kubernetes)のclusterを操作するのができなくはないのですが
すごくめんどくさいんです

issueやPRを追っている限りGCCBでkubectlを使えるようにする予定はあるみたいなのでそこら辺に期待したいです。

今回作業して欲しいなって思った機能としては

  • CloudFunctionsから楽にGKEを操作したい
  • GCCB imagesのpush後step
    • そもそもGCCBをCIとして使おうという考え方が良くない?
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away