2017-07 / 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

2017-07-05 (水)

WEB+DB PRESS Vol.99の「実践Kubernetes」の第4章でつまづいたメモ #wdpress [Kubernetes]

先月からなぜか Kubernetes の素振りをしています。

職場の若者が先日発売された『WEB+DB PRESS Vol.99』の牧さんの記事、
「実践Kubernetes」をオススメしていたので、流れで実際に動かしてみま
した。

この記事は先週の『Kubernetes Meetup Tokyo #5』[2017-06-29-1] でも
オススメされていました。




第4章で実際に GKE を使うことになるのですが、記事に書いてあるコマ
ンドや設定はそのままでは動かず、大変難儀しました。誰かの役に立つか
もしれないので、人知れずメモしておきます。

注意点


私は Kubernetes(以下 k8s)を使い始めたばかりです。

今回の件が、記事で使われているバージョン(1.6.1)と、現在 GKE で使
えるバージョン(1.6.6)の違いによるものなのか、本当に記事が間違っ
ているのか分かっていません。

どちらにせよ、網羅的に k8s を解説してくれたことには大変感謝してい
ます。おかげさまで、さあ使ってみよう!という気になりました。

記事のサンプルコードや YAML はサポートサイトからダウンロード出来ま
す。typo でつまづくのももったいないので、こちらを使うのが良いかも
しれません。特に今回は YAML が改ページで区切られている箇所があり、
手打ちは難易度高かったです。← あとからサンプルコードの存在を知奴

つまづいたメモ


それでは順番に記載していきます。

P94「Podの定義」


記事では $PROJECT_ID がそのまま書かれていましたが、実際は展開する
必要がありました。注意書きを書いたり、{{PROJECT_ID}} などと環境変
数とは別のフォーマットを使ったほうが良かったかもしれません。

直前の cloudbuild.yaml では $PROJECT_ID の展開は必要ないため、気づ
くのに時間がかかりました。最終的には $ kubectl get pods で確認でき
る STATUS が InvalidImageName になっており、気づきました。

--- ../WDB99-toku3-k8s/WDB99-toku3-k8s/pod.yaml	2017-05-09 17:03:05.000000000 +0900
+++ pod.yaml	2017-07-04 23:27:21.000000000 +0900
@@ -4,6 +4,7 @@
   name: hello-world
 spec:
   containers:
-    - image: asia.gcr.io/$PROJECT_ID/wdpress/hello-world
+    # $PROJECT_ID は展開する必要があった
+    - image: asia.gcr.io/wdpress-123456/wdpress/hello-world
       imagePullPolicy: Always
       name: hello-world



あと、P95 でマニフェストファイル(pod.yaml)を作成せずにコマンドラ
インで Pod を作成する同等の例が書かれていますが、pod ではなく
deployment が作成されるようなので、ちょっと違うのかな?と思いました。

$ kubectl run hello-world --image=asia.gcr.io/$PROJECT_ID/wdpress/hello-world --port=8080
deployment "hello-world" created



実際、この後に紹介される
$ kubectl delete pods hello-world
では削除できず、
$ kubectl delete deployments hello-world
で削除できました。

P95「Pod の状態確認」


$ kubectl get pods -l name=hello-world
で確認していますが、No resources found. が返ってしまいました。
$ kubectl get pods
でないと確認できませんでした。

またこの時点での Pod は 1 つだと思いますが、記事では 3 つ表示され
ており、どこか間違っているのか考え込んでしまいました。

何度も試すうちに、1 つが正解だろうという結論に至りました。

蛇足になりますが、このあとの「Podへのアクセス設定」の $POD_NAME は
この時点では hello-world の方が分かりやすいと思います。

P95「設定の適用」


P96 の $ kubectl create -f pod-configmap.yaml を実行したところ、

The Pod "" is invalid: metadata.name: Required value: name or generateName is required

というエラーになってしまいました。

試行錯誤して、以下の修正に落ち着きました。

--- ../WDB99-toku3-k8s/WDB99-toku3-k8s/pod-configmap.yaml	2017-05-09 17:03:05.000000000 +0900
+++ pod-configmap.yaml	2017-07-04 23:58:45.000000000 +0900
@@ -1,11 +1,11 @@
 apiVersion: v1
 kind: Pod
 metadata:
-  labels:
-    name: hello-world
+  name: hello-world
 spec:
   containers:
-    - image: asia.gcr.io/$PROJECT_ID/wdpress/hello-world
+    # $PROJECT_ID は展開する必要があった
+    - image: asia.gcr.io/wdpress-123456/wdpress/hello-world
       imagePullPolicy: Always
       name: hello-world
       env:



$PROJECT_ID の展開が必要な点は pod.yaml と同じです。これ以降登場す
る YAML ファイルは全て展開が必要でした。

あと、$ kubectl create -f pod-configmap.yaml の前に
$ kubectl create -f configmap.yaml が必要でした。
(順番は後でも大丈夫かも。)

ConfigMap の削除は
$ kubectl delete configmaps hello-world-config
で良いみたいでした。

P96「ReplicaSetを使ったデプロイ」


右上の $ kubectl delete pods -l $POD_NAME は
No resources found が返ってきてしまいました。
-l は要らないみたいです。

P96「Deploymentを使ったデプロイ」


P97 で "kubectl update で変更を適用してみましょう"
とありましたが、以下のエラーが返ってきました。

$ kubectl update
W0705 00:16:04.340422   28610 cmd.go:361] update is DEPRECATED and will be removed in a future version. Use replace instead.
error: Must specify --filename to replace
See 'kubectl replace -h' for help and examples.



こちらで良いみたいです。

$ kubectl replace -f deployment.yaml
deployment "hello-world" replaced



P97「IngressによるHTTP Load Balancerの作成」


P98 で "前述のServiceの定義からLoadBalancerの行を削除しましょう"
と書いてあります。$ kubectl replace -f service.yaml についても
書いたほうが親切だと思いました。

kubectl replace しなくても Ingress 経由でのアクセスは出来るので、
ちょっと細かいかもしれません。

最後に


WEB+DB PRESS Vol.99の「実践Kubernetes」の第4章を実際に試してみて、
私がつまづいた箇所をまとめました。

初心者はまだ情報の拠り所がないため、サンプルコードが動かないと、心
が折れてしまうかもしれません。私も今回一度折れました。

この記事を書くために第4章を何度も試し、結果的に kubectl に慣れて
きました。今回はサンプルコードが動かなくて良かったのかなw

Kubernetes はアップデートが早く、記事と現在の整合性を取るのが難し
そうです。そんな中、記事を書いて下さった牧さんにお礼申し上げます。

2017-07 / 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

最終更新時間: 2017-11-24 21:17

検索


最近の話題
- 2017-11-18
  iPhone X 64GB SIM フリー版を買って一週間経った
- 2017-11-16
  golang.tokyo #10 x WomenWhoGoTokyo に行ってきた #golangtokyo
- 2017-11-12
  『PromiseとAsync-Awaitまとめ(Emacsで)』という LT をした
- 2017-11-10
  RSpec 3.5 から shared_context の使い方が少し変わっていた
  S3 の public バケットで特定パス以下を IP アドレス制限する
- 2017-11-01
  『オブジェクト指向設計実践ガイド』読書会での感想メモ
- 2017-10-30
  『スターティングGo言語』を読んだ
- 2017-10-22
  github-nippou を golang で書き換えて v4.0.1 リリースしてました
最近追記された記事
- 2017-04-08-1 (12日前)
- 2017-06-02-1 (146日前)
- 2017-04-29-1 (208日前)
- 2017-04-13-1 (222日前)
- 2017-04-13-1 (224日前)
- 2017-03-02-1 (266日前)
- 2017-02-25-1 (271日前)
- 2017-02-21-1 (275日前)
- 2015-06-07-1 (281日前)
- 2016-10-19-1 (290日前)
カテゴリ
- Anthy (3)
- Apache (11)
- Apple (1)
- ATOK (4)
- au (3)
- AWS (20)
- Bazaar (1)
- Berkshelf (2)
- BigQuery (1)
- BitBar (3)
- Book (90)
- Boxen (2)
- Bugsnag (1)
- capistrano (4)
- chalow (56)
- ChatWork (1)
- Chef (17)
- Chrome (3)
- Chromecast (1)
- CircleCI (10)
- clang (26)
- Comics (2)
- Cooking (10)
- cvs (15)
- cygwin (12)
- D3.js (1)
- Debian (55)
- Docker (3)
- E-mail (8)
- elasticsearch (4)
- Emacs (222)
- Emacs講座 (10)
- English (4)
- feedforce (7)
- fetchmail (3)
- Firefox (20)
- Fluentd (4)
- ftp (1)
- Game (20)
- GCP (1)
- Gem (5)
- Git (9)
- GitHub (19)
- golang (9)
- Google (1)
- gpg (4)
- GrowthForecast (7)
- Health (3)
- Heroku (9)
- Homebrew (10)
- HTML (6)
- iBook (1)
- iPhone (16)
- IRC (1)
- Jenkins (8)
- JS (1)
- Karabiner (1)
- KeySnail (3)
- Kibana (1)
- Kindle (1)
- Kubernetes (2)
- Langrich (7)
- LDAP (6)
- Life (19)
- Linux (6)
- Mackerel (1)
- Mew (18)
- MongoDB (1)
- Mozilla (19)
- Music (1)
- MySQL (1)
- NAS (4)
- nginx (6)
- NHK (1)
- Node (1)
- ntp (4)
- OOP (2)
- OpenID (2)
- openssl (1)
- Opera (2)
- OSX (41)
- Perl (14)
- PHP (19)
- PostgreSQL (1)
- procmail (4)
- Programing (3)
- Puppet (1)
- Python (2)
- Rails (12)
- Rake (2)
- RaspberryPi (1)
- RedHat (29)
- Redmine (3)
- RSpec (2)
- Ruby (50)
- samba (3)
- screen (7)
- sed (5)
- serverspec (6)
- sh (8)
- Slack (2)
- Solaris9 (22)
- Spring (2)
- ssh (4)
- StatusNet (21)
- svn (12)
- Swift (1)
- Tablet (1)
- tdiary (3)
- Twitter (14)
- Twmode (6)
- Ubuntu (5)
- UNIX (102)
- vagrant (8)
- Video (21)
- vim (1)
- Wercker (9)
- Windows (29)
- Wine (3)
- XML (11)
- XP (1)
- zsh (25)
- インストールメモ (33)
- クイックシェイプ (12)
- ネタ (15)
- 勉強会 (16)
- 携帯 (6)
- 正規表現 (4)
過去ログ
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12
2002 : 01 02 03 04 05 06 07 08 09 10 11 12
2001 : 01 02 03 04 05 06 07 08 09 10 11 12
Google+