れるネームスペースとのcgroupのLXC(Linuxのコンテナ)
名前空間の概要
- リソースの分離を達成するために、オペレーティング・システム・レベルから、その性質上、ホスト上のプロセス(処理容器)であり、それは主に分離、分離プロセスのリソースをリソースを参照します。コア技術の分離を実現するためのリソースは、Linuxの名前空間です。この名前空間設計技術や言語の多くは、(C ++の名前空間のように)同じです。
- Linuxの名前空間メカニズムは、リソース隔離ソリューションを提供します。PID、IPC、ネットワークおよびその他のシステムリソースもはやグローバルな性質が、特定の名前空間に属します。Linuxの名前空間は、コンテナベースの仮想化技術の基盤を実現するための優れたメカニズムを提供し、LXC(Linuxのコンテナ)は、リソースの分離を実現するために、この機能を使用することです。コンテナはお互いを乱すことなく、お互いに透明、異なる名前空間に異なるプロセスに属しています。
Linuxカーネルのサポート名前空間の種類
- 名前空間の7種類を実装したLinuxカーネル。
名称 宏定义 隔离内容
Cgroup CLONE_NEWCGROUP Cgroup root directory (since Linux 4.6)
IPC CLONE_NEWIPC System V IPC, POSIX message queues (since Linux 2.6.19)
Network CLONE_NEWNET Network devices, stacks, ports, etc. (since Linux 2.6.24)
Mount CLONE_NEWNS Mount points (since Linux 2.4.19)
PID CLONE_NEWPID Process IDs (since Linux 2.6.24)
User CLONE_NEWUSER User and group IDs (started in Linux 2.6.23 and completed in Linux 3.8)
UTS CLONE_NEWUTS Hostname and NIS domain name (since Linux 2.6.19)
- 簡単に言えば、次の名前空間以上の異なる種類について説明します。
- IPC:、PID名前空間とIPC名前空間が同じIPC名前空間内のプロセスと組み合わせることができる(システムV IPC、POSIXメッセージキュー)に必要な分離環境間通信処理のためのリソースがお互いを見ることができ、相互作用が、可能プロセスは、異なる空間と対話することはできません
- ネットワーク:ネットワーク名前空間処理のためにネットワーク・プロトコル・スタックの完全に独立したビューを提供します。ネットワーク・デバイス・インタフェースはIPv4、及びIPv6プロトコルスタック、IPルーティングテーブル、ファイアウォールルール、等ソケットを含みます。ネットワーク名前空間は、単にスタンドアロンシステムとして、独立したネットワーク環境を提供します。
- マウント:内側マウント名前空間の存在下での各処理は、マウント名前空間は、プロセスのファイルレベルのビューを提供します。このフラグを設定しない場合、サブプロセスの呼び出しに続いて、子と親プロセスのシェアマウント名前空間には、マウントまたはアンマウントは、名前空間内のすべてのプロセスに影響します。別のマウント名前空間内の子プロセス内の場合は、マウントを呼び出すことができたり、新しいドキュメントレベルのビューを確立します。umount。
- 異なる名前空間のプロセスIDの異なるプロセスIDによるLinuxの名前空間の管理、同じプロセス、!プロセスの名前空間には、親には見え親子構造、部分空間スペースです。
- ユーザー:分離するためのユーザー
- UTS:ホスト名を単離するために使用
各名前空間内のリソースの割り当てを制御するためのcgroup:
blkio 块设备io
cpu cpu
cpuacct cpu资源使用报告
cpuset 多处理器平台上的cpu集合
devices 设备访问
freezer 挂起或恢复任务
memory 内存用量及报告
perf_event 对cgroup中的任务进行统一性能测试
net_cls cgroup中的任务创建的数据报文的类别标识符
名前空間に関連するAPI
- 名前空間のAPIに関連する3つあります:プロセスが動作するためのクローン、setnsと共有解除、3つのAPIです。
- クローンメソッドは、新しい子プロセスを作成し、現在のプロセスが変化しないままで子プロセスは、新しい名前空間を追加してみましょう。
- int型クローン(int型(child_func)(無効)、無効child_stac、int型のフラグ、空のarg);
- クローン具体的な例については、記事を参照してください。http://blog.csdn.net/weifenghai/article/details/52836109
- setns現在のプロセスのための方法は、既存の名前空間に追加されます。
共有を解除する方法現在のプロセス指定されたタイプのネームスペースを終了し、新たに作成された名前空間に追加する(同等の新しい名前空間を作成して追加します)
マウント名前空間、chroot環境に比べて何が欠点?
- コマンドが実行される場合、「/」サブディレクトリは、コマンドによってアプリケーションに提供することができるされているアプリケーションのルートディレクトリを変更し、通常の手順、システムは、/ binには/ usr /なければならないためにchrootビンは/ usr / libに他のディレクトリ「/」下にコピー。
マウント名前空間はchrootの機能に加えて、chrootのより柔軟に行うことができます。これは、カーネルの名前空間の一部です。マウント名前空間が本当に根系のサブディレクトリが共有を行うことができ、排他的な(つまり、サブディレクトリのコピーを持っています)などがあります。
LXC
- 名前空間およびLinux用のcgroupで、それはすでにあなたがシステムを呼び出すコードを記述することによって技術的な通話を実現することができ、コンテナ船の技術を使用したい場合は、その後、コンテナ技術の前提があります。しかし、どのように多くのユーザーがその技術コンテナを実装するコードを書くことができますか?LXCはされて入ってきたので、彼は、コンテナを作成するには、ユーザーがツールのセットを介して行うことができますことができます