初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）通信編

# 背景
個人的にインフラの知識以上にこれからのアプリケーションが動く環境を作ってデプロイしたりしてこれからの知識を身に着けたい。そしてより一層、自分の知識のアップデートをしたいと思いました。

その中でこの本に出会い、これから少しずつやったことを残し、未来の自分への手紙としてもあり、見つめ直せればと思いました。

# 引用や参考と今回の自分の勉強用の書籍の紹介
[技術評論社『Kubernetes実践入門』のサンプルコード](https://github.com/kubernetes-practical-guide/examples)
[Kubernetes実践入門 プロダクションレディなコンテナ＆アプリケーションの作り方](https://gihyo.jp/book/2019/978-4-297-10438-2)
![](http://image.gihyo.co.jp/assets/images/cover/2019/9784297104382.jpg)


## 実際の学びについて

書籍を読みながら、章ごとに少しずつ進めていきたいと思います。
GitHub のソースコードも使いながら学んで行きたいと思います。
***この章の勉強は本当に書籍の写経が主になるかもしれません・・・***


# 勉強開始

- [https://github.com/kubernetes-practical-guide/examples/tree/master/ch3.5.1/manifests/mattermost](https://github.com/kubernetes-practical-guide/examples/tree/master/ch3.5.1/manifests/mattermost)

### マニュフェストを適用する

今までの作成したマニュフェストファイルを適用します

- `kubectl apply -f ` でマニュフェストファイルを適用する
- `kubectl create` コマンドは初回作成時のみ使用できる
- `kubectl apply` は初回は `POST` メソッド、２回目以降は `PATCH` メソッドで差分適用される

```console
$ kubectl apply -f .
configmap/mm-config-file configured
configmap/common-env configured
deployment.apps/db configured
service/mattermost-db created
deployment.apps/mattermost configured
secret/common-env configured
``` 

起動してログを確認するとこんな感じで接続ができないって言われているログを確認できます

```console
{"level":"info","ts":1587642228.9499817,"caller":"utils/i18n.go:83","msg":"Loaded system translations for 'en' from '/mm/i18n/en.json'"}
{"level":"info","ts":1587642228.9509335,"caller":"app/app.go:181","msg":"Server is initializing..."}
{"level":"info","ts":1587642228.9539752,"caller":"sqlstore/supplier.go:198","msg":"Pinging SQL master database"}
{"level":"error","ts":1587642228.963808,"caller":"sqlstore/supplier.go:210","msg":"Failed to ping DB retrying in 10 seconds err=dial tcp :3306: connect: connection refused"}
```

```text:Pod毎にIPアドレスが付与されることを確認
$ kubectl get po -o wide
NAME                          READY   STATUS             RESTARTS   AGE     IP           NODE             NOMINATED NODE   READINESS GATES
db-58c88dc547-j9xlz           1/1     Running            0          6m54s   10.1.0.177   docker-desktop   <none>           <none>
mattermost-6ccbbf547d-jlbqv   0/1     ImagePullBackOff   0          6m54s   10.1.0.182   docker-desktop   <none>           <none>
mattermost-6ccbbf547d-vjbhd   0/1     ImagePullBackOff   0          6m54s   10.1.0.181   docker-desktop   <none>           <none>
```

Running の Pod の IP アドレスへ疎通の確認をしてみる

```text:別のPodから他のPodへアクセス確認
$ kubectl run test1 -i --rm --image k8spracticalguide/busybox:1.28 --restart=Never -- ping -c 1 10.1.0.177
PING 10.1.0.177 (10.1.0.177): 56 data bytes
64 bytes from 10.1.0.177: seq=0 ttl=64 time=0.171 ms

--- 10.1.0.177 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.171/0.171/0.171 ms
pod "test1" deleted
```

## 次は 3.5.2 章をやっていきます。

- Service マニュフェストで通信できることを学びます

# 最後に

今回の最後に「サービスを抽象化する Service/Endpoint」オブジェクトの利点を読んでなんとなくイメージして次につなげます。

- Pod の IPアドレスを仮想IPに束ねる
- 仮想IPをDNSにより名前解決できるようにする Service オブジェクトと Endpoint オブジェクトがある
- 仮想IPは ClusterIP と呼ばれている
- 名前でアクセスできるから Service を再作成、別のクラスタへデプロイしてもマニュフェストのポータビリティがある
- アプリケーション間を疎結合に保てる

プログラムでもアーキテクチャで干渉層があるけどそういう感じに似ているのかな？と思いつつ次につなげていきたいと思います。

# 今までの投稿

1. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）Pod編](https://qiita.com/nodokaodayaka/items/04d8bc3c9c40443c1cd3)
1. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）NameSpace 編](https://qiita.com/nodokaodayaka/items/73bc1c939a665aaa4b7b)
1. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）Label 編](https://qiita.com/nodokaodayaka/items/fd5284475fb1ba920559)
1. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）ReplicaSet 編](https://qiita.com/nodokaodayaka/items/fc9f749f123649a2dbd9)
1. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）Deployment 編](https://qiita.com/nodokaodayaka/items/2c9d4eefec40d4896126)
1. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）Service 編](https://qiita.com/nodokaodayaka/items/28955bd813eaf512baf5)
1. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）ConfigMap 編](https://qiita.com/nodokaodayaka/items/09c7627eaa913da78cf8)
1. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）Secret 編](https://qiita.com/nodokaodayaka/items/8bc1a5963a7c7c177010)
1. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）操作編](https://qiita.com/nodokaodayaka/items/09cb848164e4a1855c83)
1. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）体感編](https://qiita.com/nodokaodayaka/items/ae95e04b064b7600f6af)
1. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）体感編パート２](https://qiita.com/nodokaodayaka/items/fa87fd7a3733957e7aca)
1. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）体感編パート3（Label操作）](https://qiita.com/nodokaodayaka/items/8f1892eb1627d0717180)
1. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）体感編パート3（OwnerReference 操作）](https://qiita.com/nodokaodayaka/items/b4ad326be41626da9b2e)
1. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）マニュフェスト編](https://qiita.com/nodokaodayaka/items/8d212a5f1eeb2685f51c)
2. [初心者のKubernetes入門（書籍 Kubernetes 実践入門の写経から学ぶ）マニュフェスト(ConfigMap)編](https://qiita.com/nodokaodayaka/items/7dd2f3885d8e957ffaad)