#15.kubectl debugコマンドを試してみた＋おまけ

# はじめに
以前に、Xで`kubectl debug`コマンドという便利なコマンドがあることを教えてもらったことがあり、試してみようとは思っていたのですが先延ばしになっていました。
今回はkubectl debugコマンドの動作確認とcompassのイベントに参加してきたのでそちらについて記事にしました。

# kubectl debugコマンドとは？
名前の通りにKubernetes用に使用されるdebug用のコマンドです。
基本的にはコンテナイメージを指定してエフェメラルコンテナ（一時的なdebug用のコンテナ）を作成後、実際に調査をしたり、動作確認をするといった感じです。


![image (81).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3904736/21859b44-caed-833c-043f-b8c41b9358ca.png)



https://kubernetes.io/ja/docs/concepts/workloads/pods/ephemeral-containers/

https://kubernetes.io/ja/docs/tasks/debug/debug-application/debug-running-pod/#ephemeral-container

以下のリンクに記載されているコマンドのオプションを組み合わせて作ったコマンドでエフェメラルコンテナを作成してコンテナ内に入ってみました。
debug用のコマンドとはいえサポートされているオプションが多く、用途によって使い分けるのが難しそうですね。

https://kubernetes.io/docs/reference/kubectl/generated/kubectl_debug/

```
# kubectl debug {Pod名} -n {namespace名} -it --image=｛コンテナイメージ名｝ -- /bin/bash 
--profile=legacy is deprecated and will be removed in the future. It is recommended to explicitly specify a profile, for example "--profile=general".
Defaulting debug container name to debugger-bwgg7.
If you don't see a command prompt, try pressing enter.
```

`debugger-bwgg7`という名前で作成されましたね。
今回私が使用したコンテナイメージがNginxを動作させる環境のものとなっているので、
Nginx関連のファイルを確認します。
- エフェメラルコンテナ内 

```
# ls -la /etc/nginx/
total 40
drwxr-xr-x    1 root     root          4096 Jan 21 08:29 .
drwxr-xr-x    1 root     root          4096 Feb  1 20:27 ..
drwxr-xr-x    1 root     root          4096 Jan 21 08:29 conf.d
-rw-r--r--    1 root     root          1077 Nov 27 02:22 fastcgi.conf
-rw-r--r--    1 root     root          1007 Nov 27 02:22 fastcgi_params
-rw-r--r--    1 root     root          5349 Nov 27 02:22 mime.types
lrwxrwxrwx    1 root     root            22 Jan  9 02:59 modules -> /usr/lib/nginx/modules
-rwxrwxrwx    1 root     root          1592 Jan  9 20:19 nginx.conf
-rw-r--r--    1 root     root           636 Nov 27 02:22 scgi_params
-rw-r--r--    1 root     root           664 Nov 27 02:22 uwsgi_params
```
ちゃんと作成されていますね。
もちろん、実際のファイルの修正やテストコマンドの確認も行えます。
```
# vi /etc/hosts

出力情報
# Kubernetes-managed hosts file.
127.0.0.1       localhost nayanaya
```
```
# ping nayanaya
PING nayanaya (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: seq=0 ttl=64 time=0.027 ms
64 bytes from 127.0.0.1: seq=1 ttl=64 time=0.034 ms
64 bytes from 127.0.0.1: seq=2 ttl=64 time=0.045 ms
64 bytes from 127.0.0.1: seq=3 ttl=64 time=0.042 ms
```
kubectl describeで確認してみると`Ephemeral Containers`として作成されてますね。
```
# kubectl describe pod {Pod名} -n {namespace名}
Ephemeral Containers:
  debugger-bwgg7:
    Container ID:  docker://d5b73ff7d7502e10563d50709983b214995e384bba5c27a9a2d9826d77ab44b3
    Image:         Kubernetes/nginx:v1.0.0
    Image ID:      docker-pullable://Kubernetes/nginx@sha256:ef17aaeed3f04d99242801859b2c1adaa61ff29230a88ae9a56f7c46492d2141
[以下省略]
```
これらのことからkubectl debugコマンドを使用することで本番環境でも安全にトラブルシューティングを行うことが可能になりそうです。

# おまけ
1月27日（月）に「皇居ラン」という Compass のイベントが開催されており、参加してみました。内容はITエンジニアを対象に皇居の周りを約5km走るというものでした。

実際に参加して参加者の話を聞いてみると、マラソン大会に出場経験のある方もいて驚きました。私も一般人にしてはよく走る方だと思っており、体力には少し自信があったのですが、実際に話を聞いてみると、参加者の方々のランニング距離が想像を超えていて、化け物（もちろん良い意味で）ばかりでしたね～。

また、個人的にモチベーションにつながったのが、同じ参加者の方との会話です。その方は私より少し年上くらいの方で、以前は激務で永遠にタスクが降り注ぎ、さらにドキュメント作成が多く、とてもつらかったと話していました。しかし、今は案件が変わり、AWSを使ってやりたい仕事をさせてもらえているとのことで、この話を聞いて、自分のモチベにもつながりました。

# まとめ
今までは自分のローカル環境とはいえ直接Podのコンテナ内に入ってファイルの修正をすることなどがあったのですが、
実際に本番環境を扱う際は、このようなテスト方法を用いるのはもちろんよろしくないため、今後はこちらのkubectl debugコマンドを使用してテストしていこうと思います。

# 参加したイベント
https://classmethod.connpass.com/event/343061/?utm_campaign=event_publish_to_series_watcher&utm_source=notifications&utm_medium=email&utm_content=detail_btn

# 参考リンク
https://kubernetes.io/ja/docs/tasks/debug/debug-application/debug-running-pod/#ephemeral-container

https://kubernetes.io/ja/docs/concepts/workloads/pods/ephemeral-containers/

https://kubernetes.io/docs/reference/kubectl/generated/kubectl_debug/