LoginSignup
1
5

More than 3 years have passed since last update.

一足遅れて Kubernetes を学び始める - 02. Docker For Mac -

Last updated at Posted at 2019-04-27

ストーリー

  1. 一足遅れて Kubernetes を学び始める - 01. 環境選択編 -
  2. 一足遅れて Kubernetes を学び始める - 02. Docker For Mac -
  3. 一足遅れて Kubernetes を学び始める - 03. Raspberry Pi -
  4. 一足遅れて Kubernetes を学び始める - 04. kubectl -
  5. 一足遅れて Kubernetes を学び始める - 05. workloads その1 -
  6. 一足遅れて Kubernetes を学び始める - 06. workloads その2 -
  7. 一足遅れて Kubernetes を学び始める - 07. workloads その3 -
  8. 一足遅れて Kubernetes を学び始める - 08. discovery&LB その1 -
  9. 一足遅れて Kubernetes を学び始める - 09. discovery&LB その2 -
  10. 一足遅れて Kubernetes を学び始める - 10. config&storage その1 -
  11. 一足遅れて Kubernetes を学び始める - 11. config&storage その2 -
  12. 一足遅れて Kubernetes を学び始める - 12. リソース制限 -
  13. 一足遅れて Kubernetes を学び始める - 13. ヘルスチェックとコンテナライフサイクル -
  14. 一足遅れて Kubernetes を学び始める - 14. スケジューリング -
  15. 一足遅れて Kubernetes を学び始める - 15. セキュリティ -
  16. 一足遅れて Kubernetes を学び始める - 16. コンポーネント -

前回

一足遅れて Kubernetes を学び始める - 01. 環境選択編 -にて、Kubernetesを学ぶ環境を考えてみました。いきなりGKEを使うんじゃなくて、お手軽に試せるDockerForMacを使おうとなりました。

Docker For Mac を試す

環境

machine
iMac (21.5-inch, 2017)
docker
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 とすると

  1. etcdにマニュフェスト(nginx.yaml)を登録
  2. controller-managerがetcdにあるマニュフェストと既存podを比べてpodが少ないことを検知
  3. schedulerが適切な数のpodに調整

という理解になりました。また、全てのやり取りは、api-serverを経由しているそうです。

私なりの理解をアウトプットしたものが下記になります。
(ほとんど真似した感じです。しかし、アウトプットするだけで理解が深まるため実施。 アウトプット大事! )
Kubernetes_learning.png

~ $ 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が同一になっているはずです。試してみます。

nginx.yaml
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構築【論理編】を見て、これをやるっきゃない!
すごく今更だけど、試してみようと思います。
次回はこちらです。

1
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
5