Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

BJ266-group1: Document translation of PouchContainer project #90

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added .DS_Store
Binary file not shown.
79 changes: 79 additions & 0 deletions blog-cn/pouch_with_diskquota翻译.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
# 具备Diskquota的PouchContainer

## 什么是diskquota

Diskquota是一种用于限制文件系统磁盘使用的技术。PouchContainer使用diskquota来限制文件系统磁盘空间。众所周知,基于块设备的方式,通过设置块设备的大小,可以直接使限制磁盘空间使用变得容易。但是使用对于基于文件系统的方式实现限制磁盘空间使用却很难。Diskquota的诞生正是用于限制文件系统磁盘文件。目前,PouchContainer支持基于图像驱动覆盖文件系统的diskquota。

目前,底层的文件系统中只有ext4和xfs支持diskquota。此外,现在有三种实现方式:**user quota**, **group quota** and **project quota**.

对于磁盘使用的限制,有两个规模:

- 使用配额(块配额): 设置文件系统目录的磁盘使用(不用于索引节点号);
- 文件配额(索引节点配额): 限制文件或索引节点分配。

PouchContainer目前只支持块配额,暂时不支持索引节点配额。

## PouchContainer中的Diskquota

PouchContainer中的Diskquota依赖于PouchContainer运行的内核版本。下表描述来每个文件系统支持的Diskquota。

| | user/group quota | project quota
:-: | :-: | :-:
ext4 | \>= 2.6| \>= 4.5
xfs | \>= 2.6 | \>= 3.10

尽管每个文件系统在相关内核版本下支持diskquota,但是用户仍然需要安装[quota-tools-4.04](https://nchc.dl.sourceforge.net/project/linuxquota/quota-tools/4.04/quota-4.04.tar.gz)。
这个配额工具还没有打包在PouchContainer软件包管理器中。我们会在未来将其完成。

## 开始

PouchContainer为容器涉及底层文件系统提供了两种方式。一个是容器根文件系统,另一个是从主机(容器外)到内部的容器卷标绑定。两个维度都包含在PouchContainer。

### 容器根文件系统diskquota

用户可以为一个以创建的容器根文件系统,设置标志`--disk-quota`来限制磁盘空间的使用,例如`--disk-quota 10g`。成功设置这个标志后,我们可以通过命令`df -h`得到根文件系统的大小是10G。 同时,这说明diskquota生效了。

```
$ pouch run -ti --disk-quota 10g registry.hub.docker.com/library/busybox:latest df -h
Filesystem Size Used Available Use% Mounted on
overlay 10.0G 24.0K 10.0G 0% /
tmpfs 64.0M 0 64.0M 0% /dev
shm 64.0M 0 64.0M 0% /dev/shm
tmpfs 64.0M 0 64.0M 0% /run
tmpfs 64.0M 0 64.0M 0% /proc/kcore
tmpfs 64.0M 0 64.0M 0% /proc/timer_list
tmpfs 64.0M 0 64.0M 0% /proc/sched_debug
tmpfs 1.9G 0 1.9G 0% /sys/firmware
tmpfs 1.9G 0 1.9G 0% /proc/scsi
```

### 卷标diskquota

用户也可以在创建时设置卷标的磁盘限制。通过增加一个`--option` 或 `-o` 标志,指定磁盘空间限制为一个期望的数据变得十分容易,例如 `-o size=10g`。

创建限制卷标的diskquota后,用户可以将这个卷标绑定到一个正在执行的容器。在下面的例子中,执行命令
`pouch run -ti -v volume-quota-test:/mnt registry.hub.docker.com/library/busybox:latest df -h`。
在运行着的容器中,目录`/mnt` 被限制到10GB的大小。

```
$ pouch volume create -n volume-quota-test -d local -o mount=/data/volume -o size=10g
Name: volume-quota-test
Scope:
Status: map[mount:/data/volume sifter:Default size:10g]
CreatedAt: 2018-3-24 13:35:08
Driver: local
Labels: map[]
Mountpoint: /data/volume/volume-quota-test
$ pouch run -ti -v volume-quota-test:/mnt registry.hub.docker.com/library/busybox:latest df -h
Filesystem Size Used Available Use% Mounted on
overlay 20.9G 212.9M 19.6G 1% /
tmpfs 64.0M 0 64.0M 0% /dev
shm 64.0M 0 64.0M 0% /dev/shm
tmpfs 64.0M 0 64.0M 0% /run
/dev/sdb2 10.0G 4.0K 10.0G 0% /mnt
tmpfs 64.0M 0 64.0M 0% /proc/kcore
tmpfs 64.0M 0 64.0M 0% /proc/timer_list
tmpfs 64.0M 0 64.0M 0% /proc/sched_debug
tmpfs 1.9G 0 1.9G 0% /sys/firmware
tmpfs 1.9G 0 1.9G 0% /proc/scsi
```
60 changes: 60 additions & 0 deletions blog-cn/pouch_with_dragonfly翻译.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# 具有Dragonfly的PouchContainer

容器技术有利于促进IT操作和维护,但同时为图像的分布带来了巨大的挑战。图像可以像几个Gibs一样大,拉动图像会非常慢,更不用说多个拉动请求或低网络带宽的时候。Dragonfly在这里可以发挥重要作用,作为一种P2P技术,它提供了非常高效的分布,避免了图像分发成为容器技术的瓶颈。

## 什么是Dragonfly

[Dragonfly](https://github.com/alibaba/Dragonfly#installation) 是一个P2P文件分布系统。它解决了大规模文件分发场景中耗时分布,低成功率和浪费带宽的问题。 Dragonfly显着提高了数据预热和大规模容器图像分发等服务功能。

### 组成

#### 服务器

服务器由集群管理器组成,它从源代码下载文件并构建P2P网络。

#### 客户端

客户端包含了两部分:dfget和proxy。Dfget是一种用于下载文件的主机端工具,proxy用于拦截http请求并将它们发送到dfget。

## 安装dragonfly

1.安装服务器

服务器可以两种方式部署,在物理机器上或在容器上,[install dragonfly server](https://github.com/alibaba/Dragonfly/blob/master/docs/install_server.md)的步骤很简单。

2.安装客户端

- 下载[client package](https://github.com/alibaba/Dragonfly/blob/master/package/df-client.linux-amd64.tar.gz).
- 解压缩包`tar xzvf df-client.linux-amd64.tar.gz -C /usr/local/bin`,或者你可以解压到任何你喜欢的目录,但是记得将客户端路径添加到PATH环境中, `export PATH=$PATH:/usr/local/bin/df-client`。
- 添加服务端ip到客户端配置文件中, `/etc/dragonfly.conf`,nodeIp是部署服务器主机的IP。

```
[node]
address=nodeIp1,nodeIp2,...
```

关于详细的安装信息,可以从 [install dragonfly client](https://github.com/alibaba/Dragonfly/blob/master/docs/install_client.md)中获得。

## 运行具有dragonfly的PouchContainer

1.开启dragonfly代理

开启dragonfly代理,`/usr/local/bin/df-client/df-daemon --registry https://reg.docker.alibaba-inc.com`,你可以增加标志 `--verbose` 来获取debug日志。 Dragonfly日志可在文件`~/.small-dragonfly/logs`中找到。

更多的dragonfly用法信息可在[dragonfly usage](https://github.com/alibaba/Dragonfly/blob/master/docs/usage.md)中找到。

2.添加下面的配置到PouchContain配置文件`/etc/pouch/config.json`中

```
{
"image-proxy": "http://127.0.0.1:65001"
}
```

3.拉取一个图像`reg.docker.alibaba-inc.com/base/busybox:latest`,你可在`~/.small-dragonfly/logs/dfdaemon.log`中找到下列输出,这意味着dragonfly正在工作。

```
time="2018-03-06 20:08:00" level=debug msg="pre access:http://storage.docker.aliyun-inc.com/docker/registry/v2/blobs/sha256/1b/1b5110ff48b0aa7112544e1666cc7199f812243ded4128f0a1b2be027c7 38bec/data?Expires=1520339335&OSSAccessKeyId=LTAIfYaNrksx0ktL&Signature=fVEYIQzIaXyqIcAhypbmzaUx5x8%3D"
time="2018-03-06 20:08:00" level=debug msg="post access:http://storage.docker.aliyun-inc.com"
time="2018-03-06 20:08:00" level=debug msg="pre access:http://storage.docker.aliyun-inc.com/docker/registry/v2/blobs/sha256/98/9869810a78644038c8d37a5a3344de0217cb37bcc2caa2313036c6948b0 ee8da/data?Expires=1520339335&OSSAccessKeyId=LTAIfYaNrksx0ktL&Signature=Tx7JYU07Gap8RfasvCe0JGAUCo4%3D"
```
Loading