My External Storage

Feb 12, 2018 - 3 minute read - Comments - gcp go

[Go]Google Kubernetes Engineのチュートリアルをやるときに注意すること

Google Cloud Platform(GCP)のKubernetes Engine(GKE)でKubernetes(k8s)を動かしたいと以下のチュートリアルを始めた。

Container Engine での Go Bookshelf の実行
https://cloud.google.com/go/tutorials/bookshelf-on-container-engine?hl=ja

GoogleCloudPlatform/golang-samples
https://github.com/GoogleCloudPlatform/golang-samples

2018/02/12時点で以下の点に注意することがあったので、メモしておく。

TL;DR

  • 日本語版のgcloudのインストールページは最新ではない
  • depコマンドなどは使わず、go get -u ./...で依存パッケージを取得する
  • クラスターを作成するときは--cluster-versionでk8sのバージョンを最新にしておく

日本語版のgcloudのインストールページは最新ではない

チュートリアルの「始める前に」の途中にリンクしてあるgcloudのインストールページは最新版のgcloudへのリンクではない。
180.0.0のtarが書いてあるが、2018/02/12時点で最新は188.0.0
以下のコマンドで最新版のgcloudコマンドが取得できる。

$ curl https://sdk.cloud.google.com | bash

depコマンドなどは使わず、go get -u ./...で依存パッケージを取得する

チュートリアル用のgolang-samplesリポジトリはglidedepのような依存管理ツールの設定がされていない。
逆にいうと、常に最新の依存ライブラリに依存している。
2018/02/12現在depコマンドで依存関係を解決すると、satori/go.uuidリポジトリなどの破壊的変更が取り込めないので、
ビルドエラーになってしまう。(Dockerでビルドしてもvendorディレクトリが取り込まれてしまうためエラーになる)
ローカルで依存関係を解決したいときはgo getコマンドで行うこと。

$ cd $GOPATH/src/github.com/GoogleCloudPlatform/golang-samples/getting-started/bookshelf
$ go get -u ./...

クラスターを作成するときは--cluster-versionでk8sのバージョンを最新にしておく

以下のコマンドで利用できるk8sのバージョンとデフォルトが確認できる。

$ gcloud container get-server-config

もしここでdefaultClusterVersion: 1.7.XX-gke.1と表示されたなら、変更するほうがよい。
2018/02/12現在以下の問題があり、1.7.X系はStackDriver周りでエラーが出るので変更しておく必要がある。

Error while sending request to Stackdriver … unsupported protocol scheme
https://github.com/GoogleCloudPlatform/k8s-stackdriver/issues/92

チュートリアルの「Container Engine クラスタの作成」に書いてあるgcloud container clusters createコマンドに
クラスターバージョンを指定するオプションをつけてクラスターを作成する。

$ gcloud container clusters create bookshelf \
  --scopes "cloud-platform" \
  --num-nodes 2 \
  --cluster-version 1.9.2-gke.1

指定できるバージョンはgcloud container get-server-configコマンドでも確認できたが、ドキュメント的には以下に記載してある。

Versioning and Upgrades
https://cloud.google.com/kubernetes-engine/versioning-and-upgrades

終わりに

サンプルリポジトリであるGoogleCloudPlatform/golang-samples自体も 定期的に更新されているので、何か問題があったら一度pullするだけで解決するかもしれない。
実際最初PubSub周りの疎通が出来ていなかったのだが、サンプルリポジトリをpullしてgo get -u ./...することで解決した。

最初、depコマンドで依存関係を解決したため、ビルドエラーを出していた。
PRチャンスかと思ってPRを出し、CIの結果を見て自分が間違えていることに気づいた。
自分が間違えていたのですぐPRは閉じたのだが、メンテナーの方が優しくコメントしてくださってすごいありがたい気持ち。

https://github.com/GoogleCloudPlatform/golang-samples/pull/390#issuecomment-364297421

GKE自体は動かせたので、次はgRPCをGKEで動かしてみる。

参考

Container Engine での Go Bookshelf の実行
https://cloud.google.com/go/tutorials/bookshelf-on-container-engine?hl=ja

GoogleCloudPlatform/golang-samples
https://github.com/GoogleCloudPlatform/golang-samples

GCPのgcloudコマンドをインストールする
https://qiita.com/kentarosasaki/items/2232113b44b016a56adc

Error while sending request to Stackdriver … unsupported protocol scheme
https://github.com/GoogleCloudPlatform/k8s-stackdriver/issues/92

Versioning and Upgrades
https://cloud.google.com/kubernetes-engine/versioning-and-upgrades

gcloud container clusters create
https://cloud.google.com/sdk/gcloud/reference/container/clusters/create

関連記事