Kubernetes Workloadsリソース： Pod について

[「Kubernetes完全ガイド」](https://www.amazon.co.jp/Kubernetes%E5%AE%8C%E5%85%A8%E3%82%AC%E3%82%A4%E3%83%89-impress-top-gear-%E9%9D%92%E5%B1%B1/dp/4295004804) を元に、Workloadsリソースの動作確認を行った結果をまとめます。

##実行環境
Kubernetes / kubectl version : 1.5.2
CentOS 7.4

※[構築手順1](https://qiita.com/m-eno/items/6caae931ea727f55f5c0)、[構築手順2](https://qiita.com/m-eno/items/4fa92ce812ce2a655d6c)

```
[root@master ~]# kubectl version
Client Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.2", 
Server Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.2"
```

## Kubernetes Workloads リソース
コンテナの実行に関するリソース。Pod、ReplicationController、ReplicaSet、Deployment、DaemonSet、StatefulSet、Job、CronJobの8種類があり、それぞれの階層関係は以下の通り

![image.png](https://qiita-image-store.s3.amazonaws.com/0/251519/eaad1faf-0bac-ea07-06bf-38f7f373f9b5.png)

出典：[「Kubernetes完全ガイド」](https://www.amazon.co.jp/Kubernetes%E5%AE%8C%E5%85%A8%E3%82%AC%E3%82%A4%E3%83%89-impress-top-gear-%E9%9D%92%E5%B1%B1/dp/4295004804) 

## Pod
Workloadsリソースの最小単位。1つ以上のコンテナから構成され、同じPod内のコンテナはIPアドレスを共有（ポート番号はサービス毎）

###Podの定義用マニフェスト (ngixコンテナを１つ起動)
```Json-doc:sample-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: sample-pod
spec:
  containers:
    - name: nginx-container
      image: nginx:1.12
```

###Podを作成
```
[root@master ~]# kubectl apply -f sample-pod.yaml
pod "sample-pod" created
```

###Podを表示
```
[root@master ~]# kubectl get pods
NAME          READY     STATUS    RESTARTS   AGE
sample-pod      1/1       Running   0          42s
```

### Pod内のサービス競合
* nginx(80/tcp)とredis(6379/tcp)の2つのコンテナを持つPodの作成　　
→　成功

```Json-doc:sample-2pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: sample-2pod
spec:
  containers:
   - name: nginx-container
     image: nginx:1.12
   - name: redis-container
     image: redis:3.2
```
```
[root@master ~]# kubectl apply -f sample-2pod.yaml
pod "sample-2pod" created

[root@master ~]# kubectl get pods
NAME                                               READY     STATUS    RESTARTS   AGE
sample-2pod                                        2/2       Running   0          19s
```

* nginx(80/tcp)コンテナを2つ起動するPodの作成　→　失敗

```Json-doc:sample-2pod-fail.yaml
apiVersion: v1
kind: Pod
metadata:
  name: sample-2pod-fail
spec:
  containers:
    - name: nginx-container-112
      image: nginx:1.12
    - name: nginx-container-113
      image: nginx:1.13
```
作成されるが、起動エラーに

```
[root@master ~]# kubectl apply -f sample-2pod-fail.yaml
pod "sample-2pod-fail" created

[root@master ~]# kubectl get pods
NAME                                               READY     STATUS    RESTARTS   AGE
sample-2pod                                        2/2       Running   0          14m
sample-2pod-fail                                   1/2       Error     2          27s
```

###コンテナへのログイン（疑似端末の生成による）

```
[root@master ~]# kubectl exec -it sample-pod /bin/bash
```
コンテナ内でLISTENしているポートと、起動しているプロセスの確認

```
root@sample-pod:/# apt-get update && apt-get -y install iproute procps
Get:1 http://security-cdn.debian.org/debian-security stretch/updates InRelease [94.3 kB]

root@sample-pod:/# ss -napt | grep LISTEN
LISTEN     0      0            *:80                       *:*                   users:(("nginx",pid=1,fd=6))
root@sample-pod:/# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1  32400  3208 ?        Ss   04:57   0:00 nginx:
nginx        5  0.0  0.0  32872  1576 ?        S    04:57   0:00 nginx:
root        11  0.0  0.1  18132  2008 ?        Ss   05:30   0:00 /bin/ba
root       371  0.0  0.0  36628  1584 ?        R+   05:32   0:00 ps aux
```