kubectlを使いこなしてKubernetesの状態を見てみよう
高橋氏はインフラ領域の難しさについて、「知りたいことは一つなのに、いろんな手段を使わなければ知ることができないのが大変」と所感を述べた。OSによって見る場所や使うツールが違ったり、多くのコマンドを覚えなければならないため、これまではトラブルシューティングの際に「何が起きているか」を把握することが困難だったという。
「Kubernetesを使うと、見る場所や見方が集約される」と、Kubernetesの導入メリットを語る高橋氏。先述のkubectlを使えば、基本的に全てのコンテナのログを確認できる。しかしこれらのログは永久に保存されるわけではないため、とくに本番運用において他サービスにログを転送している場合は、転送先サービスでの確認方法も理解する必要がある。
Eventsの確認については、Kubernetesのリソース(Kubenetesで扱うオブジェクト)ごとに何が起こったかをチェック可能だ。各リソースには、どういったコンテナイメージを使っているか、どのノードマシンを使っているかといった情報が書かれている。高橋氏はこのリソースについて、「リソースを使うことで抽象的にやりたいことを扱えるというのが、Kubernetesの特徴の一つ」と示した。
このリソースについて、高橋氏は代表的なものとして以下の3種類を挙げた。
- Pod:コンテナを起動するための最小単位・リソース
- ReplicaSet:Podを複数管理するためのリソース
- Deployment:ReplicaSetを複数管理するためのリソース
KubernetesにおいてはDeploymentがReplicaSet、ReplicaSetがPodを作っていくという多段構造になっており、公式ではPod単体ではなくDeploymentを使うことが推奨されている。他にもPodを複数自動的にルーティングするServiceというリソースもあり、Podを再起動するたびにIPアドレスが変わるという本番環境下において活用できる。
「kubectlでアクセスする先にいろいろな情報がある」という高橋氏。「何となくでも何が起こっているかを把握するために、これだけは覚えてほしい」と、トラブルシューティングの際にも必要となるコマンドを3つ示した。
kubectl get <リソース名>
kubectl describe <リソース名>
kubectl logs <Pod名>