この投稿を読む時間がありませんか? 私はそれをウェブします。 教えてくれたことへの返信は
/var/lib/kubelet/
/volumes/
です。 .
ときどき誰かとペアを組んだり、デモを展示したりして、私が構築した全体的な操作の一部は、うまく文書化されていません。 私たちは皆、手順に沿ってどこかで学び、ツールボックスに隠した環境知識の例を取得します。 私はこれらの不測の事態に出くわすたびに、次の特定の人が私よりも少なくとも少し早くヒントを救うことができると断言して、それらについて投稿することを念頭に置いて努力しています.
最近偏見のない公正な方法で、いくつかのファイルが 数量 としてマウントされている問題のトラブルシューティングに変更しました。
Pod
内のコンテナへ Kubernetes クラスター上。 量は効率的にマウントされていると認識されていますが、コンテナーは、マウントされた項目で常に最新である必要がある資格情報による認証に一度失敗しました。 クレデンシャルが本当に適切に動作していることを確認する必要がありましたが、この特定のコンテナーは、最小限の OCI イメージ
を使用して 1 回変更されました。 (うめき声 ディストリビューションなし 👏)、そうkubectl exec
を使用してシェルを Web 化するこのレベルで、
探索するノード
一度起こったことに変わりました。 ほとんどの場合、Kubernetes は不透明な API を楽しむことができますが、一方で、シーンのすべての部分が、さまざまなレベルの分離を備えた物理的なハードウェア上の乱れのないプロセスとファイルであることを念頭に置くことは非常に貴重です。さまざまなクラスターをフリートでスクランブルすると、ノードの探索を開始できますそれ自体がローカル マシンで実行されているコンテナーです。
$ さまざまなクラスタを作成します
クラスタ「バラエティ」を作成中… ✓ ノードイメージの確保 (kindest/node:v1.25.3) 🖼 ✓ ノードの準備 📦
✓ 設定の書き込み📜 ✓ 管理プレーンの起動🕹️ ✓ CNI のインストール🔌 ) ✓ StorageClass のインストール 💾
kubectl コンテキストを "variety-variety" に配置
あなたは間違いなく、クラスターを次のもので消費する立場にあるでしょう:
kubectl cluster-info --context 多様性-多様性
バラエティをご利用いただきありがとうございます! 😊
デフォルトでは、管理プレーンとワークロードのスケジューリングの目的の両方として機能する単一のノードを取得できます。
$ docker コンテナ ls
コンテナ ID イメージ コマンドが作成されたステータス ポート名 f8a584b70c83 親切/ノード:v1。 25.3 "/usr/local/bin/entr…" 1分前のペア Up 1分のペア 127.0.0.1: 46125->6443/tcp 品種管理面
シークレット
を使うことができます) インスタンスとして数量マウント (そのことを認めて Secret
も読める方は、数量の内容を常に確認している必要はありません)。 gcr.io/distroless/cc
で構築された単純なコンテナー イメージにマウントします。
$ kubectl fabricate secret generic huge-secret --from-literal=take a look at=files
: v1 品種: ポッド
: メタデータ:
名前: スリープ
仕様:
コンテナ
- 名前: 寝る
画像: hasheddan/sleep:v0.0.1
音量マウント : - 名前: 秘密と戦術 マウントパス: /files/secret
ボリューム :
- 名前: 秘密と戦術
ひみつ: secretName: 巨大私たちの秘密
$ kubectl まとめ -f pod.yaml ポッド/スリープが作成されました
$ kubectl Web ポッド NAME READYステータスが年齢を再起動します 睡眠 1/ 1 ワーキング 0 5s
また、docker exec
を拡張して、シェルを variety
ノード (これが一度クラウド ホスト型 VM に変更された場合、間違いなく ssh
も使用することになるでしょう) ) とはいえ、「殻を破る立場にはない」という精神で、すべてをホスト マシン上で実現しましょう
ステップ 1: ノード ファイルシステムの検索 見出しへのリンク
前に説明したように、私たちのノードは、バラエティ
。 in
を実行しているコンテナ内のファイルを調べるよりも早く バラエティー
、まず、ノード自体のファイルシステムを検索する必要があります。
overlayfs の詳細については、まだ先の話になります。 が機能し、代わりに の手順でノードのファイルシステムに正しくアクセスするproc
ファイルシステム )。 そのためには、ノード コンテナーの PID を Web で取得する必要があります。これは、Docker が作成するものであり、おそらくあなたもおそらく 1 つの断言で想像できるでしょう。
$ docker コンテナサイト バラエティー管理-平面 | jq。 .Notify.Pid 958956
PID があれば、ノードのミューズ項目化にアクセスできます。
表示: muse ファイルシステムにアクセスするには、昇格した特権が必要になることは間違いありません。
$ ls /proc/958956/root bin boot dev とその他のホーム バラエティ lib lib32 lib64 libx32 media mnt opt proc をロードしますルート突進 sbin srv sys tmp usr var
これは、docker exec
代替手段として
bin ブート dev とその他のホーム バラエティ lib lib32 lib64 libx32 メディア mnt opt proc ルート ランジsbin srv sys tmp usr var
ステップ 2: Pod UID 見出しへのリンク その後、コンテナの Pod
の UID を知る必要があります。に興味がある。
$ kubectl web pod sleep -o=jsonpath={.metadata.uid}
71b73425-1838-4688- 9255-57fbeba a6d43
Pod
の UID を知る必要があります。に興味がある。$ kubectl web pod sleep -o=jsonpath={.metadata.uid}
kubelet
は /var/lib にファイルを書き込みます/kubelet
項目化されているため、マウントされたボリュームがそこに表示されるのは安定した賭けです.
ステップ 3: 数量マウントの検索 見出しへのリンク /pods
サブディレクトリには、このノードにスケジュールされているすべての Pod
のファイルがあります。すべての Pod
.
$ ls /proc/958956/root/var/lib/kubelet/pods
0d94b24ab949b9eb0e6237e4515cb37b 305850cc48c365264e55686e68437f03 57b07309-36c0-4a02-abec-5b97196bac0f 71b73425-1838-4688-9255-57fbebaa6d43 a22bc248-652a-4142-b3a3-203885aa6df1 2ff98227-a55e-4907-b666-2cb1128e6ad8 3401ce1b-9970-4139-bcf0-400ec0ebca9e 6d3dda2cad9846e0d48dbd5d5b9f59fc 9396d9ae-116a-434d- b0c2-d56df3f7d663 aaff90ec64f346d418f0a93d766752c5
/pods
サブディレクトリには、このノードにスケジュールされているすべての Pod
のファイルがあります。すべての Pod
.$ ls /proc/958956/root/var/lib/kubelet/pods
0d94b24ab949b9eb0e6237e4515cb37b 305850cc48c365264e55686e68437f03 57b07309-36c0-4a02-abec-5b97196bac0f 71b73425-1838-4688-9255-57fbebaa6d43 a22bc248-652a-4142-b3a3-203885aa6df1 Pod
は UID で識別され、すべての Pod
を項目別に分類すると、専用の volumes
サブディレクトリがあり、種類ごとに分割されています。
$ ls /proc/958956/root/var/lib/kubelet/pods/71b73425-1838-4688-9255-57fbebaa6d43/volumes/
kubernetes.io~projected kubernetes.io~secret
単純な例として、ServiceAccount
の両方の予測トークン量を取得しています。 、私たちが明示的に要求した Secret
数量のため、同様に成功しました。 Secret
数量の手順で右を見ると、見てみる
と表示されます。私たちのキーに合ったファイルで、内容は料金を含みます.
$ cat /proc/958956/root/var/lib/kubelet/pods/71b73425-1838-4688-9255-57fbebaa6d43/volumes/kubernetes.io~秘密/秘密と戦術/
ファイル
ボーナスラウンド: proc
インセプション
見出しへのリンク
代替手段として、私たちがファイルに表示されたい場合 sleep
コンテナーのシステムを長引かせることなく、さまざまな
で正確に接続されたステップをまとめることができます。 ファイルシステムにアクセスするために行ったノード。 重要なのは、
sleep
割り当て の PID を検索する必要があることです。 の
さまざまな
ノード。これは、ホスト上で見たものよりも多様化することができます。
$ ls -l /proc/958956/ルート/proc/*/exe | grep スリープ lrwxrwxrwx 1 ルート ルート0 Mar 18 14: 55 proc/2137/exe -> /sleep
これで root
にアクセスできます
sleep
割り当てのファイルシステム、および kubelet
にあるファイルをサルベージします。
$ cat /proc/958956/root/proc/2137/root/files/secret/ を参照) ファイル ) 結びのヒント
見出しへのリンク
この投稿が、少なくとも 1 人の特定の人が、それなしで得られるよりも早く教えを修正するのに役立ったことを願っています. 個々の個人ファイルは、マシンのどこかにある正しいビットであることを常に心に留めておいてください!
質問、アイデア、またはアイデア、自由に私にメッセージを送ってください @hasheddan Twitter または @hasheddan@kinds.pl
on Mastodon! 𝚆𝚊𝚝𝚌𝚑 𝙽𝙾𝚆 📺