21:00概要Kubernetesで、コンテナがうまく起動しなかったり、コンテナは起動したのに通信ができないというときなどに、原因を調査する方法について、私がやっていることを紹介します。紹介するものは、kubectlコマンドを使ったものなので、kubectlが使える環境を用意してください。私自身、Kubernetesを使っていて、うまくコンテナが起動できず困ったり、コンテナが起動しても通信ができなくて困ったりということがありました。原因はイメージの作り方が悪かったり、Kubernetesでの設定が悪かったり色々でしたが、ほとんどの場合、コンテナの状況やログを見ると分かるものがほとんどでした。皆さんもKubernetesでコンテナの調子が悪いような時は、これらのことを確認してみましょう。nodeの一覧Kubernetesでコンテナが動作するサーバのことをnodeと言います。nodeは一台の時もありますが、ほとんどの場合複数台あると思います。nodeは、kubectlコマンドで確認することができます。nodesnodeのところに「Ready」と表示されていれば正常に動作していますが、もし「NotReady」と表示されていれば、正常に動作していません。コンテナの一覧まず、Kubernetes上で動作している全てのコンテナを確認してみましょう。Kubernetesでは、コンテナの単位をpodというもので表現しています。Kubernetesでコンテナを確認する時は、podを確認します。podsこれだけでは、全てのpodを確認することができません。してかというと、Kubernetesにはnamespace(名前空間)というものがあり、上のコマンドではデフォルトのnamespaceに属しているpodの情報しか見ることができないからです。全てのpodを確認するにはこのようにします。--all-namespaces=false--all-namespaces=falseをつけて、全てのnamespaceのpodを確認できます。namespaceを指定する場合はこのようにします。全てのnamespaceを確認するには、下記のコマンドを実行します。namespacespodの場合、--all-namespaces=falseをつけて全てを表示することもできますが、一部のnamespaceのものだけ知りたいというときには、このようにしてnamespaceの名前を調べておく必要があります。serviceの一覧serviceは、podが別のpodや外部のサーバと通信するためのものです。serviceを調べると、podにどのようなIPアドレスが割り当てられているのか、外部と通信することができるのかなどを知ることができます。serviceの一覧はこのようにして知ることができます。servicesこれはpodと違い、namespaceとは関係なく全てのserviceを知ることができます。ログKubernetesは、Dockerのオーケストラレーションツールということで、内部ではDockerを使っています。Dockerと同じように、ログを見ることが可能です。podsなどでpodの名前を調べておきます。したら、次のコマンドでログを見ることができます。見ることができるログは、Dockerでコンテナを起動したときに表示されるログと同じです。詳細情報podが起動できれば、ログなどで状況を知ることができるのですが、podが起動しないような時もあります。そのような時は、describeを使ってログとは別に詳細情報を見ることができます。pod名これは、pod以外の情報を見ることもできます。その場合podのところをそれぞれの単語で置き換えます。serviceの場合はこのようにします。service名さらに、nodeの場合はこのようにします。node名podにログインpodが動作していれば、そのpodに入って操作することができます。その場合はこのようにします。/bin/bash基本的に、Dockerのexecコマンドを使うのと同じように使います。私はよく、これらのコマンドを使って、Kubernetesの状況を確認しています。pod名`で詳細な情報を調べます。service名で詳細な情報を調べます。execでpodにログインしたりします。大体の場合、これでうまく動かない原因を発見できるはずです。名前のようにしてそれぞれの詳細情報知ることができるようになっています。複数の情報が手に入るような場合は、複数形で単語を記述します。まとめKubernetesは、コンテナを動作させるという点で普通のサーバとは違った考えが求められたり、制限があったりします。そこを覚えておいて、Kubernetesと付き合っていきましょう。