ローカルにインストールされた 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/logs
VM に記録されます。