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

Group 4 submits task1 task2 and additional translation, fix #66, fix … #77

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
83 changes: 83 additions & 0 deletions blog-cn/pouch_with_kata.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@


# PouchContainer with kata

## 介绍
Kata Container整合了Intel® Clear Containers以及Hyper runV的技术特点,在保证containers运行速度的同时也保证了虚拟机的安全性,其核心技术与runV相同。有关虚拟机container的详细信息,可以参阅 [runV doc](https://github.com/alibaba/pouch/blob/master/docs/features/pouch_with_runV.md).

## 安装准备工作
由于kata不提供安装选项,所以我们从[clear container project](https://github.com/clearcontainers) 上总结了一些安装方法。如果需要了解细节,可以参阅[kata-containers](https://github.com/kata-containers/community#users)。


### 安装步骤

1. 安装qemu

在运行[QEMU](https://www.qemu.org)之前,我们需要先运行VM。通过执行以下代码,我们可以很容易地安装QEMU相关的工具包。

如果宿主\物理机是 Ubuntu OS 系统,执行:

```
sudo apt-get install -y qemu qemu-kvm
```

如果宿主\物理机是 Red Hat series OS 系统,执行:

```
sudo yum install -y qemu qemu-kvm
```

2. 安装guest kernel以及guest image

[kata-containers/osbuilder](https://github.com/kata-containers/osbuilder) 提供了一个工具用于创建guest image,详情可参考[detail steps](https://github.com/kata-containers/osbuilder#usage)。由于这个工具不能用于创建guest kernel,创建guest kernel的详细步骤可参考[clearcontainers/osbuilder](https://github.com/clearcontainers/osbuilder#build-guest-kernel).

3. 安装 kata-runtime

在这一部分,我们需要安装三个可执行文件:[kata-runtime](https://github.com/kata-containers/runtime), [kata-proxy](https://github.com/kata-containers/proxy) 以及 [kata-shim](https://github.com/kata-containers/shim)。 在一个运行的kata container中,kata-runtime会调用kata-proxy 以及 kata-shim。从源码中获取这些可执行文件其实十分简单,只需要先从github中clone下代码,然后输入make命令。下述代码以获取kata runtime为例:

```shell
git clone https://github.com/kata-containers/runtime.git
cd runtime
make
```

### 配置 kata runtime
Kata runtime从配置文件中直接读取配置参数,配置文件的默认路径为
`/etc/kata-containers/configuration.toml`.
生成默认配置文件的命令为:

```shell
git clone https://github.com/kata-containers/runtime.git
cd runtime
make
```

文件会生成在 `cli/config/configuration.toml`,将这个文件复制到默认路径中即可。

```shell
cp cli/config/configuration.toml /etc/kata-containers/configuration.toml
```

需要注意的是,你可能需要修改这个文件,确保所有可执行文件在系统中的路径都正确。

### 启动kata container

当上述所有步骤全部完成, 你就可以使用kata container了。

```shell
$ pouch run -d --runtime=kata-runtime 8ac48589692a top
00d1f38250fc76b5e66e7fa05a41d342d1b48202d24e2dbf06b20a113b2a008c

$ pouch ps
Name ID Status Created Image Runtime
00d1f3 00d1f3 Up 5 seconds 7 seconds ago docker.io/library/busybox:latest kata-runtime
```

进入kata container.

```shell
$ pouch exec -it 00d1f3 sh
/ # uname -r
4.9.47-77.container
```
link: https://github.com/alibaba/pouch/blob/master/docs/features/pouch_with_kata.md
96 changes: 96 additions & 0 deletions blog-cn/基于Ubuntu搭建PouchContainer运行环境.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
## PouchContainer简介

PouchContainer是阿里巴巴集团开源的高效、企业级容器引擎技术,拥有隔离性强、可移植性高、资源占用少等特点。可以帮助企业快速实现存量业务容器化,同时提高超大规模下数据中心的物理资源利用率。

本文将给大家介绍PouchContainer的搭建和上手过程。



## 环境准备

- VirtualBox

- 包含pouch的Ubuntu镜像



## 搭建过程

1. 打开安装好的VirtualBox,首先点击标题栏的New按钮,新建一个操作系统,name可以自定义,type选择Linux,Version选择Red Hat(64-bit)。

![](http://oyrpkn4bk.bkt.clouddn.com/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202018-07-30%20%E4%B8%8B%E5%8D%885.33.31.png)



2. 点击继续按钮进入内存的选择页面。内存选择1024MB,当然也可以根据需要加大内存。

![](http://oyrpkn4bk.bkt.clouddn.com/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202018-07-30%20%E4%B8%8B%E5%8D%885.25.41.png)



3. 点击继续按钮进入硬盘选择页面,选中"使用已有的虚拟硬盘文件",选择包含pouch的Ubuntu镜像`ubuntuPouch.vdi`,点击创建,在VirtualBox左边栏可以看到新建的虚拟机。

![](http://oyrpkn4bk.bkt.clouddn.com/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202018-07-30%20%E4%B8%8B%E5%8D%885.34.02.png)



4. 启动虚拟机,等待进入登录阶段,用户名`pouch`,密码`123456`

5. 切换到root用户下:`sudo su root`

6. 检查网络是否通畅:`ping www.alibaba-inc.com`

7. 启动pouch服务:`systemctl start pouch`

8. 输入`pouch`命令判断pouch是否启动

![](http://oyrpkn4bk.bkt.clouddn.com/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202018-07-30%20%E4%B8%8B%E5%8D%885.43.46.png)



9. 执行`pouch run -t -d busybox sh`启动名为busybox的容器

10. 使用`pouch ps -a`可以查看所有创建的容器

![](http://oyrpkn4bk.bkt.clouddn.com/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202018-07-30%20%E4%B8%8B%E5%8D%886.05.59.png)



11. 执行`pouch exec -it {id} sh`进入容器

![](http://oyrpkn4bk.bkt.clouddn.com/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202018-07-30%20%E4%B8%8B%E5%8D%886.06.23.png)

到此为止,PouchContainer在Ubuntu虚拟机上的搭建过程已经完成,Centos与此类似。

为了本地开发方便,我们将继续配置虚拟机的ssh连接。



## SSH连接虚拟机

1. 在VirtualBox界面点击设置-->网络,连接方式选择网络地址转换

2. 在该界面下点击高级,端口转换,配置端口映射。主机端口可以任选,子系统端口必须选择22。



![](http://oyrpkn4bk.bkt.clouddn.com/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202018-07-30%20%E4%B8%8B%E5%8D%885.56.06.png)



3. 配置完成,打开本地terminal,使用命令`ssh -p 2233 [email protected]`连接虚拟机。

![](http://oyrpkn4bk.bkt.clouddn.com/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202018-07-30%20%E4%B8%8B%E5%8D%885.58.24.png)



## 总结

通过上面的教程,我们可以很轻松的在非Linux电脑上体验PouchContainer。







93 changes: 93 additions & 0 deletions blog-cn/翻译pouch_with_lxcfs.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
# PouchContainer与LXCFS

容器技术为不同的隔离环境提供传统的虚拟化技术,如VMware,KVM。普遍的Linux容器以削弱隔离为代价换来了更快的容器打包以及设定速度。容器的资源视图是Linux容器面临的最广为人知的隔离问题之一。

容器为用户提供了一种限制运行容器的资源使用的大致方法,资源包括内存,cpu, blkio等。但容器中的步骤无法使之获取额外的相应资源。但是,如果容器内的步骤用命令 `free`, `cat /proc/meminfo`, `cat /proc/cpuinfo`, `cat /proc/uptime`查出资源上限,这些命令会得到对宿主机而言正确的信息,而不是容器本身。

举个例子来说,如果我们创建一个200MB主机内存,总内存2GB的容器,我们可以发现通过命令`free`得出的资源上限是不正确的,结果是主机的总内存:

``` shell
$ pouch run -m 200m registry.hub.docker.com/library/ubuntu:16.04 free -h
total used free shared buff/cache available
Mem: 2.0G 103M 1.2G 3.3M 684M 1.7G
Swap: 2.0G 0B 2.0G
```

## 资源隔离情景

由于缺乏资源隔离,一些应用可能会在容器提供的环境中运行异常。应用可能发觉它的运行时间与在正常物理机或虚拟机上的运行时间不同。以下是一些由于隔离匮乏而影响应用运行的例子:

> 对于很多基于JVM的Java应用,应用的启动脚本多依赖于系统资源对于JVM分配堆栈大小的能力。因此,一个在2GB内存主机上创建出的200MB内存的容器,会认为它能够使用2GB的内存,所以启动脚本会让Java运行时根据与200MB上限相差甚远的2GB内存分配堆栈大小。因此应用程序当然会启动失败。对于Java应用,一些库会根据它们的资源视图分配堆栈大小,这也会暴露出潜在的安全问题。

除了内存资源视图的问题,还有弱CPU资源视图隔离的问题。

> 大多数中间软件会根据它认为的处理器信息去设置默认的线程数量。用户会配置在cgroup文件生效的容器cpu是不无道理的事情。但是,容器中的步骤通过使用`/proc/cpuinfo` 总是得到整个内核数量,并一定会导致不稳定。

资源隔离会影响容器里系统级的应用程序。

> 容器还可以用来打包系统级的应用程序,并且系统级应用程序会时常需要通过虚拟文件系统`/proc`获取系统信息。如果使用的是主机的正常运行时间,而不是容器的正常运行时间,系统级应用程序会失去控制或者不按预期运行。`cpuinfo` 和 `meminfo`,以及一些其它系统资源视图也是这些应用程序需要考虑的方面。

## 什么是LXCFS

[LXCFS](https://github.com/lxc/lxcfs)是一个小型的 [FUSE文件系统](https://en.wikipedia.org/wiki/Filesystem_in_Userspace) ,开发它的意图是让Linux容器更像一个虚拟机。最开始它是LXC的副产品,但其实它可以在任何运行环境被使用。 LXCFS 兼容Linux kernel 2.6+。LXCFS可以处理 `procfs`里重要文档提供的信息,包括:

* /proc/cpuinfo
* /proc/diskstats
* /proc/meminfo
* /proc/stat
* /proc/swaps
* /proc/uptime

PouchContainer在之前的版本中一直支持LXCFS,并且一直很稳定。 换句话来说,如果用户启动LXCFS,LXCFS在主机上会运行守护进程。通常来说,当创建了一个有资源上限的容器,一些映射这个容器的虚拟文件会在cgroup文件系统中被创建。然后,LXCFS会动态地读取这些文件里的数值,比如`memory.limit_in_bytes`,并在主机上产生一个新的分支虚拟文件(如 `/var/lib/lxc/lxcfs/proc/meminfo`),然后把这个文件绑定在容器上。最后,容器里的步骤会通过类似`/proc/meminfo`的命令读取文件,获取到真正的资源视图。

下面是LXCFS和容器的结构:

![pouch_with_lxcfs](../static_files/pouch_with_lxcfs.png)

## 开始使用

利用LXCFS,用户达到资源隔离是很容易的事情。事实上,如果LXCFS软件在$PATH中不存在的话,它会自动与PouchContainer一起安装在主机上。

在体验LXCFS确保的资源视图隔离之前, 用户需要确认LXCFS模式在pouchd中是被允许的。如果LXCFS模式还没有被设置好,用户需要中止pouchd,再通过 `pouchd --enable-lxcfs`命令开启pouchd。只有在pouchd开启LXCFS模式,用户才能在容器中使用LXCFS功能。

当pouchd中开启着LXCFS模式时,pouchd有额外能力可以创建有隔离的资源视图的容器。除此之外,pouchd还可以创建没有资源视图隔离的普通容器。

最后,命令`pouch run`中的 `--enableLxcfs` 标志是在已经允许LXCFS模式的pouchd中使得LXCFS可以创建容器的唯一方法。在这里我们在2GB内存的主机上创建一个内存为200MB的容器。

### 启动条件

如果是在Centos中,首先要确保你的lxcfs服务在运行。 如果是其他的系统可能会使用不同的启动方式。


```
$ systemctl start lxcfs
$ ps -aux|grep lxcfs
root 1465765 0.0 0.0 95368 1844 ? Ssl 11:55 0:00 /usr/bin/lxcfs /var/lib/lxcfs/
root 1465971 0.0 0.0 112736 2408 pts/0 S+ 11:55 0:00 grep --color=auto lxcfs
```

通过更改--enable-lxcfs标记启动 pouchd lxcfs

```
$ cat /usr/lib/systemd/system/pouch.service
[Unit]
Description=pouch

[Service]
ExecStart=/usr/local/bin/pouchd --enable-lxcfs
...

$ systemctl daemon-reload && systemctl restart pouch
```

``` shell
$ pouch run -m 200m --enableLxcfs registry.hub.docker.com/library/ubuntu:16.04 free -h
total used free shared buff/cache available
Mem: 200M 876K 199M 3.3M 12K 199M
Swap: 2.0G 0B 2.0G
```

我们可以发现返回的总内存大小就是容器的内存上限。
在执行上述命令过后,我们同时也可以发现在容器中的进程获取的资源也是它实际的资源上限。换句话说,在容器中的应用会更加的安全。这也是PouchContainer重要的特性之一。

link: https://github.com/alibaba/pouch/blob/master/docs/features/pouch_with_lxcfs.md
95 changes: 95 additions & 0 deletions blog-en/PouchContainer-tutorial.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
## Introduction of PouchContainer
PouchContainer is an open-source container engine technology in enterprise level created by Alibaba. It can provide strong isolation with high protability and occupy limited resource at the same time. PouchContainer can not only help enterprises achieve containerization of their stock business,but also improve the physical resource usage of data center in large scale.

In this passage, the installation and a tutorial of PouchContainer will be introduced.


## Prepare Environment

- VirtualBox

- Ubuntu image with pouch



## Building steps

1. Open the already installed VirtualBox. First, click the button NEW on the menu to create a new operation system. Configure as below: name can be defined freely; choose type as Linux; choose Version as Red Hat(64-bit).

![](http://oyrpkn4bk.bkt.clouddn.com/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202018-07-30%20%E4%B8%8B%E5%8D%885.33.31.png)



2. Click NEXT, entering the page with RAM otpions. Choose RAM as 1024 MB. You can choose larger RAM regarding to your need.

![](http://oyrpkn4bk.bkt.clouddn.com/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202018-07-30%20%E4%B8%8B%E5%8D%885.25.41.png)



3. Click NEXT, engtering the page with hard disk options. Choose 'Using existing virtual hard disk file', then find the Ubuntu Image containing pouch `ubuntuPouch.vdi`. Click create. Finally a new created virtual machine is showed on the left bar.

![](http://oyrpkn4bk.bkt.clouddn.com/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202018-07-30%20%E4%B8%8B%E5%8D%885.34.02.png)



4. Activate virtual machine, wating for the log in message. Enter the user name `pouch` and the code`123456`

5. Switch to the root user:`sudo su root`

6. Check Internet:`ping www.alibaba-inc.com`

7. Activate pouch:`systemctl start pouch`

8. Type `pouch` order to see whether it has been activated

![](http://oyrpkn4bk.bkt.clouddn.com/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202018-07-30%20%E4%B8%8B%E5%8D%885.43.46.png)



9. Execute `pouch run -t -d busybox sh` to start a container named as busybox

10. Execute `pouch ps -a` to see all of the containers that has been created

![](http://oyrpkn4bk.bkt.clouddn.com/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202018-07-30%20%E4%B8%8B%E5%8D%886.05.59.png)



11. Execute `pouch exec -it {id} sh` to enter the container where {id} is the first six characters of the result got from the last command.

![](http://oyrpkn4bk.bkt.clouddn.com/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202018-07-30%20%E4%B8%8B%E5%8D%886.06.23.png)

So far, PouchContainer has been installed in the Ubuntu virtual machine. You can follow the same instruction to set up Centos, since the installation process of Centos is similar.

For the conveinence of local program development, we will show how to configure the ssh connection of the virtual machine.




## Connecting virtual machine via SSH

1. In the interface of VirtualBox, click Settings -> Network. Check ‘Enable Network Adapter’. Choose 'NAT' in 'Attached to' options.

2. Click Advance -> Port Forwarding. Then you can configure the ip address and port number of host and guest. The Host Port can be chosen randomly while the Guest Port must be 22.



![](http://oyrpkn4bk.bkt.clouddn.com/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202018-07-30%20%E4%B8%8B%E5%8D%885.56.06.png)



3. After configuration,open local terminal,type command `ssh -p 2233 [email protected]` to connect to the virtual machine.

![](http://oyrpkn4bk.bkt.clouddn.com/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202018-07-30%20%E4%B8%8B%E5%8D%885.58.24.png)



## Conclusion

Basing on the tutorial showed above, we could use PouchContainer easily in any non-Linux computer.







Loading