1

ローカル VM でのセットアップと実行が簡単だったので、Kind k8sを使用して Kubernetes クラスターをインストールしました。Dockerも別途インストールしました。次に、標準出力にメッセージを出力するために構築した Spring ブート アプリケーションの Docker イメージを作成しました。その後、 kind k8sローカル レジストリに追加されました。この新しく作成したローカル イメージを使用して、kubectl apply -f config.yaml CLI コマンドを使用して kubernetes クラスターにデプロイを作成しました。同様の方法を使用して、fluentD コンテナーにマウントされるログを収集することを期待して、fluentdもデプロイしました。/var/log/containers

/var/log/containers/シンボリックリンクが存在しないことに気付きました。ただし/var/lib/docker/containers/、過去に作成された一部のコンテナ用のフォルダがあります。新しいコンテナー ID はいずれも存在しないようです/var/lib/docker/containers/

kubectl logs pod-nameローカル ストレージにログが見つからなくても、実行するとコンソールにログが表示されます。

stackoverflow メンバーから提供された別のスレッドの回答に従って、すべてではなく一部の情報を取得できました。

次のコマンドを実行して、Docker が json ロギング ドライバーで構成されていることを確認しました。 docker info | grep -i logging

次のコマンド (上記のスレッドにあります) を実行すると、イメージ ID を取得できます。 kubectl get pod pod-name -ojsonpath='{.status.containerStatuses[0].containerID}'

ただし、Docker は種類のコントロール プレーンdocker inspectによって管理されているため、想定しているようなイメージを認識していないため、Dockerイメージを検査するために使用することはできません。

フォーラムの専門家が、ログが書き込まれている場所を特定し/var/log/containers、コンテナー ログにアクセスするためのシンボリック リンクを再作成するのを支援できるかどうかを評価します。

4

1 に答える 1

0

ローカルにインストールされた Docker に、種類の Kubernetes によって作成されたポッドで実行されているコンテナーがないことは、まったく正常です。理由を説明しましょう。

まず、種類の Kubernetes が実際に Docker を必要とする理由を理解する必要があります。Pod 内でコンテナーを実行する場合は必要ありません。Kubernetes ノードとなるコンテナーを作成するには、Docker が必要です。このコンテナーには、探しているコンテナーを持つポッドがあります。

kindは、Docker コンテナー「ノード」を使用してローカル Kubernetes クラスターを実行するためのツールです。

したがって、基本的にレイヤーは次のとおりです。VM -> Kubernetes ノードとして機能する VM の Docker でホストされるコンテナー -> このコンテナーにはポッドがあります -> これらのポッドにはコンテナーがあります。

種類のクイックスタート セクションでは、種類ごとに使用される画像に関する詳細情報を見つけることができます。

これにより、ビルド済みの ノード イメージを使用して Kubernetes クラスターがブートストラップされます。ビルド済みのイメージは でホストされkindest/nodeていますが、現在、特定のリリースに適したイメージを見つけるには 、特定の種類のバージョン のリリース ノートkind versionを確認する必要があります ( で確認してください)。そこでは、種類のリリース用に作成されたイメージの完全なリストが見つかります。

質問に戻りますが、不足しているコンテナを探しましょう!

私のローカル VM では、種類の Kubernetesをセットアップし、ツールをインストールしました。kubectl次に、サンプルnginx-deploymentを作成しました。実行kubectl get podsすると、ポッドが機能していることを確認できます。

docker ps -a次を実行して、ノードとして機能しているコンテナを見つけてみましょう。

CONTAINER ID   IMAGE                  COMMAND                  CREATED          STATUS          PORTS                        NAMES
1d2892110866   kindest/node:v1.21.1   "/usr/local/bin/entr…"   50 minutes ago   Up 49 minutes   127.0.0.1:43207->6443/tcp   kind-control-plane

さて、これで実行してコンテナを見つけることができます。kindest/nodeイメージはコンテナー ランタイムとして docker を使用していませんが、crictl.

node: に実行してみましょうdocker exec -it 1d2892110866 sh:

# ls
bin  boot  dev  etc  home  kind  lib  lib32  lib64  libx32  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
# 

ノードに入ったので、コンテナがここにあるかどうかを確認します。

# crictl ps -a
CONTAINER           IMAGE               CREATED             STATE               NAME                      ATTEMPT             POD ID
135c7ad17d096       295c7be079025       47 minutes ago      Running             nginx                     0                   4e5092cab08f6
ac3b725061e12       295c7be079025       47 minutes ago      Running             nginx                     0                   6ecda41b665da
a416c226aea6b       295c7be079025       47 minutes ago      Running             nginx                     0                   17aa5c42f3512
455c69da57446       296a6d5035e2d       57 minutes ago      Running             coredns                   0                   4ff408658e04a
d511d62e5294d       e422121c9c5f9       57 minutes ago      Running             local-path-provisioner    0                   86b8fcba9a3bf
116b22b4f1dcc       296a6d5035e2d       57 minutes ago      Running             coredns                   0                   9da6d9932c9e4
2ebb6d302014c       6de166512aa22       57 minutes ago      Running             kindnet-cni               0                   6ef310d8e199a
2a5e0a2fbf2cc       0e124fb3c695b       57 minutes ago      Running             kube-proxy                0                   54342daebcad8
1b141f55ce4b2       0369cf4303ffd       57 minutes ago      Running             etcd                      0                   32a405fa89f61
28c779bb79092       96a295389d472       57 minutes ago      Running             kube-controller-manager   0                   2b1b556aeac42
852feaa08fcc3       94ffe308aeff9       57 minutes ago      Running             kube-apiserver            0                   487e06bb5863a
36771dbacc50f       1248d2d503d37       58 minutes ago      Running             kube-scheduler            0                   85ec6e38087b7

どうぞ。また、 Kubernetes Componentsとして機能している他のコンテナーがあることにも注意してください。

コンテナーをさらにデバッグするには、 crictl を使用した Kubernetes ノードのデバッグに関するドキュメントを読むことをお勧めします。

~/.kube/configまた、ローカル VM には、VM と Kubernetes クラスター間で通信するために必要な情報を含むファイルがあることに注意してくださいkubectl(種類の Kubernetes の場合 - ローカルで実行されている Docker コンテナー)。

それがあなたを助けることを願っています。ご不明な点がございましたら、お気軽にお問い合わせください。

編集 - マウントポイントのセットアップ方法に関する情報を追加

ノードからローカル VM へのディレクトリのマウントに関するコメントからの質問への回答。「エクストラマウント」をセットアップする必要があります。kind Kubernetes に必要な定義を作成しましょう。

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  # add a mount from /path/to/my/files on the host to /files on the node
  extraMounts:
  - hostPath: /tmp/logs/
    containerPath: /var/log/pods
    # optional: if set, the mount is read-only.
    # default false
    readOnly: false
    # optional: if set, the mount needs SELinux relabeling.
    # default false
    selinuxRelabel: false
    # optional: set propagation mode (None, HostToContainer or Bidirectional)
    # see https://kubernetes.io/docs/concepts/storage/volumes/#mount-propagation
    # default None
    propagation: Bidirectional

/var/log/pods代わりに-を使用していることに注意してください。/var/log/containers/これは、kind Kubernetescontainersディレクトリによって作成されたクラスターでは、ディレクトリ内のログへのシンボリック リンクしかないためですpod

yamlこれをたとえば として保存し、これcluster-with-extra-mount.yamlを使用してクラスタを作成します (/tmp/logsこのコマンドを適用する前にディレクトリを作成してください!):

kind create cluster --config=/tmp/cluster-with-extra-mount.yaml

次に、すべてのコンテナー ログが/tmp/logsVM に記録されます。

于 2021-08-26T16:15:09.957 に答える