記事ディレクトリ
- Linux 運用保守エンジニアの面接での質問 (8)
-
- 1 Docker ネットワークの種類、使用シナリオ
- 2 CMD と ENTRYPOINT の違い
- 3 dokcer イメージのサイズを小さくする方法
- 4 実行中のコンテナがあります。コンテナ内に ps、top、netstat、ss、ip、lsof などのコマンドがありません。コンテナ内のプロセス、pid、および開いているポートを確認する方法
- 5 対話中のコンテナのターミナルを終了せずに一時的に終了するにはどうすればよいですか?
- 6 dockerfile のないイメージまたは実行中のコンテナーのみがあり、このイメージまたはコンテナーを使用して dockerfile を書き直す必要がある場合、このイメージまたはコンテナーの以前のビルド プロセスを表示する方法。
- 7 COPYとADDの違い
- 8 鏡像の作り方
- 9 K8S のコンポーネントとその用途は何ですか?
- 10 K8S はポッドプロセスを作成します
Linux 運用保守エンジニアの面接での質問 (8)
希望の仕事が見つかるよう、皆さんの幸運を祈っています。
継続的な学習がなくなることはありません。
地球は爆発しないし、私たちは休暇も取らない。
チャンスは常に準備ができている人に与えられます。
さあ、労働者を殴ってください!
1 Docker ネットワークの種類、使用シナリオ
- none: none モードを使用した後、Docker コンテナはネットワーク構成を実行しません。ネットワーク カード、IP、ルーティングはありません。そのため、デフォルトでは外部と通信できません。手動でネットワークを追加する必要があります。 IPなどを設定するためのカードなので、ほとんど使用されません。
- ブリッジ: デフォルトのモード。外部ネットワークと通信し、SNAT 経由で外部ネットワークにアクセスし、DNAT を使用して外部ホストからコンテナーにアクセスできるようにするため、このモードは NAT モードとも呼ばれます。
- ホスト: このモードは、変換せずにホストのネットワークを直接使用するため、ネットワーク パフォーマンスが最も高くなりますが、各コンテナーで使用されるポートを同じにすることはできず、比較的固定されたコンテナー ポートでサービスを実行するのに適しています。
- コンテナ: このモードを使用して作成されたコンテナは、ホストとネットワークを共有するのではなく、既存のコンテナとネットワークを共有するように指定する必要があります。新しく作成されたコンテナは、独自のネットワーク カードを作成したり、独自の IP を構成したりしませんが、ネットワークを共有します指定された既存のコンテナは IP とポート範囲を共有しているため、このコンテナのポートが指定されたコンテナのポートと競合することはありません。ネットワーク以外のファイル システムとプロセス情報は依然として相互に分離されています。 2 つのコンテナはネットワーク カードを介して通信できます。
2 CMD と ENTRYPOINT の違い
エントリーポイントがありません | ENTRYPOINT exec_entry p1_entry | ENTRYPOINT [“exec_entry”, “p1_entry”] | |
---|---|---|---|
CMDなし | エラー、許可されていません | /bin/sh -c exec_entry p1_entry | exec_entry p1_entry |
CMD [“exec_cmd”、“p1_cmd”] | exec_cmd p1_cmd | /bin/sh -c exec_entry p1_entry | exec_entry p1_entry exec_cmd p1_cmd |
CMD exec_cmd p1_cmd | /bin/sh -c exec_cmd p1_cmd | /bin/sh -c exec_entry p1_entry | exec_entry p1_entry /bin/sh -c exec_cmd p1_cmd |
3 dokcer イメージのサイズを小さくする方法
- ニーズを満たす小規模な基本的なシステム イメージを選択するようにしてください。
- コンパイルおよびインストール パッケージ キャッシュによって生成されたファイルなどの一時ファイルをクリーンアップします。
- 各ソフトウェアをインストールするときは、正確なバージョン番号を指定し、不要な依存関係を導入しないようにしてください。
- ミラー層の数を減らし、RUN コマンドなどの同じコマンドをマージします。
- Dockerfile を使用してミラーを作成する場合は、dockerignore ファイルを追加するか、クリーンなツール ディレクトリを使用します。
4 実行中のコンテナがあります。コンテナ内に ps、top、netstat、ss、ip、lsof などのコマンドがありません。コンテナ内のプロセス、pid、および開いているポートを確認する方法
docker ps コマンドを使用すると、コンテナ内のプロセスとポートを表示できます。docker top コマンドを使用して、コンテナー内の関連プロセス (PID やその他の情報を含む) を表示することもできます。docker port コマンドを使用して、コンテナーによって公開されているポートを表示できます。
コンテナにも入ります。/proc ディレクトリ内のプロセス PID およびその他の情報を表示します。
/proc/pid ディレクトリに含まれるファイルとディレクトリの例を次に示します。
- cmdline: このファイルには、プロセス開始時の完全なコマンド ライン パラメータが含まれています。
- cwd: このファイルには、プロセスの現在の作業ディレクトリが含まれています。
- environ: このファイルにはプロセス環境変数のリストが含まれています。
- exe: このファイルはプロセスの実行可能ファイルへのシンボリック リンクであり、これを通じてプロセスの実行可能ファイルを見つけることができます。
- fd: このディレクトリには、プロセスによって開かれたファイルのリストが含まれており、各ファイルはこのディレクトリにシンボリック リンクの形式で表示されます。
5 対話中のコンテナのターミナルを終了せずに一時的に終了するにはどうすればよいですか?
ctrl+p+q の 3 つのキーを同時に押します。Ctrl+c を押すと、コンテナ内のアプリケーション プロセスが終了し、コンテナも終了します。
6 dockerfile のないイメージまたは実行中のコンテナーのみがあり、このイメージまたはコンテナーを使用して dockerfile を書き直す必要がある場合、このイメージまたはコンテナーの以前のビルド プロセスを表示する方法。
表示するには、dockerhistory または docker imagehistory コマンドを使用します。docker Inspection コマンドを使用して関連情報を表示することもできます。
7 COPYとADDの違い
- COPY コマンドはファイルのすべてのメタデータ (所有者、アクセス許可など) をコンテナーにコピーしますが、ADD はコピーしません。これは、ADD を使用するときにファイルのメタデータを手動で設定する必要がある可能性があることを意味します。
- ADD コマンドは、ファイルのコピー時に tar ファイルの自動解凍をサポートしますが、COPY はサポートしません。
- ADD コマンドは URL をソース ファイルとしてサポートし、それらを自動的にダウンロードしてコンテナにコピーします。
8 鏡像の作り方
- docker commit # 既存のコンテナを変更してミラーとして手動で構築します
- docker build # Dockerfile ファイルを使用してイメージをバッチでビルドします
9 K8S のコンポーネントとその用途は何ですか?
マスター:
- kube-apiserver: API サーバーは、REST 操作のサービスを提供し、Kubernetes API を公開し、リクエストを受け入れる作業を処理します。また、他のすべてのコンポーネントが相互作用するクラスターの共有状態へのフロントエンドを提供します。
- kube-controller-manager: コントローラー プロセスの実行を担当し、クラスター内のノード、ポッド コピー、サービス エンドポイント (Endpoint)、名前空間 (Namespace)、サービス アカウント (ServiceAccount)、リソース クォータ (ResourceQuota) の管理を担当します。特定 ノードが予期せずダウンすると、コントローラー マネージャーがそれを適時に検出し、自動修復プロセスを実行して、クラスターが常に期待どおりの動作状態になるようにします。
- kube-scheduler: 実行中のノード (ノード) を指定せずに新しく作成された Pod を監視し、Pod が実行されるノードを選択する責任を負います。
- etcd: すべての Kubernetes クラスター データのバックエンド データベースとして使用される、一貫性があり可用性の高いキーと値のストア。
ノード:
- kubelet: コンテナー (コンテナー) がポッド内で実行されていることを確認します。ノードノードのステータス情報をマスターに報告する; 指示を受け入れてポッドに Docker コンテナを作成する; ポッドに必要なデータ量を準備する; ポッドの実行ステータスを返す; ノードノードでコンテナのヘルスチェックを実行する
- kube-proxy: クラスター内の各ノード (ノード) で実行されるネットワーク プロキシ。Kubernetes サービス (サービス) の概念の一部を実現します。
- コンテナ ランタイム: コンテナ ランタイムは、コンテナの実行を担当するソフトウェアです。
10 K8S はポッドプロセスを作成します
- 対応する yaml ファイルを準備し、kubectl を通じて API サーバーに送信します。
- API サーバーはクライアントのリクエストを受信し、リクエストの内容を etcd に保存します。
- スケジューラは etcd を監視し、ノードのないポッド オブジェクトがフィルタリングおよびスコアリングされて、ポッドを実行するのに最適なノードを選択していることを検出します。
- ノードはポッドに対応するコンテナを実行し、コンテナのランタイムを通じて対応する数のコピーを作成します。
- ノード上の kubelet は、独自のノード上のコンテナを管理します。
- コントローラーはクラスター内の各ノードを監視し、予想される状態が実際の状態と一致しないことが判明した場合は、対応するノードに通知します。
- ノードが通知を受信すると、コンテナー ランタイムを通じてポッド内のコンテナーを縮小または拡張します。
上記の面接の質問は個人的な要約です。順序に関係なく、思いついたことを自由に書いてください。文章に何か問題がある場合は、コメントしてメッセージを残してください。すぐに修正します。
元のリンク: Linux 運用保守エンジニアの面接の質問 (8)。