ストーリー
- 一足遅れて Kubernetes を学び始める - 01. 環境選択編 -
- 一足遅れて Kubernetes を学び始める - 02. Docker For Mac -
- 一足遅れて Kubernetes を学び始める - 03. Raspberry Pi -
- 一足遅れて Kubernetes を学び始める - 04. kubectl -
- 一足遅れて Kubernetes を学び始める - 05. workloads その1 -
- 一足遅れて Kubernetes を学び始める - 06. workloads その2 -
- 一足遅れて Kubernetes を学び始める - 07. workloads その3 -
- 一足遅れて Kubernetes を学び始める - 08. discovery&LB その1 -
- 一足遅れて Kubernetes を学び始める - 09. discovery&LB その2 -
- 一足遅れて Kubernetes を学び始める - 10. config&storage その1 -
- 一足遅れて Kubernetes を学び始める - 11. config&storage その2 -
- 一足遅れて Kubernetes を学び始める - 12. リソース制限 -
- 一足遅れて Kubernetes を学び始める - 13. ヘルスチェックとコンテナライフサイクル -
- 一足遅れて Kubernetes を学び始める - 14. スケジューリング -
- 一足遅れて Kubernetes を学び始める - 15. セキュリティ -
- 一足遅れて Kubernetes を学び始める - 16. コンポーネント -
前回
一足遅れて Kubernetes を学び始める - 01. 環境選択編 -にて、Kubernetesを学ぶ環境を考えてみました。いきなりGKEを使うんじゃなくて、お手軽に試せるDockerForMacを使おうとなりました。
Docker For Mac を試す
環境
iMac (21.5-inch, 2017)
Docker Community Edition:
Version: 18.06.1-ce-mac73 (26764)
Docker Engine:
Version: 18.06.1-ce
Kubernetes:
Version: v1.10.3
実践
さっそく、使ってみます。 (入門 Kubernetes参考)
~ $ kubectl get componentstatuses
NAME STATUS MESSAGE ERROR
controller-manager Healthy ok
scheduler Healthy ok
etcd-0 Healthy {"health": "true"}
Kubernetesでは、MasterNodeとWorkerNodeの2種類のNodeが存在しており、
そのうちのMasterNodeにあるコンポーネントの一覧が上記よりわかります。詳細については、こちらにあります。
要は、kubectl apply -f nginx.yaml
とすると
- etcdにマニュフェスト(nginx.yaml)を登録
- controller-managerがetcdにあるマニュフェストと既存podを比べてpodが少ないことを検知
- schedulerが適切な数のpodに調整
という理解になりました。また、全てのやり取りは、api-serverを経由しているそうです。
私なりの理解をアウトプットしたものが下記になります。
(ほとんど真似した感じです。しかし、アウトプットするだけで理解が深まるため実施。 アウトプット大事! )
~ $ kubectl get nodes
NAME STATUS ROLES AGE VERSION
docker-for-desktop Ready master 120d v1.10.3
~ $ kubectl get pods
No resources found.
使い始めたばかりだと、podが1つもない状態ですね。
また、DockerForMacでは、もちろん動かしているマシンは一台(VMとか使えば増やせますが)なので、
MasterNodeとWorkerNodeが同一になっているはずです。試してみます。
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
name: http
protocol: TCP
~ $ kubectl apply -f nginx.yaml
pod "nginx" created
~ $ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
nginx 1/1 Running 0 3m 10.1.0.157 docker-for-desktop
WorkerNodeにPodが作られていますね。んー、これだとある程度の学習には繋がりそう(Podの動き)ですが、
後の学ぶReplicaSetやDaemonsetなどNode横断した機能を経験したい場合には不向きのようですね。
まあ、簡単に使えるので良いっちゃ良いのですが...
次は、いくつかのコマンド(cp,exec, port-forward)を試してみます。
~ $ touch memo.txt
~ $ ls
nginx.yaml memo.txt
~ $ kubectl cp memo.txt nginx:/memo.txt
~ $ rm memo.txt
~ $ ls
nginx.yaml
~ $ kubectl cp nginx:/memo.txt ./memo.txt
~ $ ls
nginx.yaml memo.txt
~ $ kubectl exec -it nginx bash
root@nginx:/# exit
exit
~ $
ローカルとPodとの双方向コピー、仮想的なターミナルを体験していました。
「ふ〜ん、で?」ってなっちゃいました。(笑)
お片付け
~ $ kubectl delete -f nginx.yaml
pod "nginx" deleted
ものたりない
やっぱりNode増やしたい!!
Raspberry PiでおうちKubernetes構築【論理編】を見て、これをやるっきゃない!
すごく今更だけど、試してみようと思います。
次回はこちらです。