2019年2月2日土曜日

プログラマのためのGoogle Cloud Platform入門4章

さて、2章も3章もうまくいっていないまま第4章に突入。

やっぱり本の内容が古くなっているのでメニューから選ぼうにもコンテナクラスタが無い。


とりあえずContainerEngineでなくKubernetesEngineだろうと思うのでそこのクラスタを選択。
その後も2019年2月現在とは大分違うUI。
やっぱりもう紙の本の時代じゃないんだなあ・・・。

それはさておき先に進んで、Cloud Shellからリージョンを指定してDataStoreを指定する部分。
CloudShellから実行せよという。

前にスマホから打ち込む時に躓いてたりしてたGCPホーム画面の右上にある>_ですな。

GCEでVMインスタンスを作った時にここのインスタンスでSSH接続して出てくるコンソールではなく、プロジェクトのシェルでいいようだ。

ということはたくさんコンテナ作ってそれが関連の無いときはプロジェクト分けた方がいいのかな。

@cloudshell:~ (gke-gobang-app-example-230411)$ kubectl get nodesNAME STATUS ROLES AGE VERSIONgke-gobang-cluster-gobang-cluster-8cc326eb-hm3r Ready <none> 16m v1.11.6-gke.2gke-gobang-cluster-gobang-cluster-8cc326eb-s544 Ready <none> 16m v1.11.6-gke.2gke-gobang-cluster-gobang-cluster-8cc326eb-w3vt Ready <none> 16m v1.11.6-gke.2

続いてDockerイメージなるものを作成していきます。
Dockerって何ぞ?状態です。
入門書だけあってそこから解説してくれているので助かります(ググれ)

OSなんかのインフラ設定とミドル周りの記述をひとまとめにして管理するミドルのようです。
そもそもこの章はGKEの利用例についての説明でGKEとはなんぞ・・・?GoogleContainerEngine(GKE)だそうです。(略称と違うやん)

Dockerというのはそのコンテナ管理ツールの事で、GKEの”K"の部分がKebernetes(クーバーネティス)。クーバーネティスというのはGoogle独自のコンテナオーケストなんとかツールだそうです。

一章から三章まで扱っていたのがGCE(GoogleComputeEngine)。
今回はGoogleContainerEngine(GKE)。

なんでこんな名前にしたんだろう、紛らわしい。Engineっている?

まあとにかく今はGoogle独自のコンテナ管理ツールのサービスでDockerを扱うのだ!

◇◆◇

その後もとりあえず順調に進むものの文章が曖昧。
”実行してください”と”このように指定します”では全然違う。
解説?指示?どっち?


@cloudshell:~/gke-gobang-app-example (gke-gobang-app-example-230411)$ FROM debian-bash: FROM: command not found@cloudshell:~/gke-gobang-app-example (gke-gobang-app-example-230411)$ from debianfrom: can't read /var/mail/debian

うーん、駄目みたいですね・・・。
そんなコマンド無いって!

誰かこの本出版前に校正してあげて!
「プログラマのためのGCP入門」ってわりにはネットワークとはなんぞ、フェイルオーバーってとかGCP以前の部分から何ページも説明があったり、GCPの部分で説明不足だったりする・・・。プログラマだったらそんな説明要らんでしょう(私には勉強になる部分多いですが)。

Dockerファイルの記述の説明なんか要らないでしょう。
末尾にDocker1.11.2を元に本書を記載していますとあるけど、どうせすぐに古くなるし試しにバージョン情報出力するとやっぱ古い。
やたら長々とDockerコマンドの解説があるので何かと思ったら本書を執筆した中井悦司氏と阿佐志保氏がDocker本を書いているのでそのせいのようだった。
数ページ進むと参考としてこの人達が書いたDocker本の宣伝がある。

それは別途ググるからGKEでサンプルアプリケーションを起動するまでの概要の説明と実際にやるコマンドに注力して貰えませんかね・・・どこから解説と実行例が切り替わるのか。

2章3章がうまくいかないのはたぶん私が何処か間違えているんだと思うけど、4章は酷い、監修しているとは思えない。


@cloudshell:~/gke-gobang-app-example (gke-gobang-app-example-230411)$ API_URL=http://localhost:8080/api/vi client/client.py Welcome to Gobang (Five in a Row) game.Game ID (0:new game)? 0Traceback (most recent call last): File "client/client.py", line 71, in <module> id = new_game() File "client/client.py", line 27, in new_game return response.json()['id'] File "/usr/local/lib/python2.7/dist-packages/requests/models.py", line 897, in json return complexjson.loads(self.text, **kwargs) File "/usr/lib/python2.7/json/__init__.py", line 339, in loads return _default_decoder.decode(s) File "/usr/lib/python2.7/json/decoder.py", line 363, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "/usr/lib/python2.7/json/decoder.py", line 381, in raw_decode raise ValueError("No JSON object could be decoded")ValueError: No JSON object could be decoded@cloudshell:~/gke-gobang-app-example (gke-gobang-app-example-230411)$ vi /usr/lib/python2.7/json/decoder.py @cloudshell:~/gke-gobang-app-example (gke-gobang-app-example-230411)$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES3be02eb82ab4 frontend:v1.0 "/opt/gobang/bin/fro…" 20 minutes ago Up 20 minutes 0.0.0.0:8080->8080/tcp frontend0bdcc567713c backend:v1.0 "/opt/gobang/bin/bac…" 22 minutes ago Up 22 minutes 8081/tcp backend@cloudshell:~/gke-gobang-app-example (gke-gobang-app-example-230411)$

結局プロセスとしてはちゃんと起動しているもののJSONのエラーが出た。
Webサイトで構文チェックしてくれるサイトがあるのでコピーしてみると構文エラーがある。ダメじゃん・・・。

こちらでいじっている部分ではないので、諦めて先へ。

@cloudshell:~/gke-gobang-app-example (gke-gobang-app-example-230411)$ gcloud docker -- push gcr.io/$PROJECT_ID/frontend:v1.0WARNING: `gcloud docker` will not be supported for Docker client versions above 18.03.As an alternative, use `gcloud auth configure-docker` to configure `docker` touse `gcloud` as a credential helper, then use `docker` as you would for non-GCRregistries, e.g. `docker pull gcr.io/project-id/my-image`. Add`--verbosity=error` to silence this warning: `gcloud docker--verbosity=error -- pull gcr.io/project-id/my-image`.See: https://cloud.google.com/container-registry/docs/support/deprecation-notices#gcloud-dockerThe push refers to repository [gcr.io/gke-gobang-app-example/frontend]cdbf029a16bb: Preparinge3280de533d5: Preparinga2e66f6c6f5f: Preparing-example before performing this operation.

次も駄目でした。gcloudのサブコマンドとして使用する事でレジストリへのアクセスが行われるって本にはあるけど、駄目みたいですね。

あとコンテナのイメージに重大な脆弱性がみつかりましたとかいう通知が来たし辞めた方がいいのかな・・・?
この後はGKEにアップロードできないので何も出来ないのだけれど、複数のコンテナをまとめたPODという単位でサービスを立ち上げる。で、対戦機能があるアプリケーションのAI思考側を司るバックエンドのコンテナをバージョンアップする。GKEにローリングアップデート機能があり、バックエンドのコンテナが新しくなると一個ずつ切り替わっては古い方が削除されていくのでサービスを停止せずにバージョンアップが可能なのだという感じの説明がありました。
プロジェクトを削除して今宵は終了。うーん、これは酷い(私が)
全然うまくいかないやん・・・

1 件のコメント:

  1. I have a same issue.. T.T

    Welcome to Gobang (Five in a Row) game.
    Game ID (0:new game)? 0
    Traceback (most recent call last):
    File "client/client.py", line 74, in
    id = new_game()
    File "client/client.py", line 30, in new_game
    return response.json()['id']
    File "/usr/local/lib/python2.7/dist-packages/requests/models.py", line 897, in json
    return complexjson.loads(self.text, **kwargs)
    File "/usr/lib/python2.7/json/__init__.py", line 339, in loads
    return _default_decoder.decode(s)
    File "/usr/lib/python2.7/json/decoder.py", line 364, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
    File "/usr/lib/python2.7/json/decoder.py", line 382, in raw_decode
    raise ValueError("No JSON object could be decoded")
    ValueError: No JSON object could be decoded

    返信削除