kubernetes勉強メモ2(Pod)

# はじめに

kubernetesの勉強メモ

今回は,5つあるリソースのうち一つkubernetesのworkloadsリソースについて



# Workloadsリソース

クラスタ上にコンテナを起動させるためのリソース。

全部で８種類のリソースがある。

1. **Pod**
2. Replication Controller
3. Replicaset
4. deployment
5. Daemonset
6. Statefulset
7. Job
8. Cronjob



### Pod

kubernetesの最小単位のリソース。

podは一つ以上のコンテナからできている。下図のようにpodに対して一つのIPアドレスが割り振られているので、コンテナ同士はlocalhost宛で通信ができる。

![pod.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308470/738072f0-f2bf-861e-1341-406e0ca792e4.png)


基本的に一つのコンテナをpodとすることが多いが。。。

プロキシの役割をするコンテナ、ローカルキャッシュようのコンテナなど二つ以上のコンテナを含んだpodを利用することもある。

#### 実際にPodを作ってみる

まずはnginxコンテナが一つ入ってpodを作ってみる。

manifestファイルは以下の通り

```yaml
apiVersion: v1
kind: Pod
metadata:
  # Podの名前をつける 
  name: container-pod
spec:
  containers:
  # コンテナの名前をつける
    - name: nginx-container
      image: nginx:latest
      ports:
      - containerPort: 60
```

で作成してみる。

```
$ kubectl apply -f pod1.yaml
```

ちゃんとpodが動いているか確認してみる

```
$ kubectl get po -o wide
===== 実行結果 ======
NAME            READY   STATUS    RESTARTS   AGE   IP          NODE             NOMINATED NODE   READINESS GATES
container-pod   1/1     Running   0          72s   10.1.0.12   docker-desktop   <none>           <none>

```

ちゃんと動いているのが確認できた！



次に二つのコンテナを持ったpodを作成してみる

manifestファイルは以下の通り

```yaml
apiVersion: v1
kind: Pod
metadata:
  name: sample-multicontainer
spec:
  containers:
    - name: nginx-container
      image: nginx:1.13
    - name: redis-container
      image: redis:3.2
```

で作ってみる

ちゃんと作成できたか確認してみる。

```
$ kubectl apply -f pod2.yaml

===== 実行結果 ======
NAME                    READY   STATUS    RESTARTS   AGE   IP          NODE             NOMINATED NODE   READINESS GATES
sample-multicontainer   2/2     Running   0          20s   10.1.0.44   docker-desktop   <none>           <none>

```

作成したpodのコンテナ(redis)に入ってみる。

```bash
$ kubectl exec -it sample-multicontainer -c redis-container bash
```

コンテナのログを見るには

```
$ kubectl logs sample-multicontainer -c redis-container
===== 実行結果 ======
1:C 06 Jun 10:21:04.146 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 3.2.12 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 1
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

1:M 06 Jun 10:21:04.147 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
1:M 06 Jun 10:21:04.147 # Server started, Redis version 3.2.12
1:M 06 Jun 10:21:04.147 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
1:M 06 Jun 10:21:04.148 * The server is now ready to accept connections on port 6379

```



# まとめ

- pod
  - k8sのworkloadsリソースの一つ
  - 一つ以上のコンテナからできている。
- コンテナの中に入る
  - `kubectl exec`コマンドを利用する
- コンテナのログを見る
  - `kubectl logs`コマンド
  - エラー調査で役立ちそう

# 参考

- https://thinkit.co.jp/article/13610