Kubernetesの中の人がつくったチュートリアルがあります。
これは、GCPでやる方法とAWSでやる方法があるけど、AWSのほうはjqを使わないとダメらしくて手元のWindows環境ではつらそうなのでGCPでやります。
(もはやGCPの使い方すら忘れてるくらいの初心者なので、適当なこと書いてたら優しくツッコミを入れてもらえるとありがたいです...)
1. Cloud Infrastructure Provisioning - Google Cloud Platform
ネットワークの設定をして、インスタンスを6つ立てます。細かい点として、Windowsのコマンドプロンプトだと複数行のコマンドがコピペしただけだとうまく動きません。\
で改行をエスケープすることができないので。
2. Setting up a Certificate Authority and TLS Cert Generation
cfsslというツールでCAと証明書をつくります。このツールわりと便利そう。
本番でやる際はちゃんとサービスごとに証明書を分けたほうがいいよ、と。こういうときにVaultとかを使うんでしょうか。あんまりよく知らないんですけど。
3. Bootstrapping a H/A etcd cluster
kubernetes-the-hard-way/03-etcd.md at master · kelseyhightower/kubernetes-the-hard-way · GitHub
etcdのクラスタを立てます。Kubernetesは状態を持たず、etcdですべての状態が管理されます。このチュートリアルだとKubernetesのcontrollerと同居しますが、本番環境でやるときはちゃんとetcd専用のマシンをつくってそこに立てましょう、と。
こんな感じのワーニングみたいなのが出るけど、問題あるのかはよくわからない。
Oct 15 09:42:43 controller1 etcd[3415]: serving insecure client requests on ...! Oct 15 09:42:43 controller1 etcd[3415]: forgot to set Type=notify in systemd...?
4. Bootstrapping an H/A Kubernetes Control Plane
Kubernetesのcontrollerクラスタをつくろう、と。Kubernetesのフロント部分(workerじゃないところ)は以下のコンポーネントから成り立っている。この3つは、色々な理由から同じマシンで走らせる必要がある。
- Kubernetes API Server
- Kubernetes Scheduler
- Kubernetes Controller Manager
この章でロードバランサの設置もやるけど、ELB便利そうですね。
5. Bootstrapping Kubernetes Workers
workerとproxyを立てる。ここはまだDockerを使う手順になってるけど、いずれcri-oに置き換わるのかな? CNIを使うところで
The Kubernetes kubelet no longer relies on docker networking for pods!
って書いてあるけど結局Dockerをインストールするのよくわからなかった。
6. Configuring the Kubernetes Client - Remote Access
kubernetes-the-hard-way/06-kubectl.md at master · kelseyhightower/kubernetes-the-hard-way · GitHub
これまでのところはがんばればWindowsでもなんとかなったけど(cfsslはWindows版がある)、kubectl
はないのであきらめてBash on Windowsを使いました。
7. Managing the Container Network Routes
kubernetes-the-hard-way/07-network.md at master · kelseyhightower/kubernetes-the-hard-way · GitHub
コンテナが使う用のルータをつくるだけの簡単なお仕事。
8. Deploying the Cluster DNS Add-on
kubernetes-the-hard-way/08-dns-addon.md at master · kelseyhightower/kubernetes-the-hard-way · GitHub
サービスディスカバリ用のDNSをつくります。アドオンとして提供されているもの。これがなかったら、consulとかでやるのかな。
なぜあらかじめ組み込まれているのではなくアドオン形式なのかは謎。Googleのことだから、DNSじゃない新しい名前解決方法を使ってたりするんでしょうか。
9. Smoke Test
とりあえず動かしてみる。という章。
あんまり説明がなくてわからないけど、この--image
に指定してるのがDockerのイメージ名っぽい。
kubectl run nginx --image=nginx --port=80 --replicas=3
実際Worker上で見るとそれっぽいやつが動いていた(もうひとつのgcr.io
というのがGCPのDockerレジストリらしい)
user@worker1:~$ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest a5311a310510 2 days ago 181.4 MB gcr.io/google_containers/pause-amd64 3.0 99e59f495ffa 5 months ago 746.9 kB
10. Clean Up
kubernetes-the-hard-way/10-cleanup.md at master · kelseyhightower/kubernetes-the-hard-way · GitHub
こんなに大変だったのにこれだけか...。積み上げてきたものを壊すのは一瞬ですね。ショッギョ・ムッジョ。
ところで、セットアップの時はAWSのほうが楽そうに見えてたんですけど、消すときけっこう大変なんですね。GCPのほうが管理単位がかっちり分かれてるということなんでしょうか。
感想
The Hard Wayというからにはもっと大変だろうと思ってたんですけど、意外と楽でした。これは、READMEに書いてあるように、
This tutorial will walk you through setting up Kubernetes the hard way.
ということでKubernetesのセットアップに重点をおいたチュートリアルで、使い方の説明はあんまりないからな感じがします。そのへん詳しくは公式ドキュメントを読め、と。
あと、GCP、AWSのいずれにしても、ネットワークの部分はそれぞれのインフラに依存していて、この仕組みを自前でやろうと思うと大変そうな気もしました。DigitalOceanでKubernetesを動かすチュートリアルは、そのへんインフラの仕組みに頼らずflannelでやってて、こっちのほうが勉強になるかもしれません。まだ読んでないけど。