Podの動作を確認する
はじめに
Kubernetesは「Pod」という単位でデプロイされます。Podはコンテナの集合体で、一つ以上のコンテナで構成されています。
また、コンテナが一つでもPodとしてデプロイされます。
今回はこのPodについてまとめていきます。
ネットワーク構成
KubernetesではIPアドレスはPodに対して割り当てられます。そのため、同一Pod内のコンテナは同じIPアドレスを持つことになります。
もし、同一Pod内のコンテナがPod外部に対してアクセスする必要がある場合には、ポートを分ける必要があります。
同一Pod内のコンテナはlocalhostで通信できます。
Podのデプロイ
以下のyamlファイルでnginxとRedisを含むPodをデプロイします。
apiVersion: v1
kind: Pod
metadata:
name: sample-pod1
spec:
containers:
- name: nginx
image: nginx:latest
- name: redis
image: redis:latest
$ kubectl apply -f nginx_redis.yaml
pod/sample-pod1 created
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
sample-pod1 2/2 Running 0 40s
READYのコンテナ数が「2/2」になって、STATUSが「Running」になってます。
ちなみにログを確認する場合は、コンテナ単位で確認する必要があります。
$ kubectl logs sample-pod1
error: a container name must be specified for pod sample-pod1, choose one of: [nginx redis]
$ kubectl logs sample-pod1 -c nginx
$ kubectl logs sample-pod1 -c redis
1:C 08 Mar 2020 02:10:31.296 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1:C 08 Mar 2020 02:10:31.296 # Redis version=5.0.7, bits=64, commit=00000000, modified=0, pid=1, just started
1:C 08 Mar 2020 02:10:31.296 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
1:M 08 Mar 2020 02:10:31.298 * Running mode=standalone, port=6379.
1:M 08 Mar 2020 02:10:31.298 # 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 08 Mar 2020 02:10:31.298 # Server initialized
1:M 08 Mar 2020 02:10:31.298 # 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 08 Mar 2020 02:10:31.299 * Ready to accept connections
何かWARNINGが出てるけど、とりあえずここでは気にしない。
コンテナ内の確認
Podがデプロイできたので、コンテナにログインして確認します。
nginx
kubectl exeでログインします。
コンテナが複数あるとき、コンテナ名を指定しないと「Defaulting container」にログインされます。
※デフォルトのコンテナが何か?は、おそらく、kubectl describe podで一番上に表示されるコンテナではないかと推測。
$ kubectl exec -it sample-pod1 /bin/bash
Defaulting container name to nginx.
Use 'kubectl describe pod/sample-pod1 -n default' to see all of the containers in this pod.
root@sample-pod1:/#
デフォルト状態ではipコマンドが使えないので、インストールしてIPアドレスを確認する。
root@sample-pod1:/# apt-get update
・・・
root@sample-pod1:/# apt-get install iproute2
・・・
root@sample-pod1:/# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
link/ipip 0.0.0.0 brd 0.0.0.0
4: eth0@if17: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1440 qdisc noqueue state UP group default
link/ether ea:e5:ec:2c:df:99 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 192.168.69.200/32 scope global eth0
valid_lft forever preferred_lft forever
Redis
nginxからログアウトし、今度はRedisにログインする。
$ kubectl exec -it sample-pod1 -c redis /bin/bash
root@sample-pod1:/data#
nginxと同様にIPアドレスを確認します。
root@sample-pod1:/data# apt-get update
・・・
root@sample-pod1:/data# apt-get install iproute
・・・
root@sample-pod1:/data# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
link/ipip 0.0.0.0 brd 0.0.0.0
4: eth0@if17: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1440 qdisc noqueue state UP group default
link/ether ea:e5:ec:2c:df:99 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 192.168.69.200/32 scope global eth0
valid_lft forever preferred_lft forever
どちらも同じ「192.168.69.200/32」を持つことが確認できました。
なお、Podに割り当てられたIPアドレスは、コンテナにログインしなくても確認できます。
$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
sample-pod1 2/2 Running 0 124m 192.168.69.200 k8s-worker02 <none> <none>
ポートが競合する場合の動作確認
今度はあえてポートが競合する場合のPodをデプロイして、動作を確認してみます。
apiVersion: v1
kind: Pod
metadata:
name: sample-pod2
spec:
containers:
- name: nginx1
image: nginx:latest
- name: nginx2
image: nginx:latest
デプロイします。
$ kubectl apply -f nginx_2.yaml
pod/sample-pod2 created
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
sample-pod2 1/2 Error 0 17s
デプロイはできましたが、STATUSが「Error」になって、起動しているコンテナも1つであることが確認できます。
どちらのコンテナがエラーになっているか確認します。
$ kubectl describe pod sample-pod2
・・・
Containers:
nginx1:
Container ID: docker://90848de2293e1fb2ea4d1a92c4ac4520783731a2feadcf180ab2dce3eaf0ca56
Image: nginx:latest
Image ID: docker-pullable://nginx@sha256:2539d4344dd18e1df02be842ffc435f8e1f699cfc55516e2cf2cb16b7a9aea0b
Port: <none>
Host Port: <none>
State: Running
Started: Sun, 08 Mar 2020 13:11:04 +0900
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-nstst (ro)
nginx2:
Container ID: docker://c6203e17546640f3e304280757fa2c93c467aba1a7dbd8b7048f0acbdee65675
Image: nginx:latest
Image ID: docker-pullable://nginx@sha256:2539d4344dd18e1df02be842ffc435f8e1f699cfc55516e2cf2cb16b7a9aea0b
Port: <none>
Host Port: <none>
State: Waiting
Reason: CrashLoopBackOff
Last State: Terminated
Reason: Error
Exit Code: 1
Started: Sun, 08 Mar 2020 13:14:38 +0900
Finished: Sun, 08 Mar 2020 13:14:40 +0900
Ready: False
Restart Count: 5
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-nstst (ro)
・・・
nginx2がErrorになっています。
nginx2のログを確認します。
$ kubectl logs sample-pod2 -c nginx2
2020/03/08 04:14:38 [emerg] 1#1: bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
80番ポートがバッティングしていることがわかります。
Author And Source
この問題について(Podの動作を確認する), 我々は、より多くの情報をここで見つけました https://qiita.com/dingtianhongjie/items/f243d13b4101eaa2498e著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .