diff --git "a/content/zh/docs/A-Tune/\344\275\277\347\224\250\346\226\271\346\263\225.md" "b/content/zh/docs/A-Tune/\344\275\277\347\224\250\346\226\271\346\263\225.md" index c5606944a5ab7b55707d49c3a04815067c00d7bf..9839fd35342575be2482db35d4c716361c24d917 100644 --- "a/content/zh/docs/A-Tune/\344\275\277\347\224\250\346\226\271\346\263\225.md" +++ "b/content/zh/docs/A-Tune/\344\275\277\347\224\250\346\226\271\346\263\225.md" @@ -32,6 +32,7 @@ ## 总体说明 +- 使用A-Tune需要使用root权限。 - atune-adm支持的命令可以通过 **atune-adm help/--help/-h** 查询。 - 使用方法中所有命令的使用举例都是在单机部署模式下,如果是在分布式部署模式下,需要指定服务器IP和端口号,例如: diff --git "a/content/zh/docs/A-Tune/\345\256\211\350\243\205\344\270\216\351\203\250\347\275\262.md" "b/content/zh/docs/A-Tune/\345\256\211\350\243\205\344\270\216\351\203\250\347\275\262.md" index 8649cab65e17558b10a8557b0603b89f5964a44d..ba4ec2d291b4cad7ddaf9ec6e4ca274aed275547 100644 --- "a/content/zh/docs/A-Tune/\345\256\211\350\243\205\344\270\216\351\203\250\347\275\262.md" +++ "b/content/zh/docs/A-Tune/\345\256\211\350\243\205\344\270\216\351\203\250\347\275\262.md" @@ -25,7 +25,9 @@ ## 环境准备 -安装openEuler系统,安装方法参考《openEuler 20.03 LTS 安装指南》。 +- 安装openEuler系统,安装方法参考《openEuler 20.03 LTS 安装指南》。 + +- 安装A-Tune需要使用root权限。 ## 安装A-Tune @@ -89,17 +91,13 @@ A-Tune支持单机模式和分布式模式安装: # yum install atune -y ``` -将RPM数字签名的GPG公钥导入系统。rpm --import /mnt/RPM-GPG-KEY-openEuler - - - 5. 若为分布式部署,请安装A-Tune客户端。 ``` # yum install atune-client -y ``` -6. 验证是否安装成功。 +6. 验证是否安装成功。命令和回显如下表示安装成功。 ``` # rpm -qa | grep atune @@ -108,8 +106,6 @@ A-Tune支持单机模式和分布式模式安装: atune-xxx ``` - 有如上回显信息表示安装成功。 - ## 部署A-Tune diff --git a/content/zh/docs/Container/Attach.md b/content/zh/docs/Container/Attach.md deleted file mode 100644 index c80613f2fdddc5c4f42245dde8464489369369b1..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/Attach.md +++ /dev/null @@ -1,19 +0,0 @@ -# attach - -用法:**docker attach \[OPTIONS\] CONTAINER** - -功能:附加到一个运行着的容器 - -选项: - ---no-stdin=false 不附加STDIN - ---sig-proxy=true 代理所有到容器内部的信号,不代理SIGCHLD, SIGKILL, SIGSTOP - -示例: - -``` -$ sudo docker attach attach_test -root@2988b8658669:/# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var -``` - diff --git "a/content/zh/docs/Container/CNI\347\275\221\347\273\234\351\205\215\347\275\256\350\257\264\346\230\216.md" "b/content/zh/docs/Container/CNI\347\275\221\347\273\234\351\205\215\347\275\256\350\257\264\346\230\216.md" deleted file mode 100644 index 35cfd6dcc17edf649d2a53bf2144a573d6538061..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/CNI\347\275\221\347\273\234\351\205\215\347\275\256\350\257\264\346\230\216.md" +++ /dev/null @@ -1,7 +0,0 @@ -# CNI网络配置说明 - -CNI网络配置包含两种类型,文件格式都为json: - -- 单网络平面配置,以.conf和.json为后缀的文件:具体的配置项请参见"附录 > CNI配置参数" 章节的 "表 CNI单网络配置参数"。 -- 多网络平面配置,以.conflist为后缀的文件:具体的配置项请参见"附录 > CNI配置参数" 章节的 "表3 CNI多网络配置参数"。 - diff --git "a/content/zh/docs/Container/CNI\351\205\215\347\275\256\345\217\202\346\225\260.md" "b/content/zh/docs/Container/CNI\351\205\215\347\275\256\345\217\202\346\225\260.md" deleted file mode 100644 index f2a72e856e4b4002700b4b4b75bfdad565795e45..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/CNI\351\205\215\347\275\256\345\217\202\346\225\260.md" +++ /dev/null @@ -1,511 +0,0 @@ -# CNI配置参数 - -**表 1** CNI单网络配置参数 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

参数

-

类型

-

是否可选

-

说明

-

cniVersion

-

string

-

必选

-

CNI版本号,当前只支持0.3.0,0.3.1。

-

name

-

string

-

必选

-

网络名称,由用户自定义,需保证唯一。

-

type

-

string

-

必选

-

网络类型。目前支持的网络类型:

-

underlay_ipvlan

-

overlay_l2

-

underlay_l2

-

vpc-router

-

dpdk-direct

-

phy-direct

-

ipmasp

-

bool

-

可选

-

设置IP masquerade

-

ipam

-

结构体

-

可选

-

详细定义参考IPAM参数定义

-

ipam.type

-

string

-

可选

-

IPAM类型,目前支持的类型:

-

(1)underlay_l2、overlay_l2、vpc-router组网默认值distributed_l2,且只支持distributed_l2。

-

(2)underlay_ipvlan组网,默认distributed_l2。CCN场景只支持null、fixed;CCE和FST 5G core场景只支持null、distributed_l2。

-

(3)phy-direct、dpdk-direct组网,默认l2,可选null、distributed_l2。FST 5G core场景只支持null、distributed_l2。

-

说明:

-

超出选择范围(比如host-local),Canal会自动设置为默认,不会返回错误。

-

null:不使用canal管理ip。

-

fixed:固定ip,CCN场景使用。

-

l2:目前没有场景使用。

-

distributed_l2:使用分布式小子网管理ip。

-

ipam.subnet

-

string

-

可选

-

子网信息。Canal支持的subnet mask范围为[8,29],并且要求IP地址不能为Multicast地址(如224.0.0.0/4),保留地址(240.0.0.0/4),本地link地址(169.254.0.0/16)以及本地loop地址(127.0.0.0/8)。

-

ipam.gateway

-

string

-

可选

-

网关IP

-

ipam.range-start

-

string

-

可选

-

可用的起始IP地址

-

ipam.range-end

-

string

-

可选

-

可用的结束IP地址

-

ipam.routes

-

结构体

-

可选

-

subnet列表,每个元素都是一个route字典。参考route定义.

-

ipam.routes.dst

-

string

-

可选

-

表示目的网络

-

ipam.routes.gw

-

string

-

可选

-

表示网关地址

-

dns

-

结构体

-

可选

-

包含一些DNS的特殊值。

-

dns.nameservers

-

[]string

-

可选

-

nameservers

-

dns.domain

-

string

-

可选

-

domain

-

dns.search

-

[]string

-

可选

-

search

-

dns.options

-

[]string

-

可选

-

选项

-

multi_entry

-

int

-

可选

-

表示一个vnic需要的ip数量,范围0~16。对于物理直通,单个网卡最多可申请128个IP。

-

backup_mode

-

bool

-

可选

-

表示主备模式,仅用于phy-direct和dpdk-direct组网。

-

vlanID

-

int

-

可选

-

0~4095,允许PaaS直接指定。

-

vlan_inside

-

bool

-

可选

-

true表示vlan功能由Node内部实现,false表示vlan在外部实现。

-

vxlanID

-

int

-

可选

-

0~16777215,允许PaaS直接指定。

-

vxlan_inside

-

bool

-

可选

-

true表示vlan功能由Node内部实现,false表示vlan在外部实现。

-

action

-

string

-

可选

-

该参数只能和特殊containerID “000000000000”一起使用。

-

Create表示创建网络。

-

Delete表示删除网络。

-

args

-

map[string]interface{}

-

可选

-

主要描述键值对类型。表2

-

runtimeConfig

-

结构体

-

可选

-

-

capabilities

-

结构体

-

可选

-

-
- -**表 2** CNI args参数表 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

参数

-

类型

-

是否可选

-

说明

-

K8S_POD_NAME

-

string

-

可选

-

申请固定IP(runtimeConfig.ican_caps.fixed_ip为true)时需要设置K8S_POD_NAME

-

K8S_POD_NAMESPACE

-

string

-

可选

-

申请固定IP(runtimeConfig.ican_caps.fixed_ip为true)时需要设置K8S_POD_NAMESPACE

-

SECURE_CONTAINER

-

string

-

可选

-

安全容器标志

-

multi_port

-

int

-

可选

-

默认值为1,取值范围1-8。只支持phy-direct和dpdk-direct两种类型网络,指定直通网卡数量

-

phy-direct

-

string

-

可选

-

用于在创建硬直通容器网络时指定接入的网卡

-

dpdk-direct

-

string

-

可选

-

用于在创建dpdk直通容器网络时指定接入的网卡

-

tenant_id

-

string

-

可选

-

租户的ID。

-

只支持vpc-router类型网络。

-

vpc_id

-

string

-

可选

-

VPC的ID。

-

只支持vpc-router类型网络。

-

secret_name

-

string

-

可选

-

表示k8s apiserver中保存有ak sk的对象名。

-

只支持vpc-router类型网络

-

参考配置VPC-Router逻辑网络

-

IP

-

string

-

可选

-

用户指定ip地址,格式“192.168.0.10”

-

K8S_POD_NETWORK_ARGS

-

string

-

可选

-

指定ip地址,格式“192.168.0.10”。若args中IP和K8S_POD_NETWORK_ARGS都不为空,以K8S_POD_NETWORK_ARGS为准。

-

INSTANCE_NAME

-

string

-

可选

-

INSTANCE ID。

-

参考支持容器固定IP

-

dist_gateway_disable

-

bool

-

可选

-

true表示不创建gateway,false表示创建gateway。

-

phynet

-

string或[]string

-

可选

-

所需加入的的物理平面信息,为预先定义好的物理网络名称,与SNC体系中的呼应,输入两个平面名时,支持主备平面。例如:"phy_net1" 或 ["phy_net2","phy_net3"]

-

endpoint_policies

-

struct

-

可选

-

"endpoint_policies": [

-

{

-

"Type": "",

-

"ExceptionList": [

-

""

-

],

-

"NeedEncap": true,

-

"DestinationPrefix": ""

-

}

-

]

-

port_map

-

struct

-

可选

-

NAT类型网络中,支持容器端口发布至主机端口。

-

"port_map": [

-

{

-

"local_port": number,

-

"host_port": number,

-

"protocol": [string…]

-

}...

-

]

-
- -**表 3** CNI多网络配置参数 - - - - - - - - - - - - - - - - - - - - - - - - -

参数

-

类型

-

是否可选

-

说明

-

cniVersion

-

string

-

必选

-

CNI版本号,当前只支持0.3.0,0.3.1。

-

name

-

string

-

必选

-

网络名称,由用户自定义,需保证唯一。

-

plugins

-

struct

-

必选

-

具体配置请参见表1 CNI单网络配置参数

-
- diff --git "a/content/zh/docs/Container/CRI\346\216\245\345\217\243.md" "b/content/zh/docs/Container/CRI\346\216\245\345\217\243.md" index 095db4ad8fb339e8b28847567d0fa424a2a03c44..26b0321a4da95e83bf5b7b2e65d1c5fe10280ab4 100644 --- "a/content/zh/docs/Container/CRI\346\216\245\345\217\243.md" +++ "b/content/zh/docs/Container/CRI\346\216\245\345\217\243.md" @@ -1,2 +1,2908 @@ -# CRI接口 - +# CRI接口 + + +- [CRI接口](#CRI接口) + - [描述](#描述) + - [接口](#接口) + - [Runtime服务](#runtime服务) + - [RunPodSandbox](#runpodsandbox) + - [StopPodSandbox](#stoppodsandbox) + - [RemovePodSandbox](#removepodsandbox) + - [PodSandboxStatus](#podsandboxstatus) + - [ListPodSandbox](#listpodsandbox) + - [CreateContainer](#createcontainer) + - [StartContainer](#StartContainer) + - [StopContainer](#StopContainer) + - [RemoveContainer](#RemoveContainer) + - [ListContainers](#ListContainers) + - [ContainerStatus](#containerstatus) + - [UpdateContainerResources](#updatecontainerresources) + - [ExecSync](#execsync) + - [Exec](#exec) + - [Attach](#attach) + - [ContainerStats](#containerstats) + - [ListContainerStats](#listcontainerstats) + - [UpdateRuntimeConfig](#updateruntimeconfig) + - [Status](#status) + - [Image服务](#image服务) + - [ListImages](#listimages) + - [ImageStatus](#imagestatus) + - [PullImage](#pullimage) + - [RemoveImage](#removeimage) + - [ImageFsInfo](#imagefsinfo) + - [约束](#约束) + + +## 描述 + +CRI API 接口是由kubernetes 推出的容器运行时接口,CRI定义了容器和镜像的服务接口。ISulad使用CRI接口,实现和kubernetes 的对接。 + +因为容器运行时与镜像的生命周期是彼此隔离的,因此需要定义两个服务。该接口使用[Protocol Buffer](https://developers.google.com/protocol-buffers/)定义,基于[gRPC](https://grpc.io/)。 + +当前实现CRI版本为v1alpha1版本,官方API描述文件如下: + +[https://github.com/kubernetes/kubernetes/blob/release-1.14/pkg/kubelet/apis/cri/runtime/v1alpha2/api.proto](https://github.com/kubernetes/kubernetes/blob/release-1.14/pkg/kubelet/apis/cri/runtime/v1alpha2/api.proto), + +ISulad使用的为pass使用的1.14版本API描述文件,与官方API略有出入,以本文档描述的接口为准。 + +>![](public_sys-resources/icon-note.gif) **说明:** +>CRI接口websocket流式服务,服务端侦听地址为127.0.0.1,端口为10350,端口可通过命令行--websocket-server-listening-port参数接口或者daemon.json配置文件进行配置。 + +## 接口 + +各接口中可能用到的参数清单如下,部分参数暂不支持配置,已在配置中标出。 + +### 接口参数列表 + +- **DNSConfig** + + 配置sandbox的DNS服务器和搜索域 + + + + + + + + + + + + + + + + +

参数成员

+

描述

+

repeated string servers

+

集群的DNS服务器列表

+

repeated string searches

+

集群的DNS搜索域列表

+

repeated string options

+

DNS可选项列表,参考https://linux.die.net/man/5/resolv.conf

+
+ +- **Protocol** + + 协议的enum值列表 + + + + + + + + + + + + + +

参数成员

+

描述

+

TCP = 0

+

TCP协议

+

UDP = 1

+

UDP协议

+
+ +- **PortMapping** + + 指定sandbox的端口映射配置 + + + + + + + + + + + + + + + + + + + +

参数成员

+

描述

+

Protocol protocol

+

端口映射使用的协议

+

int32 container_port

+

容器内的端口号

+

int32 host_port

+

主机上的端口号

+

string host_ip

+

主机IP地址

+
+ +- **MountPropagation** + + 挂载传播属性的enum列表 + + + + + + + + + + + + + + + + +

参数成员

+

描述

+

PROPAGATION_PRIVATE = 0

+

无挂载传播属性,即linux中的private

+

PROPAGATION_HOST_TO_CONTAINER = 1

+

挂载属性能从host传播到容器中,即linux中的rslave

+

PROPAGATION_BIDIRECTIONAL = 2

+

挂载属性能在host和容器中双向传播,即linux中的rshared

+
+ +- **Mount** + + Mount指定host上的一个挂载卷挂载到容器中(只支持文件和文件夹\) + + + + + + + + + + + + + + + + + + + + + + +

参数成员

+

描述

+

string container_path

+

容器中的路径

+

string host_path

+

主机上的路径

+

bool readonly

+

是否配置在容器中是只读的, 默认值: false

+

bool selinux_relabel

+

是否设置SELinux标签(不支持配置)

+

MountPropagation propagation

+

挂载传播属性配置(取值0/1/2,分别对应private/rslave/rshared传播属性) 默认值:0

+
+ + +- **NamespaceOption** + + + + + + + + + + + + + + + + +

参数成员

+

描述

+

bool host_network

+

是否使用host的网络命名空间

+

bool host_pid

+

是否使用host的PID命名空间

+

bool host_ipc

+

是否使用host的IPC命名空间

+
+ +- **Capability** + + 包含待添加与待删除的权能信息 + + + + + + + + + + + + + +

参数成员

+

描述

+

repeated string add_capabilities

+

待新增的权能

+

repeated string drop_capabilities

+

待删除的权能

+
+ + +- **Int64Value** + + int64类型的封装 + + + + + + + + + + +

参数成员

+

描述

+

int64 value

+

实际的int64值

+
+ +- **UInt64Value** + + uint64类型的封装 + + + + + + + + + + +

参数成员

+

描述

+

uint64 value

+

实际的uint64值

+
+ +- **LinuxSandboxSecurityContext** + + 配置sandbox的linux安全选项。 + + 注意,这些安全选项不会应用到sandbox中的容器中,也可能不适用于没有任何running进程的sandbox + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数成员

+

描述

+

NamespaceOption namespace_options

+

配置sandbox的命名空间选项

+

SELinuxOption selinux_options

+

配置SELinux选项(不支持)

+

Int64Value run_as_user

+

配置sandbox中进程的uid

+

bool readonly_rootfs

+

配置sandbox的根文件系统是否只读

+

repeated int64 supplemental_groups

+

配置除主GID之外的sandbox的1号进程用户组信息

+

bool privileged

+

配置sandbox是否为特权容器

+

string seccomp_profile_path

+

seccomp配置文件路径,有效值为:

+

// unconfined: 不配置seccomp

+

// localhost/<配置文件的全路径>: 安装在系统上的配置文件路径

+

// <配置文件的全路径>: 配置文件全路径

+

// 默认不配置,即unconfined。

+
+ +- **LinuxPodSandboxConfig** + + 设定和Linux主机及容器相关的一些配置 + + + + + + + + + + + + + + + + +

参数成员

+

描述

+

string cgroup_parent

+

sandbox的cgroup父路径,runtime可根据实际情况使用cgroupfs或systemd的语法。(不支持配置)

+

LinuxSandboxSecurityContext security_context

+

sandbox的安全属性

+

map<string, string> sysctls

+

sandbox的linux sysctls配置

+
+ +- **PodSandboxMetadata** + + Sandbox元数据包含构建sandbox名称的所有信息,鼓励容器运行时在用户界面中公开这些元数据以获得更好的用户体验,例如,运行时可以根据元数据生成sandbox的唯一命名。 + + + + + + + + + + + + + + + + + + + +

参数成员

+

描述

+

string name

+

sandbox的名称

+

string uid

+

sandbox的UID

+

string namespace

+

sandbox的命名空间

+

uint32 attempt

+

尝试创建sandbox的次数,默认为0

+
+ +- **PodSandboxConfig** + + 包含创建sandbox的所有必选和可选配置信息 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数成员

+

描述

+

PodSandboxMetadata metadata

+

sandbox的元数据,这项信息唯一标识一个sandbox,runtime必须利用此信息确保操作正确,runtime也可以根据此信息来改善用户体验,例如构建可读的sandbox名称。

+

string hostname

+

sandbox的hostname

+

string log_directory

+

配置sandbox内的容器的日志文件所存储的文件夹

+

DNSConfig dns_config

+

sandbox的DNS配置

+

repeated PortMapping port_mappings

+

sandbox的端口映射

+

map<string, string> labels

+

可用于标识单个或一系列sandbox的键值对

+

map<string, string> annotations

+

存储任意信息的键值对,这些值是不可更改的,且能够利用PodSandboxStatus接口查询

+

LinuxPodSandboxConfig linux

+

与linux主机相关的可选项

+
+ +- **PodSandboxNetworkStatus** + + 描述sandbox的网络状态 + + + + + + + + + + + + + + + + +

参数成员

+

描述

+

string ip

+

sandbox的ip地址

+

string name

+

sandbox内的网络接口名

+

string network

+

附加网络的名称

+
+ +- **Namespace** + + 命名空间选项 + + + + + + + + + + +

参数成员

+

描述

+

NamespaceOption options

+

Linux 命名空间选项

+
+ +- **LinuxPodSandboxStatus** + + 描述Linux sandbox的状态 + + + + + + + + + + +

参数成员

+

描述

+

Namespace namespaces

+

sandbox命名空间

+
+ +- **PodSandboxState** + + sandbox状态值的enum数据 + + + + + + + + + + + + + +

参数成员

+

描述

+

SANDBOX_READY = 0

+

sandbox处于ready状态

+

SANDBOX_NOTREADY = 1

+

sandbox处于非ready状态

+
+ +- **PodSandboxStatus** + + 描述Podsandbox的状态信息 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数成员

+

描述

+

string id

+

sandbox的ID

+

PodSandboxMetadata metadata

+

sandbox的元数据

+

PodSandboxState state

+

sandbox的状态值

+

int64 created_at

+

sandbox的创建时间戳,单位纳秒

+

repeated PodSandboxNetworkStatus networks

+

sandbox的多平面网络状态

+

LinuxPodSandboxStatus linux

+

Linux规范的sandbox状态

+

map<string, string> labels

+

可用于标识单个或一系列sandbox的键值对

+

map<string, string> annotations

+

存储任意信息的键值对,这些值是不可被runtime更改的

+
+ +- **PodSandboxStateValue** + + 对PodSandboxState的封装 + + + + + + + + + + +

参数成员

+

描述

+

PodSandboxState state

+

sandbox的状态值

+
+ +- **PodSandboxFilter** + + 用于列出sandbox时添加过滤条件,多个条件取交集显示 + + + + + + + + + + + + + + + + +

参数成员

+

描述

+

string id

+

sandbox的ID

+

PodSandboxStateValue state

+

sandbox的状态

+

map<string, string> label_selector

+

sandbox的labels,label只支持完全匹配,不支持正则匹配

+
+ +- **PodSandbox** + + 包含最小化描述一个sandbox的数据 + + + + + + + + + + + + + + + + + + + + + + + + + +

参数成员

+

描述

+

string id

+

sandbox的ID

+

PodSandboxMetadata metadata

+

sandbox的元数据

+

PodSandboxState state

+

sandbox的状态值

+

int64 created_at

+

sandbox的创建时间戳,单位纳秒

+

map<string, string> labels

+

可用于标识单个或一系列sandbox的键值对

+

map<string, string> annotations

+

存储任意信息的键值对,这些值是不可被runtime更改的

+
+ +- **KeyValue** + + 键值对的封装 + + + + + + + + + + + + + +

参数成员

+

描述

+

string key

+

+

string value

+

+
+ +- **SELinuxOption** + + 应用于容器的SELinux标签 + + + + + + + + + + + + + + + + + + + +

参数成员

+

描述

+

string user

+

用户

+

string role

+

角色

+

string type

+

类型

+

string level

+

级别

+
+ +- **ContainerMetadata** + + Container元数据包含构建container名称的所有信息,鼓励容器运行时在用户界面中公开这些元数据以获得更好的用户体验,例如,运行时可以根据元数据生成container的唯一命名。 + + + + + + + + + + + + + +

参数成员

+

描述

+

string name

+

container的名称

+

uint32 attempt

+

尝试创建container的次数,默认为0

+
+ +- **ContainerState** + + 容器状态值的enum列表 + + + + + + + + + + + + + + + + + + + +

参数成员

+

描述

+

CONTAINER_CREATED = 0

+

container创建完成

+

CONTAINER_RUNNING = 1

+

container处于运行状态

+

CONTAINER_EXITED = 2

+

container处于退出状态

+

CONTAINER_UNKNOWN = 3

+

未知的容器状态

+
+ +- **ContainerStateValue** + + 封装ContainerState的数据结构 + + + + + + + + + + +

参数成员

+

描述

+

ContainerState state

+

容器状态值

+
+ +- **ContainerFilter** + + 用于列出container时添加过滤条件,多个条件取交集显示 + + + + + + + + + + + + + + + + + + + +

参数成员

+

描述

+

string id

+

container的ID

+

PodSandboxStateValue state

+

container的状态

+

string pod_sandbox_id

+

sandbox的ID

+

map<string, string> label_selector

+

container的labels,label只支持完全匹配,不支持正则匹配

+
+ +- **LinuxContainerSecurityContext** + + 指定应用于容器的安全配置 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数成员

+

描述

+

Capability capabilities

+

新增或去除的权能

+

bool privileged

+

指定容器是否未特权模式, 默认值:false

+

NamespaceOption namespace_options

+

指定容器的namespace选项

+

SELinuxOption selinux_options

+

SELinux context(可选配置项) 暂不支持

+

Int64Value run_as_user

+

运行容器进程的UID。 一次只能指定run_as_user与run_as_username其中之一,run_as_username优先生效

+

string run_as_username

+

运行容器进程的用户名。 如果指定,用户必须存在于容器映像中(即在映像内的/etc/passwd中),并由运行时在那里解析; 否则,运行时必须出错

+

bool readonly_rootfs

+

设置容器中根文件系统是否为只读 默认值由config.json配置

+

repeated int64 supplemental_groups

+

容器运行的除主GID外首进程组的列表

+

string apparmor_profile

+

容器的AppArmor配置文件 暂不支持

+

string seccomp_profile_path

+

容器的seccomp配置文件路径

+

bool no_new_privs

+

是否在容器上设置no_new_privs的标志

+
+ +- **LinuxContainerResources** + + 指定Linux容器资源的特定配置 + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数成员

+

描述

+

int64 cpu_period

+

CPU CFS(完全公平调度程序)周期。 默认值:0

+

int64 cpu_quota

+

CPU CFS(完全公平调度程序)配额。 默认值:0

+

int64 cpu_shares

+

所占CPU份额(相对于其他容器的相对权重)。 默认值:0

+

int64 memory_limit_in_bytes

+

内存限制(字节)。 默认值:0

+

int64 oom_score_adj

+

OOMScoreAdj用于调整oom-killer。 默认值:0

+

string cpuset_cpus

+

指定容器使用的CPU核心。 默认值:“”

+

string cpuset_mems

+

指定容器使用的内存节点。 默认值:“”

+
+ +- **Image** + + Image信息描述一个镜像的基本数据。 + + + + + + + + + + + + + + + + + + + + + + + + +

参数成员

+

描述

+

string id

+

镜像ID

+

repeated string repo_tags

+

镜像tag 名称 repo_tags

+

repeated string repo_digests

+

镜像digest信息

+

uint64 size

+

镜像大小

+

Int64Value uid

+

镜像默认用户UID

+

string username

+

镜像默认用户名称

+
+ +- **ImageSpec** + + 表示镜像的内部数据结构,当前,ImageSpec只封装容器镜像名称 + + + + + + + + + + +

参数成员

+

描述

+

string image

+

容器镜像名

+
+ +- **StorageIdentifier** + + 唯一定义storage的标识 + + + + + + + + + + +

参数成员

+

描述

+

string uuid

+

设备的UUID

+
+ +- **FilesystemUsage** + + + + + + + + + + + + + + + + + + +

参数成员

+

描述

+

int64 timestamp

+

收集文件系统信息时的时间戳

+

StorageIdentifier storage_id

+

存储镜像的文件系统UUID

+

UInt64Value used_bytes

+

存储镜像元数据的大小

+

UInt64Value inodes_used

+

存储镜像元数据的inodes个数

+
+ +- **AuthConfig** + + + + + + + + + + + + + + + + + + + + + + + + +

参数成员

+

描述

+

string username

+

下载镜像使用的用户名

+

string password

+

下载镜像使用的密码

+

string auth

+

下载镜像时使用的认证信息,base64编码

+

string server_address

+

下载镜像的服务器地址,暂不支持

+

string identity_token

+

用于与镜像仓库鉴权的令牌信息,暂不支持

+

string registry_token

+

用于与镜像仓库交互的令牌信息,暂不支持

+
+ +- **Container** + + 用于描述容器信息,例如ID, 状态等。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数成员

+

描述

+

string id

+

container的ID

+

string pod_sandbox_id

+

该容器所属的sandbox的ID

+

ContainerMetadata metadata

+

container的元数据

+

ImageSpec image

+

镜像规格

+

string image_ref

+

代表容器使用的镜像,对大多数runtime来产,这是一个image ID值

+

ContainerState state

+

container的状态

+

int64 created_at

+

container的创建时间戳,单位为纳秒

+

map<string, string> labels

+

可用于标识单个或一系列container的键值对

+

map<string, string> annotations

+

存储任意信息的键值对,这些值是不可被runtime更改的

+
+ +- **ContainerStatus** + + 用于描述容器状态信息 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数成员

+

描述

+

string id

+

container的ID

+

ContainerMetadata metadata

+

container的元数据

+

ContainerState state

+

container的状态

+

int64 created_at

+

container的创建时间戳,单位为纳秒

+

int64 started_at

+

container启动时的时间戳,单位为纳秒

+

int64 finished_at

+

container退出时的时间戳,单位为纳秒

+

int32 exit_code

+

容器退出码

+

ImageSpec image

+

镜像规格

+

string image_ref

+

代表容器使用的镜像,对大多数runtime来产,这是一个image ID值

+

string reason

+

简要描述为什么容器处于当前状态

+

string message

+

易于人工阅读的信息,用于表述容器处于当前状态的原因

+

map<string, string> labels

+

可用于标识单个或一系列container的键值对

+

map<string, string> annotations

+

存储任意信息的键值对,这些值是不可被runtime更改的

+

repeated Mount mounts

+

容器的挂载点信息

+

string log_path

+

容器日志文件路径,该文件位于PodSandboxConfig中配置的log_directory文件夹下

+
+ +- **ContainerStatsFilter** + + 用于列出container stats时添加过滤条件,多个条件取交集显示 + + + + + + + + + + + + + + + + +

参数成员

+

描述

+

string id

+

container的ID

+

string pod_sandbox_id

+

sandbox的ID

+

map<string, string> label_selector

+

container的labels,label只支持完全匹配,不支持正则匹配

+
+ +- **ContainerStats** + + 用于列出container stats时添加过滤条件,多个条件取交集显示 + + + + + + + + + + + + + + + + + + + +

参数成员

+

描述

+

ContainerAttributes attributes

+

容器的信息

+

CpuUsage cpu

+

CPU使用情况

+

MemoryUsage memory

+

内存使用情况

+

FilesystemUsage writable_layer

+

可写层使用情况

+
+ +- **ContainerAttributes** + + 列出container的基本信息 + + + + + + + + + + + + + + + + + + + +

参数成员

+

描述

+

string id

+

容器的ID

+

ContainerMetadata metadata

+

容器的metadata

+

map<string,string> labels

+

可用于标识单个或一系列container的键值对

+

map<string,string> annotations

+

存储任意信息的键值对,这些值是不可被runtime更改的

+
+ +- **CpuUsage** + + 列出container的CPU使用信息 + + + + + + + + + + + + + +

参数成员

+

描述

+

int64 timestamp

+

时间戳

+

UInt64Value usage_core_nano_seconds

+

CPU的使用值,单位/纳秒

+
+ +- **MemoryUsage** + + 列出container的内存使用信息 + + + + + + + + + + + + + +

参数成员

+

描述

+

int64 timestamp

+

时间戳

+

UInt64Value working_set_bytes

+

内存的使用值

+
+ +- **FilesystemUsage** + + 列出container的读写层信息 + + + + + + + + + + + + + + + + + + + +

参数成员

+

描述

+

int64 timestamp

+

时间戳

+

StorageIdentifier storage_id

+

可写层目录

+

UInt64Value used_bytes

+

镜像在可写层的占用字节

+

UInt64Value inodes_used

+

镜像在可写层的占用inode数

+
+ +- **Device** + + 指定待挂载至容器的主机卷 + + + + + + + + + + + + + + + +

参数成员

+

描述

+

string container_path

+

容器内的挂载路径

+

string host_path

+

主机上的挂载路径

+

string permissions

+

设备的Cgroup权限,(r允许容器从指定的设备读取; w允许容器从指定的设备写入; m允许容器创建尚不存在的设备文件)

+
+ +- **LinuxContainerConfig** + + 包含特定于Linux平台的配置 + + + + + + + + + + + + +

参数成员

+

描述

+

LinuxContainerResources resources

+

容器的资源规范

+

LinuxContainerSecurityContext security_context

+

容器的Linux容器安全配置

+
+ +- **ContainerConfig** + + 包含用于创建容器的所有必需和可选字段 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数成员

+

描述

+

ContainerMetadata metadata

+

容器的元数据。 此信息将唯一标识容器,运行时应利用此信息来确保正确操作。 运行时也可以使用此信息来提升UX(用户体检设计),例如通过构造可读名称。(必选)

+

ImageSpec image

+

容器使用的镜像 (必选)

+

repeated string command

+

待执行的命令 默认值: "/bin/sh"

+

repeated string args

+

待执行命令的参数

+

string working_dir

+

命令执行的当前工作路径

+

repeated KeyValue envs

+

在容器中配置的环境变量

+

repeated Mount mounts

+

待在容器中挂载的挂载点信息

+

repeated Device devices

+

待在容器中映射的设备信息

+

map<string, string> labels

+

可用于索引和选择单个资源的键值对。

+

map<string, string> annotations

+

可用于存储和检索任意元数据的非结构化键值映射。

+

string log_path

+

相对于PodSandboxConfig.LogDirectory的路径,用于存储容器主机上的日志(STDOUT和STDERR)。

+

bool stdin

+

是否打开容器的stdin

+

bool stdin_once

+

当某次连接stdin的数据流断开时,是否立即断开其他与stdin连接的数据流(暂不支持

+

bool tty

+

是否使用伪终端连接容器的stdio

+

LinuxContainerConfig linux

+

linux系统上容器的特定配置信息

+
+ +- **NetworkConfig** + + Runtime的网络配置 + + + + + + + + + +

参数成员

+

描述

+

string pod_cidr

+

Pod IP 地址使用的CIDR

+
+ +- **RuntimeConfig** + + Runtime的网络配置 + + + + + + + + + +

参数成员

+

描述

+

NetworkConfig network_config

+

Runtime的网络配置

+
+ +- **RuntimeCondition** + + 描述runtime的状态信息 + + + + + + + + + + + + + + + + + + +

参数成员

+

描述

+

string type

+

Runtime状态的类型

+

bool status

+

Runtime状态

+

string reason

+

简要描述runtime状态变化的原因

+

string message

+

具备可阅读性的信息表明runtime状态变化的原因

+
+ +- **RuntimeStatus** + + Runtime的状态 + + + + + + + + + +

参数成员

+

描述

+

repeated RuntimeCondition conditions

+

描述当前runtime状态的列表

+
+ + + +### Runtime服务 + +Runtime服务中包含操作pod和容器的接口,以及查询runtime自身配置和状态信息的接口。 + + +#### runpodsandbox + +#### 接口原型 + +``` +rpc RunPodSandbox(RunPodSandboxRequest) returns (RunPodSandboxResponse) {} +``` + +#### 接口描述 + +创建和启动一个pod sandbox,若运行成功,sandbox处于ready状态。 + +#### 注意事项 + +1. 启动sandbox的默认镜像为rnd-dockerhub.huawei.com/library/pause-$\{machine\}:3.0, 其中$\{machine\}为架构,在x86\_64上,machine的值为amd64,在arm64上,machine的值为aarch64,当前rnd-dockerhub仓库上只有amd64和aarch64镜像可供下载,若机器上无此镜像,请确保机器能从rnd-dockerhub下载,若要使用其它镜像,请参考“iSulad部署配置”中的pod-sandbox-image指定镜像。 +2. 由于容器命名以PodSandboxMetadata中的字段为来源,且以下划线"\_"为分割字符,因此限制metadata中的数据不能包含下划线,否则会出现sandbox运行成功,但无法使用ListPodSandbox接口查询的现象。 + +#### 参数 + + + + + + + + + + + + +

参数成员

+

描述

+

PodSandboxConfig config

+

sandbox的配置

+

string runtime_handler

+

指定创建sandbox的runtime运行时,当前支持lcr、kata-runtime运行时类型。

+
+ +#### 返回值 + + + + + + + + + +

返回值

+

描述

+

string pod_sandbox_id

+

成功,返回response数据

+
+ +#### StopPodSandbox + +#### 接口原型 + +``` +rpc StopPodSandbox(StopPodSandboxRequest) returns (StopPodSandboxResponse) {} +``` + +#### 接口描述 + +停止pod sandbox,停止sandbox容器,回收分配给sandbox的网络资源(比如IP地址)。如果有任何running的容器属于该sandbox,则必须被强制停止。 + +#### 参数 + + + + + + + + + +

参数成员

+

描述

+

string pod_sandbox_id

+

sandbox的id

+
+ +#### 返回值 + + + + + + + + + +

返回值

+

描述

+

+

+
+ +#### RemovePodSandbox + +#### 接口原型 + +``` +rpc RemovePodSandbox(RemovePodSandboxRequest) returns (RemovePodSandboxResponse) {} +``` + +#### 接口描述 + +删除sandbox,如果有任何running的容器属于该sandbox,则必须被强制停止和删除,如果sandbox已经被删除,不能返回错误。 + +#### 注意事项 + +1. 删除sandbox时,不会删除sandbox的网络资源,在删除pod前必须先调用StopPodSandbox才能清理网络资源,调用者应当保证在删除sandbox之前至少调用一次StopPodSandbox。 + +#### 参数 + + + + + + + + + +

参数成员

+

描述

+

string pod_sandbox_id

+

sandbox的id

+
+ +#### 返回值 + + + + + + + + + +

返回值

+

描述

+

+

+
+ +#### PodSandboxStatus + +#### 接口原型 + +``` +rpc PodSandboxStatus(PodSandboxStatusRequest) returns (PodSandboxStatusResponse) {} +``` + +#### 接口描述 + +查询sandbox的状态,如果sandbox不存在,返回错误。 + +#### 参数 + + + + + + + + + + + + +

参数成员

+

描述

+

string pod_sandbox_id

+

sandbox的id

+

bool verbose

+

标识是否显示sandbox的一些额外信息。(暂不支持配置)

+
+ +#### 返回值 + + + + + + + + + + + + +

返回值

+

描述

+

PodSandboxStatus status

+

sandbox的状态信息

+

map<string, string> info

+

sandbox的额外信息,key是任意string,value是json格式的字符串,这些信息可以是任意调试内容。当verbose为true时info不能为空。(暂不支持配置)

+
+ +#### ListPodSandbox + +#### 接口原型 + +``` +rpc ListPodSandbox(ListPodSandboxRequest) returns (ListPodSandboxResponse) {} +``` + +#### 接口描述 + +返回sandbox信息的列表,支持条件过滤。 + +#### 参数 + + + + + + + + + +

参数成员

+

描述

+

PodSandboxFilter filter

+

条件过滤参数

+
+ +#### 返回值 + + + + + + + + + +

返回值

+

描述

+

repeated PodSandbox items

+

sandbox信息的列表

+
+ +#### CreateContainer + +``` +grpc::Status CreateContainer(grpc::ServerContext *context, const runtime::CreateContainerRequest *request, runtime::CreateContainerResponse *reply) {} +``` + +#### 接口描述 + +在PodSandbox内创建一个容器。 + +#### 注意事项 + +- 请求CreateContainerRequest 中的sandbox\_config与传递给RunPodSandboxRequest以创建PodSandbox的配置相同。 它再次传递,只是为了方便参考。 PodSandboxConfig是不可变的,在pod的整个生命周期内保持不变。 +- 由于容器命名以ContainerMetadata中的字段为来源,且以下划线"\_"为分割字符,因此限制metadata中的数据不能包含下划线,否则会出现sandbox运行成功,但无法使用ListContainers接口查询的现象。 +- CreateContainerRequest中无runtime\_handler字段,创建container时的runtime类型和其对应的sandbox的runtime相同。 + +#### 参数 + + + + + + + + + + + + + + + +

参数成员

+

描述

+

string pod_sandbox_id

+

待在其中创建容器的PodSandbox的ID。

+

ContainerConfig config

+

容器的配置信息

+

PodSandboxConfig sandbox_config

+

PodSandbox的配置信息

+
+ +#### 补充 + +可用于存储和检索任意元数据的非结构化键值映射。有一些字段由于cri接口没有提供特定的参数,可通过该字段将参数传入 + +- 自定义 + + + + + + + + + +

自定义 key:value

+

描述

+

cgroup.pids.max:int64_t

+

用于限制容器内的进/线程数(set -1 for unlimited)

+
+ + +#### 返回值 + + + + + + + + + +

返回值

+

描述

+

string container_id

+

创建完成的容器ID

+
+ +#### StartContainer + +#### 接口原型 + +``` +rpc StartContainer(StartContainerRequest) returns (StartContainerResponse) {} +``` + +#### 接口描述 + +启动一个容器。 + +#### 参数 + + + + + + + + + +

参数成员

+

描述

+

string container_id

+

容器id

+
+ +#### 返回值 + + + + + + + + + +

返回值

+

描述

+

+

+
+ +#### StopContainer + +#### 接口原型 + +``` +rpc StopContainer(StopContainerRequest) returns (StopContainerResponse) {} +``` + +#### 接口描述 + +停止一个running的容器,支持配置优雅停止时间timeout,如果容器已经停止,不能返回错误。 + +#### 参数 + + + + + + + + + + + + +

参数成员

+

描述

+

string container_id

+

容器id

+

int64 timeout

+

强制停止容器前的等待时间,默认值为0,即强制停止容器。

+
+ +#### 返回值 + +无 + +#### RemoveContainer + +#### 接口原型 + +``` +rpc RemoveContainer(RemoveContainerRequest) returns (RemoveContainerResponse) {} +``` + +#### 接口描述 + +删除一个容器,如果容器正在运行,必须强制停止,如果容器已经被删除,不能返回错误。 + +#### 参数 + + + + + + + + + +

参数成员

+

描述

+

string container_id

+

容器id

+
+ +#### 返回值 + +无 + +#### ListContainers + +#### 接口原型 + +``` +rpc ListContainers(ListContainersRequest) returns (ListContainersResponse) {} +``` + +#### 接口描述 + +返回container信息的列表,支持条件过滤。 + +#### 参数 + + + + + + + + + +

参数成员

+

描述

+

ContainerFilter filter

+

条件过滤参数

+
+ +#### 返回值 + + + + + + + + + +

返回值

+

描述

+

repeated Container containers

+

容器信息的列表

+
+ +#### ContainerStatus + +#### 接口原型 + +``` +rpc ContainerStatus(ContainerStatusRequest) returns (ContainerStatusResponse) {} +``` + +#### 接口描述 + +返回容器状态信息,如果容器不存在,则返回错误。 + +#### 参数 + + + + + + + + + + + + +

参数成员

+

描述

+

string container_id

+

容器id

+

bool verbose

+

标识是否显示sandbox的一些额外信息。(暂不支持配置)

+
+ +#### 返回值 + + + + + + + + + + + + +

返回值

+

描述

+

ContainerStatus status

+

容器的状态信息

+

map<string, string> info

+

sandbox的额外信息,key是任意string,value是json格式的字符串,这些信息可以是任意调试内容。当verbose为true时info不能为空。(暂不支持配置)

+
+ +#### UpdateContainerResources + +#### 接口原型 + +``` +rpc UpdateContainerResources(UpdateContainerResourcesRequest) returns (UpdateContainerResourcesResponse) {} +``` + +#### 接口描述 + +该接口用于更新容器资源配置。 + +#### 注意事项 + +- 该接口仅用于更新容器的资源配置,不能用于更新Pod的资源配置。 +- 当前不支持更新容器oom\_score\_adj配置。 + +#### 参数 + + + + + + + + + + + + +

参数成员

+

描述

+

string container_id

+

容器id

+

LinuxContainerResources linux

+

linux资源配置信息

+
+ +#### 返回值 + +无 + +#### ExecSync + +#### 接口原型 + +``` +rpc ExecSync(ExecSyncRequest) returns (ExecSyncResponse) {} +``` + +#### 接口描述 + +以同步的方式在容器中执行命令,采用的gRPC通讯方式。 + +#### 注意事项 + +执行执行一条单独的命令,不能打开终端与容器交互。 + +#### 参数 + + + + + + + + + + + + + + + +

参数成员

+

描述

+

string container_id

+

容器ID

+

repeated string cmd

+

待执行命令

+

int64 timeout

+

停止命令的超时时间(秒)。 默认值:0(无超时限制)。 暂不支持

+
+ +#### 返回值 + + + + + + + + + + + + + + + +

返回值

+

描述

+

bytes stdout

+

捕获命令标准输出

+

bytes stderr

+

捕获命令标准错误输出

+

int32 exit_code

+

退出代码命令完成。 默认值:0(成功)。

+
+ +#### Exec + +#### 接口原型 + +``` +rpc Exec(ExecRequest) returns (ExecResponse) {} +``` + +#### 接口描述 + +在容器中执行命令,采用的gRPC通讯方式从CRI服务端获取url,再通过获得的url与websocket服务端建立长连接,实现与容器的交互。 + +#### 注意事项 + +执行执行一条单独的命令,也能打开终端与容器交互。stdin/stdout/stderr之一必须是真的。如果tty为真,stderr必须是假的。 不支持多路复用, 在这种情况下, stdout和stderr的输出将合并为单流。 + +#### 参数 + + + + + + + + + + + + + + + + + + + + + + + + +

参数成员

+

描述

+

string container_id

+

容器ID

+

repeated string cmd

+

待执行的命令

+

bool tty

+

是否在TTY中执行命令

+

bool stdin

+

是否流式标准输入

+

bool stdout

+

是否流式标准输出

+

bool stderr

+

是否流式输出标准错误

+
+ +#### 返回值 + + + + + + + + + +

返回值

+

描述

+

string url

+

exec流服务器的完全限定URL

+
+ +#### Attach + +用法:**docker attach \[OPTIONS\] CONTAINER** + +功能:附加到一个运行着的容器 + +选项: + +--no-stdin=false 不附加STDIN + +--sig-proxy=true 代理所有到容器内部的信号,不代理SIGCHLD, SIGKILL, SIGSTOP + +示例: + +``` +$ sudo docker attach attach_test +root@2988b8658669:/# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var +``` + +#### ContainerStats + +#### 接口原型 + +``` +rpc ContainerStats(ContainerStatsRequest) returns (ContainerStatsResponse) {} +``` + +#### 接口描述 + +返回单个容器占用资源信息,仅支持runtime类型为lcr的容器。 + +#### 参数 + + + + + + + + + +

参数成员

+

描述

+

string container_id

+

容器id

+
+ +#### 返回值 + + + + + + + + + +

返回值

+

描述

+

ContainerStats stats

+

容器信息。注:disk和inodes只支持oci格式镜像起的容器查询

+
+ +#### ListContainerStats + +#### 接口原型 + +``` +rpc ListContainerStats(ListContainerStatsRequest) returns (ListContainerStatsResponse) {} +``` + +#### 接口描述 + +返回多个容器占用资源信息,支持条件过滤 + +#### 参数 + + + + + + + + + +

参数成员

+

描述

+

ContainerStatsFilter filter

+

条件过滤参数

+
+ +#### 返回值 + + + + + + + + + +

返回值

+

描述

+

repeated ContainerStats stats

+

容器信息的列表。注:disk和inodes只支持oci格式镜像启动的容器查询

+
+ +#### UpdateRuntimeConfig + +#### 接口原型 + +``` +rpc UpdateRuntimeConfig(UpdateRuntimeConfigRequest) returns (UpdateRuntimeConfigResponse); +``` + +#### 接口描述 + +提供标准的CRI接口,目的为了更新网络插件的Pod CIDR,当前CNI网络插件无需更新Pod CIDR,因此该接口只会记录访问日志。 + +#### 注意事项 + +接口操作不会对系统管理信息修改,只是记录一条日志。 + +#### 参数 + + + + + + + + + +

参数成员

+

描述

+

RuntimeConfig runtime_config

+

包含Runtime要配置的信息

+
+ +#### 返回值 + +无 + +#### Status + +#### 接口原型 + +``` +rpc Status(StatusRequest) returns (StatusResponse) {}; +``` + +#### 接口描述 + +获取runtime和pod的网络状态,在获取网络状态时,会触发网络配置的刷新。仅支持runtime类型为lcr的容器。 + +#### 注意事项 + +如果网络配置刷新失败,不会影响原有配置;只有刷新成功时,才会覆盖原有配置。 + +#### 参数 + + + + + + + + + +

参数成员

+

描述

+

bool verbose

+

是否显示关于Runtime额外的信息(暂不支持)

+
+ +#### 返回值 + + + + + + + + + + + + +

返回值

+

描述

+

RuntimeStatus status

+

Runtime的状态

+

map<string, string> info

+

Runtime额外的信息,info的key为任意值,value为json格式,可包含任何debug信息;只有Verbose为true是才应该被赋值

+
+ +### Image服务 + +提供了从镜像仓库拉取、查看、和移除镜像的gRPC API。 + +#### ListImages + +#### 接口原型 + +``` +rpc ListImages(ListImagesRequest) returns (ListImagesResponse) {} +``` + +#### 接口描述 + +列出当前已存在的镜像信息。 + +#### 注意事项 + +为统一接口,对于embedded格式镜像,可以通过cri images查询到。但是因embedded镜像不是标准OCI镜像,因此查询得到的结果有以下限制: + +- 因embedded镜像无镜像ID,显示的镜像ID为镜像的config digest。 +- 因embedded镜像本身无digest仅有config的digest,且格式不符合OCI镜像规范,因此无法显示digest。 + +#### 参数 + + + + + + + + + +

参数成员

+

描述

+

ImageSpec filter

+

筛选的镜像名称

+
+ +#### 返回值 + + + + + + + + + +

返回值

+

描述

+

repeated Image images

+

镜像信息列表

+
+ +#### ImageStatus + +#### 接口原型 + +``` +rpc ImageStatus(ImageStatusRequest) returns (ImageStatusResponse) {} +``` + +#### 接口描述 + +查询指定镜像信息。 + +#### 注意事项 + +1. 查询指定镜像信息,若镜像不存在,则返回ImageStatusResponse,其中Image设置为nil。 +2. 为统一接口,对于embedded格式镜像,因不符合OCI格式镜像,缺少字段,无法通过本接口进行查询。 + +#### 参数 + + + + + + + + + + + + +

参数成员

+

描述

+

ImageSpec image

+

镜像名称

+

bool verbose

+

查询额外信息,暂不支持,无额外信息返回

+
+ +#### 返回值 + + + + + + + + + + + + +

返回值

+

描述

+

Image image

+

镜像信息

+

map<string, string> info

+

镜像额外信息,暂不支持,无额外信息返回

+
+ +#### PullImage + +#### 接口原型 + +``` + rpc PullImage(PullImageRequest) returns (PullImageResponse) {} +``` + +#### 接口描述 + +下载镜像。 + +#### 注意事项 + +当前支持下载public镜像,使用用户名、密码、auth信息下载私有镜像,不支持authconfig中的server\_address、identity\_token、registry\_token字段。 + +#### 参数 + + + + + + + + + + + + + + + +

参数成员

+

描述

+

ImageSpec image

+

要下载的镜像名称

+

AuthConfig auth

+

下载私有镜像时的验证信息

+

PodSandboxConfig sandbox_config

+

在Pod上下文中下载镜像(暂不支持)

+
+ +#### 返回值 + + + + + + + + + +

返回值

+

描述

+

string image_ref

+

返回已下载镜像信息

+
+ +#### RemoveImage + +#### 接口原型 + +``` +rpc RemoveImage(RemoveImageRequest) returns (RemoveImageResponse) {} +``` + +#### 接口描述 + +删除指定镜像。 + +#### 注意事项 + +为统一接口,对于embedded格式镜像,因不符合OCI格式镜像,缺少字段,无法通过本接口使用image id进行删除。 + +#### 参数 + + + + + + + + + +

参数成员

+

描述

+

ImageSpec image

+

要删除的镜像名称或者ID

+
+ +#### 返回值 + +无 + +#### ImageFsInfo + +#### 接口原型 + +``` +rpc ImageFsInfo(ImageFsInfoRequest) returns (ImageFsInfoResponse) {} +``` + +#### 接口描述 + +查询存储镜像的文件系统信息。 + +#### 注意事项 + +查询到的为镜像元数据下的文件系统信息。 + +#### 参数 + +无 + +#### 返回值 + + + + + + + + + +

返回值

+

描述

+

repeated FilesystemUsage image_filesystems

+

镜像存储文件系统信息

+
+ +### 约束 + +1. 如果创建sandbox时,PodSandboxConfig参数中配置了log\_directory,则所有属于该sandbox的container在创建时必须在ContainerConfig中指定log\_path,否则可能导致容器无法使用CRI接口启动,甚至无法使用CRI接口删除。 + + 容器的真实LOGPATH=log\_directory/log\_path,如果log\_path不配置,那么最终的LOGPATH会变为LOGPATH=log\_directory。 + + - 如果该路径不存在,isulad在启动容器时会创建一个软链接,指向最终的容器日志真实路径,此时log\_directory变成一个软链接,此时有两种情况: + 1. 第一种情况,如果该sandbox里其它容器也没配置log\_path,在启动其它容器时,log\_directory会被删除,然后重新指向新启动容器的log\_path,导致之前启动的容器日志指向后面启动容器的日志。 + 2. 第二种情况,如果该sandbox里其它容器配置了log\_path,则该容器的LOGPATH=log\_directory/log\_path,由于log\_directory实际是个软链接,使用log\_directory/log\_path为软链接指向容器真实日志路径时,创建会失败。 + + - 如果该路径存在,isulad在启动容器时首先会尝试删除该路径(非递归),如果该路径是个文件夹,且里面有内容,删除会失败,从而导致创建软链接失败,容器启动失败,删除该容器时,也会出现同样的现象,导致删除失败。 + +2. 如果创建sandbox时,PodSandboxConfig参数中配置了log\_directory,且container创建时在ContainerConfig中指定log\_path,那么最终的LOGPATH=log\_directory/log\_path,isulad不会递归的创建LOGPATH,因而用户必须保证dirname\(LOGPATH\)存在,即最终的日志文件的上一级路径存在。 +3. 如果创建sandbox时,PodSandboxConfig参数中配置了log\_directory,如果有两个或多个container创建时在ContainerConfig中指定了同一个log\_path,或者不同的sandbox内的容器最终指向的LOGPATH是同一路径,若容器启动成功,则后启动的容器日志路径会覆盖掉之前启动的容器日志路径。 +4. 如果远程镜像仓库中镜像内容发生变化,调用CRI Pull image接口重新下载该镜像时,若本地原来存储有原镜像,则原镜像的镜像名称、TAG会变更为“none” + + 举例如下: + + 本地已存储镜像: + + ``` + IMAGE TAG IMAGE ID SIZE + rnd-dockerhub.huawei.com/pproxyisulad/test latest 99e59f495ffaa 753kB + ``` + + 远程仓库中rnd-dockerhub.huawei.com/pproxyisulad/test:latest 镜像更新后,重新下载后: + + ``` + IMAGE TAG IMAGE ID SIZE + 99e59f495ffaa 753kB + rnd-dockerhub.huawei.com/pproxyisulad/test latest d8233ab899d41 1.42MB + ``` + + 使用isula images 命令行查询,REF显示为"-": + + ``` + REF IMAGE ID CREATED SIZE + rnd-dockerhub.huawei.com/pproxyisulad/test:latest d8233ab899d41 2019-02-14 19:19:37 1.42MB + - 99e59f495ffaa 2016-05-04 02:26:41 753kB + ``` + + diff --git a/content/zh/docs/Container/ContainerStats.md b/content/zh/docs/Container/ContainerStats.md deleted file mode 100644 index e6a43d3d310b918c667ec6fbe46208c1565dab63..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/ContainerStats.md +++ /dev/null @@ -1,44 +0,0 @@ -# ContainerStats - -## 接口原型 - -``` -rpc ContainerStats(ContainerStatsRequest) returns (ContainerStatsResponse) {} -``` - -## 接口描述 - -返回单个容器占用资源信息,仅支持runtime类型为lcr的容器。 - -## 参数 - - - - - - - - - -

参数成员

-

描述

-

string container_id

-

容器id

-
- -## 返回值 - - - - - - - - - -

返回值

-

描述

-

ContainerStats stats

-

容器信息。注:disk和inodes只支持oci格式镜像起的容器查询

-
- diff --git a/content/zh/docs/Container/ContainerStatus.md b/content/zh/docs/Container/ContainerStatus.md deleted file mode 100644 index ad0b0a5ea7a46df2618c6df002653a9a69844e40..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/ContainerStatus.md +++ /dev/null @@ -1,54 +0,0 @@ -# ContainerStatus - -## 接口原型 - -``` -rpc ContainerStatus(ContainerStatusRequest) returns (ContainerStatusResponse) {} -``` - -## 接口描述 - -返回容器状态信息,如果容器不存在,则返回错误。 - -## 参数 - - - - - - - - - - - - -

参数成员

-

描述

-

string container_id

-

容器id

-

bool verbose

-

标识是否显示sandbox的一些额外信息。(暂不支持配置)

-
- -## 返回值 - - - - - - - - - - - - -

返回值

-

描述

-

ContainerStatus status

-

容器的状态信息

-

map<string, string> info

-

sandbox的额外信息,key是任意string,value是json格式的字符串,这些信息可以是任意调试内容。当verbose为true时info不能为空。(暂不支持配置)

-
- diff --git a/content/zh/docs/Container/CreateContainer.md b/content/zh/docs/Container/CreateContainer.md deleted file mode 100644 index 4d0fd786c56c66cd02795635c4f085da2e2ee4bf..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/CreateContainer.md +++ /dev/null @@ -1,79 +0,0 @@ -# CreateContainer - -``` -grpc::Status CreateContainer(grpc::ServerContext *context, const runtime::CreateContainerRequest *request, runtime::CreateContainerResponse *reply) {} -``` - -## 接口描述 - -在PodSandbox内创建一个容器。 - -## 注意事项 - -- 请求CreateContainerRequest 中的sandbox\_config与传递给RunPodSandboxRequest以创建PodSandbox的配置相同。 它再次传递,只是为了方便参考。 PodSandboxConfig是不可变的,在pod的整个生命周期内保持不变。 -- 由于容器命名以[ContainerMetadata](接口-2.md#zh-cn_topic_0182207110_li17135914132319)中的字段为来源,且以下划线"\_"为分割字符,因此限制metadata中的数据不能包含下划线,否则会出现sandbox运行成功,但无法使用[ListContainers](ListContainers.md#ZH-CN_TOPIC_0184808103)接口查询的现象。 -- CreateContainerRequest中无runtime\_handler字段,创建container时的runtime类型和其对应的sandbox的runtime相同。 - -## 参数 - - - - - - - - - - - - - - - -

参数成员

-

描述

-

string pod_sandbox_id

-

待在其中创建容器的PodSandbox的ID。

-

ContainerConfig config

-

容器的配置信息

-

PodSandboxConfig sandbox_config

-

PodSandbox的配置信息

-
- -## 补充 - -可用于存储和检索任意元数据的非结构化键值映射。有一些字段由于cri接口没有提供特定的参数,可通过该字段将参数传入 - -- 自定义 - - - - - - - - - -

自定义 key:value

-

描述

-

cgroup.pids.max:int64_t

-

用于限制容器内的进/线程数(set -1 for unlimited)

-
- - -## 返回值 - - - - - - - - - -

返回值

-

描述

-

string container_id

-

创建完成的容器ID

-
- diff --git "a/content/zh/docs/Container/DAEMON\345\244\232\347\253\257\345\217\243\347\232\204\347\273\221\345\256\232.md" "b/content/zh/docs/Container/DAEMON\345\244\232\347\253\257\345\217\243\347\232\204\347\273\221\345\256\232.md" deleted file mode 100644 index 11f93e14c4b18772ee7bdae8e26ec2d28473550c..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/DAEMON\345\244\232\347\253\257\345\217\243\347\232\204\347\273\221\345\256\232.md" +++ /dev/null @@ -1,40 +0,0 @@ -# DAEMON多端口的绑定 - -## 描述 - -daemon端可以绑定多个unix socket或者tcp端口,并在这些端口上侦听,客户端可以通过这些端口和daemon端进行交互。 - -## 接口 - -用户可以在/etc/isulad/daemon.json文件的hosts字段配置一个或者多个端口。当然用户也可以不指定hosts。 - -``` -{ - "hosts": [ - "unix:///var/run/isulad.sock", - "tcp://localhost:5678", - "tcp://127.0.0.1:6789" - ] -} -``` - -用户也可以在/etc/sysconfig/iSulad中通过-H或者--host配置端口。用户同样可以不指定hosts。 - -``` -OPTIONS='-H unix:///var/run/isulad.sock --host tcp://127.0.0.1:6789' -``` - -如果用户在daemon.json文件及iSulad中均未指定hosts,则daemon在启动之后将默认侦听unix:///var/run/isulad.sock。 - -## 限制 - -- 用户不可以在/etc/isulad/daemon.json和/etc/sysconfig/iSuald两个文件中同时指定hosts,如果这样做将会出现错误,isulad无法正常启动; - - ``` - unable to configure the isulad with file /etc/isulad/daemon.json: the following directives are specified both as a flag and in the configuration file: hosts: (from flag: [unix:///var/run/isulad.sock tcp://127.0.0.1:6789], from file: [unix:///var/run/isulad.sock tcp://localhost:5678 tcp://127.0.0.1:6789]) - ``` - -- 若指定的host是unix socket,则必须是合法的unix socket,需要以"unix://"开头,后跟合法的socket绝对路径; -- 若指定的host是tcp端口,则必须是合法的tcp端口,需要以"tcp://"开头,后跟合法的IP地址和端口,IP地址可以为localhost; -- 可以指定至多10个有效的端口,超过10个则会出现错误,isulad无法正常启动。 - diff --git "a/content/zh/docs/Container/Docker\345\256\271\345\231\250.md" "b/content/zh/docs/Container/Docker\345\256\271\345\231\250.md" index 05f03370e68b2f6121f4174956a6bf033bd70d98..c6d46c4ffb1d9f71dd6be3be7947412bfcd0d66b 100644 --- "a/content/zh/docs/Container/Docker\345\256\271\345\231\250.md" +++ "b/content/zh/docs/Container/Docker\345\256\271\345\231\250.md" @@ -1,2 +1,9 @@ -# Docker容器 +# Docker容器 + +Docker是一个开源的Linux容器引擎项目, 用以实现应用的快速打包、部署和交付。Docker的英文本意是码头工人,码头工人的工作就是将商品打包到container\(集装箱\)并且搬运container、装载container。 对应到Linux中,Docker就是将app打包到container,通过container实现app在各种平台上的部署、运行。Docker通过Linux Container技术将app变成一个标准化的、可移植的、自管理的组件,从而实现应用的“一次构建,到处运行”。Docker技术特点就是:应用快速发布、部署简单、管理方便,应用密度更高。 + +>![](public_sys-resources/icon-note.gif) **说明:** +>Docker容器的安装和使用需要root权限。 + + diff --git a/content/zh/docs/Container/Exec.md b/content/zh/docs/Container/Exec.md deleted file mode 100644 index 061dc0130121f5fb63111132b9e5b963c262b7e7..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/Exec.md +++ /dev/null @@ -1,73 +0,0 @@ -# Exec - -## 接口原型 - -``` -rpc Exec(ExecRequest) returns (ExecResponse) {} -``` - -## 接口描述 - -在容器中执行命令,采用的gRPC通讯方式从CRI服务端获取url,再通过获得的url与websocket服务端建立长连接,实现与容器的交互。 - -## 注意事项 - -执行执行一条单独的命令,也能打开终端与容器交互。stdin/stdout/stderr之一必须是真的。如果tty为真,stderr必须是假的。 不支持多路复用, 在这种情况下, stdout和stderr的输出将合并为单流。 - -## 参数 - - - - - - - - - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

string container_id

-

容器ID

-

repeated string cmd

-

待执行的命令

-

bool tty

-

是否在TTY中执行命令

-

bool stdin

-

是否流式标准输入

-

bool stdout

-

是否流式标准输出

-

bool stderr

-

是否流式输出标准错误

-
- -## 返回值 - - - - - - - - - -

返回值

-

描述

-

string url

-

exec流服务器的完全限定URL

-
- diff --git a/content/zh/docs/Container/ExecSync.md b/content/zh/docs/Container/ExecSync.md deleted file mode 100644 index 664567372c8374577edba261fd4faaa1fc6af097..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/ExecSync.md +++ /dev/null @@ -1,68 +0,0 @@ -# ExecSync - -## 接口原型 - -``` -rpc ExecSync(ExecSyncRequest) returns (ExecSyncResponse) {} -``` - -## 接口描述 - -以同步的方式在容器中执行命令,采用的gRPC通讯方式。 - -## 注意事项 - -执行执行一条单独的命令,不能打开终端与容器交互。 - -## 参数 - - - - - - - - - - - - - - - -

参数成员

-

描述

-

string container_id

-

容器ID

-

repeated string cmd

-

待执行命令

-

int64 timeout

-

停止命令的超时时间(秒)。 默认值:0(无超时限制)。 暂不支持

-
- -## 返回值 - - - - - - - - - - - - - - - -

返回值

-

描述

-

bytes stdout

-

捕获命令标准输出

-

bytes stderr

-

捕获命令标准错误输出

-

int32 exit_code

-

退出代码命令完成。 默认值:0(成功)。

-
- diff --git a/content/zh/docs/Container/ImageFsInfo.md b/content/zh/docs/Container/ImageFsInfo.md deleted file mode 100644 index bb456ca4ab92dae243debbdab84804e1d588d4a6..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/ImageFsInfo.md +++ /dev/null @@ -1,36 +0,0 @@ -# ImageFsInfo - -## 接口原型 - -``` -rpc ImageFsInfo(ImageFsInfoRequest) returns (ImageFsInfoResponse) {} -``` - -## 接口描述 - -查询存储镜像的文件系统信息。 - -## 注意事项 - -查询到的为镜像元数据下的文件系统信息。 - -## 参数 - -无 - -## 返回值 - - - - - - - - - -

返回值

-

描述

-

repeated FilesystemUsage image_filesystems

-

镜像存储文件系统信息

-
- diff --git a/content/zh/docs/Container/ImageStatus.md b/content/zh/docs/Container/ImageStatus.md deleted file mode 100644 index d2b164021105fbb159ebedc532c2eddd65a78cda..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/ImageStatus.md +++ /dev/null @@ -1,59 +0,0 @@ -# ImageStatus - -## 接口原型 - -``` -rpc ImageStatus(ImageStatusRequest) returns (ImageStatusResponse) {} -``` - -## 接口描述 - -查询指定镜像信息。 - -## 注意事项 - -1. 查询指定镜像信息,若镜像不存在,则返回ImageStatusResponse,其中Image设置为nil。 -2. 为统一接口,对于embedded格式镜像,因不符合OCI格式镜像,缺少字段,无法通过本接口进行查询。 - -## 参数 - - - - - - - - - - - - -

参数成员

-

描述

-

ImageSpec image

-

镜像名称

-

bool verbose

-

查询额外信息,暂不支持,无额外信息返回

-
- -## 返回值 - - - - - - - - - - - - -

返回值

-

描述

-

Image image

-

镜像信息

-

map<string, string> info

-

镜像额外信息,暂不支持,无额外信息返回

-
- diff --git "a/content/zh/docs/Container/Image\346\234\215\345\212\241.md" "b/content/zh/docs/Container/Image\346\234\215\345\212\241.md" deleted file mode 100644 index da14641dc8c2b8fd5d57d7c110962fea9bc32511..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/Image\346\234\215\345\212\241.md" +++ /dev/null @@ -1,4 +0,0 @@ -# Image服务 - -提供了从镜像仓库拉取、查看、和移除镜像的gRPC API。 - diff --git a/content/zh/docs/Container/ListContainerStats.md b/content/zh/docs/Container/ListContainerStats.md deleted file mode 100644 index 88963f0ba941924eb99922648bd7ced2025dfc3f..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/ListContainerStats.md +++ /dev/null @@ -1,44 +0,0 @@ -# ListContainerStats - -## 接口原型 - -``` -rpc ListContainerStats(ListContainerStatsRequest) returns (ListContainerStatsResponse) {} -``` - -## 接口描述 - -返回多个容器占用资源信息,支持条件过滤 - -## 参数 - - - - - - - - - -

参数成员

-

描述

-

ContainerStatsFilter filter

-

条件过滤参数

-
- -## 返回值 - - - - - - - - - -

返回值

-

描述

-

repeated ContainerStats stats

-

容器信息的列表。注:disk和inodes只支持oci格式镜像启动的容器查询

-
- diff --git a/content/zh/docs/Container/ListContainers.md b/content/zh/docs/Container/ListContainers.md deleted file mode 100644 index 30e46e7aabb0673f314bdc770ce409be661c85f5..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/ListContainers.md +++ /dev/null @@ -1,44 +0,0 @@ -# ListContainers - -## 接口原型 - -``` -rpc ListContainers(ListContainersRequest) returns (ListContainersResponse) {} -``` - -## 接口描述 - -返回container信息的列表,支持条件过滤。 - -## 参数 - - - - - - - - - -

参数成员

-

描述

-

ContainerFilter filter

-

条件过滤参数

-
- -## 返回值 - - - - - - - - - -

返回值

-

描述

-

repeated Container containers

-

容器信息的列表

-
- diff --git a/content/zh/docs/Container/ListImages.md b/content/zh/docs/Container/ListImages.md deleted file mode 100644 index bc18449bad1acc4db90f87d8e14394151ee82fe1..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/ListImages.md +++ /dev/null @@ -1,51 +0,0 @@ -# ListImages - -## 接口原型 - -``` -rpc ListImages(ListImagesRequest) returns (ListImagesResponse) {} -``` - -## 接口描述 - -列出当前已存在的镜像信息。 - -## 注意事项 - -为统一接口,对于embedded格式镜像,可以通过cri images查询到。但是因embedded镜像不是标准OCI镜像,因此查询得到的结果有以下限制: - -- 因embedded镜像无镜像ID,显示的镜像ID为镜像的config digest。 -- 因embedded镜像本身无digest仅有config的digest,且格式不符合OCI镜像规范,因此无法显示digest。 - -## 参数 - - - - - - - - - -

参数成员

-

描述

-

ImageSpec filter

-

筛选的镜像名称

-
- -## 返回值 - - - - - - - - - -

返回值

-

描述

-

repeated Image images

-

镜像信息列表

-
- diff --git a/content/zh/docs/Container/ListPodSandbox.md b/content/zh/docs/Container/ListPodSandbox.md deleted file mode 100644 index 705bab804d0c2bcd492d2c58359c2a5d3bca46c1..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/ListPodSandbox.md +++ /dev/null @@ -1,44 +0,0 @@ -# ListPodSandbox - -## 接口原型 - -``` -rpc ListPodSandbox(ListPodSandboxRequest) returns (ListPodSandboxResponse) {} -``` - -## 接口描述 - -返回sandbox信息的列表,支持条件过滤。 - -## 参数 - - - - - - - - - -

参数成员

-

描述

-

PodSandboxFilter filter

-

条件过滤参数

-
- -## 返回值 - - - - - - - - - -

返回值

-

描述

-

repeated PodSandbox items

-

sandbox信息的列表

-
- diff --git a/content/zh/docs/Container/PodSandboxStatus.md b/content/zh/docs/Container/PodSandboxStatus.md deleted file mode 100644 index 966501d16f0fb6d909efd8a814cb04ef80c0565e..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/PodSandboxStatus.md +++ /dev/null @@ -1,54 +0,0 @@ -# PodSandboxStatus - -## 接口原型 - -``` -rpc PodSandboxStatus(PodSandboxStatusRequest) returns (PodSandboxStatusResponse) {} -``` - -## 接口描述 - -查询sandbox的状态,如果sandbox不存在,返回错误。 - -## 参数 - - - - - - - - - - - - -

参数成员

-

描述

-

string pod_sandbox_id

-

sandbox的id

-

bool verbose

-

标识是否显示sandbox的一些额外信息。(暂不支持配置)

-
- -## 返回值 - - - - - - - - - - - - -

返回值

-

描述

-

PodSandboxStatus status

-

sandbox的状态信息

-

map<string, string> info

-

sandbox的额外信息,key是任意string,value是json格式的字符串,这些信息可以是任意调试内容。当verbose为true时info不能为空。(暂不支持配置)

-
- diff --git a/content/zh/docs/Container/PullImage.md b/content/zh/docs/Container/PullImage.md deleted file mode 100644 index 5ec241b7724daf3ad8425f727e0a311dcd08e098..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/PullImage.md +++ /dev/null @@ -1,58 +0,0 @@ -# PullImage - -## 接口原型 - -``` - rpc PullImage(PullImageRequest) returns (PullImageResponse) {} -``` - -## 接口描述 - -下载镜像。 - -## 注意事项 - -当前支持下载public镜像,使用用户名、密码、auth信息下载私有镜像,不支持authconfig中的server\_address、identity\_token、registry\_token字段。 - -## 参数 - - - - - - - - - - - - - - - -

参数成员

-

描述

-

ImageSpec image

-

要下载的镜像名称

-

AuthConfig auth

-

下载私有镜像时的验证信息

-

PodSandboxConfig sandbox_config

-

在Pod上下文中下载镜像(暂不支持)

-
- -## 返回值 - - - - - - - - - -

返回值

-

描述

-

string image_ref

-

返回已下载镜像信息

-
- diff --git a/content/zh/docs/Container/RemoveContainer.md b/content/zh/docs/Container/RemoveContainer.md deleted file mode 100644 index 25fae7f722525f406f6680ae92f2d625e750131c..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/RemoveContainer.md +++ /dev/null @@ -1,32 +0,0 @@ -# RemoveContainer - -## 接口原型 - -``` -rpc RemoveContainer(RemoveContainerRequest) returns (RemoveContainerResponse) {} -``` - -## 接口描述 - -删除一个容器,如果容器正在运行,必须强制停止,如果容器已经被删除,不能返回错误。 - -## 参数 - - - - - - - - - -

参数成员

-

描述

-

string container_id

-

容器id

-
- -## 返回值 - -无 - diff --git a/content/zh/docs/Container/RemoveImage.md b/content/zh/docs/Container/RemoveImage.md deleted file mode 100644 index 9f136317404559c08db82f834fcb804f49f6c947..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/RemoveImage.md +++ /dev/null @@ -1,36 +0,0 @@ -# RemoveImage - -## 接口原型 - -``` -rpc RemoveImage(RemoveImageRequest) returns (RemoveImageResponse) {} -``` - -## 接口描述 - -删除指定镜像。 - -## 注意事项 - -为统一接口,对于embedded格式镜像,因不符合OCI格式镜像,缺少字段,无法通过本接口使用image id进行删除。 - -## 参数 - - - - - - - - - -

参数成员

-

描述

-

ImageSpec image

-

要删除的镜像名称或者ID

-
- -## 返回值 - -无 - diff --git a/content/zh/docs/Container/RemovePodSandbox.md b/content/zh/docs/Container/RemovePodSandbox.md deleted file mode 100644 index 89e16bc77e6c12972fbefe128f4132ddb0e9a1cc..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/RemovePodSandbox.md +++ /dev/null @@ -1,48 +0,0 @@ -# RemovePodSandbox - -## 接口原型 - -``` -rpc RemovePodSandbox(RemovePodSandboxRequest) returns (RemovePodSandboxResponse) {} -``` - -## 接口描述 - -删除sandbox,如果有任何running的容器属于该sandbox,则必须被强制停止和删除,如果sandbox已经被删除,不能返回错误。 - -## 注意事项 - -1. 删除sandbox时,不会删除sandbox的网络资源,在删除pod前必须先调用StopPodSandbox才能清理网络资源,调用者应当保证在删除sandbox之前至少调用一次StopPodSandbox。 - -## 参数 - - - - - - - - - -

参数成员

-

描述

-

string pod_sandbox_id

-

sandbox的id

-
- -## 返回值 - - - - - - - - - -

返回值

-

描述

-

-

-
- diff --git a/content/zh/docs/Container/RunPodSandbox.md b/content/zh/docs/Container/RunPodSandbox.md deleted file mode 100644 index d1504ba973e763ba0742156341cffa980d8ac937..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/RunPodSandbox.md +++ /dev/null @@ -1,54 +0,0 @@ -# RunPodSandbox - -## 接口原型 - -``` -rpc RunPodSandbox(RunPodSandboxRequest) returns (RunPodSandboxResponse) {} -``` - -## 接口描述 - -创建和启动一个pod sandbox,若运行成功,sandbox处于ready状态。 - -## 注意事项 - -1. 启动sandbox的默认镜像为rnd-dockerhub.huawei.com/library/pause-$\{machine\}:3.0, 其中$\{machine\}为架构,在x86\_64上,machine的值为amd64,在arm64上,machine的值为aarch64,当前rnd-dockerhub仓库上只有amd64和aarch64镜像可供下载,若机器上无此镜像,请确保机器能从rnd-dockerhub下载,若要使用其它镜像,请参考[iSulad部署配置](部署配置.md#ZH-CN_TOPIC_0184808042)中的pod-sandbox-image指定镜像。 -2. 由于容器命名以[PodSandboxMetadata](接口-2.md#zh-cn_topic_0182207110_li2359918134912)中的字段为来源,且以下划线"\_"为分割字符,因此限制metadata中的数据不能包含下划线,否则会出现sandbox运行成功,但无法使用[ListPodSandbox](ListPodSandbox.md#ZH-CN_TOPIC_0184808098)接口查询的现象。 - -## 参数 - - - - - - - - - - - - -

参数成员

-

描述

-

PodSandboxConfig config

-

sandbox的配置

-

string runtime_handler

-

指定创建sandbox的runtime运行时,当前支持lcr、kata-runtime运行时类型。

-
- -## 返回值 - - - - - - - - - -

返回值

-

描述

-

string pod_sandbox_id

-

成功,返回response数据

-
- diff --git "a/content/zh/docs/Container/Runtime\346\234\215\345\212\241.md" "b/content/zh/docs/Container/Runtime\346\234\215\345\212\241.md" deleted file mode 100644 index c6d36bddbc5351c34d5f8db78df1cc190a689d43..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/Runtime\346\234\215\345\212\241.md" +++ /dev/null @@ -1,5 +0,0 @@ -# Runtime服务 - -Runtime服务中包含操作pod和容器的接口,以及查询runtime自身配置和状态信息的接口。 - - diff --git "a/content/zh/docs/Container/SELinux\345\256\211\345\205\250\351\205\215\347\275\256\345\234\272\346\231\257.md" "b/content/zh/docs/Container/SELinux\345\256\211\345\205\250\351\205\215\347\275\256\345\234\272\346\231\257.md" deleted file mode 100644 index d42f1521fd2b7a87eb85bcf04f11f841beec17c9..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/SELinux\345\256\211\345\205\250\351\205\215\347\275\256\345\234\272\346\231\257.md" +++ /dev/null @@ -1,2 +0,0 @@ -# SELinux安全配置场景 - diff --git a/content/zh/docs/Container/StartContainer.md b/content/zh/docs/Container/StartContainer.md deleted file mode 100644 index 6ec1007dc7d89478043ba083130c83f831cf94f1..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/StartContainer.md +++ /dev/null @@ -1,44 +0,0 @@ -# StartContainer - -## 接口原型 - -``` -rpc StartContainer(StartContainerRequest) returns (StartContainerResponse) {} -``` - -## 接口描述 - -启动一个容器。 - -## 参数 - - - - - - - - - -

参数成员

-

描述

-

string container_id

-

容器id

-
- -## 返回值 - - - - - - - - - -

返回值

-

描述

-

-

-
- diff --git a/content/zh/docs/Container/Status.md b/content/zh/docs/Container/Status.md deleted file mode 100644 index 0e6dda29409ebf0f0d91c5f64784e2da388fcf47..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/Status.md +++ /dev/null @@ -1,53 +0,0 @@ -# Status - -## 接口原型 - -``` -rpc Status(StatusRequest) returns (StatusResponse) {}; -``` - -## 接口描述 - -获取runtime和pod的网络状态,在获取网络状态时,会触发网络配置的刷新。仅支持runtime类型为lcr的容器。 - -## 注意事项 - -如果网络配置刷新失败,不会影响原有配置;只有刷新成功时,才会覆盖原有配置。 - -## 参数 - - - - - - - - - -

参数成员

-

描述

-

bool verbose

-

是否显示关于Runtime额外的信息(暂不支持)

-
- -## 返回值 - - - - - - - - - - - - -

返回值

-

描述

-

RuntimeStatus status

-

Runtime的状态

-

map<string, string> info

-

Runtime额外的信息,info的key为任意值,value为json格式,可包含任何debug信息;只有Verbose为true是才应该被赋值

-
- diff --git a/content/zh/docs/Container/StopContainer.md b/content/zh/docs/Container/StopContainer.md deleted file mode 100644 index 51775b58810d24df743948b8610577ff4678b14f..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/StopContainer.md +++ /dev/null @@ -1,37 +0,0 @@ -# StopContainer - -## 接口原型 - -``` -rpc StopContainer(StopContainerRequest) returns (StopContainerResponse) {} -``` - -## 接口描述 - -停止一个running的容器,支持配置优雅停止时间timeout,如果容器已经停止,不能返回错误。 - -## 参数 - - - - - - - - - - - - -

参数成员

-

描述

-

string container_id

-

容器id

-

int64 timeout

-

强制停止容器前的等待时间,默认值为0,即强制停止容器。

-
- -## 返回值 - -无 - diff --git a/content/zh/docs/Container/StopPodSandbox.md b/content/zh/docs/Container/StopPodSandbox.md deleted file mode 100644 index a5141d74d63dbfa89295d179fb0cfbc9b49c6015..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/StopPodSandbox.md +++ /dev/null @@ -1,44 +0,0 @@ -# StopPodSandbox - -## 接口原型 - -``` -rpc StopPodSandbox(StopPodSandboxRequest) returns (StopPodSandboxResponse) {} -``` - -## 接口描述 - -停止pod sandbox,停止sandbox容器,回收分配给sandbox的网络资源(比如IP地址)。如果有任何running的容器属于该sandbox,则必须被强制停止。 - -## 参数 - - - - - - - - - -

参数成员

-

描述

-

string pod_sandbox_id

-

sandbox的id

-
- -## 返回值 - - - - - - - - - -

返回值

-

描述

-

-

-
- diff --git a/content/zh/docs/Container/UpdateContainerResources.md b/content/zh/docs/Container/UpdateContainerResources.md deleted file mode 100644 index ee20086d0a698856e3795f888696e47eeb6c6972..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/UpdateContainerResources.md +++ /dev/null @@ -1,42 +0,0 @@ -# UpdateContainerResources - -## 接口原型 - -``` -rpc UpdateContainerResources(UpdateContainerResourcesRequest) returns (UpdateContainerResourcesResponse) {} -``` - -## 接口描述 - -该接口用于更新容器资源配置。 - -## 注意事项 - -- 该接口仅用于更新容器的资源配置,不能用于更新Pod的资源配置。 -- 当前不支持更新容器oom\_score\_adj配置。 - -## 参数 - - - - - - - - - - - - -

参数成员

-

描述

-

string container_id

-

容器id

-

LinuxContainerResources linux

-

linux资源配置信息

-
- -## 返回值 - -无 - diff --git a/content/zh/docs/Container/UpdateRuntimeConfig.md b/content/zh/docs/Container/UpdateRuntimeConfig.md deleted file mode 100644 index 96caaf851b445865efc1fc81cb085c07d1c7b4f4..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/UpdateRuntimeConfig.md +++ /dev/null @@ -1,36 +0,0 @@ -# UpdateRuntimeConfig - -## 接口原型 - -``` -rpc UpdateRuntimeConfig(UpdateRuntimeConfigRequest) returns (UpdateRuntimeConfigResponse); -``` - -## 接口描述 - -提供标准的CRI接口,目的为了更新网络插件的Pod CIDR,当前CNI网络插件无需更新Pod CIDR,因此该接口只会记录访问日志。 - -## 注意事项 - -接口操作不会对系统管理信息修改,只是记录一条日志。 - -## 参数 - - - - - - - - - -

参数成员

-

描述

-

RuntimeConfig runtime_config

-

包含Runtime要配置的信息

-
- -## 返回值 - -无 - diff --git a/content/zh/docs/Container/attach-1.md b/content/zh/docs/Container/attach-1.md deleted file mode 100644 index c5844661eb01c849459051eafb2f3d9a086f350a..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/attach-1.md +++ /dev/null @@ -1,64 +0,0 @@ -# Attach - -## 接口原型 - -``` -rpc Attach(AttachRequest) returns (AttachResponse) {} -``` - -## 接口描述 - -接管容器的1号进程,采用的gRPC通讯方式从CRI服务端获取url,再通过获得的url与websocket服务端建立长连接,实现与容器的交互。仅支持runtime类型为lcr的容器。 - -## 参数 - - - - - - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

string container_id

-

容器ID

-

bool tty

-

是否在TTY中执行命令

-

bool stdin

-

是否流式标准输入

-

bool stdout

-

是否流式标准输出

-

bool stderr

-

是否流式输出标准错误

-
- -## 返回值 - - - - - - - - - -

返回值

-

描述

-

string url

-

attach流服务器的完全限定URL

-
- diff --git "a/content/zh/docs/Container/capabilities\345\256\211\345\205\250\351\205\215\347\275\256\345\234\272\346\231\257.md" "b/content/zh/docs/Container/capabilities\345\256\211\345\205\250\351\205\215\347\275\256\345\234\272\346\231\257.md" deleted file mode 100644 index 5a0af99775c40198cb62323db72cda12c200775a..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/capabilities\345\256\211\345\205\250\351\205\215\347\275\256\345\234\272\346\231\257.md" +++ /dev/null @@ -1 +0,0 @@ -# capabilities安全配置场景 diff --git "a/content/zh/docs/Container/cgroup\350\267\257\345\276\204\345\217\257\351\205\215\347\275\256.md" "b/content/zh/docs/Container/cgroup\350\267\257\345\276\204\345\217\257\351\205\215\347\275\256.md" index a31a5345ecf50b848480cbba3df01f23712c019b..97bc19b7ff48e23587c93512b5dffc8391cc1d67 100644 --- "a/content/zh/docs/Container/cgroup\350\267\257\345\276\204\345\217\257\351\205\215\347\275\256.md" +++ "b/content/zh/docs/Container/cgroup\350\267\257\345\276\204\345\217\257\351\205\215\347\275\256.md" @@ -1,10 +1,9 @@ -# cgroup路径可配置 +# cgroup路径可配置 +## 功能描述 -## 功能描述 +系统容器提供在宿主机上进行容器资源隔离和预留的能力。通过\--cgroup-parent参数,可以将容器使用的cgroup目录指定到某个特定目录下,从而达到灵活分配宿主机资源的目的。例如可以设置容器a、b、c的cgroup父路径为/lxc/cgroup1,容器d、e、f的cgroup父路径为/lxc/cgroup2,这样通过cgroup路径将容器分为两个group,实现容器cgroup组层面的资源隔离。 -系统容器提供在宿主机上进行容器资源隔离和预留的能力。通过--cgroup-parent参数,可以将容器使用的cgroup目录指定到某个特定目录下,从而达到灵活分配宿主机资源的目的。例如可以设置容器a、b、c的cgroup父路径为/lxc/cgroup1,容器d、e、f的cgroup父路径为/lxc/cgroup2,这样通过cgroup路径将容器分为两个group,实现容器cgroup组层面的资源隔离。 - -## 参数说明 +## 参数说明

命令

@@ -46,12 +45,12 @@
-## 约束限制 +## 约束限制 -- 如果daemon端和客户端都设置了cgroup parent参数,最终以客户端指定的--cgroup-parent生效。 +- 如果daemon端和客户端都设置了cgroup parent参数,最终以客户端指定的\--cgroup-parent生效。 - 如果已启动容器A,然后启动容器B,容器B的cgroup父路径指定为容器A的cgroup路径,在删除容器的时候需要先删除容器B再删除容器A,否则会导致cgroup资源残留。 -## 使用示例 +## 使用示例 启动系统容器,指定--cgroup-parent参数: diff --git a/content/zh/docs/Container/commit.md b/content/zh/docs/Container/commit.md deleted file mode 100644 index b79edf74ac289e0d9fad47c5e316f37102c57e9a..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/commit.md +++ /dev/null @@ -1,29 +0,0 @@ -# commit - -用法:**docker commit \[OPTIONS\] CONTAINER \[REPOSITORY\[:TAG\]\]** - -功能:由一个容器创建一个新的image - -选项: - --a, --author="" 指定作者 - --m, --message="" 提交的信息 - --p, --pause=true 在提交过程中暂停容器 - -示例: - -运行一个容器,然后将这个容器提交成一个新的image - -``` -$ sudo docker commit test busybox:test -sha256:be4672959e8bd8a4291fbdd9e99be932912fe80b062fba3c9b16ee83720c33e1 - -$ sudo docker images -REPOSITORY TAG IMAGE ID CREATED SIZE -busybox latest e02e811dd08f 2 years ago 1.09MB -``` - -   - diff --git "a/content/zh/docs/Container/configuration-toml\351\205\215\347\275\256\350\257\264\346\230\216.md" "b/content/zh/docs/Container/configuration-toml\351\205\215\347\275\256\350\257\264\346\230\216.md" deleted file mode 100644 index a2a8edf048d3d268611e27270997ce9657532da1..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/configuration-toml\351\205\215\347\275\256\350\257\264\346\230\216.md" +++ /dev/null @@ -1,81 +0,0 @@ -# configuration.toml配置说明 - ->![](public_sys-resources/icon-note.gif) **说明:** ->configuration.toml配置文件中各个字段的取值以kata-containers-.rpm包中的configuration.toml文件为准,不支持用户对配置文件中的字段任意取值。 - -``` -[hypervisor.qemu] -path :指定虚拟化qemu执行路径 -kernel :指定guest kernel执行路径 -initrd :指定guest initrd执行路径 -image :指定guest image执行路径(不适用) -machine_type :指定模拟芯片类型,ARM架构为virt,x86架构为pc -kernel_params :指定guest内核运行参数 -firmware :指定固件路径,设空则使用默认固件 -machine_accelerators :指定加速器 -default_vcpus :指定每个SB/VM的默认vCPU数量 -default_maxvcpus :指定每个SB/VM的默认最大vCPU数量 -default_root_ports :指定每个SB/VM的默认Root Ports数量 -default_bridges :指定每个SB/VM的默认bridges数量 -default_memory :指定每个SB/VM的默认内存大小,默认为1024 MiB -memory_slots :指定每个SB/VM的内存插槽数量,默认为10 -memory_offset :指定内存偏移量,默认为0 -disable_block_device_use :禁止将块设备用于容器的rootfs -shared_fs :指定共享文件系统类型,默认为virtio-9p -virtio_fs_daemon :指定vhost-user-fs守护进程路径 -virtio_fs_cache_size :指定DAX缓存的默认大小 -virtio_fs_cache :指定缓存模式 -block_device_driver :指定块设备驱动 -block_device_cache_set :指定块设备是否设置缓存相关选项,默认false -block_device_cache_direct :指定是否使能O_DIRECT,默认false -block_device_cache_noflush :指定是否忽略设备刷新请求,默认false -enable_iothreads :使能iothreads -enable_mem_prealloc :使能VM RAM预分配,默认false -enable_hugepages :使能大页,默认false -enable_swap :使能swap,默认false -enable_debug :使能qemu debug,默认false -disable_nesting_checks :关闭嵌套检查 -msize_9p = 8192 :指定每个9p包传输的字节数 -use_vsock :使用vsocks与agent直接通信(前提支持vsocks),默认false -hotplug_vfio_on_root_bus :使能vfio设备在root bus热插拔,默认false -disable_vhost_net :关闭vhost_net,默认false -entropy_source :指定默认熵源 -guest_hook_path :指定guest hook二进制路径 - -[factory] -enable_template :使能VM模板,默认false -template_path :指定模板路径 -vm_cache_number :指定VMCache的缓存数量,默认0 -vm_cache_endpoint :指定VMCache使用的Unix socket的地址,默认/var/run/kata-containers/cache.sock - -[proxy.kata] -path :指定kata-proxy运行路径 -enable_debug :使能proxy debug,默认false - -[shim.kata] -path :指定kata-shim运行路径 -enable_debug :使能shim debug,默认false -enable_tracing :使能shim opentracing - -[agent.kata] -enable_debug :使能agent debug,默认false -enable_tracing :使能agent tracing -trace_mode :指定trace模式 -trace_type :指定trace类型 -enable_blk_mount :开启block设备guest挂载 - -[netmon] -enable_netmon :使能网络监控,默认false -path :指定kata-netmon运行路径 -enable_debug :使能netmon debug,默认false - -[runtime] -enable_debug :使能runtime debug,默认false -enable_cpu_memory_hotplug :使能cpu和内存热插拔,默认false -internetworking_model :指定VM和容器网络互联模式 -disable_guest_seccomp :关闭在guest应用seccemp安全机制,默认true -enable_tracing :使能runtime opentracing,默认false -disable_new_netns :不为shim和hypervisor进程创建网络命名空间,默认false -experimental :开启实验特性,不支持用户自定义配置 -``` - diff --git a/content/zh/docs/Container/container.md b/content/zh/docs/Container/container.md index a60898842342424c43c951b7724317d119abd7d3..72e34041ee1ac1eeebcdb11b258e6d5dac3d27f6 100644 --- a/content/zh/docs/Container/container.md +++ b/content/zh/docs/Container/container.md @@ -1,4 +1,4 @@ -## 概述 +## 概述 openEuler软件包中同时提供了轻量化容器引擎iSulad与docker engine两种容器引擎。 @@ -10,7 +10,7 @@ openEuler软件包中同时提供了轻量化容器引擎iSulad与docker engine 本文档提供容器引擎的安装和使用方法以及各个容器形态的部署使用方法。 -## 读者对象 +## 读者对象 本文档主要适用于使用openEuler并需要安装容器的用户。用户需要具备以下经验和技能: diff --git a/content/zh/docs/Container/cp.md b/content/zh/docs/Container/cp.md deleted file mode 100644 index ab5ef8860cbd4455ce09c7d47b30fe6d77d5272d..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/cp.md +++ /dev/null @@ -1,24 +0,0 @@ -# cp - -用法:docker cp \[OPTIONS\] CONTAINER:SRC\_PATH DEST\_PATH|- - -docker cp \[OPTIONS\] SRC\_PATH|- CONTAINER:DEST\_PATH - -功能:从指定的容器内的一个路径复制文件或文件夹到主机的指定路径中,或者把主机的文件或者文件夹拷贝到容器内。 - -注意:docker cp不支持容器内/proc,/sys,/dev,/tmp等虚拟文件系统以及用户在容器内自行挂载的文件系统内的文件拷贝。 - -选项: - --a, --archive 将拷贝到容器的文件属主设置为容器运行用户(--user) - --L, --follow-link 解析并跟踪文件的符号链接 - -示例: - -复制reigistry容器中/test目录到主机的/home/aaa目录中 - -``` -$ sudo docker cp registry:/test /home/aaa -``` - diff --git "a/content/zh/docs/Container/daemon-umask\351\205\215\347\275\256.md" "b/content/zh/docs/Container/daemon-umask\351\205\215\347\275\256.md" deleted file mode 100644 index 025fb20c13dbf59446875843fc61222dccef0244..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/daemon-umask\351\205\215\347\275\256.md" +++ /dev/null @@ -1,11 +0,0 @@ -# daemon umask配置 - -容器主进程和exec进程的默认umask为0022,为了满足安全性需求,避免容器受到攻击,修改runc的实现,将默认umask修改为0027。修改后others群组将无法访问新建文件或目录。 - -docker启动容器时的默认umask值为0027,可以在dockerd启动时,使用--exec-opt native.umask=normal参数将容器启动时的umask修改为0022。 - ->![](public_sys-resources/icon-notice.gif) **须知:** ->如果docker create/run也配置了native.umask参数,则以docker create/run中的配置为准。 - -详细的配置见[docker create](create.md#ZH-CN_TOPIC_0184808242)和[docker run](run.md#ZH-CN_TOPIC_0184808254)章节的参数说明。 - diff --git "a/content/zh/docs/Container/daemon\345\220\257\345\212\250\346\227\266\351\227\264.md" "b/content/zh/docs/Container/daemon\345\220\257\345\212\250\346\227\266\351\227\264.md" deleted file mode 100644 index 15819abada90943834bdb6bcede4036d57aec741..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/daemon\345\220\257\345\212\250\346\227\266\351\227\264.md" +++ /dev/null @@ -1,15 +0,0 @@ -# daemon启动时间 - -Docker服务由systemd管理,systemd对各个服务的启动时间有限制,如果指定时间内docker服务未能成功启动,则可能由以下原因导致: - -- 如果使用devicemapper且为第一次启动,docker daemon需要对该设备做文件系统初始化操作,而该操作会进行大量磁盘IO操作,在磁盘性能不佳或存在大量IO竞争时,很可能会导致docker daemon启动超时。devicemapper设备只需要初始化一次,后续docker daemon启动时不再需要重复初始化。 -- 如果当前系统资源占用太高,导致系统卡顿,系统所有的操作都会变慢,也可能会出现docker服务启动超时的情况。 -- daemon重启过程中,需要遍历并读取docker工作目录下每一个容器的配置文件、容器init层和可写层的配置,如果当前系统存在过多容器(包含created和exited的容器),并且磁盘读写性能受限,也会出现daemon遍历文件过久导致docker服务启动超时的情况。 - -   - -出现服务启动超时情况,建议对以下两种情况进行排查调整: - -- 容器编排层定期清理不需要的容器,尤其是exited的容器。 -- 结合解决方案的性能要求场景,调整编排层的清理周期和docker服务的启动时间。 - diff --git "a/content/zh/docs/Container/daemon\350\207\252\345\270\246\347\275\221\347\273\234\351\205\215\347\275\256.md" "b/content/zh/docs/Container/daemon\350\207\252\345\270\246\347\275\221\347\273\234\351\205\215\347\275\256.md" deleted file mode 100644 index 84559ad4db1fdf46b7dc265f0b8806925e09770f..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/daemon\350\207\252\345\270\246\347\275\221\347\273\234\351\205\215\347\275\256.md" +++ /dev/null @@ -1,6 +0,0 @@ -# daemon自带网络配置 - -- Docker daemon使用--bip参数指定docker0网桥的网段之后,如果在下一次重启的时候去掉--bip参数,docker0网桥会沿用上一次的--bip配置,即使重启之前已经删除docker0网桥。原因是docker会保存网络配置并在下一次重启的时候默认恢复上一次配置。 -- Docker network create 并发创建网络的时候,可以创建具有相同名字的两个网络。原因是docker network是通过id来区分的,name只是个便于识别的别名而已,不保证唯一性。 -- Docker在桥接bridge网络模式下,Docker容器是通过宿主机上的NAT模式,建立与宿主机之外世界的通信。Docker Daemon在启动一个容器时,每在宿主机上映射一个端口都会启动一个docker-proxy进程来实现访问代理。建议用户在使用这种userland-proxy时,只映射必须的端口,减少docker-proxy进行端口映射所消耗的资源。 - diff --git "a/content/zh/docs/Container/daemon\350\277\220\350\241\214\347\233\256\345\275\225\351\205\215\347\275\256.md" "b/content/zh/docs/Container/daemon\350\277\220\350\241\214\347\233\256\345\275\225\351\205\215\347\275\256.md" deleted file mode 100644 index e9994c55a9016b6bec6b76146c5a601d85e7557e..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/daemon\350\277\220\350\241\214\347\233\256\345\275\225\351\205\215\347\275\256.md" +++ /dev/null @@ -1,12 +0,0 @@ -# daemon运行目录配置 - -用户需要明白重新指定各种运行目录和文件(包括--graph、--exec-root等),可能会存在目录冲突,或文件属性变换,对应用的正常使用造成影响。 - ->![](public_sys-resources/icon-notice.gif) **须知:** ->用户指定的目录或文件应为docker专用,避免冲突导致的文件属性变化带来安全问题。 - -- 以--graph为例,当我们使用/new/path/作为daemon新的Root Dir时,如果/new/path/下已经存在文件,且目录或文件名与docker需要使用的目录或文件名冲突(例如: containers、hooks、tmp等目录)时,docker可能会更新原有目录或文件的属性,包括属主、权限等为自己的属主和权限。 - ->![](public_sys-resources/icon-notice.gif) **须知:** ->从docker-17.05开始,--graph参数被标记为Deprecated,用新的参数--data-root替代。 - diff --git a/content/zh/docs/Container/diff.md b/content/zh/docs/Container/diff.md deleted file mode 100644 index 601c746dff2693ba2584551bfc97a9ff4e2d67bc..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/diff.md +++ /dev/null @@ -1,19 +0,0 @@ -# diff - -用法:**docker diff CONTAINER** - -功能:检视容器的差异,相比于容器刚创建时做了哪些改变 - -选项:无 - -示例: - -``` -$ sudo docker diff registry -C /root -A /root/.bash_history -A /test -``` - -   - diff --git "a/content/zh/docs/Container/docker-engine\345\256\271\345\231\250\345\274\225\346\223\216\347\232\204\351\205\215\347\275\256.md" "b/content/zh/docs/Container/docker-engine\345\256\271\345\231\250\345\274\225\346\223\216\347\232\204\351\205\215\347\275\256.md" deleted file mode 100644 index 30981e1215a4e5f271028e551c82c2a9e1a246cf..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/docker-engine\345\256\271\345\231\250\345\274\225\346\223\216\347\232\204\351\205\215\347\275\256.md" +++ /dev/null @@ -1,34 +0,0 @@ -# docker-engine容器引擎的配置 - -为了让docker-engine容器引擎支持新的容器运行时kata-runtime,需要通过以下步骤对docker-engine容器引擎进行配置: - -1. 请保证环境上所有的软件包(docker-engine、kata-containers)都已经安装完毕。 -2. 停止docker-engine。 - - ``` - systemctl stop docker - ``` - -3. 修改docker-engine的配置文件/etc/docker/daemon.json,并新增如下配置: - - ``` - { - "runtimes": { - "kata-runtime": { - "path": "/usr/bin/kata-runtime", - "runtimeArgs": [ - "--kata-config", - "/usr/share/defaults/kata-containers/configuration.toml" - ] - } - } - } - ``` - -4. 重新启动docker-engine。 - - ``` - systemctl start docker - ``` - - diff --git "a/content/zh/docs/Container/docker\351\225\234\345\203\217\347\256\241\347\220\206.md" "b/content/zh/docs/Container/docker\351\225\234\345\203\217\347\256\241\347\220\206.md" deleted file mode 100644 index 962ea2a53d6ca9bfe5b82daf8053cfb3a2df1454..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/docker\351\225\234\345\203\217\347\256\241\347\220\206.md" +++ /dev/null @@ -1 +0,0 @@ -# docker镜像管理 diff --git "a/content/zh/docs/Container/embedded\351\225\234\345\203\217\347\256\241\347\220\206.md" "b/content/zh/docs/Container/embedded\351\225\234\345\203\217\347\256\241\347\220\206.md" deleted file mode 100644 index 058ed02322ca7a49156190859df96bea4dc7f628..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/embedded\351\225\234\345\203\217\347\256\241\347\220\206.md" +++ /dev/null @@ -1 +0,0 @@ -# embedded镜像管理 diff --git a/content/zh/docs/Container/exec-1.md b/content/zh/docs/Container/exec-1.md deleted file mode 100644 index 54855cbcf4897bddc95d6486b3cf5abab70153ba..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/exec-1.md +++ /dev/null @@ -1,73 +0,0 @@ -# Exec - -## 接口原型 - -``` -rpc Exec(ExecRequest) returns (ExecResponse) {} -``` - -## 接口描述 - -在容器中执行命令,采用的gRPC通讯方式从CRI服务端获取url,再通过获得的url与websocket服务端建立长连接,实现与容器的交互。 - -## 注意事项 - -执行执行一条单独的命令,也能打开终端与容器交互。stdin/stdout/stderr之一必须是真的。如果tty为真,stderr必须是假的。 不支持多路复用, 在这种情况下, stdout和stderr的输出将合并为单流。 - -## 参数 - - - - - - - - - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

string container_id

-

容器ID

-

repeated string cmd

-

待执行的命令

-

bool tty

-

是否在TTY中执行命令

-

bool stdin

-

是否流式标准输入

-

bool stdout

-

是否流式标准输出

-

bool stderr

-

是否流式输出标准错误

-
- -## 返回值 - - - - - - - - - -

返回值

-

描述

-

string url

-

exec流服务器的完全限定URL

-
- diff --git a/content/zh/docs/Container/export.md b/content/zh/docs/Container/export.md deleted file mode 100644 index 08af037393e439613dc5070efcab57219a5813cb..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/export.md +++ /dev/null @@ -1,20 +0,0 @@ -# export - -用法:**docker export CONTAINER** - -功能:将一个容器的文件系统内容以tar包导出到STDOUT - -选项:无 - -示例: - -将名为busybox的容器的内容导出到busybox.tar包中: - -``` -$ sudo docker export busybox > busybox.tar -$ ls -busybox.tar -``` - -   - diff --git a/content/zh/docs/Container/history.md b/content/zh/docs/Container/history.md deleted file mode 100644 index f77e342b37313724b8c4ed5808aafb46443a2418..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/history.md +++ /dev/null @@ -1,25 +0,0 @@ -# history - -用法:**docker history \[OPTIONS\] IMAGE** - -功能:显示一个image的变化历史 - -选项: - --H, --human=true - ---no-trunc=false 不对输出进行删减 - --q, --quiet=false 只显示ID - -示例: - -``` -$ sudo docker history busybox:test -IMAGE CREATED CREATED BY SIZE COMMENT -be4672959e8b 15 minutes ago bash 23B -21970dfada48 4 weeks ago 128MB Imported from - -``` - -   - diff --git "a/content/zh/docs/Container/iSula\345\256\271\345\231\250\345\274\225\346\223\216.md" "b/content/zh/docs/Container/iSula\345\256\271\345\231\250\345\274\225\346\223\216.md" index 0dd7ea15a487b06c72079787b2689c9226200350..51486cb5ee2f391e11455f67c81d9a47aede5d60 100644 --- "a/content/zh/docs/Container/iSula\345\256\271\345\231\250\345\274\225\346\223\216.md" +++ "b/content/zh/docs/Container/iSula\345\256\271\345\231\250\345\274\225\346\223\216.md" @@ -1 +1,11 @@ -# iSula容器引擎 +# iSula容器引擎 + +iSula通用容器引擎相比Docker,是一种新的容器解决方案,提供统一的架构设计来满足CT和IT领域的不同需求。相比Golang编写的Docker,轻量级容器使用C/C++实现,具有轻、灵、巧、快的特点,不受硬件规格和架构的限制,底噪开销更小,可应用领域更为广泛。 + +容器统一架构如[图1](#zh-cn_topic_0182207099_fig10763114141217)所示。 + +**图 1** 容器统一架构 + + +![](figures/zh-cn_image_0183048952.png) + diff --git "a/content/zh/docs/Container/iSula\345\256\271\345\231\250\345\274\225\346\223\216\347\232\204\351\205\215\347\275\256.md" "b/content/zh/docs/Container/iSula\345\256\271\345\231\250\345\274\225\346\223\216\347\232\204\351\205\215\347\275\256.md" deleted file mode 100644 index 03794b86c9bb1e9bafb49daab756fd15243b5699..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/iSula\345\256\271\345\231\250\345\274\225\346\223\216\347\232\204\351\205\215\347\275\256.md" +++ /dev/null @@ -1,34 +0,0 @@ -# iSula容器引擎的配置 - -与docker-engine容器引擎类似,为了让iSula容器引擎支持新的容器运行时kata-runtime,需要通过以下步骤对iSula容器引擎进行配置: - -1. 请保证环境上所有的软件包(iSulad、kata-containers)都已经安装完毕。 -2. 停止isulad。 - - ``` - systemctl stop isulad - ``` - -3. 修改iSula容器引擎的配置文件/etc/isulad/daemon.json,并新增如下配置: - - ``` - { - "runtimes": { - "kata-runtime": { - "path": "/usr/bin/kata-runtime", - "runtime-args": [ - "--kata-config", - "/usr/share/defaults/kata-containers/configuration.toml" - ] - } - } - } - ``` - -4. 重新启动isulad。 - - ``` - systemctl start isulad - ``` - - diff --git a/content/zh/docs/Container/images.md b/content/zh/docs/Container/images.md deleted file mode 100644 index 3209e26f5024a595158974e34a8c40354f32246f..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/images.md +++ /dev/null @@ -1,26 +0,0 @@ -# images - -用法:**docker images \[OPTIONS\] \[NAME\]** - -功能:列出存在的image,不加选项时不显示中间的image - -选项: - --a, --all=false 显示所有的镜像, - --f, --filter=\[\] 指定一个过滤值\(i.e. 'dangling=true'\) - ---no-trunc=false 不对输出进行删减 - --q, --quiet=false 只显示ID - -示例: - -``` -$ sudo docker images -REPOSITORY TAG IMAGE ID CREATED SIZE -busybox latest e02e811dd08f 2 years ago 1.09MB -``` - -   - diff --git a/content/zh/docs/Container/import.md b/content/zh/docs/Container/import.md deleted file mode 100644 index 67104ef5886b92e4758bd0bdabbb357e9219938e..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/import.md +++ /dev/null @@ -1,22 +0,0 @@ -# import - -用法:**docker import URL|- \[REPOSITORY\[:TAG\]\]** - -功能:把包含了一个rootfs的tar包导入为镜像。与docker export相对应。 - -选项:无 - -示例: - -从上文介绍的docker export命令时导出的busybox.tar用docker import命令生成一个新的image - -``` -$ sudo docker import busybox.tar busybox:test -sha256:a79d8ae1240388fd3f6c49697733c8bac4d87283920defc51fb0fe4469e30a4f -$ sudo docker images -REPOSITORY TAG IMAGE ID CREATED SIZE -busybox test a79d8ae12403 2 seconds ago 1.3MB -``` - -   - diff --git a/content/zh/docs/Container/info.md b/content/zh/docs/Container/info.md deleted file mode 100644 index d17248145d9aaaeb72f6d36d9e6c04cdd24f49dd..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/info.md +++ /dev/null @@ -1,39 +0,0 @@ -# info - -用法:**docker info** - -功能:显示docker系统级的相关信息,包括系统中的Container数量、Image数量、Image的存储驱动、容器的执行驱动、内核版本、主机操作系统版本等信息。 - -选项:无 - -示例: - -``` -$ sudo docker info -Containers: 4 - Running: 3 - Paused: 0 - Stopped: 1 -Images: 45 -Server Version: 18.09.0 -Storage Driver: devicemapper - Pool Name: docker-thinpool - Pool Blocksize: 524.3kB - Base Device Size: 10.74GB - Backing Filesystem: ext4 - Udev Sync Supported: true - Data Space Used: 11GB - Data Space Total: 51GB - Data Space Available: 39.99GB - Metadata Space Used: 5.083MB - Metadata Space Total: 532.7MB - Metadata Space Available: 527.6MB - Thin Pool Minimum Free Space: 5.1GB - Deferred Removal Enabled: true - Deferred Deletion Enabled: true - Deferred Deleted Device Count: 0 -...... -``` - -   - diff --git a/content/zh/docs/Container/inspect.md b/content/zh/docs/Container/inspect.md deleted file mode 100644 index dd7c2776c7ab132fe11d9e7bc15ddabba7edf03b..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/inspect.md +++ /dev/null @@ -1,54 +0,0 @@ -# inspect - -用法:**docker inspect \[OPTIONS\] CONTAINER|IMAGE \[CONTAINER|IMAGE...\]** - -功能:返回一个容器或者镜像的底层信息 - -选项: - --f, --format="" 按照给定的格式输出信息 - --s, --size 若查询类型为容器,显示该容器的总体文件大小 - ---type 返回指定类型的JSON格式 - --t, --time=120 超时时间的秒数,若在该时间内docker inspect未执行成功,则停止等待并立即报错。默认为120秒。 - -示例: - -1. 返回一个容器的信息 - - ``` - $ sudo docker inspect busybox_test - [ - { - "Id": "9fbb8649d5a8b6ae106bb0ac7686c40b3cbd67ec2fd1ab03e0c419a70d755577", - "Created": "2019-08-28T07:43:51.27745746Z", - "Path": "bash", - "Args": [], - "State": { - "Status": "running", - "Running": true, - "Paused": false, - "Restarting": false, - "OOMKilled": false, - "Dead": false, - "Pid": 64177, - "ExitCode": 0, - "Error": "", - "StartedAt": "2019-08-28T07:43:53.021226383Z", - "FinishedAt": "0001-01-01T00:00:00Z" - }, - ...... - ``` - -    - -2. 按照给定格式返回一个容器的指定信息,下面的例子返回busybox\_test容器IP地址 - - ``` - $ sudo docker inspect -f {{.NetworkSettings.IPAddress}} busybox_test - 172.17.0.91 - ``` - - diff --git a/content/zh/docs/Container/load.md b/content/zh/docs/Container/load.md deleted file mode 100644 index 35b4302ffb31682b4dc68667ff429d7056c8ae1c..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/load.md +++ /dev/null @@ -1,20 +0,0 @@ -# load - -用法:**docker load \[OPTIONS\]** - -功能:把docker save出来的tar包重新加载一个镜像。与docker save相对应。 - -选项: - --i, --input="" - -示例: - -``` -$ sudo docker load -i busybox.tar -Loaded image ID: sha256:e02e811dd08fd49e7f6032625495118e63f597eb150403d02e3238af1df240ba -$ sudo docker images -REPOSITORY TAG IMAGE ID CREATED SIZE -busybox latest e02e811dd08f 2 years ago 1.09MB -``` - diff --git a/content/zh/docs/Container/login.md b/content/zh/docs/Container/login.md deleted file mode 100644 index 1ec7b2537d97ae36563a3d2c1cad924e6fd1893b..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/login.md +++ /dev/null @@ -1,20 +0,0 @@ -# login - -用法:**docker login \[OPTIONS\] \[SERVER\]** - -功能:登录到一个镜像服务库,没有指定server时,默认登录到https://index.docker.io/v1/ - -选项: - --e, --email="" Email - --p, --password="" 密码 - --u, --username="" 用户名 - -示例: - -``` -$ sudo docker login -``` - diff --git a/content/zh/docs/Container/logout.md b/content/zh/docs/Container/logout.md deleted file mode 100644 index 80bf78d24026da1d6328028028507e0509020f0c..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/logout.md +++ /dev/null @@ -1,14 +0,0 @@ -# logout - -用法:**docker logout \[SERVER\]** - -功能:从一个镜像服务器中登出,没有指定server时,默认登出https://index.docker.io/v1/ - -选项:无 - -示例: - -``` -$ sudo docker logout -``` - diff --git a/content/zh/docs/Container/logs.md b/content/zh/docs/Container/logs.md deleted file mode 100644 index 51cdd2c41a1c56c05752d23de9cc44c334c5cf4e..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/logs.md +++ /dev/null @@ -1,48 +0,0 @@ -# logs - -用法:**docker logs \[OPTIONS\] CONTAINER** - -功能:抓取容器内的日志信息,容器可以使运行状态的也可以是停止状态的 - -选项: - --f, --follow=false 实时打印日志信息 - --t, --timestamps=false 显示日志的时间戳 - ---since 显示指定时间之后的日志 - ---tail="all" 设置显示的行数,默认显示所有 - -示例: - -1. 查看jaegertracing容器的日志信息,该容器上跑了一个jaegertracing服务 - - ``` - $ sudo docker logs jaegertracing - {"level":"info","ts":1566979103.3696961,"caller":"healthcheck/handler.go:99","msg":"Health Check server started","http-port":14269,"status":"unavailable"} - {"level":"info","ts":1566979103.3820567,"caller":"memory/factory.go:55","msg":"Memory storage configuration","configuration":{"MaxTraces":0}} - {"level":"info","ts":1566979103.390773,"caller":"tchannel/builder.go:94","msg":"Enabling service discovery","service":"jaeger-collector"} - {"level":"info","ts":1566979103.3908608,"caller":"peerlistmgr/peer_list_mgr.go:111","msg":"Registering active peer","peer":"127.0.0.1:14267"} - {"level":"info","ts":1566979103.3922884,"caller":"all-in-one/main.go:186","msg":"Starting agent"} - {"level":"info","ts":1566979103.4047635,"caller":"all-in-one/main.go:226","msg":"Starting jaeger-collector TChannel server","port":14267} - {"level":"info","ts":1566979103.404901,"caller":"all-in-one/main.go:236","msg":"Starting jaeger-collector HTTP server","http-port":14268} - {"level":"info","ts":1566979103.4577134,"caller":"all-in-one/main.go:256","msg":"Listening for Zipkin HTTP traffic","zipkin.http-port":9411} - ``` - -    - -2. 加上-f选项,实时打印jaegertracing容器的日志信息 - - ``` - $ sudo docker logs -f jaegertracing - {"level":"info","ts":1566979103.3696961,"caller":"healthcheck/handler.go:99","msg":"Health Check server started","http-port":14269,"status":"unavailable"} - {"level":"info","ts":1566979103.3820567,"caller":"memory/factory.go:55","msg":"Memory storage configuration","configuration":{"MaxTraces":0}} - {"level":"info","ts":1566979103.390773,"caller":"tchannel/builder.go:94","msg":"Enabling service discovery","service":"jaeger-collector"} - {"level":"info","ts":1566979103.3908608,"caller":"peerlistmgr/peer_list_mgr.go:111","msg":"Registering active peer","peer":"127.0.0.1:14267"} - {"level":"info","ts":1566979103.3922884,"caller":"all-in-one/main.go:186","msg":"Starting agent"} - ``` - -    - - diff --git "a/content/zh/docs/Container/namespace\345\214\226\345\206\205\346\240\270\345\217\202\346\225\260\345\217\257\345\206\231.md" "b/content/zh/docs/Container/namespace\345\214\226\345\206\205\346\240\270\345\217\202\346\225\260\345\217\257\345\206\231.md" index 12143c332edde681d3dd13191b71d575d9956f15..ab34a713fb0b997cc055fbade3220571e13ffcca 100644 --- "a/content/zh/docs/Container/namespace\345\214\226\345\206\205\346\240\270\345\217\202\346\225\260\345\217\257\345\206\231.md" +++ "b/content/zh/docs/Container/namespace\345\214\226\345\206\205\346\240\270\345\217\202\346\225\260\345\217\257\345\206\231.md" @@ -1,6 +1,6 @@ -# namespace化内核参数可写 +# namespace化内核参数可写 -## 功能描述 +## 功能描述 对于运行在容器内的业务,如数据库,大数据,包括普通应用,有对部分内核参数进行设置和调整的需求,以满足最佳的业务运行性能和可靠性。内核参数要么不允许修改,要么全部允许修改(特权容器): @@ -12,7 +12,7 @@ 系统容器提供--ns-change-opt参数,可以指定namespace化的内核参数在容器内动态设置,当前仅支持net、ipc。 -## 参数说明 +## 参数说明

命令

@@ -48,11 +48,11 @@
-## 约束限制 +## 约束限制 - 如果容器启动同时指定了--privileged(特权容器)和--ns-change-opt,则--ns-change-opt不生效。 -## 使用示例 +## 使用示例 启动容器, 指定--ns-change-opt=net: diff --git a/content/zh/docs/Container/pause-unpause.md b/content/zh/docs/Container/pause-unpause.md deleted file mode 100644 index 9550bae91eb4734d778a91d40957c1ab475df602..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/pause-unpause.md +++ /dev/null @@ -1,47 +0,0 @@ -# pause/unpause - -用法:**docker pause CONTAINER** - -**docker unpause CONTAINER** - -功能:这两个命令是配对使用的,docker pause暂停容器内的所有进程,docker unpause恢复暂停的进程 - -选项:无 - -示例: - -本示例将演示一个跑了docker registry(docker镜像服务)服务的容器,当使用docker pause 命令暂停这个容器的进程后,使用curl命令访问该registry服务将阻塞,使用docker unpause命令将恢复registry服务,可以用curl命令访问。 - -1. 启动一个registry容器 - - ``` - $ sudo docker run -d --name pause_test -p 5000:5000 registry - ``` - - 此时可以用curl命令访问这个服务,请求状态码会返回200 OK。 - - ``` - $ sudo curl -v 127.0.0.1:5000 - ``` - -    - -2. 暂停这个容器内的进程 - - ``` - $ sudo docker pause pause_test - ``` - - 此时用curl命令访问这个服务将阻塞,等待服务开启。 - -3. 恢复运行这个容器内的进程 - - ``` - $ sudo docker unpause pause_test - ``` - - 此时步骤2中的curl访问将恢复运行,请求状态码返回200 OK。 - -    - - diff --git a/content/zh/docs/Container/port.md b/content/zh/docs/Container/port.md deleted file mode 100644 index e8a9f2d32960b4319ee8ccb5426cef01655abeed..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/port.md +++ /dev/null @@ -1,25 +0,0 @@ -# port - -用法:**docker port CONTAINER \[PRIVATE\_PORT\[/PROTO\]\]** - -功能:列出容器的端口映射,或者查找指定端口在主机的哪个端口 - -选项:无 - -示例: - -1. 列出容器所有的端口映射 - - ``` - $ sudo docker port registry - 5000/tcp -> 0.0.0.0.:5000 - ``` - -2. 查找容器指定端口的映射 - - ``` - $ sudo docker port registry 5000 - 0.0.0.0.:5000 - ``` - - diff --git "a/content/zh/docs/Container/proc\346\226\207\344\273\266\347\263\273\347\273\237\351\232\224\347\246\273\357\274\210lxcfs\357\274\211.md" "b/content/zh/docs/Container/proc\346\226\207\344\273\266\347\263\273\347\273\237\351\232\224\347\246\273\357\274\210lxcfs\357\274\211.md" deleted file mode 100644 index 4a63d21cfe7c98c75b5cffb8774e7a2dd403c5de..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/proc\346\226\207\344\273\266\347\263\273\347\273\237\351\232\224\347\246\273\357\274\210lxcfs\357\274\211.md" +++ /dev/null @@ -1,134 +0,0 @@ -# proc文件系统隔离(lxcfs) - -## 场景描述 - -容器虚拟化带来轻量高效,快速部署的同时,也因其隔离性不够彻底,给用户带来一定程度的使用不便。由于Linux内核namespace本身还不够完善,因此容器在隔离性方面也存在一些缺陷。例如,在容器内部proc文件系统中可以看到宿主机上的proc信息(如meminfo, cpuinfo,stat, uptime等)。利用lxcfs工具可以将容器内的看到宿主机/proc文件系统的内容,替换成本容器实例的相关/proc内容,以便容器内业务获取正确的资源数值。 - -## 接口说明 - -系统容器对外提供两个工具包:一个是lxcfs软件,另外一个是配合lxcfs一起使用的lxcfs-toolkit工具。其中lxcfs作为宿主机daemon进程常驻,lxcfs-toolkit通过hook机制将宿主机的lxcfs文件系统绑定挂载到容器。 - -lxcfs-toolkit命令行格式如下: - -``` -lxcfs-toolkit [OPTIONS] COMMAND [COMMAND_OPTIONS] -``` - - - - - - - - - - - - - - - - - - - - - - - - -

命令

-

功能说明

-

参数

-

remount

-

将lxcfs重新mount到容器中

-

--all:对所有的容器执行remout lxcfs操作

-

--container-id:remount lxcfs到特定的容器ID

-

umount

-

将lxcfs从容器中umount掉

-

--all:对所有的容器执行umout lxcfs操作

-

--container-id:对特定容器执行umount lxcfs操作

-

check-lxcfs

-

检查lxcfs服务是否运行

-

-

prestart

-

在lxcfs服务启动前将/var/lib/lxcfs目录mount到容器中

-

-
- -## 约束限制 - -- 当前只支持proc文件系统下的cpuinfo, meminfo, stat, diskstats, partitions,swaps和uptime文件,其他的文件和其他内核API文件系统(比如sysfs)未做隔离 。 -- 安装rpm包后会在/var/lib/isulad/hooks/hookspec.json生成样例json文件,用户如果需要增加日志功能,需要在定制时加入--log配置。 -- diskstats只能显示支持cfq调度的磁盘信息,无法显示分区信息。容器内设备会被显示为/dev目录下的名字。若不存在则为空。此外,容器根目录所在设备会被显示为sda。 -- 挂载lxcfs时必须使用slave参数。若使用shared参数,可能会导致容器内挂载点泄露到主机,影响主机运行 。 -- lxcfs支持服务优雅降级使用,若lxcfs服务crash或者不可用,容器内查看到的cpuinfo, meminfo, stat, diskstats, partitions, swaps和uptime均为host信息,容器其它业务功能不受影响。 -- lxcfs底层依赖fuse内核模块以及libfuse库,因此需要内核支持fuse。 -- lxcfs当前仅支持容器内运行64位的app,如果容器内运行32位的app可能会导致app读取到的cpuinfo信息不符合预期。 -- lxcfs只是对容器cgroup进行资源视图模拟,对于容器内的系统调用(例如sysconf)获取到的仍然是主机的信息,lxcfs无法做到内核隔离。 -- lxcfs使用隔离后的cpuinfo显示的cpu信息具有如下特征: - - processor:从0开始依次递增。 - - physical id:从0开始依次递增。 - - sibliing:固定为1。 - - core id:固定为0。 - - cpu cores:固定为1。 - - -## 使用示例 - -1. 首先需要安装lxcfs和lxcfs-toolkit这两个包,并启动lxcfs服务。 - - ``` - [root@localhost ~]# yum install lxcfs lxcfs-toolkit - [root@localhost ~]# systemctl start lxcfs - ``` - -2. 容器启动完成之后查看容器内是否存在lxcfs挂载点。 - - ``` - [root@localhost ~]# isula run -tid -v /var/lib/lxc:/var/lib/lxc --hook-spec /var/lib/isulad/hooks/hookspec.json --system-container --external-rootfs /home/root-fs none init - a8acea9fea1337d9fd8270f41c1a3de5bceb77966e03751346576716eefa9782 - [root@localhost ~]# isula exec a8 mount | grep lxcfs - lxcfs on /var/lib/lxc/lxcfs type fuse.lxcfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other) - lxcfs on /proc/cpuinfo type fuse.lxcfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other) - lxcfs on /proc/diskstats type fuse.lxcfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other) - lxcfs on /proc/meminfo type fuse.lxcfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other) - lxcfs on /proc/partitions type fuse.lxcfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other) - lxcfs on /proc/stat type fuse.lxcfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other) - lxcfs on /proc/swaps type fuse.lxcfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other) - lxcfs on /proc/uptime type fuse.lxcfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other) - ``` - -3. 执行update命令更新容器的cpu和mem资源配置,然后查看容器资源。根据如下回显可知,容器资源视图显示的是容器真实资源数据而不是宿主机的数据。 - - ``` - [root@localhost ~]# isula update --cpuset-cpus 0-1 --memory 1G a8 - a8 - [root@localhost ~]# isula exec a8 cat /proc/cpuinfo - processor : 0 - BogoMIPS : 100.00 - cpu MHz : 2400.000 - Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid - CPU implementer : 0x41 - CPU architecture: 8 - CPU variant : 0x0 - CPU part : 0xd08 - CPU revision : 2 - - processor : 1 - BogoMIPS : 100.00 - cpu MHz : 2400.000 - Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid - CPU implementer : 0x41 - CPU architecture: 8 - CPU variant : 0x0 - CPU part : 0xd08 - CPU revision : 2 - - [root@localhost ~]# isula exec a8 free -m - total used free shared buff/cache available - Mem: 1024 17 997 7 8 1006 - Swap: 4095 0 4095 - ``` - - diff --git a/content/zh/docs/Container/ps.md b/content/zh/docs/Container/ps.md deleted file mode 100644 index 0a1f71bf9109937d8448b246b9261475df977c9f..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/ps.md +++ /dev/null @@ -1,37 +0,0 @@ -# ps - -用法:**docker ps \[OPTIONS\]** - -功能:根据不同的选项列出不同状态的容器,在不加任何选项的情况下,将列出正在运行的容器 - -选项: - --a, --all=false 显示所用的容器 - --f, --filter=\[\] 筛选值,可用的筛选值有:exited=容器的退出码status=\(restarting|running|paused|exited\)容器的状态码(e.g. -f status=running,列出正在运行的容器) - --l, --latest=false 列出最近创建的一个容器 - --n=-1 列出最近n此创建的容器 - ---no-trunc=false 将64位的容器ID全部显示出来,默认显示12位容器的ID - --q, --quiet=false 显示容器的ID - --s, --size=false 显示容器的大小 - -示例: - -1. 列出正在运行的容器 - - ``` - $ sudo docker ps - ``` - -2. 列出所有的容器 - - ``` - $ sudo docker ps -a - ``` - - diff --git a/content/zh/docs/Container/pull.md b/content/zh/docs/Container/pull.md deleted file mode 100644 index d1df4a8b32a518d9dcca42da4f1af67effd6e582..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/pull.md +++ /dev/null @@ -1,36 +0,0 @@ -# pull - -用法:**docker pull \[OPTIONS\] NAME\[:TAG\]** - -功能:从一个镜像库(官方的或私有的)中拉取一个镜像 - -选项: - --a, --all-tags=false 下载一个镜像仓库的所有镜像(一个镜像仓库可以被打多个标签,比如一个busybox镜像库,可能有多个标签如busybox:14.04,busybox:13.10,busybox:latest等,使用-a选项后,将所有标签的busybox镜像拉取下来) - -示例: - -1. 从官方镜像库中拉取nginx镜像 - - ``` - $ sudo docker pull nginx - Using default tag: latest - latest: Pulling from official/nginx - 94ed0c431eb5: Pull complete - 9406c100a1c3: Pull complete - aa74daafd50c: Pull complete - Digest: sha256:788fa27763db6d69ad3444e8ba72f947df9e7e163bad7c1f5614f8fd27a311c3 - Status: Downloaded newer image for nginx:latest - ``` - - 拉取镜像时会检测所依赖的层是否存在,如果存在就用本地的层。 - -2. 从私有镜像库中拉取镜像 - - 从私有镜像库中拉取Fedora镜像,比如所使用的私有镜像库的地址是192.168.1.110:5000: - - ``` - $ sudo docker pull 192.168.1.110:5000/fedora - ``` - - diff --git a/content/zh/docs/Container/push.md b/content/zh/docs/Container/push.md deleted file mode 100644 index d68f02b91ebb1b9641a2991c7a25a269743e717b..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/push.md +++ /dev/null @@ -1,26 +0,0 @@ -# push - -用法:**docker push NAME\[:TAG\]** - -功能:将一个image推送到镜像库中 - -选项:无 - -示例: - -1. 将一个image推送到私有镜像库192.168.1.110:5000中 -2. 将要推送的镜像打标签(docker tag命令将在下文介绍),本例中要推送的镜像为busybox:sshd - - ``` - $ sudo docker tag ubuntu:sshd 192.168.1.110:5000/busybox:sshd - ``` - -3. 将打好标签的镜像推送到私有镜像库中 - - ``` - $ sudo docker push 192.168.1.110:5000/busybox:sshd - ``` - - 推送的时候会自动检测所依赖的层在镜像库中是否已存在,如果以存在,跳过该层。 - - diff --git a/content/zh/docs/Container/rename.md b/content/zh/docs/Container/rename.md deleted file mode 100644 index 2382acb22f61b6b7cc9619de127d4bfd1b040dec..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/rename.md +++ /dev/null @@ -1,22 +0,0 @@ -# rename - -用法:**docker rename OLD\_NAME NEW\_NAME** - -功能:重命名容器 - -示例: - -示例中,用docker run创建并启动一个容器,使用docker rename对容器重命名,并查看容器名是否改变。 - -``` -$ sudo docker ps -CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES -b15976967abb busybox:latest "bash" 3 seconds ago Up 2 seconds festive_morse -$ sudo docker rename pedantic_euler new_name -$ sudo docker ps -CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES -b15976967abb busybox:latest "bash" 34 seconds ago Up 33 seconds new_name -``` - -   - diff --git a/content/zh/docs/Container/restart.md b/content/zh/docs/Container/restart.md deleted file mode 100644 index 3f523956ac56de0e1a753b42e6f5c12bbce43c58..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/restart.md +++ /dev/null @@ -1,19 +0,0 @@ -# restart - -用法:**docker restart \[OPTIONS\] CONTAINER \[CONTAINER...\]** - -功能:重启一个运行中的容器 - -选项: - --t, --time=10 在杀掉容器之前等待容器停止的秒数,如果容器已停止,就重启。默认为10秒。 - -示例: - -``` -$ sudo docker restart busybox -``` - ->![](public_sys-resources/icon-note.gif) **说明:** ->容器在restart过程中,如果容器内存在D状态或Z状态的进程,可能会导致容器重启失败,这需要进一步分析导致容器内进程D状态或Z状态的原因,待容器内进程D状态或Z状态解除后,再进行容器restart操作。 - diff --git a/content/zh/docs/Container/rm.md b/content/zh/docs/Container/rm.md deleted file mode 100644 index 0d54222427bea546846bf0db22c47efd6e7ff38d..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/rm.md +++ /dev/null @@ -1,29 +0,0 @@ -# rm - -用法:**docker rm \[OPTIONS\] CONTAINER \[CONTAINER...\]** - -功能:删除一个或多个容器 - -选项: - --f, --force=false 强制删除运行中的容器 - --l, --link=false Remove the specified link and not the underlying container - --v, --volumes=false Remove the volumes associated with the container - -示例: - -1. 删除一个停止运行的容器 - - ``` - $ sudo docker rm test - ``` - -2. 删除一个正在运行的容器 - - ``` - $ sudo docker rm -f rm_test - ``` - - diff --git a/content/zh/docs/Container/rmi.md b/content/zh/docs/Container/rmi.md deleted file mode 100644 index 6fc24244f1fe87c3beb02cb2cb24dcc76e3fad81..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/rmi.md +++ /dev/null @@ -1,18 +0,0 @@ -# rmi - -用法:**docker rmi \[OPTIONS\] IMAGE \[IMAGE...\]** - -功能:删除一个或多个镜像,如果一个镜像在镜像库中有多个标签,删除镜像的时候只是进行untag操作,当删除的是只有一个标签的镜像时,将依次删除所依赖的层。 - -选项: - --f, --force=false 强制删除image - ---no-prune=false 不删除没有标签的父镜像 - -示例: - -``` -$ sudo docker rmi 192.168.1.110:5000/busybox:sshd -``` - diff --git a/content/zh/docs/Container/run.md b/content/zh/docs/Container/run.md deleted file mode 100644 index e6a635f11d430288bbc80420419b7eed7b7ee174..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/run.md +++ /dev/null @@ -1,22 +0,0 @@ -# run - -用法:**docker run \[OPTIONS\] IMAGE \[COMMAND\] \[ARG...\]** - -功能:该命令将由指定的image(如果指定的IMAGE不存在,则从官方镜像库中下载一个镜像)创建一个容器,并启动这个容器,并在容器中执行指定的命令。该命令集成了docker create命令、docker start命令、docker exec命令。 - -选项:(该命令的选项与docker create命令的选项一样,请参考docker create命令选项,仅仅多了以下两个选项) - ---rm=false 设置容器退出时自动删除容器 - --v 挂载本地目录或匿名卷到容器内。注意:当将本地目录以带有selinux的安全标签的方式挂载到容器内的同时,尽量不要同时做该本地目录的增删操作,否则该安全标签可能不生效 - ---sig-proxy=true 发往进程信号的代理,SIGCHLD, SIGSTOP, SIGKILL不使用代理 - -示例: - -使用busybox镜像运行一个容器,在容器启动后执行/bin/sh - -``` -$ sudo docker run -ti busybox /bin/sh -``` - diff --git a/content/zh/docs/Container/save.md b/content/zh/docs/Container/save.md deleted file mode 100644 index f4a4f4d0ee5cb7e571e01ae9b56c6a8d23904cf4..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/save.md +++ /dev/null @@ -1,18 +0,0 @@ -# save - -用法:**docker save \[OPTIONS\] IMAGE \[IMAGE...\]** - -功能:保存一个image到一个tar包,输出默认是到STDOUT - -选项: - --o, --output="" 输出到文件中而不是STDOUT - -示例: - -``` -$ sudo docker save -o nginx.tar nginx:latest -$ ls -nginx.tar -``` - diff --git a/content/zh/docs/Container/search.md b/content/zh/docs/Container/search.md deleted file mode 100644 index 0428d224c409c504205691219b62861b76c76f29..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/search.md +++ /dev/null @@ -1,38 +0,0 @@ -# search - -用法:**docker search \[OPTIONS\] TERM** - -功能:在镜像库中查找特定的镜像 - -选项: - ---automated=false 显示自动构建的image - ---no-trunc=false 不对输出进行删减 - --s, --stars=0 只显示特定星级以上的image - -示例: - -1. 在官方镜像库中搜寻nginx - - ``` - $ sudo docker search nginx - NAME DESCRIPTION STARS OFFICIAL AUTOMATED - nginx Official build of Nginx. 11873 [OK] - jwilder/nginx-proxy Automated Nginx reverse proxy for docker con… 1645 [OK] - richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of… 739 [OK] - linuxserver/nginx An Nginx container, brought to you by LinuxS… 74 - bitnami/nginx Bitnami nginx Docker Image 70 [OK] - tiangolo/nginx-rtmp Docker image with Nginx using the nginx-rtmp… 51 [OK] - ``` - -    - -2. 在私有镜像库中搜寻busybox,在私有镜像库中搜寻时要加上私有镜像库的地址 - - ``` - $ sudo docker search 192.168.1.110:5000/busybox - ``` - - diff --git "a/content/zh/docs/Container/seccomp\345\256\211\345\205\250\351\205\215\347\275\256\345\234\272\346\231\257.md" "b/content/zh/docs/Container/seccomp\345\256\211\345\205\250\351\205\215\347\275\256\345\234\272\346\231\257.md" deleted file mode 100644 index a9880f179bf22300e3e070291efd5936b8bfb009..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/seccomp\345\256\211\345\205\250\351\205\215\347\275\256\345\234\272\346\231\257.md" +++ /dev/null @@ -1,2 +0,0 @@ -# seccomp安全配置场景 - diff --git a/content/zh/docs/Container/start.md b/content/zh/docs/Container/start.md deleted file mode 100644 index fbf3e4035461c96c66fe3dfa0184ca97b4267e66..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/start.md +++ /dev/null @@ -1,22 +0,0 @@ -# start - -用法:**docker start \[OPTIONS\] CONTAINER \[CONTAINER...\]** - -功能:启动一个或多个未运行容器 - -选项: - --a, --attach=false 容器的标准输出和错误输出附加到host的STDOUT和STDERR上 - --i, --interactive=false 容器的标准输入附加到host的STDIN上 - -实例: - -启动一个名为busybox的容器,添加-i -a选项附加标准输入输出,容器启动后直接进入容器内部,输入exit可以退出容器。 - -如果启动容器时不加-i -a选项,容器将在后台启动。 - -``` -$ sudo docker start -i -a busybox -``` - diff --git a/content/zh/docs/Container/stats.md b/content/zh/docs/Container/stats.md deleted file mode 100644 index b9682e4a68c3078e97aaf10736f5d42e731151e3..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/stats.md +++ /dev/null @@ -1,26 +0,0 @@ -# stats - -用法:**docker stats \[OPTIONS\] \[CONTAINER...\]** - -功能:持续监控并显示指定容器(若不指定,则默认全部容器)的资源占用情况 - -选项: - --a, --all 显示所有容器(默认仅显示运行状态的容器) - ---no-stream 只显示第一次的结果,不持续监控 - -示例: - -示例中,用docker run创建并启动一个容器,docker stats将输出容器的资源占用情况。 - -``` -$ sudo docker stats -CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS -2e242bcdd682 jaeger 0.00% 77.08MiB / 125.8GiB 0.06% 42B / 1.23kB 97.9MB / 0B 38 -02a06be42b2c relaxed_chandrasekhar 0.01% 8.609MiB / 125.8GiB 0.01% 0B / 0B 0B / 0B 10 -deb9e49fdef1 hardcore_montalcini 0.01% 12.79MiB / 125.8GiB 0.01% 0B / 0B 0B / 0B 9 -``` - -   - diff --git a/content/zh/docs/Container/stop.md b/content/zh/docs/Container/stop.md deleted file mode 100644 index d3f2fa65342176311fa881102678fd5fd0ef7c1d..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/stop.md +++ /dev/null @@ -1,16 +0,0 @@ -# stop - -用法:**docker stop \[OPTIONS\] CONTAINER \[CONTAINER...\]** - -功能:通过向容器发送一个SIGTERM信号并在一定的时间后发送一个SIGKILL信号停止容器 - -选项: - --t, --time=10 在杀掉容器之前等待容器退出的秒数,默认为10S - -示例: - -``` -$ sudo docker stop -t=15 busybox -``` - diff --git a/content/zh/docs/Container/tag.md b/content/zh/docs/Container/tag.md deleted file mode 100644 index 285e03f1b71f5b9cd365481f7abc0889b6dfe72d..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/tag.md +++ /dev/null @@ -1,16 +0,0 @@ -# tag - -用法:**docker tag \[OPTIONS\] IMAGE\[:TAG\] \[REGISTRYHOST/\]\[USERNAME/\]NAME\[:TAG\]** - -功能:将一个镜像打标签到一个库中 - -选项: - --f, --force=false 如果存在相同的tag名将强制替换原来的image - -示例: - -``` -$ sudo docker tag busybox:latest busybox:test -``` - diff --git a/content/zh/docs/Container/top.md b/content/zh/docs/Container/top.md deleted file mode 100644 index 7fb49072946ea8ca7b7a4f8076b83269fc18532d..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/top.md +++ /dev/null @@ -1,20 +0,0 @@ -# top - -用法:**docker top CONTAINER \[ps OPTIONS\]** - -功能:显示一个容器内运行的进程 - -选项:无 - -示例: - -先运行了一个名为top\_test的容器,并在其中执行了top指令 - -``` -$ sudo docker top top_test -UID PID PPID C STIME TTY TIME CMD -root 70045 70028 0 15:52 pts/0 00:00:00 bash -``` - -显示的PID是容器内的进程在主机中的PID号。 - diff --git a/content/zh/docs/Container/update.md b/content/zh/docs/Container/update.md deleted file mode 100644 index 79569c50d1c51141ad755a9c19d0d35491049311..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/update.md +++ /dev/null @@ -1,95 +0,0 @@ -# update - -用法:**docker update \[OPTIONS\] CONTAINER \[CONTAINER...\]** - -功能:热变更一个或多个容器配置。 - -选项: - -**表 1** 参数说明 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

参数

-

参数含义

-

--accel=[]

-

设置容器加速器,可设置一个或多个

-

--blkio-weight

-

设置容器blockio的相对权重,从10到1000

-

--cpu-shares

-

设置容器获得主机CPU的相对权重,通过设置这个选项获得更高的优先级,默认所有的容器都是获得相同的CPU优先权。

-

--cpu-period

-

设置CFS(完全公平调度策略)进程的CPU周期。

-

默认值为100ms;一般--cpu-period参数和--cpu-quota是配合使用的,比如--cpu-period=50000 --cpu-quota=25000,意味着如果有1个CPU,该容器可以每50ms获取到50%的CPU。

-

--cpu-quota

-

设置CFS(完全公平调度策略)进程的CPU配额,默认为0,即没有限制

-

--cpuset-cpus

-

设置容器中进程允许运行的CPU (0-3, 0,1)。默认没有限制

-

--cpuset-mems

-

设置容器中进程运行运行的内存内存节点 (0-3, 0,1),只对NUMA系统起作用

-

--kernel-memory=""

-

设置容器的kernerl内存限制,格式<number><optional unit>, 其中 unit = b, k, m or g

-

-m, --memory=""

-

设置容器的内存限制,格式<number><optional unit>, 其中 unit = b, k, m or g。该参数最小值为4m。

-

--memory-reservation

-

设置容器内存限制,默认与--memory一致。可认为--memory是硬限制,--memory-reservation是软限制;当使用内存超过预设值时,会动态调整(系统回收内存时尝试将使用内存降低到预设值以下),但不确保一定不超过预设值。一般可以和--memory一起使用,数值小于--memory的预设值。

-

--memory-swap

-

设置普通内存和交换分区的使用总量,-1为不做限制。如果不设置,则为--memory值的2倍,即SWAP可再使用与--memory相同的内存量。

-

--restart=""

-

设置容器退出时候的重启规则,当前1.3.1版本支持3个规则:

-
  • no:当容器停止时,不重启。
  • on-failure:当容器退出码为非0时重启容器,这个规则可以附加最大重启次数,如on-failure:5,最多重启5次。
  • always:无论退出码是什么都退出。
-

--help

-

打印help信息

-
- -示例: - -变更一个容器名为busybox的cpu和mem配置,包括容器获得主机CPU的相对权重值为512,容器中进程允许运行的CPU核心为0,1,2,3,容器运行内存限制为512m。 - -``` -$ sudo docker update --cpu-shares 512 --cpuset-cpus=0,3 --memory 512m ubuntu -``` - diff --git "a/content/zh/docs/Container/user-namespace\345\244\232\345\257\271\345\244\232.md" "b/content/zh/docs/Container/user-namespace\345\244\232\345\257\271\345\244\232.md" deleted file mode 100644 index 4aa50f7699bcb8ed72a4522b4f04cf903f9f4edc..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/user-namespace\345\244\232\345\257\271\345\244\232.md" +++ /dev/null @@ -1,78 +0,0 @@ -# user namespace多对多 - -## 功能描述 - -user namespace是将容器的root映射到主机的普通用户,使得容器中的进程和用户在容器里有特权,但是在主机上就是普通权限,防止容器中的进程逃逸到主机上,进行非法操作。更进一步,使用user namespace技术后,容器和主机使用不同的uid和gid,保证容器内部的用户资源和主机资源进行隔离,例如文件描述符等。 - -系统容器支持通过--user-remap接口参数将不同容器的user namespace映射到宿主机不同的user namespace,实现容器user namespace隔离。 - -## 参数说明 - - - - - - - - - - - - -

命令

-

参数

-

参数指定值说明

-

isula create/run

-

--user-remap

-

参数格式为<uid>:<gid>:<offset>,参数说明如下:

-
  • uid、gid为整数型,且必须大于等于0。
  • offset为整数型,且必须大于0,并且小于65536。取值不能太小,否则容器无法启动。
  • uid加上offset的值必须小于等于232-1,gid加上offset的值必须小于等于232-1,否则容器启动会报错。
-
- -## 约束限制 - -- 如果系统容器指定了--user-remap,那么rootfs目录必须能够被--user-remap指定的uid/gid用户所访问,否则会导致容器user namespace无法访问rootfs,容器启动失败。 -- 容器内所有的id都应该能映射到主机rootfs,某些目录/文件可能是从主机mount到容器,比如/dev/pts目录下面的设备文件,如果offset值太小可能会导致mount失败。 -- uid、gid和offset的值由上层调度平台控制,容器引擎只做合法性检查。 -- --user-remap只适用于系统容器。 -- --user-remap和--privileged不能共存,否则容器启动会报错。 -- 如果uid或gid指定为0,则--user-remap参数不生效。 - -## 使用指导 - ->![](public_sys-resources/icon-note.gif) **说明:** ->指定--user-remap参数前,请先将rootfs下所有目录和文件的uid和gid做整体偏移,偏移量为--user-remap指定uid和gid的偏移量。 ->例如将dev目录的uid和gid整体uid和gid偏移100000的参考命令为: ->chown 100000:100000 dev - -系统容器启动指定--user-remap参数: - -``` -[root@localhost ~]# isula run -tid --user-remap 100000:100000:65535 --system-container --external-rootfs /home/root-fs none /sbin/init -eb9605b3b56dfae9e0b696a729d5e1805af900af6ce24428fde63f3b0a443f4a -``` - -分别在宿主机和容器内查看/sbin/init进程信息: - -``` -[root@localhost ~]# isula exec eb ps aux | grep /sbin/init -root 1 0.6 0.0 21624 9624 ? Ss 15:47 0:00 /sbin/init -[root@localhost ~]# ps aux | grep /sbin/init -100000 4861 0.5 0.0 21624 9624 ? Ss 15:47 0:00 /sbin/init -root 4948 0.0 0.0 213032 808 pts/0 S+ 15:48 0:00 grep --color=auto /sbin/init -``` - -可以看到/sbin/init进程在容器内的owner是root用户,但是在宿主机的owner是uid=100000这个用户。 - -在容器内创建一个文件,然后在宿主机上查看文件的owner: - -``` -[root@localhost ~]# isula exec -it eb bash -[root@localhost /]# echo test123 >> /test123 -[root@localhost /]# exit -exit -[root@localhost ~]# ll /home/root-fs/test123 --rw-------. 1 100000 100000 8 Aug 2 15:52 /home/root-fs/test123 -``` - -可以看到,在容器内生成了一个文件,它的owner是root,但是在宿主机上看到的owner是id=100000这个用户。 - diff --git a/content/zh/docs/Container/version.md b/content/zh/docs/Container/version.md deleted file mode 100644 index d6499380f876b3808146a9e3db34c39e42344596..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/version.md +++ /dev/null @@ -1,36 +0,0 @@ -# version - -用法:**docker version** - -功能:显示docker的版本信息,包括Client版本、Server版本、Go版本、OS/Arch等信息 - -选项:无 - -示例: - -``` -$ sudo docker version -Client: - Version: 18.09.0 - EulerVersion: 18.09.0.48 - API version: 1.39 - Go version: go1.11 - Git commit: cbf6283 - Built: Mon Apr 1 00:00:00 2019 - OS/Arch: linux/arm64 - Experimental: false - -Server: - Engine: - Version: 18.09.0 - EulerVersion: 18.09.0.48 - API version: 1.39 (minimum version 1.12) - Go version: go1.11 - Git commit: cbf6283 - Built: Mon Apr 1 00:00:00 2019 - OS/Arch: linux/arm64 - Experimental: false -``` - -   - diff --git a/content/zh/docs/Container/wait.md b/content/zh/docs/Container/wait.md deleted file mode 100644 index e0721d1285b40d46cb75bcde8f68f99609011907..0000000000000000000000000000000000000000 --- a/content/zh/docs/Container/wait.md +++ /dev/null @@ -1,25 +0,0 @@ -# wait - -用法:**docker wait CONTAINER \[CONTAINER...\]** - -功能:等待一个容器停止,并打印出容器的退出码 - -选项:无 - -示例: - -先开启一个名为busybox的容器 - -``` -$ sudo docker start -i -a busybox -``` - -执行docker wait - -``` -$ sudo docker wait busybox -0 -``` - -将阻塞等待busybox容器的退出,退出busybox容器后将看到打印退出码“0”。 - diff --git "a/content/zh/docs/Container/\344\270\272\345\256\211\345\205\250\345\256\271\345\231\250\351\205\215\347\275\256\347\275\221\347\273\234.md" "b/content/zh/docs/Container/\344\270\272\345\256\211\345\205\250\345\256\271\345\231\250\351\205\215\347\275\256\347\275\221\347\273\234.md" index 373fca5d1588c7453a4dca54fe73895426e7fe39..e6b1cc316d0cb8ee4a113f020bc45630a3bf9c65 100644 --- "a/content/zh/docs/Container/\344\270\272\345\256\211\345\205\250\345\256\271\345\231\250\351\205\215\347\275\256\347\275\221\347\273\234.md" +++ "b/content/zh/docs/Container/\344\270\272\345\256\211\345\205\250\345\256\271\345\231\250\351\205\215\347\275\256\347\275\221\347\273\234.md" @@ -1,6 +1,6 @@ -# 为安全容器配置网络 +# 为安全容器配置网络 -## tap设备网络支持 +## tap设备网络支持 安全容器技术是基于Qemu VM实现的,对于物理机系统来说,安全容器就相当于是一个VM,所以安全容器可以在Neutron网络中将VM通过TAP技术接入外部网络。我们这里不需要关心TAP设备的创建和网桥对接等问题,只需要将指定的TAP设备(host已经存在)热插进pause容器的VM,并更新网卡信息即可。 @@ -260,9 +260,9 @@ -以上为常用场景和命令行示例,具体命令行接口见附录[接口列表](接口列表.md#ZH-CN_TOPIC_0184808188)。 +以上为常用场景和命令行示例,具体命令行接口“附录 > 接口列表”。 -## kata IPVS子系统 +## kata IPVS子系统 安全容器提供添加ipvs命令的接口,支持对容器设置ipvs规则。功能包含对虚拟服务的添加/编辑/删除、对真实服务器的添加/编辑/删除、查询ipvs服务信息、设置连接超时、清理系统连接缓存,并支持对规则的批量导入。 @@ -338,6 +338,6 @@ >1. 每个容器支持iptables规则数量最大为20000条(5k service,3个server/service),add-service和add-server都算作规则。 >2. 批量导入前需清空已有规则。 >3. 不存在并发测试场景。 - >4. 以上为常用命令示例,具体命令行接口见附录[接口列表](接口列表.md#ZH-CN_TOPIC_0184808188)。 + >4. 以上为常用命令示例,具体命令行接口请参见“附录 > 接口列表”。 diff --git "a/content/zh/docs/Container/\344\270\272\345\256\211\345\205\250\345\256\271\345\231\250\351\205\215\347\275\256\350\265\204\346\272\220.md" "b/content/zh/docs/Container/\344\270\272\345\256\211\345\205\250\345\256\271\345\231\250\351\205\215\347\275\256\350\265\204\346\272\220.md" index f16a15a708976a451994bf6a80a3e72c17480798..55aa35dfaaefe14d7d0afc5507bf98745601f98e 100644 --- "a/content/zh/docs/Container/\344\270\272\345\256\211\345\205\250\345\256\271\345\231\250\351\205\215\347\275\256\350\265\204\346\272\220.md" +++ "b/content/zh/docs/Container/\344\270\272\345\256\211\345\205\250\345\256\271\345\231\250\351\205\215\347\275\256\350\265\204\346\272\220.md" @@ -1,4 +1,341 @@ -# 为安全容器配置资源 - -安全容器运行于虚拟化隔离的轻量级虚拟机内,因此资源的配置应分为两部分:对轻量级虚拟机的资源配置,即Host资源配置;对虚拟机内容器的配置,即Guest容器资源配置。以下资源配置均分为这两部分。 - +# 为安全容器配置资源 + +- [为安全容器配置资源](#为安全容器配置资源) + - [资源共享](#资源共享) + - [限制CPU资源](#限制CPU资源) + - [限制内存资源](#限制内存资源) + - [限制Blkio资源](#限制Blkio资源) + - [限制文件描述符资源](#限制文件描述符资源) + + + +安全容器运行于虚拟化隔离的轻量级虚拟机内,因此资源的配置应分为两部分:对轻量级虚拟机的资源配置,即Host资源配置;对虚拟机内容器的配置,即Guest容器资源配置。以下资源配置均分为这两部分。 + +## 资源共享-27 + +由于安全容器运行于虚拟化隔离的轻量虚拟机内,故无法访问Host上某些namespace下的资源,因此启动时不支持--net host,--ipc host,--pid host,--uts host。 + +当启动一个Pod时,同一个Pod中的所有容器默认共享同一个net namespace和ipc namespace。如果同一个Pod中的容器需要共享pid namespace,则可以通过Kubernetes进行配置,Kubernetes 1.11版本该值为默认关闭。 + +## 限制CPU资源 + +1. 配置轻量级虚拟机CPU运行资源 + + 对轻量级虚拟机的CPU资源配置即虚拟机运行的vcpu配置,安全容器使用--annotation com.github.containers.virtcontainers.sandbox\_cpu配置轻量级虚拟机运行CPU资源,该参数仅可配置在pause容器上: + + ``` + docker run -tid --runtime kata-runtime --network none --annotation io.kubernetes.docker.type=podsandbox --annotation com.github.containers.virtcontainers.sandbox_cpu= + ``` + + 举例: + + ``` + # 启动一个pause容器 + docker run -tid --runtime kata-runtime --network none --annotation io.kubernetes.docker.type=podsandbox --annotation com.github.containers.virtcontainers.sandbox_cpu=4 busybox sleep 999999 + be3255a3f66a35508efe419bc52eccd3b000032b9d8c9c62df611d5bdc115954 + + # 进入容器查看CPU信息,查看CPU个数是否与com.github.containers.virtcontainers.sandbox_cpu配置的CPU个数相等 + docker exec be32 lscpu + Architecture: aarch64 + Byte Order: Little Endian + CPU(s): 4 + On-line CPU(s) list: 0-3 + Thread(s) per core: 1 + Core(s) per socket: 1 + Socket(s): 4 + ``` + + >![](public_sys-resources/icon-note.gif) **说明:** + >CPU个数可以设置的最大值为当前OS上可供运行的CPU值(除去隔离核),最小值为0.5个CPU。 + +2. 配置容器CPU运行资源 + + 配置容器CPU运行资源与开源docker容器配置CPU运行资源的方式相同,可以通过docker run命令中CPU资源限制相关的参数进行配置: + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

含义

+

--cpu-shares

+

设置容器能使用的CPU时间比例。

+

--cpus

+

设置容器可以使用的 CPU 个数。

+

--cpu-period

+

设置容器进程的调度周期。

+

--cpu-quota

+

设置每个容器进程调度周期内能够使用的CPU时间。

+

--cpuset-cpus

+

设置容器进程可以使用的CPU列表。

+
说明:

安全容器使用 --cpuset-cpus 参数绑定CPU时,CPU的编号不能超过安全容器对应的轻量级虚机中CPU的个数减1(轻量级虚机中CPU的编号从0开始)。

+
+

--cpuset-mems

+

设定该容器进程可以访问的内存节点。

+
说明:

安全容器不支持多NUMA架构和配置,使用NUMA memory的--cpuset-mems参数只能配置为0。

+
+
+ +3. 配置CPU热插拔功能 + + >![](public_sys-resources/icon-note.gif) **说明:** + >安全容器CPU热插拔功能需要虚拟化组件qemu支持CPU热插拔。 + + kata-runtime配置文件config.toml中**enable\_cpu\_memory\_hotplug**选项负责开启和禁用CPU和内存热插拔。默认取值为false,表示禁用CPU和内存热插拔功能;取值为true,表示开启CPU和内存热插拔功能。 + + kata-runtime中复用了**--cpus**选项实现了CPU热插拔的功能,通过统计Pod中所有容器的**--cpus**选项的和,然后确定需要热插多少个CPU到轻量级虚机中。 + + 举例: + + ``` + # 启动一个pause容器,轻量级虚机默认分配了1个vcpu + docker run -tid --runtime kata-runtime --network none --annotation io.kubernetes.docker.type=podsandbox busybox sleep 999999 + 77b40fb72f63b11dd3fcab2f6dabfc7768295fced042af8c7ad9c0286b17d24f + + # 查看启动完pause容器后轻量级虚机中CPU个数 + docker exec 77b40fb72f6 lscpu + Architecture: x86_64 + CPU op-mode(s): 32-bit, 64-bit + Byte Order: Little Endian + CPU(s): 1 + On-line CPU(s) list: 0 + Thread(s) per core: 1 + Core(s) per socket: 1 + Socket(s): 1 + + # 在同一个Pod中启动新的容器并通过--cpus设置容器需要的CPU数量为4 + docker run -tid --runtime kata-runtime --network none --cpus 4 --annotation io.kubernetes.docker.type=container --annotation io.kubernetes.sandbox.id=77b40fb72f63b11dd3fcab2f6dabfc7768295fced042af8c7ad9c0286b17d24f busybox sleep 999999 + 7234d666851d43cbdc41da356bf62488b89cd826361bb71d585a049b6cedafd3 + + # 查看当前轻量级虚机中CPU的个数 + docker exec 7234d6668 lscpu + Architecture: x86_64 + CPU op-mode(s): 32-bit, 64-bit + Byte Order: Little Endian + CPU(s): 4 + On-line CPU(s) list: 0-3 + Thread(s) per core: 1 + Core(s) per socket: 1 + Socket(s): 4 + + # 删除热插了CPU的容器后,查看轻量级虚机中CPU的个数 + docker rm -f 7234d666851d + 7234d666851d + + docker exec 77b40fb72f6 lscpu + Architecture: x86_64 + CPU op-mode(s): 32-bit, 64-bit + Byte Order: Little Endian + CPU(s): 1 + On-line CPU(s) list: 0 + Thread(s) per core: 1 + Core(s) per socket: 1 + Socket(s): 1 + ``` + +    + +    + + >![](public_sys-resources/icon-note.gif) **说明:** + >由于pause容器只是一个占位容器没有工作负载,所以轻量级虚机启动时默认分配的1个CPU可以被其它容器共享,因此上面例子中启动的新容器只需要再热插3个CPU到轻量级虚机中即可。 + + - 当停止热插了CPU的容器后,启动容器时热插进去的CPU也会被拔出。 + + +## 限制内存资源 + +1. 配置轻量级虚拟机MEM运行资源 + + 对轻量级虚拟机的MEM资源配置即虚拟机运行的内存进行配置,安全容器使用--annotation com.github.containers.virtcontainers.sandbox\_mem配置轻量级虚拟机运行MEM资源,该参数仅可配置在pause容器上: + + ``` + docker run -tid --runtime kata-runtime --network none --annotation io.kubernetes.docker.type=podsandbox --annotation com.github.containers.virtcontainers.sandbox_mem= + ``` + + 举例: + + ``` + # 启动一个pause容器,通过--annotation com.github.containers.virtcontainers.sandbox_mem=4G为轻量级虚机分配4G内存 + docker run -tid --runtime kata-runtime --network none --annotation io.kubernetes.docker.type=podsandbox --annotation com.github.containers.virtcontainers.sandbox_mem=4G busybox sleep 999999 + 1532c3e59e7a45cd6b419aa1db07dd0069b0cdd93097f8944177a25e457e4297 + + # 查看轻量级虚机中内存信息,查看内存大小是否与com.github.containers.virtcontainers.sandbox_mem配置的内存大小相等 + docker exec 1532c3e free -m + total used free shared buff/cache available + Mem: 3950 20 3874 41 55 3858 + Swap: 0 0 0 + ``` + + >![](public_sys-resources/icon-note.gif) **说明:** + >- 如果没有通过--annotation com.github.containers.virtcontainers.sandbox\_mem显示地设置轻量级虚机的内存大小,则轻量级虚机默认使用的内存大小为1GB。 + >- 安全容器一个Pod的最小内存规格是1GB,支持的最大内存规格是256GB。如果用户分配的内存规格超过256GB,可能会出现未定义的错误,安全容器暂不支持超过256GB的大内存场景。 + +2. 配置容器MEM运行资源 + + 配置容器MEM运行资源与开源docker容器配置MEM运行资源的方式相同,可以通过docker run命令中MEM资源限制相关的参数进行配置: + + + + + + + + + + +

参数

+

含义

+

-m/--memory

+

设置容器进程可以使用的内存大小。

+
说明:
  • 当内存热插拔开关关闭时,-m的取值要小于等于轻量级虚机启动时分配的内存大小。
+
+
+ +3. 配置MEM热插功能 + + 同配置CPU热插拔功能一样,MEM的热插功能也是由kata-runtime配置文件config.toml中**enable\_cpu\_memory\_hotplug**选项配置,用法参见[3](#限制CPU资源.md#zh-cn_topic_0183903699_li2167326144011)。 + + >![](public_sys-resources/icon-note.gif) **说明:** + >内存资源当前只支持热插,不支持内存热拔。 + + kata-runtime中复用了**-m**选项实现了MEM热插的功能,通过统计Pod中所有容器的**-m**选项的和,然后确定需要热插多少内存到轻量级虚机中,例如, + + 举例: + + ``` + # 启动一个pause容器,轻量级虚机默认分配了1GB内存 + docker run -tid --runtime kata-runtime --network none --annotation io.kubernetes.docker.type=podsandbox busybox sleep 999999 + 99b78508ada3fa7dcbac457bb0f6e3784e64e7f7131809344c5496957931119f + + # 查看启动完pause容器后轻量级虚机中的内存大小 + docker exec 99b78508ada free -m + total used free shared buff/cache available + Mem: 983 18 914 36 50 908 + Swap: 0 0 0 + + # 在同一个Pod中启动新的容器并通过-m设置容器需要的内存大小为4G + docker run -tid --runtime kata-runtime --network none -m 4G --annotation io.kubernetes.docker.type=container --annotation io.kubernetes.sandbox.id=99b78508ada3fa7dcbac457bb0f6e3784e64e7f7131809344c5496957931119f busybox sleep 999999 + c49461745a712b2ef3127fdf43b2cbb034b7614e6060b13db12b7a5ff3c830c8 + + # 查看当前轻量级虚机中内存的大小 + docker exec c49461745 free -m + total used free shared buff/cache available + Mem: 4055 69 3928 36 57 3891 + Swap: 0 0 0 + + # 删除热插了CPU的容器后,查看轻量级虚机中内存的大小 + docker rm -f c49461745 + c49461745 + + # 因为热插的内存暂不支持热拔功能,所以轻量级虚机中在删除热插内存容器之后还是拥有4GB的内存 + docker exec 99b78508ada free -m + total used free shared buff/cache available + Mem: 4055 69 3934 36 52 3894 + Swap: 0 0 0 + ``` + + >![](public_sys-resources/icon-note.gif) **说明:** + >由于pause容器只是一个占位容器没有工作负载,所以轻量级虚机启动时分配的内存可以被其它容器共享使用,因此上面例子中启动的新容器只需要再热插3GB的内存到轻量级虚机中即可。 + + +## 限制Blkio资源 + +1. 配置轻量级虚拟机Blkio运行资源 + + 对轻量级虚拟机的BlkIio资源配置,安全容器使用--annotation com.github.containers.virtcontainers.blkio\_cgroup配置轻量级虚拟机使用的块设备的blkio资源,该参数仅可配置在pause容器上: + + ``` + docker run -tid --runtime --network none --annotation io.kubernetes.docker.type=podsandbox --annotation com.github.containers.virtcontainers.blkio_cgroup= + ``` + + 其中--annotation com.github.containers.virtcontainers.blkio\_cgroup的取值要符合下面BlkioCgroup结构体的定义: + + ``` + // BlkioCgroup for Linux cgroup 'blkio' data exchange + type BlkioCgroup struct { + // Items specifies per cgroup values + Items []BlockIOCgroupItem `json:"blkiocgroup,omitempty"` + } + + type BlockIOCgroupItem struct { + // Path represent path of blkio device + Path string `json:"path,omitempty"` + // Limits specifies the blkio type and value + Limits []IOLimit `json:"limits,omitempty"` + } + + type IOLimit struct { + // Type specifies IO type + Type string `json:"type,omitempty"` + // Value specifies rate or weight value + Value uint64 `json:"value,omitempty"` + } + ``` + + IOLimit结构体中Type字段取值列表为: + + ``` + // BlkioThrottleReadBps is the key to fetch throttle_read_bps + BlkioThrottleReadBps = "throttle_read_bps" + + // BlkioThrottleWriteBps is the key to fetch throttle_write_bps + BlkioThrottleWriteBps = "throttle_write_bps" + + // BlkioThrottleReadIOPS is the key to fetch throttle_read_iops + BlkioThrottleReadIOPS = "throttle_read_iops" + + // BlkioThrottleWriteIOPS is the key to fetch throttle_write_iops + BlkioThrottleWriteIOPS = "throttle_write_iops" + + // BlkioWeight is the key to fetch blkio_weight + BlkioWeight = "blkio_weight" + + // BlkioLeafWeight is the key to fetch blkio_leaf_weight + BlkioLeafWeight = "blkio_leaf_weight" + ``` + + 举例: + + ``` + docker run -tid --runtime kata-runtime --network none --annotation com.github.containers.virtcontainers.blkio_cgroup='{"blkiocgroup":[{"path":"/dev/sda","limits":[{"type":"throttle_read_bps","value":400},{"type":"throttle_write_bps","value":400},{"type":"throttle_read_iops","value":700},{"type":"throttle_write_iops","value":699}]},{"limits":[{"type":"blkio_weight","value":78}]}]}' busybox sleep 999999 + ``` + + 上面命令表示对启动的安全容器所使用的/dev/sda磁盘进行blkio限流,分别将throttle\_read\_bps限速为400bps,throttle\_write\_bps限速为400bps,throttle\_read\_iops限速为700次/秒,throttle\_write\_iops限速为699次/秒,以及所在blkio cgroup组的权重值设置为78。 + + +## 限制文件描述符资源 + +为了避免在容器中打开大量9p共享目录中的文件导致主机上文件描述符资源耗尽,使得安全容器无法正常提供服务,安全容器支持自定义配置安全容器qemu进程最多可以打开的文件描述符数量限制。 + +安全容器通过复用docker run命令中的**--files-limit**选项来设置安全容器qemu进程最多可以打开文件描述符,该参数仅可配置在pause容器上,使用方法如下所示: + +``` +docker run -tid --runtime kata-runtime --network none --annotation io.kubernetes.docker.type=podsandbox --files-limit bash +``` + +>![](public_sys-resources/icon-note.gif) **说明:** +>- 如果**--files-limit**选项的取值小于安全容器默认设置的最小值1024且不为0时,安全容器qemu进程最多可以打开的文件描述符数量会被设置为最小值1024。 +>- 如果**--files-limit**选项的取值为0时,安全容器qemu进程最多可以打开的文件描述符数量为系统可以打开文件描述符的最大值/proc/sys/fs/file-max除以400后得到的默认值。 +>- 如果启动安全容器时没有显示指定**--files-limit**可以打开的文件描述符的上限,安全容器qemu进程可以打开的文件描述符数量的上限和系统默认值保持一致。 + diff --git "a/content/zh/docs/Container/\344\273\216\346\234\215\345\212\241\347\253\257\345\256\236\346\227\266\350\216\267\345\217\226\344\272\213\344\273\266\346\266\210\346\201\257.md" "b/content/zh/docs/Container/\344\273\216\346\234\215\345\212\241\347\253\257\345\256\236\346\227\266\350\216\267\345\217\226\344\272\213\344\273\266\346\266\210\346\201\257.md" deleted file mode 100644 index e163aa9445f494a1c691403f89d6bced230f491f..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\344\273\216\346\234\215\345\212\241\347\253\257\345\256\236\346\227\266\350\216\267\345\217\226\344\272\213\344\273\266\346\266\210\346\201\257.md" +++ /dev/null @@ -1,50 +0,0 @@ -# 从服务端实时获取事件消息 - -## 描述 - -isula events用于从服务端实时获取容器镜像生命周期、运行等事件消息, 仅支持runtime类型为lcr的容器。 - -## 用法 - -``` -isula events [OPTIONS] -``` - -## 参数 - - - - - - - - - - - - - - - - - -

命令

-

参数

-

说明

-

events

-

-H, --host

-

指定要连接的iSulad socket文件路径

-

-n, --name

-

获取指定容器的事件消息

-

-S, --since

-

获取指定时间以来的事件消息

-
- -## 示例 - -从服务端实时获取事件消息,命令示例如下: - -``` -$ isula events -``` - diff --git "a/content/zh/docs/Container/\344\273\216\351\225\234\345\203\217\344\273\223\345\272\223\346\213\211\345\217\226\351\225\234\345\203\217.md" "b/content/zh/docs/Container/\344\273\216\351\225\234\345\203\217\344\273\223\345\272\223\346\213\211\345\217\226\351\225\234\345\203\217.md" deleted file mode 100644 index d5cab2c9cbc86fb4e4f987fb211743ccc7a9601b..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\344\273\216\351\225\234\345\203\217\344\273\223\345\272\223\346\213\211\345\217\226\351\225\234\345\203\217.md" +++ /dev/null @@ -1,24 +0,0 @@ -# 从镜像仓库拉取镜像 - -## 描述 - -从镜像仓库拉取镜像到本地。 - -## 用法 - -``` -isula pull [OPTIONS] NAME[:TAG|@DIGEST] -``` - -## 参数 - -login命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表3 pull命令参数列表"。 - -## 示例 - -``` -$ isula pull localhost:5000/official/busybox -Image "localhost:5000/official/busybox" pulling -Image "localhost:5000/official/busybox@sha256:bf510723d2cd2d4e3f5ce7e93bf1e52c8fd76831995ac3bd3f90ecc866643aff" pulled -``` - diff --git "a/content/zh/docs/Container/\344\273\216\351\225\234\345\203\217\344\273\223\345\272\223\351\200\200\345\207\272\347\231\273\345\275\225.md" "b/content/zh/docs/Container/\344\273\216\351\225\234\345\203\217\344\273\223\345\272\223\351\200\200\345\207\272\347\231\273\345\275\225.md" deleted file mode 100644 index 3e35403f43a6aff2974905abb5a4051f153fe386..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\344\273\216\351\225\234\345\203\217\344\273\223\345\272\223\351\200\200\345\207\272\347\231\273\345\275\225.md" +++ /dev/null @@ -1,23 +0,0 @@ -# 从镜像仓库退出登录 - -## 描述 - -isula logout命令用于从镜像仓库退出登录。退出登录成功后再执行isula pull命令从该镜像仓库拉取镜像会因为未认证而拉取失败。 - -## 用法 - -``` -isula logout SERVER -``` - -## 参数 - -logout命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表2 logout命令参数列表"。 - -## 示例 - -``` -$ isula logout my.csp-edge.com:5000 -Logout Succeeded -``` - diff --git "a/content/zh/docs/Container/\347\256\200\344\273\213.md" "b/content/zh/docs/Container/\344\275\277\347\224\250\346\214\207\345\215\227-1.md" similarity index 87% rename from "content/zh/docs/Container/\347\256\200\344\273\213.md" rename to "content/zh/docs/Container/\344\275\277\347\224\250\346\214\207\345\215\227-1.md" index 596656a240b2d9fdf0f8c2f5067cfc35af3e4c6b..2efb60fa790ddcf4c7b4d56646680ff91db30cd6 100644 --- "a/content/zh/docs/Container/\347\256\200\344\273\213.md" +++ "b/content/zh/docs/Container/\344\275\277\347\224\250\346\214\207\345\215\227-1.md" @@ -1,18 +1,20 @@ -# 简介 - -系统容器基于iSula容器引擎进行功能增强,提供系统容器相关功能。系统容器提供的容器管理功能和iSula容器引擎保持一致,其命令格式和功能与iSula容器引擎相同。 - -本文档仅描述系统容器提供的增强功能对应的使用方式,其它命令行操作请参考 "iSula容器引擎" 章节。 - -系统容器功能仅涉及isula create/run命令行,后续未特别说明,各功能均使用此命令行。其命令行格式如下所示: - -``` -isula create/run [OPTIONS] [COMMAND] [ARG...] -``` - -其中: - -- OPTIONS:命令参数,可以一个或者多个,可选参数请参见 "iSula容器引擎 > 附录 > 命令行参数说明"。 -- COMMAND:系统容器启动后执行的命令。 -- ARG:系统容器启动后执行命令对应的参数。 - +# 使用指南 + +系统容器基于iSula容器引擎进行功能增强,提供系统容器相关功能。系统容器提供的容器管理功能和iSula容器引擎保持一致,其命令格式和功能与iSula容器引擎相同。 + +本文档仅描述系统容器提供的增强功能对应的使用方式,其它命令行操作请参考 "iSula容器引擎" 章节。 + +系统容器功能仅涉及isula create/run命令行,后续未特别说明,各功能均使用此命令行。其命令行格式如下所示: + +``` +isula create/run [OPTIONS] [COMMAND] [ARG...] +``` + +其中: + +- OPTIONS:命令参数,可以一个或者多个,可选参数请参见 "iSula容器引擎 > 附录 > 命令行参数说明"。 +- COMMAND:系统容器启动后执行的命令。 +- ARG:系统容器启动后执行命令对应的参数。 + +>![](public_sys-resources/icon-note.gif) **说明:** +>系统容器的使用需要root权限。 diff --git "a/content/zh/docs/Container/\344\275\277\347\224\250\346\214\207\345\215\227.md" "b/content/zh/docs/Container/\344\275\277\347\224\250\346\214\207\345\215\227.md" index fba9c46a0b823deb0d7215443c399d67cbdebc71..204d1b97fd50e5fbcfe66866410676bff526c889 100644 --- "a/content/zh/docs/Container/\344\275\277\347\224\250\346\214\207\345\215\227.md" +++ "b/content/zh/docs/Container/\344\275\277\347\224\250\346\214\207\345\215\227.md" @@ -1,4 +1,18 @@ -# 使用指南 - +# 使用指南 +本章介绍iSula容器引擎的使用方法。 +>![](public_sys-resources/icon-note.gif) **说明:** +>iSulad的所有使用操作均需要使用root权限。 + +- [容器管理](https://openeuler.org/zh/docs/20.03_LTS/docs/Container/%E5%AE%B9%E5%99%A8%E7%AE%A1%E7%90%86.html) +- [支持CNI网络](https://openeuler.org/zh/docs/20.03_LTS/docs/Container/%E6%94%AF%E6%8C%81CNI%E7%BD%91%E7%BB%9C.html) +- [容器资源管理](https://openeuler.org/zh/docs/20.03_LTS/docs/Container/%E5%AE%B9%E5%99%A8%E8%B5%84%E6%BA%90%E7%AE%A1%E7%90%86.html) +- [特权容器](https://openeuler.org/zh/docs/20.03_LTS/docs/Container/%E7%89%B9%E6%9D%83%E5%AE%B9%E5%99%A8.html) +- [CRI接口](https://openeuler.org/zh/docs/20.03_LTS/docs/Container/CRI%E6%8E%A5%E5%8F%A3.html) +- [镜像管理](https://openeuler.org/zh/docs/20.03_LTS/docs/Container/%E9%95%9C%E5%83%8F%E7%AE%A1%E7%90%86.html) +- [容器健康状态检查](https://openeuler.org/zh/docs/20.03_LTS/docs/Container/%E5%AE%B9%E5%99%A8%E5%81%A5%E5%BA%B7%E7%8A%B6%E6%80%81%E6%A3%80%E6%9F%A5.html) +- [查询信息](https://openeuler.org/zh/docs/20.03_LTS/docs/Container/%E6%9F%A5%E8%AF%A2%E4%BF%A1%E6%81%AF.html) +- [安全特性](https://openeuler.org/zh/docs/20.03_LTS/docs/Container/%E5%AE%89%E5%85%A8%E7%89%B9%E6%80%A7.html) +- [支持OCI hooks](https://openeuler.org/zh/docs/20.03_LTS/docs/Container/%E6%94%AF%E6%8C%81OCI-hooks.html) + diff --git "a/content/zh/docs/Container/\344\275\277\347\224\250\346\214\207\345\257\274-11.md" "b/content/zh/docs/Container/\344\275\277\347\224\250\346\214\207\345\257\274-11.md" deleted file mode 100644 index 6ae67460ae2f9941065b440385a2dc5db4e2372c..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\344\275\277\347\224\250\346\214\207\345\257\274-11.md" +++ /dev/null @@ -1,118 +0,0 @@ -# 使用指导 - -通过--security-opt将配置文件传给要过滤系统调用的容器。 - -``` -isula run -itd --security-opt seccomp=/path/to/seccomp/profile.json rnd-dockerhub.huawei.com/official/busybox -``` - ->![](public_sys-resources/icon-note.gif) **说明:** ->1. 创建容器时通过--security-opt将配置文件传给容器时,采用默认配置文件(/etc/isulad/seccomp\_default.json)。 ->2. 创建容器时--security-opt设置为unconfined时,对容器不过滤系统调用。 ->3. “/path/to/seccomp/profile.json”需要是绝对路径。 - -## 获取普通容器的默认seccomp配置 - -- 启动一个普通容器(或者是带--cap-add的容器),并查看默认权限配置: - - ``` - cat /etc/isulad/seccomp_default.json | python -m json.tool > profile.json - ``` - - 可以看到"seccomp"字段中,有很多的"syscalls",在此基础上,仅提取syscalls的部分,参考定制seccomp配置文件,进行定制化操作。 - - ``` - "defaultAction": "SCMP_ACT_ERRNO", - "syscalls": [ - { - "action": "SCMP_ACT_ALLOW", - "name": "accept" - }, - { - "action": "SCMP_ACT_ALLOW", - "name": "accept4" - }, - { - "action": "SCMP_ACT_ALLOW", - "name": "access" - }, - { - "action": "SCMP_ACT_ALLOW", - "name": "alarm" - }, - { - "action": "SCMP_ACT_ALLOW", - "name": "bind" - }, - ]... - ``` - - -- 查看转换为lxc可识别的seccomp配置 - - ``` - cat /var/lib/isulad/engines/lcr/74353e38021c29314188e29ba8c1830a4677ffe5c4decda77a1e0853ec8197cd/seccomp - ``` - - ``` - ... - waitpid allow - write allow - writev allow - ptrace allow - personality allow [0,0,SCMP_CMP_EQ,0] - personality allow [0,8,SCMP_CMP_EQ,0] - personality allow [0,131072,SCMP_CMP_EQ,0] - personality allow [0,131080,SCMP_CMP_EQ,0] - personality allow [0,4294967295,SCMP_CMP_EQ,0] - ... - ``` - - -## 定制seccomp配置文件 - -在启动容器的时候使用--security-opt引入seccomp配置文件,容器实例会按照配置文件规则进行限制系统API的运行。首先获取普通容器的默认seccomp,得到完整模板,然后按照本节定制配置文件,启动容器: - -``` -isula run --rm -it --security-opt seccomp:/path/to/seccomp/profile.json rnd-dockerhub.huawei.com/official/busybox -``` - -配置文件模板: - -``` -{ -"defaultAction": "SCMP_ACT_ALLOW", -"syscalls": [ -{ -"name": "syscall-name", -"action": "SCMP_ACT_ERRNO", -"args": null -} -] -} -``` - ->![](public_sys-resources/icon-notice.gif) **须知:** ->- defaultAction、syscalls:对应的action的类型是一样的,但其值是不能一样的,目的就是让所有的syscal都有一个默认的action,并且如果syscalls数组中有明确的定义,就以syscalls中的为准,由于defaultAction、action的值不一样,就能保证action不会有冲突。当前支持的action有: -> "SCMP\_ACT\_ERRNO":禁止,并打印错误信息。 -> "SCMP\_ACT\_ALLOW":允许。 ->- syscalls: 数组,可以只有一个syscall,也可以有多个,可以带args,也可以不带。 ->- name:要过滤的syscall。 ->- args:数组,里面的每个object的定义如下: -> ``` -> type Arg struct { -> Index uint `json:"index"` //参数的序号,如open(fd, buf, len),fd 对应的就是0,buf为1 -> Value uint64 `json:"value"` //跟参数进行比较的值 -> ValueTwo uint64 `json:"value_two"` //仅当Op=MaskEqualTo时起作用,用户传入值跟Value按位与操作后,跟ValueTwo进行比较,若相等则执行action。 -> Op Operator `json:"op"` -> } -> ``` -> args中的Op,其取值可以下页面的任意一种: -> "SCMP\_CMP\_NE": NotEqualTo -> "SCMP\_CMP\_LT": LessThan -> "SCMP\_CMP\_LE": LessThanOrEqualTo -> "SCMP\_CMP\_EQ": EqualTo -> "SCMP\_CMP\_GE": GreaterThanOrEqualTo -> "SCMP\_CMP\_GT": GreaterThan -> "SCMP\_CMP\_MASKED\_EQ": MaskEqualTo - diff --git "a/content/zh/docs/Container/\344\275\277\347\224\250\346\214\207\345\257\274-14.md" "b/content/zh/docs/Container/\344\275\277\347\224\250\346\214\207\345\257\274-14.md" deleted file mode 100644 index ac676b64727c7a4a8a8b77c7cbf44e3fe0afd6b1..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\344\275\277\347\224\250\346\214\207\345\257\274-14.md" +++ /dev/null @@ -1,8 +0,0 @@ -# 使用指导 - -iSulad使用--cap-add/--cap-drop给容器增加/删去特定的权限,在非必要情况下,不要给容器增加额外的权限,推荐将容器默认但非必要的权限也去掉。 - -``` -isula run --rm -it --cap-add all --cap-drop SYS_ADMIN rnd-dockerhub.huawei.com/official/busybox -``` - diff --git "a/content/zh/docs/Container/\344\275\277\347\224\250\346\214\207\345\257\274-17.md" "b/content/zh/docs/Container/\344\275\277\347\224\250\346\214\207\345\257\274-17.md" deleted file mode 100644 index 885b3b2d0c61386a3b56cf98012b511a5aee49cf..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\344\275\277\347\224\250\346\214\207\345\257\274-17.md" +++ /dev/null @@ -1,44 +0,0 @@ -# 使用指导 - -- daemon端使能selinux: - - ``` - isulad --selinux-enabled - ``` - - -   - -- 启动容器时配置selinux标签安全上下文 - - --security-opt="label=user:USER" 配置安全上下文用户 - - --security-opt="label=role:ROLE" 配置安全上下文角色 - - --security-opt="label=type:TYPE" 配置安全上下文类型 - - --security-opt="label=level:LEVEL" 配置安全上下文域 - - --security-opt="label=disable" 容器禁用SELinux配置 - - ``` - $ isula run -itd --security-opt label=type:container_t --security-opt label=level:s0:c1,c2 rnd-dockerhub.huawei.com/official/centos - 9be82878a67e36c826b67f5c7261c881ff926a352f92998b654bc8e1c6eec370 - ``` - - -   - -- 为挂载卷打selinux标签\('z'为共享模式\) - - ``` - $ isula run -itd -v /test:/test:z rnd-dockerhub.huawei.com/official/centos - 9be82878a67e36c826b67f5c7261c881ff926a352f92998b654bc8e1c6eec370 - - $ls -Z /test - system_u:object_r:container_file_t:s0 file - ``` - -    - - diff --git "a/content/zh/docs/Container/\344\275\277\347\224\250\346\214\207\345\257\274.md" "b/content/zh/docs/Container/\344\275\277\347\224\250\346\214\207\345\257\274.md" deleted file mode 100644 index ccdf7e976f3097bbe0dd0012f475e40c352a8f50..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\344\275\277\347\224\250\346\214\207\345\257\274.md" +++ /dev/null @@ -1,8 +0,0 @@ -# 使用指导 - -iSulad使用--privileged给容器添加特权模式,在非必要情况下,不要给容器添加特权,遵循最小特权原则,减少存在的安全风险。 - -``` -isula run --rm -it --privileged busybox -``` - diff --git "a/content/zh/docs/Container/\344\275\277\347\224\250\346\226\271\346\263\225-1.md" "b/content/zh/docs/Container/\344\275\277\347\224\250\346\226\271\346\263\225-1.md" new file mode 100644 index 0000000000000000000000000000000000000000..3df844abdc6d73e07372440ee141020c273a2c03 --- /dev/null +++ "b/content/zh/docs/Container/\344\275\277\347\224\250\346\226\271\346\263\225-1.md" @@ -0,0 +1,6 @@ +# 使用方法 + +本章介绍安全容器的使用方法。 +>![](public_sys-resources/icon-note.gif) **说明:** +>安全容器的使用需要root权限。 + diff --git "a/content/zh/docs/Container/\344\275\277\347\224\250\346\226\271\346\263\225-26.md" "b/content/zh/docs/Container/\344\275\277\347\224\250\346\226\271\346\263\225-26.md" deleted file mode 100644 index 29d232217759c36dc860d79e0e8312398917b5ef..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\344\275\277\347\224\250\346\226\271\346\263\225-26.md" +++ /dev/null @@ -1,3 +0,0 @@ -# 使用方法 - -本章介绍使用安全容器的方法。 diff --git "a/content/zh/docs/Container/\344\275\277\347\224\250\346\226\271\346\263\225.md" "b/content/zh/docs/Container/\344\275\277\347\224\250\346\226\271\346\263\225.md" deleted file mode 100644 index 82e88d00215c176616c2eeadc386ed36fd566fd2..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\344\275\277\347\224\250\346\226\271\346\263\225.md" +++ /dev/null @@ -1 +0,0 @@ -# 使用方法 diff --git "a/content/zh/docs/Container/\344\275\277\347\224\250\351\231\220\345\210\266-0.md" "b/content/zh/docs/Container/\344\275\277\347\224\250\351\231\220\345\210\266-0.md" deleted file mode 100644 index c2ab37ce7d86aeaa5ce63b2873184774d56552b5..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\344\275\277\347\224\250\351\231\220\345\210\266-0.md" +++ /dev/null @@ -1,219 +0,0 @@ -# 使用限制 - -特权容器为容器提供了所有功能,还解除了设备cgroup控制器强制执行的所有限制,具备以下特性: - -- Secomp不block任何系统调用 -- /sys、/proc路径可写 -- 容器内能访问主机上所有设备 - -- 系统的权能将全部打开 - -普通容器默认权能为: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Capability Key

-

Capability Description

-

SETPCAP

-

修改进程权能

-

MKNOD

-

允许使用mknod()系统调用创建特殊文件

-

AUDIT_WRITE

-

向内核审计日志写记录

-

CHOWN

-

对文件的 UIDs 和 GIDs 做任意的修改(参考 chown(2))

-

NET_RAW

-

使用 RAW 和 PACKET sockets;为透明代理绑定任何地址

-

DAC_OVERRIDE

-

忽略文件的DAC访问限制

-

FOWNER

-

忽略文件属主ID必须和进程用户ID相匹配的限制

-

FSETID

-

允许设置文件的setuid位

-

KILL

-

允许对不属于自己的进程发送信号

-

SETGID

-

允许改变进程的组ID

-

SETUID

-

允许改变进程的用户ID

-

NET_BIND_SERVICE

-

允许绑定到小于1024的端口

-

SYS_CHROOT

-

允许使用chroot()系统调用

-

SETFCAP

-

允许向其他进程转移能力以及删除其他进程的能力

-
- -当容器为特权模式时,将添加以下权能 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Capability Key

-

Capability Description

-

SYS_MODULE

-

加载和卸载内核模块

-

SYS_RAWIO

-

允许直接访问/devport,/dev/mem,/dev/kmem及原始块设备

-

SYS_PACCT

-

允许执行进程的BSD式审计

-

SYS_ADMIN

-

允许执行系统管理任务,如加载或卸载文件系统、设置磁盘配额等

-

SYS_NICE

-

允许提升优先级及设置其他进程的优先级

-

SYS_RESOURCE

-

忽略资源限制

-

SYS_TIME

-

允许改变系统时钟

-

SYS_TTY_CONFIG

-

允许配置TTY设备

-

AUDIT_CONTROL

-

启用和禁用内核审计;修改审计过滤器规则;提取审计状态和过滤规则

-

MAC_ADMIN

-

覆盖强制访问控制 (Mandatory Access Control (MAC)),为Smack Linux安全模块(Linux Security Module (LSM)) 而实现

-

MAC_OVERRIDE

-

允许 MAC 配置或状态改变。为 Smack LSM 而实现

-

NET_ADMIN

-

允许执行网络管理任务

-

SYSLOG

-

执行特权 syslog(2) 操作

-

DAC_READ_SEARCH

-

忽略文件读及目录搜索的DAC访问限制

-

LINUX_IMMUTABLE

-

允许修改文件的IMMUTABLE和APPEND属性标志

-

NET_BROADCAST

-

允许网络广播和多播访问

-

IPC_LOCK

-

允许锁定共享内存片段

-

IPC_OWNER

-

忽略IPC所有权检查

-

SYS_PTRACE

-

允许跟踪任何进程

-

SYS_BOOT

-

允许重新启动系统

-

LEASE

-

允许修改文件锁的FL_LEASE标志

-

WAKE_ALARM

-

触发将唤醒系统的功能,如设置 CLOCK_REALTIME_ALARM 和 CLOCK_BOOTTIME_ALARM 定时器

-

BLOCK_SUSPEND

-

可以阻塞系统挂起的特性

-
- diff --git "a/content/zh/docs/Container/\344\275\277\347\224\250\351\231\220\345\210\266-10.md" "b/content/zh/docs/Container/\344\275\277\347\224\250\351\231\220\345\210\266-10.md" deleted file mode 100644 index d6b0c7ed71f844ade360c066ecfdc4c5dd35737b..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\344\275\277\347\224\250\351\231\220\345\210\266-10.md" +++ /dev/null @@ -1,4 +0,0 @@ -# 使用限制 - -- seccomp可能会影响性能,设置seccomp之前需要对场景进行评估,确定必要时加入seccomp配置。 - diff --git "a/content/zh/docs/Container/\344\275\277\347\224\250\351\231\220\345\210\266-13.md" "b/content/zh/docs/Container/\344\275\277\347\224\250\351\231\220\345\210\266-13.md" deleted file mode 100644 index 643507c2f84b79e18dcbc976a92c7a42b31f92dd..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\344\275\277\347\224\250\351\231\220\345\210\266-13.md" +++ /dev/null @@ -1,24 +0,0 @@ -# 使用限制 - -- isulad默认Capabilities(白名单)配置如下,普通容器进程将默认携带: - - ``` - "CAP_CHOWN", - "CAP_DAC_OVERRIDE", - "CAP_FSETID", - "CAP_FOWNER", - "CAP_MKNOD", - "CAP_NET_RAW", - "CAP_SETGID", - "CAP_SETUID", - "CAP_SETFCAP", - "CAP_SETPCAP", - "CAP_NET_BIND_SERVICE", - "CAP_SYS_CHROOT", - "CAP_KILL", - "CAP_AUDIT_WRITE" - ``` - -- 默认的权能配置,包含了CAP\_SETUID和CAP\_FSETID,如host和容器共享目录,容器可对共享目录的二进制文件进行文件权限设置,host上的普通用户可能使用该特性进行提权攻击。CAP\_AUDIT\_WRITE,容器可以对host写入,存在一定的风险,如果使用场景不需要,推荐在启动容器的时候使用--cap-drop将其删除。 -- 增加Capabilities意味着容器进程具备更大的能力,同时也会开放更多的系统调用接口。 - diff --git "a/content/zh/docs/Container/\344\275\277\347\224\250\351\231\220\345\210\266-16.md" "b/content/zh/docs/Container/\344\275\277\347\224\250\351\231\220\345\210\266-16.md" deleted file mode 100644 index 838a7649e85a847dac4548afbc8f24e4bb20a9ca..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\344\275\277\347\224\250\351\231\220\345\210\266-16.md" +++ /dev/null @@ -1,14 +0,0 @@ -# 使用限制 - -- 确保宿主机已使能SELinux,且daemon端已打开SELinux使能开发(/etc/isulad/daemon.json中“selinux-enabled”字段为true, 或者命令行参数添加--selinux-enabled) -- 确保宿主机上已配置合适的selinux策略,推荐使用container-selinux进行配置 -- 引入SELinux会影响性能,设置SELinux之前需要对场景进行评估,确定必要时打开daemon端SELinux开关并设置容器SELinux配置 -- 对挂载卷进行标签配置时,源目录不允许为/、/usr、/etc、/tmp、/home、/run、/var、/root以及/usr的子目录。 - ->![](public_sys-resources/icon-note.gif) **说明:** ->- 目前iSulad不支持对容器的文件系统打标签,确保容器文件系统及配置目录打上容器可访问标签,需使用chcon命令对其打上标签。 ->- 若iSulad启用SELinux访问控制,建议daemon启动前对/var/lib/isulad目录打上标签,容器容器创建时目录下生产的文件及文件夹将默认继承其标签,例如: -> ``` -> chcon -R system_u:object_r:container_file_t:s0 /var/lib/isulad -> ``` - diff --git "a/content/zh/docs/Container/\344\275\277\347\224\250\351\231\220\345\210\266-20.md" "b/content/zh/docs/Container/\344\275\277\347\224\250\351\231\220\345\210\266-20.md" deleted file mode 100644 index 10446d07981d50177a7b41b684b5d1a321991343..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\344\275\277\347\224\250\351\231\220\345\210\266-20.md" +++ /dev/null @@ -1,16 +0,0 @@ -# 使用限制 - -- hook-spec指定的路径必须是绝对路径。 -- hook-spec指定的文件必须存在。 -- hook-spec指定的路径对应的必须是普通文本文件,格式为json。 -- hook-spec指定的文件大小不能超过10MB。 -- hooks配置的path字段必须为绝对路径。 -- hooks配置的path字段指定文件必须存在。 -- hooks配置的path字段指定文件必须有可执行权限。 -- hooks配置的path字段指定文件的owner必须是root。 -- hooks配置的path字段指定文件必须只有root有写权限。 -- hooks配置的timeout必须大于0。 - -    - - diff --git "a/content/zh/docs/Container/\344\275\277\347\224\250\351\231\220\345\210\266-8.md" "b/content/zh/docs/Container/\344\275\277\347\224\250\351\231\220\345\210\266-8.md" deleted file mode 100644 index dbc4096ccdea86d9576a62cfbfc279451b49d226..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\344\275\277\347\224\250\351\231\220\345\210\266-8.md" +++ /dev/null @@ -1,8 +0,0 @@ -# 使用限制 - -- 容器内健康检查的状态信息最多保存5条。会保存最后得到的5条记录。 -- 容器启动时若健康检查相关参数配置为0,则按照默认值处理。 -- 带有健康检查配置的容器启动后,若iSulad daemon退出,则健康检查不会执行。iSulad daemon再次启动后,正在运行且带有健康检查配置的容器其健康状态会变为starting。之后检查规则同上。 -- 如果健康检查从第一次开始便一直失败,其状态保持与之前一致(starting),直到达到指定失败次数(--health-retries)后变为unhealthy,或者检查成功后变为healthy。 -- 对于OCI类型的runtime的容器,健康检查功能待完善。目前仅完整支持lcr类型的容器。 - diff --git "a/content/zh/docs/Container/\344\275\277\347\224\250\351\231\220\345\210\266.md" "b/content/zh/docs/Container/\344\275\277\347\224\250\351\231\220\345\210\266.md" deleted file mode 100644 index 94e953de6ee42b5e7868ecb7accacfef569c1223..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\344\275\277\347\224\250\351\231\220\345\210\266.md" +++ /dev/null @@ -1,7 +0,0 @@ -# 使用限制 - -- cniVersion的版本,当前只支持0.3.0和0.3.1。由于后期可能需要支持0.1.0和0.2.0,错误日志打印时,保留了0.1.0和0.2.0的提示信息。 -- name:必须是小写字符、数字、'-'以及'.'组成; '.'和'-'不能作为首字符和尾字符; 而且长度不超过200个字符。 -- 配置文件个数不超过200个,单个配置文件大小不超过1MB。 -- 扩展之后的参数,需要根据实际网络需求来配置,不需要使用的可选参数可以不写入到netconf.json文件中。 - diff --git "a/content/zh/docs/Container/\344\277\241\345\217\267\351\207\217\346\256\213\347\225\231.md" "b/content/zh/docs/Container/\344\277\241\345\217\267\351\207\217\346\256\213\347\225\231.md" deleted file mode 100644 index 99f04132c48b20532f638c647710be40ec92b48b..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\344\277\241\345\217\267\351\207\217\346\256\213\347\225\231.md" +++ /dev/null @@ -1,48 +0,0 @@ -# 信号量残留 - -使用devicemapper作为graphdriver时,强制退出强制退出可能导致信号量残留。docker在操作dm的过程中会创建信号量,如果在释放信号量前,daemon被强制退出,可能导致该信号量无法释放,一次强制退出最多泄露一个信号量,泄露概率低。而linux系统有信号量上限限制,当信号量泄露次数达到上线值时将无法创建新的信号量,进而导致docker daemon启动失败。排查方法如下: - -1. 首先查看系统上残留的信号量 - - ``` - $ ipcs - ------ Message Queues -------- - key msqid owner perms used-bytes messages - ------ Shared Memory Segments -------- - key shmid owner perms bytes nattch status - ------ Semaphore Arrays -------- - key semid owner perms nsems - 0x0d4d3358 238977024 root 600 1 - 0x0d4d0ec9 270172161 root 600 1 - 0x0d4dc02e 281640962 root 600 1 - ``` - -2. 接着用dmsetup查看devicemapper创建的信号量,该信号量集合是上一步中查看到的系统信号量的子集 - - ``` - $ dmsetup udevcookies - ``` - -3. 最后查看内核信号量设置上限,第四个值就是当前系统的信号量使用上限 - - ``` - $ cat /proc/sys/kernel/sem - 250 32000 32 128 - ``` - - 如果步骤1中残留的信号量数量与步骤3中看到的信号量上限相等,则是达到上限,此时docker daemon无法正常启动。可以使用下述命令增加信号量使用上限值来让docker恢复启动 - - ``` - $ echo 250 32000 32 1024 > /proc/sys/kernel/sem - ``` - - 也可以手动清理devicemapper残留的信号量(下面是清理一分钟以前申请的dm相关信号量) - - ``` - $ dmsetup udevcomplete_all 1 - This operation will destroy all semaphores older than 1 minutes with keys that have a prefix 3405 (0xd4d). - Do you really want to continue? [y/n]: y - 0 semaphores with keys prefixed by 3405 (0xd4d) destroyed. 0 skipped. - ``` - - diff --git "a/content/zh/docs/Container/\344\277\256\346\224\271\346\223\215\344\275\234.md" "b/content/zh/docs/Container/\344\277\256\346\224\271\346\223\215\344\275\234.md" deleted file mode 100644 index ba9c4b698e28e1f501ee75e044b6439650c77629..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\344\277\256\346\224\271\346\223\215\344\275\234.md" +++ /dev/null @@ -1,51 +0,0 @@ -# 修改操作 - -## docker exec进入容器启动多个进程的注意事项 - -docker exec进入容器执行的第一个命令为 bash 命令时,当退出 exec 时,要保证在这次exec启动的进程都退出了,再执行exit退出,否则会导致exit退出时终端卡主的情况。如果要在exit退出时,exec中启动的进程仍然在后台保持运行,要在启动进程时加上nohup。 - -## docker rename和docker stats 的使用冲突 - -如果使用docker stats 实时监控容器,当使用docker rename重命名容器之后,docker stats中显示的名字将还是原来的名字,不是rename后的名字。 - -## docker rename操作restarting状态的容器可能会失败 - -对一个处于restarting状态的容器执行rename操作的时候,docker会同步修改容器网络的相关配置。由于restarting状态的容器可能还未真正启动起来,网络是不存在的,导致rename操作报错sandbox不存在。建议rename只操作非restarting的稳定状态的容器。 - -## docker cp - -1. 使用docker cp向容器中拷贝文件时,docker ps以及所有对这个容器的操作都将等待docker cp结束之后才能进行。 -2. 容器以非root用户运行,当使用docker cp命令复制主机上的一个非root权限的文件到容器时,文件在容器中的权限角色会变成root。docker cp与cp命令不同,docker cp会修改复制到容器中文件的uid和gid为root。 - -## docker login - -执行docker login后,会将usrer/passwd经 aes(256位)加密后保存在/root/.docker/config.json,同时生成 _root_.docker/aeskey\(权限0600\),用来解密/root/.docker/config.json中的 usrer/passwd。目前不能定时更新aeskey,只能由用户手动删除aeskey来更新。aeskey更新后,不管是否重启过docker daemon,都需要重新login,才可以push。例如: - -``` -root@hello:~/workspace/dockerfile# docker login -Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one. -Username: example Password: -Login Succeeded -root@hello:~/workspace/dockerfile# docker push example/empty -The push refers to a repository [docker.io/example/empty] -547b6288eb33: Layer already exists -latest: digest: sha256:99d4fb4ce6c6f850f3b39f54f8eca0bbd9e92bd326761a61f106a10454b8900b size: 524 -root@hello:~/workspace/dockerfile# rm /root/.docker/aeskey -root@hello:~/workspace/dockerfile# docker push example/empty -WARNING: Error loading config file:/root/.docker/config.json - illegal base64 data at input byte 0 -The push refers to a repository [docker.io/example/empty] -547b6288eb33: Layer already exists -errors: -denied: requested access to the resource is denied -unauthorized: authentication required -root@hello:~/workspace/dockerfile# docker login -Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one. -Username: example -Password: -Login Succeeded -root@hello:~/workspace/dockerfile# docker push example/empty -The push refers to a repository [docker.io/example/empty] -547b6288eb33: Layer already exists -latest: digest: sha256:99d4fb4ce6c6f850f3b39f54f8eca0bbd9e92bd326761a61f106a10454b8900b size: 524 -``` - diff --git "a/content/zh/docs/Container/\345\201\234\346\255\242\344\270\216\345\210\240\351\231\244\345\256\271\345\231\250.md" "b/content/zh/docs/Container/\345\201\234\346\255\242\344\270\216\345\210\240\351\231\244\345\256\271\345\231\250.md" deleted file mode 100644 index 6857810805ac835b82a3e6dae6b2e82243318f10..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\201\234\346\255\242\344\270\216\345\210\240\351\231\244\345\256\271\345\231\250.md" +++ /dev/null @@ -1,74 +0,0 @@ -# 停止与删除容器 - -用docker stop停止名为container1的容器: - -``` -[root@localhost ~]# docker stop container1 -``` - -也可以用docker kill来杀死容器达到停止容器的目的: - -``` -[root@localhost ~]# docker kill container1 -``` - -当容器停止之后,可以使用docker rm删除容器: - -``` -[root@localhost ~]# docker rm container1 -``` - -当然,使用docker rm -f 强制删除容器也是可以的: - -``` -[root@localhost ~]# docker rm -f container1 -``` - -## 注意事项 - -- 禁止使用docker rm -f XXX 删除容器。如果使用强制删除,docker rm会忽略过程中的错误,可能导致容器相关元数据残留。如果使用普通删除,如果删除过程出错,则会删除失败,不会导致元数据残留。 -- 避免使用docker kill命令。docker kill命令发送相关信号给容器内业务进程,依赖于容器内业务进程对信号的处理策略,可能导致业务进程的信号处理行为与指令的预期不符合的情况。 -- docker stop处于restarting状态的容器可能容器不会马上停止。如果一个容器使用了重启规则,当容器处于restarting状态时,docker stop这个容器时有很低的概率会立即返回,容器仍然会在重启规则的作用下再次启动。 -- 不能用docker restart重启加了--rm参数的容器。加了--rm参数的容器在退出时,容器会主动删除,如果重启一个加了--rm的参数的容器, 可能会导致一些异常情况,比如启动容器时,同时加了--rm与-ti参数,对容器执行restart操作,可能会概率性卡住无法退出。 - -## docker stop/restart 指定t参数且t<0时,请确保自己容器的应用会处理stop信号 - -Stop的原理:(Restart会调用Stop流程) - -1. Stop会首先给容器发送Stop 信号(15) -2. 然后等待一定的时间(这个时间就是用户输入的 t) -3. 过了一定时间,如果容器还活着,那么就发送kill信号(9)使容器强制退出 - -输入参数t(单位s)的含义: - -- t<0 : 表示死等,不管多久都等待程序优雅退出,既然用户这么输入了,表示对自己的应用比较放心,认为自己的程序有合理的stop信号的处理机制 -- t=0 : 表示不等,立即发送kill -9 到容器 -- t\>0 : 表示等一定的时间,如果容器还未退出,就发送kill -9 到容器 - -所以如果用户使用t<0 \(比如t=-1\),请确保自己容器的应用会正确处理signal 15,如果容器忽略了该信号,会导致docker stop一直卡住。 - -## 如果容器处于Dead状态,可能底层文件系统处于busy状态,需要手动删除 - -Docker在执行容器删除时,先停止容器的相关进程,之后将容器状态更改为Dead,最后执行容器rootfs的删除操作。当文件系统或者device mapper处于忙碌状态时,最后一步rootfs的删除会失败。docker ps -a查看会发现容器处于Dead状态。Dead状态的容器不能再次启动,需要等待文件系统不繁忙时,手动再次执行docker rm进行删除。 - -## 共享pid namespace容器,子容器处于pause状态会使得父容器stop卡住,并影响docker run命令执行 - -使用--pid参数创建共享pid namespace的父子容器,在执行docker stop父容器时,如果子容器中有进程无法退出(比如处于D状态、pause状态),会产生父容器docker stop命令等待的情况,需要手动恢复这些进程,才能正常执行命令。 - -遇到该问题的时候,请对pause状态的容器使用docker inspect 命令查询 PidMode对应的父容器是否为需要docker stop的容器。如果是该容器,请使用docker unpause将子容器解除pause状态,指令即可继续执行。 - -一般来说,导致该类问题的可能原因是容器对应的pid namespace由于进程残留导致无法被销毁。如果上述方法无法解决问题,可以通过借助linux工具,获取容器内残留进程,确定pid namespace中进程无法退出的原因,解决后容器就可以退出: - -- 获取容器pid namespace id - - ``` - docker inspect --format={{.State.Pid}} CONTAINERID | awk '{print "/proc/"$1"/ns/pid"}' |xargs readlink - ``` - -- 获取该namespace下的线程 - - ``` - ls -l /proc/*/task/*/ns/pid |grep -F PIDNAMESPACE_ID |awk '{print $9}' |awk -F \/ '{print $5}' - ``` - - diff --git "a/content/zh/docs/Container/\345\201\234\346\255\242\345\256\211\345\205\250\345\256\271\345\231\250.md" "b/content/zh/docs/Container/\345\201\234\346\255\242\345\256\211\345\205\250\345\256\271\345\231\250.md" deleted file mode 100644 index c84b62d616083d5d6aad0fa322ef740c1f7eca68..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\201\234\346\255\242\345\256\211\345\205\250\345\256\271\345\231\250.md" +++ /dev/null @@ -1,13 +0,0 @@ -# 停止安全容器 - -- 停止一个安全容器。 - - ``` - docker stop - ``` - -- 停止一个Pod。 - - Pod停止需要注意顺序,pause容器与Pod生命周期相同,因此先停止业务容器后再停止pause容器。 - - diff --git "a/content/zh/docs/Container/\345\201\234\346\255\242\345\256\271\345\231\250.md" "b/content/zh/docs/Container/\345\201\234\346\255\242\345\256\271\345\231\250.md" deleted file mode 100644 index 57e9406d099d3b433f6c844412060aa463a8d7b9..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\201\234\346\255\242\345\256\271\345\231\250.md" +++ /dev/null @@ -1,73 +0,0 @@ -# 停止容器 - -## 描述 - -isula stop命令用于停止一个或多个运行中的容器。首先向容器中的首进程会发送**SIGTERM**信号,在指定时间(默认为10s)内容器未停止时,会发送**SIGKILL**。 - -## 用法 - -``` -isula stop [OPTIONS] CONTAINER [CONTAINER...] -``` - -## 参数 - -stop命令支持参数参考下表。 - -**表 1** stop命令参数列表 - - - - - - - - - - - - - - - - - -

命令

-

参数

-

说明

-

stop

-

-f, --force

-

强制停止正在运行的容器

-

-H, --host

-

指定要连接的iSulad socket文件路径

-

-t, --time

-

先优雅停止,超过这个时间,则强行终止

-
- -## 约束限制 - -- 指定t参数且t<0时,请确保自己容器的应用会处理stop信号。 - - Stop的原理:Stop会首先给容器发送Stop 信号(SIGTERM),然后等待一定的时间(这个时间就是用户输入的 t),过了指定时间如果容器还仍处于运行状态,那么就发送kill信号(SIGKILL)使容器强制退出。 - - -- 输入参数t的含义: - - t<0 : 表示一直等待,不管多久都等待程序优雅退出,既然用户这么输入了,表示对自己的应用比较放心,认为自己的程序有 合理的stop信号的处理机制。 - - t=0 : 表示不等,立即发送kill -9 到容器。 - - t\>0 : 表示等一定的时间,如果容器还未退出,就发送kill -9 到容器。 - - 所以如果用户使用t<0 (比如t=-1),请确保自己容器的应用会正确处理SIGTERM. 如果容器忽略了该信号,会导致isula stop一直卡住。 - - -## 示例 - -停止一个容器 - -``` -$ isula stop fd7376591a9c3d8ee9a14f5d2c2e5255b02cc44cddaabca82170efd4497510e1 -fd7376591a9c3d8ee9a14f5d2c2e5255b02cc44cddaabca82170efd4497510e1 -``` - diff --git "a/content/zh/docs/Container/\345\205\261\344\272\253\345\206\205\345\255\230\351\200\232\351\201\223.md" "b/content/zh/docs/Container/\345\205\261\344\272\253\345\206\205\345\255\230\351\200\232\351\201\223.md" index 1ef627a52a38e05eff145edd278914a0a1eaed6c..159542efcb7f7bec800d96159ec79e41909892fc 100644 --- "a/content/zh/docs/Container/\345\205\261\344\272\253\345\206\205\345\255\230\351\200\232\351\201\223.md" +++ "b/content/zh/docs/Container/\345\205\261\344\272\253\345\206\205\345\255\230\351\200\232\351\201\223.md" @@ -1,10 +1,10 @@ -# 共享内存通道 +# 共享内存通道 -## 功能描述 +## 功能描述 系统容器提供容器与主机进程通过共享内存进行通信的功能,通过在容器创建时配置\--host-channel参数,可以在容器与主机之间共享同一tmpfs,从而达到主机与容器间通信的功能。 -## 参数说明 +## 参数说明

命令

@@ -30,13 +30,13 @@
-## 约束限制 +## 约束限制 - 宿主机上挂载的tmpfs的生命周期为从容器启动到容器删除,容器删除并解除对空间的占用后会移除这片空间。 - 容器删除时会将宿主机上挂载tmpfs的路径删除,所以不允许使用宿主机上已存在的目录。 - 为了宿主机上非root用户运行的进程能够与容器内进行通信,宿主机上tmpfs挂载的权限为1777。 -## 使用示例 +## 使用示例 创建容器时指定\--host-channel参数: diff --git "a/content/zh/docs/Container/\345\205\263\350\201\224\347\273\204\344\273\266audit.md" "b/content/zh/docs/Container/\345\205\263\350\201\224\347\273\204\344\273\266audit.md" deleted file mode 100644 index 503e7532099e0c3a61ea26d1d4f9f49e1ad752d3..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\205\263\350\201\224\347\273\204\344\273\266audit.md" +++ /dev/null @@ -1,34 +0,0 @@ -# 关联组件audit - -docker支持配置audit,但不是强制的。例如: - -``` --w /var/lib/docker -k docker --w /etc/docker -k docker --w /usr/lib/systemd/system/docker.service -k docker --w /usr/lib/systemd/system/docker.socket -k docker --w /etc/sysconfig/docker -k docker --w /usr/bin/docker-containerd -k docker --w /usr/bin/docker-runc -k docker --w /etc/docker/daemon.json -k docker -``` - -配置docker的audit,好处在于可以记录更多信息便于审计,但从安全角度来看,它对防攻击并没有实质性的作用。另一方面,audit配置会导致严重的效率问题,可能导致系统卡顿,生产环境中请谨慎使用。 - -下面以“-w /var/lib/docker -k docker”为例,演示docker audit的配置: - -``` -[root@localhost signal]# cat /etc/audit/rules.d/audit.rules | grep docker -w /var/lib/docker/ -k docker -[root@localhost signal]# auditctl -R /etc/audit/rules.d/audit.rules | grep docker -[root@localhost signal]# auditctl -l | grep docker -w /var/lib/docker/ -p rwxa -k docker -``` - ->![](public_sys-resources/icon-note.gif) **说明:** ->-p \[r|w|x|a\] 和-w一起使用,观察用户对这个目录的读、写、执行或者属性变化(如时间戳变化)。这样的话,在/var/lib/docker目录下的任何文件、目录操作,都会打印日志到audit.log中,从而会有太多的日志往audit.log中记录,会严重地影响auditd, 比如内存、cpu占用等,进而影响os的运行。例如:每次执行"ls /var/lib/docker/containers"都会有类似如下日志记录到/var/log/audit/audit.log中。 - -``` -type=SYSCALL msg=audit(1517656451.457:8097): arch=c000003e syscall=257 success=yes exit=3 a0=ffffffffffffff9c a1=1b955b0 a2=90800 a3=0 items=1 ppid=17821 pid=1925 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts6 ses=4 comm="ls" exe="/usr/bin/ls" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="docker"type=CWD msg=audit(1517656451.457:8097): cwd="/root"type=PATH msg=audit(1517656451.457:8097): item=0 name="/var/lib/docker/containers" inode=1049112 dev=fd:00 mode=040700 ouid=0 ogid=0 rdev=00:00 obj=unconfined_u:object_r:container_var_lib_t:s0 objtype=NORMAL -``` - -   - diff --git "a/content/zh/docs/Container/\345\205\263\350\201\224\347\273\204\344\273\266firewalld.md" "b/content/zh/docs/Container/\345\205\263\350\201\224\347\273\204\344\273\266firewalld.md" deleted file mode 100644 index 442c6f94e36778069586b9b47619bab701c2086e..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\205\263\350\201\224\347\273\204\344\273\266firewalld.md" +++ /dev/null @@ -1,7 +0,0 @@ -# 关联组件firewalld - -需要在重启或拉起firewalld之后重启docker服务,保证docker服务在firewalld之后启动。 - -- firewalld服务启动会清空当前系统的iptables规则,所以在启动docker daemon过程中,重启firewalld可能会导致docker服务插入iptables规则失败,从而导致docker服务启动失败。 -- docker服务启动后重启firewalld服务,或者状态发生了变化(从启动到停止,或者从停止到启动),会导致docker的iptables规则被删除,创建带端口映射的容器失败。 - diff --git "a/content/zh/docs/Container/\345\205\263\350\201\224\347\273\204\344\273\266iptables.md" "b/content/zh/docs/Container/\345\205\263\350\201\224\347\273\204\344\273\266iptables.md" deleted file mode 100644 index c00cf1eb002062908b713e2386e3f5e79c3045c5..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\205\263\350\201\224\347\273\204\344\273\266iptables.md" +++ /dev/null @@ -1,17 +0,0 @@ -# 关联组件iptables - -docker使用--icc=false选项时,可以限制容器之间互通,但若os自带某些规则,可以造成限制容器之间互通失效,例如: - -``` -Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) -... -0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 -... -0 0 DROP all -- docker0 docker0 0.0.0.0/0 0.0.0.0/0 -... -``` - -在Chain FORWARD中,DROP上面多出了一条ACCEPT icmp的规则,造成加了--icc=false后,容器之间也能ping通,但容器之间如果使用udp/tcp协议,对端仍然是不可达的。 - -因此,在容器os中使用docker,如果需要使用--icc=false选项时,建议先在host上清理一下iptables相关的规则。 - diff --git "a/content/zh/docs/Container/\345\205\263\350\201\224\347\273\204\344\273\266journald.md" "b/content/zh/docs/Container/\345\205\263\350\201\224\347\273\204\344\273\266journald.md" deleted file mode 100644 index 6cadb728b826c33740e11d3306a01cf21e60ff87..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\205\263\350\201\224\347\273\204\344\273\266journald.md" +++ /dev/null @@ -1,4 +0,0 @@ -# 关联组件journald - -重启systemd-journald后需要重启docker daemon。journald通过pipe获取docker daemon的日志,如果journald服务重启,会导致该pipe被关闭,docker的日志写入操作便会触发SIGPIPE信号,该错误信号会导致docker daemon crash。由于忽略该信号影响严重,可能导致后续docker daemon的日志无法记录,因此建议用户在重启journald服务或者journald 异常后主动去重启docker daemon,保证docker日志能够被正常记录,避免daemon crash导致的状态异常。 - diff --git "a/content/zh/docs/Container/\345\210\227\345\207\272\351\225\234\345\203\217-4.md" "b/content/zh/docs/Container/\345\210\227\345\207\272\351\225\234\345\203\217-4.md" deleted file mode 100644 index b326df45eda4931f85f0d002f16a7029e7f3c6ad..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\210\227\345\207\272\351\225\234\345\203\217-4.md" +++ /dev/null @@ -1,24 +0,0 @@ -# 列出镜像 - -## 描述 - -列出当前环境中所有镜像。 - -## 用法 - -``` -isula images [OPTIONS] -``` - -## 参数 - -images命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表6 images命令参数列表"。 - -## 示例 - -``` -$ isula images -REF IMAGE ID CREATED SIZE -test:v1 9319da1f5233 2018-03-01 10:55:44 1.273 MB -``` - diff --git "a/content/zh/docs/Container/\345\210\227\345\207\272\351\225\234\345\203\217.md" "b/content/zh/docs/Container/\345\210\227\345\207\272\351\225\234\345\203\217.md" deleted file mode 100644 index 8c1c2bf10db3abc4a4c57f113a8386697b9bfb73..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\210\227\345\207\272\351\225\234\345\203\217.md" +++ /dev/null @@ -1,24 +0,0 @@ -# 列出镜像 - -## 描述 - -列出当前环境中所有镜像。 - -## 用法 - -``` -isula images -``` - -## 参数 - -images命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表6 images命令参数列表"。 - -## 示例 - -``` -$ isula images -REF IMAGE ID CREATED SIZE -rnd-dockerhub.huawei.com/official/busybox:latest e4db68de4ff2 2019-06-15 08:19:54 1.376 MB -``` - diff --git "a/content/zh/docs/Container/\345\210\233\345\273\272\345\256\271\345\231\250.md" "b/content/zh/docs/Container/\345\210\233\345\273\272\345\256\271\345\231\250.md" deleted file mode 100644 index f19a4b07d1a2fc23b5ef6ac692f015f03975d9cf..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\210\233\345\273\272\345\256\271\345\231\250.md" +++ /dev/null @@ -1,308 +0,0 @@ -# 创建容器 - -## 描述 - -isula create 命令用于创建一个新的容器。容器引擎会使用指定的容器镜像创建容器读写层,或者使用指定的本地rootfs作为容器的运行环境。创建完成后,会将容器的ID输出到标准输出,后续可以使用isula start 命令启动该容器。新创建的容器状态为**inited**状态 - -## 用法 - -``` -isula create [OPTIONS] IMAGE [COMMAND] [ARG...] -``` - -## 参数 - -create命令支持参数参考下表。 - -**表 1** create命令参数列表 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

命令

-

参数

-

说明

-

create

-

  

-

--annotation

-

设置容器的annotations。例如支持native.umask选项:

-
--annotation native.umask=normal # 启动的容器umask值为0022
---annotation native.umask=secure # 启动的容器umask值为0027
-

注意如果没有配置该参数,则使用isulad中的umask配置。

-

--cap-drop

-

删除Linux 权限功能

-

--cgroup-parent

-

指定容器cgroup父路径

-

--cpuset-cpus

-

允许执行的CPU(e.g. 0-3,0,1)

-

--cpu-shares

-

CPU份额(相对权重)

-

--cpu-quota

-

限制CPU CFS(完全公平调度器)的配额

-

--device=[]

-

为容器添加一个主机设备

-

--dns

-

添加DNS服务器

-

--dns-opt

-

添加DNS选项

-

--dns-search

-

设定容器的搜索域

-

-e, --env

-

设置环境变量

-

--env-file

-

通过文件配置环境变量

-

--entrypoint

-

启动容器时要运行的入口点

-

--external-rootfs=PATH

-

指定一个不由iSulad管理的rootfs(可以为文件夹或块设备)给容器

-

--files-limit

-

调整容器内能够打开的文件句柄数(-1表示不限制)

-

--group-add=[]

-

指定额外的用户组添加到容器

-

--help

-

打印帮助信息

-

--health-cmd

-

在容器内执行的命令

-

--health-exit-on-unhealthy

-

检测到容器非健康时是否杀死容器

-

--health-interval

-

相邻两次命令执行的间隔时间

-

--health-retries

-

健康检查失败最大的重试次数

-

--health-start-period

-

容器初始化时间

-

--health-timeout

-

单次检查命令执行的时间上限

-

--hook-spec

-

钩子配置文件

-

-H, --host

-

指定要连接的iSulad socket文件路径

-

-h, --hostname

-

容器主机名称

-

-i, --interactive

-

即使没有连接到容器的标准输入,也要保持容器的标准输入打开

-

--hugetlb-limit=[]

-

大页文件限制,例如:--hugetlb-limit 2MB:32MB

-

--log-opt=[]

-

日志驱动程序选项,默认禁用记录容器串口日志功能,可以通过"--log-opt disable-log=false"来开启。

-

-l,--label

-

为容器设置标签

-

--lablel-file

-

通过文件设置容器标签

-

-m, --memory

-

内存限制

-

--memory-reservation

-

设置容器内存限制,默认与--memory一致。可认为--memory是硬限制,--memory-reservation是软限制;当使用内存超过预设值时,会动态调整(系统回收内存时尝试将使用内存降低到预设值以下),但不确保一定不超过预设值。一般可以和--memory一起使用,数值小于--memory的预设值,最小设置为4MB。

-

--memory-swap

-

正整数,内存 + 交换空间,-1 表示不限制

-

--memory-swappiness

-

正整数,swappiness参数值可设置范围在0到100之间。 此参数值越低,就会让Linux系统尽量少用swap分区,多用内存;参数值越高就是反过来,使内核更多的去使用swap空间,默认值为-1,表示使用系统默认值。

-

--mount

-

挂载主机目录到容器中

-

--no-healthcheck

-

禁用健康检查配置

-

--name=NAME

-

容器名

-

--net=none

-

容器连接到网络

-

--pids-limit

-

调整容器内能够执行的进程数(-1表示不限制)

-

--privileged

-

给予容器扩展的特权

-

-R, --runtime

-

容器运行时,参数支持"lcr",忽略大小写,因此"LCR"和"lcr"是等价的

-

--read-only

-

设置容器的根文件系统为只读

-

--restart

-

当容器退出时重启策略

-

系统容器支持--restart on-reboot

-

--storage-opt

-

配置容器的存储驱动选项

-

-t, --tty

-

分配伪终端

-

--ulimit

-

为容器设置ulimit限制

-

-u, --user

-

用户名或UID,格式[<name|uid>][:<group|gid>]

-

-v, --volume=[]

-

挂载一个卷

-
- -## 约束限制 - -- 使用--user或--group-add参数,在容器启动阶段校验user或group时,容器如果使用的是OCI镜像,是从镜像的真实rootfs的etc/passwd和etc/group文件中校验,如果使用的是rootfs文件夹或块设备作为容器的rootfs,则校验的是host中的etc/passwd和etc/group文件;查找时使用的rootfs会忽略-v 和--mount等挂载参数,意味着使用这些参数尝试覆盖etc/passwd和etc/group两个文件时,在查找阶段不生效,只在容器真正启动时生效。生成的配置保存在"iSulad根目录/engine/容器ID/start\_generate\_config.json",文件格式如下: - - ``` - { - "uid": 0, - "gid": 8, - "additionalGids": [ - 1234, - 8 - ] - } - ``` - - -## 示例 - -创建一个新容器 - -``` -$ isula create busybox -fd7376591a9c3d8ee9a14f5d2c2e5255b02cc44cddaabca82170efd4497510e1 -$ isula ps -a -STATUS PID IMAGE COMMAND EXIT_CODE RESTART_COUNT STARTAT FINISHAT RUNTIME ID NAMES inited - busybox "sh" 0 0 - - lcr fd7376591a9c fd7376591a9c4521... -``` - diff --git "a/content/zh/docs/Container/\345\210\233\345\273\272\345\256\271\345\231\250\344\275\277\347\224\250hook-spec.md" "b/content/zh/docs/Container/\345\210\233\345\273\272\345\256\271\345\231\250\344\275\277\347\224\250hook-spec.md" deleted file mode 100644 index 0f6da50f858611a8950e3d05303b81330237379a..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\210\233\345\273\272\345\256\271\345\231\250\344\275\277\347\224\250hook-spec.md" +++ /dev/null @@ -1,177 +0,0 @@ -# 创建容器使用hook-spec - -## 原理及使用场景 - -docker支持hook的扩展特性,hook应用与底层runc的执行过程中,遵循OCI标准:[https://github.com/opencontainers/runtime-spec/blob/master/config.md\#hooks](https://github.com/opencontainers/runtime-spec/blob/master/config.md#hooks) 。 - -hook主要有三种类型:prestart,poststart,poststop。分别作用于容器内用户应用程序启动之前,容器应用程序启动之后,容器应用程序停止之后。 - -## 接口参考 - -当前为docker run和create命令增加了参数“--hook-spec”,后面接spec文件的绝对路径,可以指定容器启动时的需要添加的hook,这些hook会自动附加在docker自己动态创建的hook后面(当前docker只有一个libnetwork的prestart hook),随容器的启动/销毁过程执行用户指定的程序。 - -spec的结构体定义为: - -``` -// Hook specifies a command that is run at a particular event in the lifecycle of a container -type Hook struct{ - Path string `json:"path"` - Args []string `json:"args,omitempty"` - Env []string `json:"env,omitempty"` - Timeout *int `json:"timeout,omitempty"` -} -// Hooks for container setup and teardown -type Hooks struct{ - // Prestart is a list of hooks to be run before the container process is executed. - // On Linux, they are run after the container namespaces are created. - Prestart []Hook `json:"prestart,omitempty"` - // Poststart is a list of hooks to be run after the container process is started. - Poststart []Hook `json:"poststart,omitempty"` - // Poststop is a list of hooks to be run after the container process exits. - Poststop []Hook `json:"poststop,omitempty"` -} -``` - -- Spec文件的path、args、env 都是必填信息; -- Timeout选填\(建议配置\),参数类型为int,不接受浮点数,范围为\[1, 120\]。 -- Spec内容应该是json格式的,格式不对会报错,示例参考前面。 -- 使用的时候既可以\`docker run --hook-spec /tmp/hookspec.json xxx\`, 也可以 \`docker create --hook-spec /tmp/hookspec.json xxx && docker start xxx\`。 - -## 为容器定制特有的hook - -以启动过程中添加一个网卡的过程来说明。下面是相应的hook spec文件内容: - -``` -{ - "prestart": [ - { - "path": "/var/lib/docker/hooks/network-hook", - "args": ["network-hook", "tap0", "myTap"], - "env": [], - "timeout": 5 - } - ], - "poststart":[], - "poststop":[] -} -``` - -指定prestart hook增加一个网络hook的执行。路径是/var/lib/docker/hooks/network-hook,args代表程序的参数,第一个参数一般是程序名字,第二个是程序接受的参数。对于network-hook这个hook程序,需要两个参数,第一个是主机上的网卡名字,第二个是在容器内的网卡重命名。 - -   - -- 注意事项 - 1. hook path必须为docker的graph目录(--graph)下的hooks文件夹下,默认一般为 /var/lib/docker/hooks,可以通过docker info命令查看root路径。 - - ``` - [root@localhost ~]# docker info - ... - Docker Root Dir: /var/lib/docker - ... - ``` - - 这个路径可能会跟随用户手动配置,以及user namespace的使用(daemon --userns-remap)而变化。 path进行软链接解析后,必须以Docker Root Dir/hooks开头(如本例中使用 /var/lib/docker/hooks开头),否则会直接报错。 - - 2. hooks path必须指定绝对路径,因为这个是由daemon处理,相对路径对daemon无意义。同时绝对路径也更满足安全要求。 - 3. hook程序打印到stderr的输出会打印给客户端并对容器的声明周期产生影响(比如启动失败),而输出到stdout的打印信息会被直接忽略。 - 4. 严禁在hook里反向调用docker的指令。 - 5. 配置的hook执行文件必须要有可执行权限,否则hook执行会报错。 - 6. 使用hook时,执行时间应尽量短。如果hook中的prestart时间过长(超过2分钟),则会导致容器启动超时失败,如果hook中的poststop时间过长(超过2分钟),也会导致容器异常。 - - 目前已知的异常如下:执行docker stop命令停止容器时,2分钟超时执行清理时,由于hook还没执行结束,因此会等待hook执行结束(该过程持有锁),从而导致和该容器相关的操作都会卡住,需要等到hook执行结束才能恢复。另外,由于docker stop命令的2分钟超时处理是异步的过程,因此即使docker stop命令返回了成功,容器的状态也依然是up状态,需要等到hook执行完后状态才会修改为exited。 - - - -- 使用建议 - 1. 建议配置hook的Timeout超时时间阈值,超时时间最好在5s以内。 - 2. 建议不要配置过多hook,每个容器建议prestart、poststart、poststop这三个hook都只配置一个,过多hook会导致启动时间长。 - 3. 建议用户识别多个hook之间的依赖关系,如果存在依赖关系,在组合hook配置文件时要根据依赖关系灵活调整顺序,hook的执行顺序是按照配置的spec文件上的先后顺序。 - - -## 多个hook-spec - -当有多个hook配置文件,要运行多个hook时,用户必须自己手工将多个hook配置文件组合成一个配置文件,使用--hook-spec参数指定此合并后的配置文件,方可生效所有的hook;如果配置多个--hook-spec参数,则只有最后一个生效。 - -配置举例: - -hook1.json内容如下: - -``` -# cat /var/lib/docker/hooks/hookspec.json -{ - "prestart": [ - { - "path": "/var/lib/docker/hooks/lxcfs-hook", - "args": ["lxcfs-hook", "--log", "/var/log/lxcfs-hook.log"], - "env": [] - } - ], - "poststart":[], - "poststop":[] -} -``` - -hook2.json内容如下: - -``` -# cat /etc/isulad-tools/hookspec.json -{ - "prestart": [ - { - "path": "/docker-root/hooks/docker-hooks", - "args": ["docker-hooks", "--state", "prestart"], - "env": [] - } - ], - "poststart":[], - "poststop":[ - { - "path": "/docker-root/hooks/docker-hooks", - "args": ["docker-hooks", "--state", "poststop"], - "env": [] - } - ] -} -``` - -手工合并后的json内容如下: - -``` -{ - "prestart":[ - { - "path": "/var/lib/docker/hooks/lxcfs-hook", - "args": ["lxcfs-hook", "--log", "/var/log/lxcfs-hook.log"], - "env": [] - }, - { - "path": "/docker-root/hooks/docker-hooks", - "args": ["docker-hooks", "--state", "prestart"], - "env": [] - } - ], - "poststart":[], - "poststop":[ - { - "path": "/docker-root/hooks/docker-hooks", - "args": ["docker-hooks", "--state", "poststop"], - "env": [] - } - ] -} -``` - -需要注意的是,docker daemon会按照数组顺序依次读取hook配置文件中prestart等action中的hook二进制,进行执行动作。用户需要识别多个hook之间的依赖关系,如果有依赖关系,在组合hook配置文件时要根据依赖关系灵活调整顺序。 - -## 为所有容器定制默认的hook - -Docker daemon同样可以接收--hook-spec的参数,--hook-spec的语义与docker create/run的--hook-spec参数相同,这里不再复述。也可以在/etc/docker/daemon.json里添加hook配置: - -``` -{ - "hook-spec": "/tmp/hookspec.json" -} -``` - -容器在运行时,会首先执行daemon定义的--hook-spec中指定的hooks,然后再执行每个容器单独定制的hooks。 - diff --git "a/content/zh/docs/Container/\345\210\233\345\273\272\345\256\271\345\231\250\351\205\215\347\275\256\345\201\245\345\272\267\346\243\200\346\237\245.md" "b/content/zh/docs/Container/\345\210\233\345\273\272\345\256\271\345\231\250\351\205\215\347\275\256\345\201\245\345\272\267\346\243\200\346\237\245.md" deleted file mode 100644 index 5a4e4bcfe408016aac1c5ee8812b362a51b49cb0..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\210\233\345\273\272\345\256\271\345\231\250\351\205\215\347\275\256\345\201\245\345\272\267\346\243\200\346\237\245.md" +++ /dev/null @@ -1,111 +0,0 @@ -# 创建容器配置健康检查 - -Docker提供了用户定义的对容器进行健康检查的功能。在Dockerfile中配置HEALTHCHECK CMD选项,或在容器创建时配置--health-cmd选项,在容器内部周期性地执行命令,通过命令的返回值来监测容器的健康状态。 - -## 配置方法 - -- 在Dockerfile中添加配置,如: - - ``` - HEALTHCHECK --interval=5m --timeout=3s --health-exit-on-unhealthy=true \ - CMD curl -f http://localhost/ || exit 1 - ``` - - 可配置的选项: - - 1. --interval=DURATION,默认 30s,相邻两次命令执行的间隔时间。另外,容器启动后,经过interval时间进行第一次检查。 - 2. --timeout=DURATION,默认 30s,单次检查命令执行的时间上限,超时则任务命令执行失败。 - 3. --start-period=DURATION,默认 0s,容器初始化时间。初始化期间也会执行健康检查,健康检查失败不会计入最大重试次数。但是,如果在初始化期间运行状况检查成功,则认为容器已启动。之后所有连续的检查失败都将计入最大重试次数。 - 4. --retries=N,默认 3,健康检查失败最大的重试次数。 - 5. --health-exit-on-unhealthy=BOOLEAN,默认false,检测到容器非健康时是否杀死容器 - 6. CMD,必选,在容器内执行的命令。返回值为0表示成功,非0表示失败。 - - 在配置了HEALTHCHECK后创建镜像,HEALTHCHECK相关配置会被写入镜像的配置中。通过docker inspect可以看到。如: - - ``` - "Healthcheck": { - "Test": [ - "CMD-SHELL", - "/test.sh" - ] - }, - ``` - - -- 在容器创建时的配置: - - ``` - docker run -itd --health-cmd "curl -f http://localhost/ || exit 1" --health-interval 5m --health-timeout 3s --health-exit-on-unhealthy centos bash - ``` - - 可配置的选项: - - 1. --health-cmd,必选,在容器内执行的命令。返回值为0表示成功,非0表示失败。 - 2. --health-interval,默认 30s,最大为int64上限(纳秒)相邻两次命令执行的间隔时间。 - 3. --health-timeout,默认 30s,最大为int64上限(纳秒),单次检查命令执行的时间上限,超时则任务命令执行失败。 - 4. --health-start-period,默认 0s,最大为int64上限(纳秒),容器初始化时间。 - 5. --health-retries,默认 3,最大为int32上限,健康检查失败最大的重试次数。 - 6. --health-exit-on-unhealthy,默认false,检测到容器非健康时是否杀死容器。 - - 容器启动后,HEALTHCHECK相关配置会被写入容器的配置中。通过docker inspect可以看到。如: - - ``` - "Healthcheck": { - "Test": [ - "CMD-SHELL", - "/test.sh" - ] - }, - ``` - - - -## 检查规则 - -1. 容器启动后,容器状态中显示health:starting。 -2. 经过start-period时间后开始,以interval为间隔周期性在容器中执行CMD。即:当一次命令执行完毕后,经过interval时间,执行下一次命令。 -3. 若CMD命令在timeout限制的时间内执行完毕,并且返回值为0,则视为一次检查成功,否则视为一次检查失败。检查成功后,容器状态变为health:healthy。 -4. 若CMD命令连续retries次检查失败,则容器状态变为health:unhealthy。失败后容器也会继续进行健康检查。 -5. 容器状态为health:unhealthy时,任意一次检查成功会使得容器状态变为health:healthy。 -6. 设置--health-exit-on-unhealthy的情况下,如果容器因为非被杀死退出(退出返回值137)后,健康检查只有容器在重新启动后才会继续生效。 -7. CMD执行完毕或超时时,docker daemon会将这次检查的起始时间、返回值和标准输出记录到容器的配置文件中。最多记录最新的5条数据。此外,容器的配置文件中还存储着健康检查的相关参数。 - -通过docker ps可以看到容器状态。 - -``` -[root@bac shm]# docker ps -CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES -7de2228674a2 testimg "bash" About an hour ago Up About an hour (unhealthy) cocky_davinci -``` - -运行中的容器的健康检查状态也会被写入容器配置中。通过docker inspect可以看到。 - -``` -"Health": { - "Status": "healthy", - "FailingStreak": 0, - "Log": [ - { - "Start": "2018-03-07T07:44:15.481414707-05:00", - "End": "2018-03-07T07:44:15.556908311-05:00", - "ExitCode": 0, - "Output": "" - }, - { - "Start": "2018-03-07T07:44:18.557297462-05:00", - "End": "2018-03-07T07:44:18.63035891-05:00", - "ExitCode": 0, - "Output": "" - }, - ...... -} -``` - ->![](public_sys-resources/icon-note.gif) **说明:** ->- 容器内健康检查的状态信息最多保存5条。会保存最后得到的5条记录。 ->- 容器内健康检查相关配置同时最多只能有一条生效。Dockerfile中配置的靠后的条目会覆盖靠前的;容器创建时的配置会覆盖镜像中的。 ->- 在Dockerfile中可以通过 HEALTHCHECK NONE来取消引用的镜像中的健康检查配置。在容器运行时可以通过配置--no-healthcheck来取消镜像中的健康检查配置。不允许在启动时同时配置健康检查相关选项与--no-healthcheck选项。 ->- 带有健康检查配置的容器启动后,若docker daemon退出,则健康检查不会执行,一直等待。docker daemon再次启动后,容器健康状态会变为starting。之后检查规则同上。 ->- 构建容器镜像时若健康检查相关参数配置为空,则按照默认值处理。 ->- 容器启动时若健康检查相关参数配置为0,则按照默认值处理。 - diff --git "a/content/zh/docs/Container/\345\210\240\351\231\244\345\256\211\345\205\250\345\256\271\345\231\250.md" "b/content/zh/docs/Container/\345\210\240\351\231\244\345\256\211\345\205\250\345\256\271\345\231\250.md" deleted file mode 100644 index 9ef7a269fdb82c72438806fab339ff07fe4648f5..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\210\240\351\231\244\345\256\211\345\205\250\345\256\271\345\231\250.md" +++ /dev/null @@ -1,14 +0,0 @@ -# 删除安全容器 - -删除前请确保容器已经停止: - -``` -docker rm -``` - -如果需要强制删除一个正在运行的容器,可以使用**-f**强制删除: - -``` -docker rm -f -``` - diff --git "a/content/zh/docs/Container/\345\210\240\351\231\244\345\256\271\345\231\250.md" "b/content/zh/docs/Container/\345\210\240\351\231\244\345\256\271\345\231\250.md" deleted file mode 100644 index 9f8ae16008e3a69be6b186b3adf9f8d381a995e6..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\210\240\351\231\244\345\256\271\345\231\250.md" +++ /dev/null @@ -1,59 +0,0 @@ -# 删除容器 - -## 描述 - -isula rm命令用于删除一个或多个容器。 - -## 用法 - -``` -isula rm [OPTIONS] CONTAINER [CONTAINER...] -``` - -## 参数 - -rm命令支持参数参考下表。 - -**表 1** rm命令参数列表 - - - - - - - - - - - - - - - - - -

命令

-

参数

-

说明

-

rm

-

-f, --force

-

强制移除正在运行的容器

-

-H, --host

-

指定要连接的iSulad socket文件路径

-

-v, --volume

-

移除挂载在容器上的卷(备注:目前iSulad尚不使用此功能)

-
- -## 约束限制 - -- 在IO正常情况,空环境(只有1个容器)删除一个running容器的时间为T1,200个容器的环境(容器无大量IO操作,host IO正常)删除一个running容器所需时间为T2。T2的规格为:T2 = max \{ T1 \* 3, 5 \} 秒钟。 - -## 示例 - -删除一个停止状态的容器 - -``` -$ isula rm fd7376591a9c3d8ee9a14f5d2c2e5255b02cc44cddaabca82170efd4497510e1 -fd7376591a9c3d8ee9a14f5d2c2e5255b02cc44cddaabca82170efd4497510e1 -``` - diff --git "a/content/zh/docs/Container/\345\210\240\351\231\244\351\225\234\345\203\217-35.md" "b/content/zh/docs/Container/\345\210\240\351\231\244\351\225\234\345\203\217-35.md" deleted file mode 100644 index 57bff1abe83c0373ef119b03b5119d07a2959955..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\210\240\351\231\244\351\225\234\345\203\217-35.md" +++ /dev/null @@ -1,6 +0,0 @@ -# 删除镜像 - -## 注意事项 - -禁止使用docker rmi –f XXX删除镜像。如果使用强制删除,docker rmi会忽略过程中的错误,可能导致容器或者镜像关元数据残留。如果使用普通删除,如果删除过程出错,则会删除失败,不会导致元数据残留。 - diff --git "a/content/zh/docs/Container/\345\210\240\351\231\244\351\225\234\345\203\217-6.md" "b/content/zh/docs/Container/\345\210\240\351\231\244\351\225\234\345\203\217-6.md" deleted file mode 100644 index bfbe5e08b521b91c2a6f52c10989939925509a2d..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\210\240\351\231\244\351\225\234\345\203\217-6.md" +++ /dev/null @@ -1,24 +0,0 @@ - -# 删除镜像 - -## 描述 - -删除一个或多个镜像。 - -## 用法 - -``` -isula rmi [OPTIONS] IMAGE [IMAGE...] -``` - -## 参数 - -rmi命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表4 rmi命令参数列表"。 - -## 示例 - -``` -$ isula rmi test:v1 -Image "test:v1" removed -``` - diff --git "a/content/zh/docs/Container/\345\210\240\351\231\244\351\225\234\345\203\217.md" "b/content/zh/docs/Container/\345\210\240\351\231\244\351\225\234\345\203\217.md" deleted file mode 100644 index db1332c1548398bd3ebbc25f6c2f3d132558e14a..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\210\240\351\231\244\351\225\234\345\203\217.md" +++ /dev/null @@ -1,23 +0,0 @@ -# 删除镜像 - -## 描述 - -删除一个或多个镜像。 - -## 用法 - -``` -isula rmi [OPTIONS] IMAGE [IMAGE...] -``` - -## 参数 - -rmi命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表4 rmi命令参数列表"。 - -## 示例 - -``` -$ isula rmi rnd-dockerhub.huawei.com/official/busybox -Image "rnd-dockerhub.huawei.com/official/busybox" removed -``` - diff --git "a/content/zh/docs/Container/\345\211\215\350\250\200.md" "b/content/zh/docs/Container/\345\211\215\350\250\200.md" deleted file mode 100644 index ca2d041655841443e64e723aa732b6df1d702f8e..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\211\215\350\250\200.md" +++ /dev/null @@ -1,51 +0,0 @@ -# 前言 - -## 概述 - -openEuler 软件包中提供容器运行的基础平台 iSula。 - -iSula 为华为容器技术方案品牌,其原意是一种非常强大的蚂蚁,学术上称为“子弹蚁”,因为被它咬一口,犹如被子弹打到那般疼痛。在居住于中南美洲亚马逊丛林的巴西原住民眼里,iSula 是世界上非常强大的昆虫之一。华为容器技术方案品牌因其含义取名。 - -iSula 基础容器平台同时提供 Docker engine 与轻量化容器引擎 iSulad,用户可根据需要自主选择。 - -同时根据不同使用场景,提供多种容器形态,包括: - -- 适合大部分通用场景的普通容器 -- 适合强隔离与多租户场景的安全容器 -- 适合使用systemd管理容器内业务场景的系统容器 - -本文档提供容器引擎的安装和使用方法以及各个容器形态的部署使用方法。 - -## 读者对象 - -本文档主要适用于使用openEuler并需要安装容器的用户。用户需要具备以下经验和技能: - -- 熟悉Linux基本操作 -- 对容器有一定了解 - -## 符号约定 - -在本文中可能出现下列标志,它们所代表的含义如下。 - - - - - - - - - - - - - -

符号

-

说明

-

-

用于传递设备或环境安全警示信息。如不避免则可能会导致设备损坏、数据丢失、设备性能降低或其它不可预知的结果。

-

“须知”不涉及人身伤害。

-

-

对正文中重点信息的补充说明。

-

“说明”不是安全警示信息,不涉及人身、设备及环境伤害信息。

-
- diff --git "a/content/zh/docs/Container/\345\212\240\345\205\245CNI\347\275\221\347\273\234\345\210\227\350\241\250.md" "b/content/zh/docs/Container/\345\212\240\345\205\245CNI\347\275\221\347\273\234\345\210\227\350\241\250.md" deleted file mode 100644 index 41073c90a414f23c4c593b3beaa08a9e415b37cd..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\212\240\345\205\245CNI\347\275\221\347\273\234\345\210\227\350\241\250.md" +++ /dev/null @@ -1,20 +0,0 @@ -# 加入CNI网络列表 - -如果iSulad配置了--network-plugin=cni,而且设置了default网络平面配置,那么在启动Pod的时候,会自动把Pod加入到default网络平面。如果在Pod的配置中配置了附加网络配置,那么启动Pod的时候也会把Pod加入到这些附加网络平面中。 - -Pod配置中和网络相关的还有port\_mappings项,用于设置Pod的端口映射关系。配置方式如下: - -``` -"port_mappings":[ - { - "protocol": 1, - "container_port": 80, - "host_port": 8080 - } -] -``` - -- protocal:表示映射使用的协议,支持tcp(用0标识)、udp(用1标识); -- container\_port:表示容器映射出去的port; -- host\_port:表示映射到主机的port。 - diff --git "a/content/zh/docs/Container/\345\212\240\350\275\275\351\225\234\345\203\217-3.md" "b/content/zh/docs/Container/\345\212\240\350\275\275\351\225\234\345\203\217-3.md" deleted file mode 100644 index b7be464c0215f9af6653db404322e5379b67d6b9..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\212\240\350\275\275\351\225\234\345\203\217-3.md" +++ /dev/null @@ -1,23 +0,0 @@ -# 加载镜像 - -## 描述 - -根据embedded镜像的manifest加载镜像。注意--type的值必须填写embedded。 - -## 用法 - -``` -isula load [OPTIONS] --input=FILE --type=TYPE -``` - -## 参数 - -load命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表5 load命令参数列表"。 - -## 示例 - -``` -$ isula load -i test.manifest --type embedded -Load image from "/root/work/bugfix/tmp/ci_testcase_data/embedded/img/test.manifest" success -``` - diff --git "a/content/zh/docs/Container/\345\212\240\350\275\275\351\225\234\345\203\217.md" "b/content/zh/docs/Container/\345\212\240\350\275\275\351\225\234\345\203\217.md" deleted file mode 100644 index 9e47fd908da8edf3a769f6093963f599431c3ab0..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\212\240\350\275\275\351\225\234\345\203\217.md" +++ /dev/null @@ -1,23 +0,0 @@ -# 加载镜像 - -## 描述 - -从一个tar包加载镜像。该tar包必须是使用docker save命令导出的tar包或格式一致的tar包。 - -## 用法 - -``` -isula load [OPTIONS] -``` - -## 参数 - -load命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表5 load命令参数列表"。 - -## 示例 - -``` -$ isula load -i busybox.tar -Load image from "/root/busybox.tar" success -``` - diff --git "a/content/zh/docs/Container/\345\212\250\346\200\201\345\212\240\350\275\275\345\206\205\346\240\270\346\250\241\345\235\227.md" "b/content/zh/docs/Container/\345\212\250\346\200\201\345\212\240\350\275\275\345\206\205\346\240\270\346\250\241\345\235\227.md" index 281454362784109da32e5a114d9352b2c1e6a5fc..2e5edd1d0676a69525e188fe02f6473164d81b8a 100644 --- "a/content/zh/docs/Container/\345\212\250\346\200\201\345\212\240\350\275\275\345\206\205\346\240\270\346\250\241\345\235\227.md" +++ "b/content/zh/docs/Container/\345\212\250\346\200\201\345\212\240\350\275\275\345\206\205\346\240\270\346\250\241\345\235\227.md" @@ -1,10 +1,10 @@ -# 动态加载内核模块 +# 动态加载内核模块 -## 功能描述 +## 功能描述 容器内业务可能依赖某些内核模块,可通过设置环境变量的方式,在系统容器启动前动态加载容器中业务需要的内核模块到宿主机,此特性需要配合isulad-hooks一起使用,具体使用可参看"容器资源动态管理(syscontainer-tools)"章节。 -## 参数说明 +## 参数说明

命令

@@ -25,13 +25,13 @@
-## 约束限制 +## 约束限制 - 如果加载的内核模块是未经过验证的,或者跟宿主机已有模块冲突的场景,会导致宿主机出现不可预知问题,在做加载内核模块时需要谨慎操作。 - 动态加载内核模块通过将需要加载的内核模块传递给容器,此功能是依靠isulad-tools捕获到容器启动的环境变量实现,依赖isulad-tools的正确安装部署。 - 加载的内核模块需要手动进行删除。 -## 使用示例 +## 使用示例 启动系统容器时,指定-e KERNEL\_MODULES参数,待系统容器启动后,可以看到ip\_vs模块被成功加载到内核中。 diff --git "a/content/zh/docs/Container/\345\215\207\347\272\247\346\226\271\346\263\225.md" "b/content/zh/docs/Container/\345\215\207\347\272\247.md" similarity index 80% rename from "content/zh/docs/Container/\345\215\207\347\272\247\346\226\271\346\263\225.md" rename to "content/zh/docs/Container/\345\215\207\347\272\247.md" index d088e4aa64f3df20e6f83561ff5769e81c7115ab..b9ffd7f394b64640a1b98cd2461ad41a4fdb2fa1 100644 --- "a/content/zh/docs/Container/\345\215\207\347\272\247\346\226\271\346\263\225.md" +++ "b/content/zh/docs/Container/\345\215\207\347\272\247.md" @@ -1,9 +1,9 @@ -# 升级方法 +# 升级 - 若为相同大版本之间的升级,例如从2.x.x版本升级到2.x.x版本,请执行如下命令: ``` - $ sudo yum update -y iSulad + # sudo yum update -y iSulad ``` - 若为不同大版本之间的升级,例如从1.x.x版本升级到2.x.x版本,请先保存当前的配置文件/etc/isulad/daemon.json,并卸载已安装的iSulad软件包,然后安装待升级的iSulad软件包,随后恢复配置文件。 @@ -12,10 +12,10 @@ >- 可通过** sudo rpm -qa |grep iSulad** 或 **isula version** 命令确认当前iSulad的版本号。 >- 相同大版本之间,如果希望手动升级,请下载iSulad及其所有依赖库的RPM包进行升级,参考命令如下: > ``` -> $ sudo rpm -Uhv iSulad-xx.xx.xx-YYYYmmdd.HHMMSS.gitxxxxxxxx.aarch64.rpm +> # sudo rpm -Uhv iSulad-xx.xx.xx-YYYYmmdd.HHMMSS.gitxxxxxxxx.aarch64.rpm > ``` > 若升级失败,可通过--force选项进行强制升级,参考命令如下: > ``` -> $ sudo rpm -Uhv --force iSulad-xx.xx.xx-YYYYmmdd.HHMMSS.gitxxxxxxxx.aarch64.rpm +> # sudo rpm -Uhv --force iSulad-xx.xx.xx-YYYYmmdd.HHMMSS.gitxxxxxxxx.aarch64.rpm > ``` diff --git "a/content/zh/docs/Container/\345\215\270\350\275\275.md" "b/content/zh/docs/Container/\345\215\270\350\275\275.md" index 66723ff1b01663d4c436396a4994fe2544904f9b..19245cfdbfeb03114d28661888e735a99ef88763 100644 --- "a/content/zh/docs/Container/\345\215\270\350\275\275.md" +++ "b/content/zh/docs/Container/\345\215\270\350\275\275.md" @@ -1,24 +1,24 @@ -# 卸载 - -卸载iSulad的操作步骤如下: - -1. 卸载iSulad及其依赖软件包 - - 若使用yum方式安装,卸载的参考命令如下: - - ``` - $ sudo yum remove iSulad - ``` - - - 若使用rpm方式安装,需卸载iSulad及其依赖包,卸载单个RPM包的参考命令如下: - - ``` - sudo rpm -e iSulad-xx.xx.xx-YYYYmmdd.HHMMSS.gitxxxxxxxx.aarch64.rpm - ``` - -2. 镜像、容器、volumes以及相关配置文件不会自动删除,需要手动删除。参考命令如下: - - ``` - $ sudo rm -rf /var/lib/iSulad - ``` - - +# 卸载 + +卸载iSulad的操作步骤如下: + +1. 卸载iSulad及其依赖软件包 + - 若使用yum方式安装,卸载的参考命令如下: + + ``` + # yum remove iSulad + ``` + + - 若使用rpm方式安装,需卸载iSulad及其依赖包,卸载单个RPM包的参考命令如下: + + ``` + # rpm -e iSulad-xx.xx.xx-YYYYmmdd.HHMMSS.gitxxxxxxxx.aarch64.rpm + ``` + +2. 镜像、容器、volumes以及相关配置文件不会自动删除,需要手动删除。参考命令如下: + + ``` + # rm -rf /var/lib/iSulad + ``` + + diff --git "a/content/zh/docs/Container/\345\217\214\345\220\221\350\256\244\350\257\201.md" "b/content/zh/docs/Container/\345\217\214\345\220\221\350\256\244\350\257\201.md" deleted file mode 100644 index 868cde1dee3200a74f986414552ff8f75d575503..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\217\214\345\220\221\350\256\244\350\257\201.md" +++ /dev/null @@ -1,93 +0,0 @@ -# 双向认证 - -## 描述 - -开启该功能后isulad和镜像仓库之间的通信采用https通信,isulad和镜像仓库都会验证对方的合法性。 - -## 用法 - -要支持该功能,需要镜像仓库支持该功能,同时isulad也需要做相应的配置: - -1. 修改isulad的配置\(默认路径/etc/isulad/daemon.json\),将配置里的use-decrypted-key项配置为false。 -2. 需要将相关的证书放置到/etc/isulad/certs.d目录下对应的镜像仓库命名的文件夹下,证书具体的生成方法见docker的官方链接: - - [https://docs.docker.com/engine/security/certificates/](https://docs.docker.com/engine/security/certificates/) - - [https://docs.docker.com/engine/security/https/](https://docs.docker.com/engine/security/https/) - - -1. 执行systemctl restart isulad重启isulad。 - -## 参数 - -可以在/etc/isulad/daemon.json中配置参数,也可以在启动isulad时携带参数: - -``` -isulad --use-decrypted-key=false -``` - -## 示例 - -配置use-decrypted-key参数为false - -``` -$ cat /etc/isulad/daemon.json -{ - "group": "isulad", - "graph": "/var/lib/isulad", - "state": "/var/run/isulad", - "engine": "lcr", - "log-level": "ERROR", - "pidfile": "/var/run/isulad.pid", - "log-opts": { - "log-file-mode": "0600", - "log-path": "/var/lib/isulad", - "max-file": "1", - "max-size": "30KB" - }, - "log-driver": "stdout", - "hook-spec": "/etc/default/isulad/hooks/default.json", - "start-timeout": "2m", - "storage-driver": "overlay2", - "storage-opts": [ - "overlay2.override_kernel_check=true" - ], - "registry-mirrors": [ - "docker.io" - ], - "insecure-registries": [ - "rnd-dockerhub.huawei.com" - ], - "pod-sandbox-image": "", - "image-opt-timeout": "5m", - "native.umask": "secure", - "network-plugin": "", - "cni-bin-dir": "", - "cni-conf-dir": "", - "image-layer-check": false, - "use-decrypted-key": false, - "insecure-skip-verify-enforce": false -} -``` - -将证书放到对应的目录下 - -``` -$ pwd -/etc/isulad/certs.d/my.csp-edge.com:5000 -$ ls -ca.crt tls.cert tls.key -``` - -重启isulad - -``` -$ systemctl restart isulad -``` - -执行pull命令从仓库下载镜像 - -``` -$ isula pull my.csp-edge.com:5000/busybox -Image "my.csp-edge.com:5000/busybox" pulling -Image "my.csp-edge.com:5000/busybox@sha256:f1bdc62115dbfe8f54e52e19795ee34b4473babdeb9bc4f83045d85c7b2ad5c0" pulled -``` - diff --git "a/content/zh/docs/Container/\345\220\257\345\212\250\345\256\211\345\205\250\345\256\271\345\231\250.md" "b/content/zh/docs/Container/\345\220\257\345\212\250\345\256\211\345\205\250\345\256\271\345\231\250.md" deleted file mode 100644 index 275692c25b7ad6278e3a9da5f7f7a9539ff6facd..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\220\257\345\212\250\345\256\211\345\205\250\345\256\271\345\231\250.md" +++ /dev/null @@ -1,57 +0,0 @@ -# 启动安全容器 - -用户可以使用docker-engine或者iSulad作为安全容器的容器引擎,两者的调用方式类似,请用户自行选择一种方式启动安全容器。 - -启动安全容器的操作步骤如下: - -1. 确保安全容器组件已经正确安装部署。 -2. 准备容器镜像。假设容器镜像为busybox,使用docker-engine和iSula容器引擎下载容器镜像的命令分别如下: - - ``` - docker pull busybox - ``` - - ``` - isula pull busybox - ``` - -3. 启动一个安全容器。使用docker-engine和iSula容器引擎启动安全容器的命令分别如下: - - ``` - docker run -tid --runtime kata-runtime --network none busybox - ``` - - ``` - isula run -tid --runtime kata-runtime --network none busybox - ``` - - >![](public_sys-resources/icon-note.gif) **说明:** - >安全容器网络使用仅支持CNI网络,不支持CNM网络,不支持使用-p和--expose暴露容器端口,使用安全容器时需指定参数--net=none。 - -4. 启动一个Pod - 1. 启动pause容器并根据回显获取pod的sandbox-id。使用docker-engine和iSula容器引擎启动的命令分别如下: - - ``` - docker run -tid --runtime kata-runtime --network none --annotation io.kubernetes.docker.type=podsandbox - ``` - - ``` - isula run -tid --runtime kata-runtime --network none --annotation io.kubernetes.cri.container-type=sandbox - ``` - -    - - 1. 创建业务容器并加入到这个pod中。使用docker-engine和iSula容器引擎创建的命令分别如下: - - ``` - docker run -tid --runtime kata-runtime --network none --annotation io.kubernetes.docker.type=container --annotation io.kubernetes.sandbox.id= busybox - ``` - - ``` - isula run -tid --runtime kata-runtime --network none --annotation io.kubernetes.cri.container-type=container --annotation io.kubernetes.cri.sandbox-id= busybox - ``` - - --annotation用于容器类型的标注,这里的docker-engine和isula提供该字段,上游社区的开源docker引擎则不提供。 - - - diff --git "a/content/zh/docs/Container/\345\220\257\345\212\250\345\256\271\345\231\250.md" "b/content/zh/docs/Container/\345\220\257\345\212\250\345\256\271\345\231\250.md" deleted file mode 100644 index 18812efd8f4d8f4a3b1a1813b731e4c59a3ea416..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\220\257\345\212\250\345\256\271\345\231\250.md" +++ /dev/null @@ -1,49 +0,0 @@ -# 启动容器 - -## 描述 - -isula start命令用于启动一个或多个容器。 - -## 用法 - -``` -isula start [OPTIONS] CONTAINER [CONTAINER...] -``` - -## 参数 - -start命令支持参数参考下表。 - -**表 1** start命令参数列表 - - - - - - - - - - - - - - -

命令

-

参数

-

说明

-

start

-

-H, --host

-

指定要连接的iSulad socket文件路径

-

-R, --runtime

-

容器运行时,参数支持"lcr",忽略大小写,因此"LCR"和"lcr"是等价的

-
- -## 示例 - -启动一个新容器 - -``` -$ isula start fd7376591a9c3d8ee9a14f5d2c2e5255b02cc44cddaabca82170efd4497510e1 -``` - diff --git "a/content/zh/docs/Container/\345\221\275\344\273\244\350\241\214\345\217\202\346\225\260\350\257\264\346\230\216.md" "b/content/zh/docs/Container/\345\221\275\344\273\244\350\241\214\345\217\202\346\225\260\350\257\264\346\230\216.md" deleted file mode 100644 index 23b8bb2eda179e09fc956a6037baa824138497bd..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\221\275\344\273\244\350\241\214\345\217\202\346\225\260\350\257\264\346\230\216.md" +++ /dev/null @@ -1,197 +0,0 @@ -# 命令行参数说明 - -**表 1** login命令参数列表 - - - - - - - - - - - - - - - - - - - - -

命令

-

参数

-

说明

-

login

-

  

-

  

-

-H, --host

-

指定要连接的iSulad socket文件路径

-

-p, --password

-

登录镜像仓库的密码

-

--password-stdin

-

从标准输入获取仓库的密码

-

-u, --username

-

登录镜像仓库的用户名

-
- -**表 2** logout命令参数列表 - - - - - - - - - - - -

命令

-

参数

-

说明

-

logout

-

-H, --host

-

指定要连接的iSulad socket文件路径

-
- -**表 3** pull命令参数列表 - - - - - - - - - - - -

命令

-

参数

-

说明

-

pull

-

-H, --host

-

指定要连接的iSulad socket文件路径

-
- -**表 4** rmi命令参数列表 - - - - - - - - - - - - - - -

命令

-

参数

-

说明

-

rmi

-

  

-

-H, --host

-

指定要连接的iSulad socket文件路径

-

-f, --force

-

强制移除镜像

-
- -**表 5** load命令参数列表 - - - - - - - - - - - - - - - - - - - - -

命令

-

参数

-

说明

-

load

-

-H, --host (仅 isula支持)

-

指定要连接的iSulad socket文件路径

-

-i, --input

-

指定从哪里导入镜像。如果是docker类型,则为镜像压缩包路径,如果是embedded类型,则为镜像manifest路径。

-

--tag

-

不使用默认的镜像名称,而是使用TAG指定的名称,type为docker类型时支持该参数

-

-t, --type

-

镜像类型,取值为embedded或docker(默认值)

-
- -**表 6** images命令参数列表 - - - - - - - - - - - - - - -

命令

-

参数

-

说明

-

images

-

  

-

-H, --host

-

指定要连接的iSulad socket文件路径

-

-q, --quit

-

只显示镜像名字

-
- -**表 7** inspect命令参数列表 - - - - - - - - - - - - - - - - - - -

命令

-

参数

-

说明

-

inspect

-

-H, --host

-

指定要连接的iSulad socket文件路径

-

-f, --format

-

使用模板格式化输出

-

-t, --time

-

超时时间的秒数,若在该时间内inspect查询容器信息未执行成功,则停止等待并立即报错,默认为120秒,当配置小于等于0的值,表示不启用timeout机制inspect查询容器信息会一直等待,直到获取容器信息成功后返回。

-
- diff --git "a/content/zh/docs/Container/\345\221\275\344\273\244\350\241\214\345\217\202\350\200\203.md" "b/content/zh/docs/Container/\345\221\275\344\273\244\350\241\214\345\217\202\350\200\203.md" index 75509a1e60736e7b7cbbf447c97eefd782e43702..0067369d6a634ec7115c58446aaaf3aa1fa0cd1e 100644 --- "a/content/zh/docs/Container/\345\221\275\344\273\244\350\241\214\345\217\202\350\200\203.md" +++ "b/content/zh/docs/Container/\345\221\275\344\273\244\350\241\214\345\217\202\350\200\203.md" @@ -1,2 +1,3 @@ -# 命令行参考 - +# 命令行参考 + +本章介绍 Docker 容器相关的命令行。 \ No newline at end of file diff --git "a/content/zh/docs/Container/\345\234\250\345\256\271\345\231\250\344\270\255\346\211\247\350\241\214\344\270\200\346\235\241\346\226\260\347\232\204\345\221\275\344\273\244.md" "b/content/zh/docs/Container/\345\234\250\345\256\271\345\231\250\344\270\255\346\211\247\350\241\214\344\270\200\346\235\241\346\226\260\347\232\204\345\221\275\344\273\244.md" deleted file mode 100644 index c1db5b9384531600c4f0a595f84f0e01cb1ae568..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\234\250\345\256\271\345\231\250\344\270\255\346\211\247\350\241\214\344\270\200\346\235\241\346\226\260\347\232\204\345\221\275\344\273\244.md" +++ /dev/null @@ -1,12 +0,0 @@ -# 在容器中执行一条新的命令 - -由于pause容器仅作为占位容器,如果启动一个Pod时,请在业务容器内执行新的命令,pause容器并没有相应的指令;如果只启动一个容器时,则可以直接执行新增命令: - -``` -docker exec -ti -``` - ->![](public_sys-resources/icon-note.gif) **说明:** ->1. 如遇到docker exec -ti进入容器的同时,另一终端执行docker restart或者docker stop命令造成exec界面卡住的情况,可使用Ctrl+P+Q退出docker exec操作界面。 ->2. 如果使用-d参数则命令在后台执行,不会打印错误信息,其退出码也不能作为命令执行是否正确的判断依据。 - diff --git "a/content/zh/docs/Container/\345\234\250\345\256\271\345\231\250\344\270\255\346\211\247\350\241\214\346\226\260\345\221\275\344\273\244.md" "b/content/zh/docs/Container/\345\234\250\345\256\271\345\231\250\344\270\255\346\211\247\350\241\214\346\226\260\345\221\275\344\273\244.md" deleted file mode 100644 index 7ecf717dca32f5c0a6e6a58d81828014d07abc05..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\234\250\345\256\271\345\231\250\344\270\255\346\211\247\350\241\214\346\226\260\345\221\275\344\273\244.md" +++ /dev/null @@ -1,141 +0,0 @@ -# 在容器中执行新命令 - -## 描述 - -isula exec命令用于正在运行的容器中运行一个新命令。新执行的命令将在容器的默认目录中运行。如果基础镜像指定了自定义目录,则将使用该目录。 - -## 用法 - -``` -isula exec [OPTIONS] CONTAINER COMMAND [ARG...] -``` - -## 参数 - -exec命令支持参数参考下表。 - -**表 1** exec命令参数列表 - - - - - - - - - - - - - - - - - - - - - - - - - - -

命令

-

参数

-

说明

-

exec

-

  

-

-d, --detach

-

后台运行命令

-

-e, --env

-

设置环境变量(备注:目前iSulad尚不使用此功能)

-

-H, --host

-

指定要连接的iSulad socket文件路径

-

-i, --interactive

-

没有连接,也要保持标准输入打开(备注:目前iSulad尚不使用此功能)

-

-t, --tty

-

分配伪终端(备注:目前iSulad尚不使用此功能)

-

-u, --user

-

指定用户登录容器执行命令

-
- -## 约束限制 - -- isula exec 不指定任何参数时,会默认使用-it参数, 表示分配一个伪终端,以交互式的方式进入容器 -- 当使用isula exec 执行脚本,在脚本中执行后台进程时,需使用nohup标志忽略SIGHUP信号。 - - 使用isula exec运行脚本,在脚本中运行后台进程需使用nohup标志。否则内核会在exec执行的进程(session首进程)退出时,向后台执行的进程发送SIGHUP信号,导致后台进程退出,出现僵尸进程。 - -- isula exec 进入容器进程后,不能执行后台程序,否则会出现卡死现象。 - - isula exec执行后台进程的方式如下: - - 1. 使用isula exec进入容器终端,isula exec container\_name bash - 2. 进入容器后,执行 script & - 3. 执行exit,导致终端卡死 - - ``` - isula exec 进入容器后,执行后台程序卡住的原因为isula exec进入容器运行后台while1程序,当bash退出时,while1程序并不会退出,变为孤儿进程由1号 - 进程接管,while1程序是由容器的初始bash进程fork &exec执行的,while1进程复制了bash进程的文件句柄,导致bash退出时,句柄并未完全关闭,导致 - console进程收不到句柄关闭事件,epoll_wait卡住,进程不退出。 - ``` - -- isula exec 不能用后台方式执行,否则可能会出现卡死现象。 - - isula exec后台执行的方式如下: - - 使用**isula exec 脚本 & **的方式后台执行exec,如:isula exec container\_name script & ,isula exec 后台执行,执行的脚本中不断cat某一文件,正常时在当前终端有输出,如果在当前终端执行回车操作,客户端会因读IO失败而退出读stdout的动作,使终端不再输出,服务端由于进程仍然在cat文件,会继续往fifo的buffer里写入数据,当缓存写满时,容器内进程会卡死在write动作上。 - -- 轻量级容器使用exec执行带有管道操作的命令时,建议使用/bin/bash -c 方式执行该命令。 - - 典型应用场景: - - 使用isula exec container\_name -it ls /test | grep "xx" | wc -l,用于统计test目录下xx的文件个数,因exec执行的为"ls /test",其输出通过管道进行grep、wc 处理。exec执行的为"ls /test"的输出会换行,再针对该输出进行处理时,结果有误。 - - 原因:使用exec 执行ls /test,输出带有换行,针对该输出进行“| grep "xx" | wc -l“,处理结果为2(两行) - - ``` - [root@localhost ~]# isula exec -it container ls /test - xx xx10 xx12 xx14 xx3 xx5 xx7 xx9 - xx1 xx11 xx13 xx2 xx4 xx6 xx8 - [root@localhost ~]# - ``` - - 建议处理方式:使用run/exec执行带有管道操作的命令时,使用/bin/bash -c 执行命令,在容器中执行管道操作。 - - ``` - [root@localhost ~]# isula exec -it container /bin/sh -c "ls /test | grep "xx" | wc -l" - 15 - [root@localhost ~]# - ``` - -- 禁止使用echo的方式向exec命令的stdin输入数据,会导致客户端卡死。应该直接将echo的值作为命令行参数传给容器 - - ``` - [root@localhost ~]# echo ls | isula exec 38 /bin/sh - - - ^C - [root@localhost ~]# - ``` - - 上述命令可能出现客户端卡死现象,这是由于上述命令相当于往stdin输入ls,随后EOF被读取,客户端不再发送数据,等待服务端退出,但是服务端无法区分客户端是否需要继续发送数据,因而服务端卡在read数据上,最终导致双方均卡死。 - - 正确的执行方式为: - - ``` - [root@localhost ~]# isula exec 38 ls - bin dev etc home proc root sys tmp usr var - ``` - - -## 示例 - -在运行中的容器中,执行echo命令 - -``` -$ isula exec c75284634bee echo "hello,world" -hello,world -``` - diff --git "a/content/zh/docs/Container/\345\234\272\346\231\257\350\257\264\346\230\216-12.md" "b/content/zh/docs/Container/\345\234\272\346\231\257\350\257\264\346\230\216-12.md" deleted file mode 100644 index 37e5e3c0fe2e2b33568d07b85f1ed902624640f4..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\234\272\346\231\257\350\257\264\346\230\216-12.md" +++ /dev/null @@ -1,8 +0,0 @@ -# 场景说明 - -capabilities机制是linux kernel 2.2之后引入的安全特性,用更小的粒度控制超级管理员权限,可以避免使用 root 权限,将root用户的权限细分为不同的领域,可以分别启用或禁用。capabilities详细信息可通过Linux Programmer's Manual进行查看([capabilities\(7\) - Linux man page](http://man7.org/linux/man-pages/man7/capabilities.7.html)): - -``` -man capabilities -``` - diff --git "a/content/zh/docs/Container/\345\234\272\346\231\257\350\257\264\346\230\216-15.md" "b/content/zh/docs/Container/\345\234\272\346\231\257\350\257\264\346\230\216-15.md" deleted file mode 100644 index d613053ceca2a27acd517b63bb311986a32374ed..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\234\272\346\231\257\350\257\264\346\230\216-15.md" +++ /dev/null @@ -1,4 +0,0 @@ -# 场景说明 - -SELinux\(Security-Enhanced Linux\)是一个linux内核的安全模块,提供了访问控制安全策略机制,iSulad将采用MCS(多级分类安全)实现对容器内进程打上标签限制容器访问资源的方式,减少提权攻击的风险,防止造成更为重要的危害。 - diff --git "a/content/zh/docs/Container/\345\234\272\346\231\257\350\257\264\346\230\216-7.md" "b/content/zh/docs/Container/\345\234\272\346\231\257\350\257\264\346\230\216-7.md" deleted file mode 100644 index cfaee7b4e9094bfc3567c21d50fe48b8f167153f..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\234\272\346\231\257\350\257\264\346\230\216-7.md" +++ /dev/null @@ -1,4 +0,0 @@ -# 场景说明 - -在实际的生产环境中,开发者提供的应用程序或者平台提供的服务难免存在bug,因此,一套管理系统对运行的应用程序进行周期性的健康检查和修复就是不可或缺的。容器健康检查机制便添加了用户定义的对容器进行健康检查的功能。在容器创建时配置--health-cmd选项,在容器内部周期性地执行命令,通过命令的返回值来监测容器的健康状态。 - diff --git "a/content/zh/docs/Container/\345\234\272\346\231\257\350\257\264\346\230\216-9.md" "b/content/zh/docs/Container/\345\234\272\346\231\257\350\257\264\346\230\216-9.md" deleted file mode 100644 index ec70c20f6a54ebefaa867e882992e4cdad615b15..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\234\272\346\231\257\350\257\264\346\230\216-9.md" +++ /dev/null @@ -1,13 +0,0 @@ -# 场景说明 - -seccomp(**secure computing** **mode**)是linux kernel从2.6.23版本开始引入的一种简洁的sandboxing机制。在一些特定场景下,用户需要在容器中执行一些“特权”操作,但又不想启动特权容器,用户经常会在run时添加--cap-add来获得一些“小范围”的权限。对于安全要求比较严格的容器实例,上述的CAP粒度不一定能够满足安全需要,可使用一些办法精细化控制权限范围。 - -- 举例 - - 普通容器场景中,用户使用-v将宿主机某目录(包含某普通用户无法执行的二进制),映射到容器中。 - - 在容器中,可以将二进制修改权限chmod 4777加入S标志位。这样在宿主机上,原先不能运行二进制的普通用户(或者运行此二进制受限),可以在S标志位的添加动作后,在运行此二进制的时候,获取到二进制自身的权限(比如root),从而提权运行或者访问其他文件。 - - 这个场景,如果在严格安全要求下,需要使用seccomp裁剪chmod、fchmod、fchmodat系统调用。 - - diff --git "a/content/zh/docs/Container/\345\234\272\346\231\257\350\257\264\346\230\216.md" "b/content/zh/docs/Container/\345\234\272\346\231\257\350\257\264\346\230\216.md" deleted file mode 100644 index a9de22890aefe0f3f7629f28b3924cb7a7f68566..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\234\272\346\231\257\350\257\264\346\230\216.md" +++ /dev/null @@ -1,4 +0,0 @@ -# 场景说明 - -iSulad默认启动的是普通容器,普通容器适合启动普通进程,其权限非常受限,仅具备/etc/default/isulad/config.json中capabilities所定义的默认权限。当需要特权操作时(比如操作/sys下的设备),需要特权容器完成这些操作,使用该特性,容器内的root将拥有宿主机的root权限, 否则,容器内的root在只是宿主机的普通用户权限。 - diff --git "a/content/zh/docs/Container/\345\237\272\346\234\254\345\256\211\350\243\205\351\205\215\347\275\256.md" "b/content/zh/docs/Container/\345\237\272\346\234\254\345\256\211\350\243\205\351\205\215\347\275\256.md" deleted file mode 100644 index 6893c5938dd1af38c4604399de6a29aaa794686f..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\237\272\346\234\254\345\256\211\350\243\205\351\205\215\347\275\256.md" +++ /dev/null @@ -1 +0,0 @@ -# 基本安装配置 diff --git "a/content/zh/docs/Container/\345\255\230\345\202\250\350\257\264\346\230\216.md" "b/content/zh/docs/Container/\345\255\230\345\202\250\350\257\264\346\230\216.md" deleted file mode 100644 index 01fc44d953f39786fa70575b0b0b88bfca00bd44..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\255\230\345\202\250\350\257\264\346\230\216.md" +++ /dev/null @@ -1,79 +0,0 @@ -# 存储说明 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

文件名

-

文件路径

-

内容

-

*

-

/etc/default/isulad/

-

存放isulad的OCI配置文件和钩子模板文件,文件夹下的配置文件权限设置为0640,sysmonitor检查脚本权限为0550

-

*

-

/etc/isulad/

-

isulad的默认配置文件和seccomp的默认配置文件↵

-

isulad.sock

-

/var/run/

-

管道通信文件,客户端和isulad的通信使用的socket文件

-

isulad.pid

-

/var/run/

-

存放isulad的PID,同时也是一个文件锁防止启动多个isulad实例

-

*

-

/run/lxc/

-

文件锁文件,isula运行过程创建的文件

-

*

-

/var/run/isulad/

-

实时通讯缓存文件,isulad运行过程创建的文件

-

*

-

/var/run/isula/

-

实时通讯缓存文件,isula运行过程创建的文件

-

*

-

/var/lib/lcr/

-

LCR 组件临时目录

-

*

-

/var/lib/isulad/

-

isulad运行的根目录,存放创建的容器配置、日志的默认路径、数据库文件、mount点等

-

/var/lib/isulad/mnt/ :容器rootfs的mount点

-

/var/lib/isulad/engines/lcr/ :存放lcr容器配置目录,每个容器一个目录(以容器名命名)

-
- diff --git "a/content/zh/docs/Container/\345\255\230\345\202\250\351\251\261\345\212\250\351\205\215\347\275\256.md" "b/content/zh/docs/Container/\345\255\230\345\202\250\351\251\261\345\212\250\351\205\215\347\275\256.md" deleted file mode 100644 index b911dc090f1e94cc544e344169f72a5a2ba54a42..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\255\230\345\202\250\351\251\261\345\212\250\351\205\215\347\275\256.md" +++ /dev/null @@ -1,3 +0,0 @@ -# 存储驱动配置 - -本发行版docker支持overlay2和devicemapper两种存储驱动。由于overlay2较devicemapper而言,拥有更好的性能,建议用户在生产环境中优先考虑。 diff --git "a/content/zh/docs/Container/\345\256\211\345\205\250\345\256\271\345\231\250.md" "b/content/zh/docs/Container/\345\256\211\345\205\250\345\256\271\345\231\250.md" index e79e6f69e7339d8e76cc5ddc760b872e6b4de7ed..59dfe5bf88d08372051bf6863ebc7a19312655fd 100644 --- "a/content/zh/docs/Container/\345\256\211\345\205\250\345\256\271\345\231\250.md" +++ "b/content/zh/docs/Container/\345\256\211\345\205\250\345\256\271\345\231\250.md" @@ -1,2 +1,27 @@ -# 安全容器 - +# 概述 + +安全容器是虚拟化技术和容器技术的有机结合,相比普通linux容器,安全容器具有更好的隔离性。 + +普通linux容器利用namespace进行进程间运行环境的隔离,并使用cgroup进行资源限制;因此普通linux容器本质上还是共用同一个内核,单个容器有意或无意影响到内核都会影响到整台宿主机上的容器。 + +安全容器是使用虚拟化层进行容器间的隔离,同一个主机上不同的容器间运行互相不受影响。 + +**图 1** 安全容器架构 +![](figures/kata-arch.png) + +安全容器与Kubernetes中的Pod概念紧密联系,Kubernetes为容器调度管理平台的开源生态标准,它定义了一组容器操作相关接口(Container Runtime Interface 简称CRI)。 + +在CRI标准中,Pod为完成一组服务需要的一组容器集合,是编排调度的最小单元,通常共享IPC和网络namespace;一个Pod必然包含一个占位容器(pause容器)以及一个或多个业务容器,其中pause容器与的生命周期相同。 + +其中安全容器中的一个轻量级虚拟机对应为一个Pod,在此虚拟机中启动的第一个容器为pause容器,以后依次启动的容器为业务容器。 + +安全容器同时提供启动单个容器与启动Pod的功能。 + +安全容器与周边组件的关系如[图2](#fig17734185518269)所示。 + +**图 2** 安全容器与周边组件的关系 +![](figures/安全容器与周边组件的关系.png "安全容器与周边组件的关系") + +>![](public_sys-resources/icon-note.gif) **说明:** +>安全容器的安装和使用需要使用root权限。 + diff --git "a/content/zh/docs/Container/\345\256\211\345\205\250\346\200\247\345\222\214\351\232\224\347\246\273\346\200\247.md" "b/content/zh/docs/Container/\345\256\211\345\205\250\346\200\247\345\222\214\351\232\224\347\246\273\346\200\247.md" index a75cbf3efe5a753c75dc9d5e48306a4e1a7c1040..7f85248df59155c1513a9a2710587011cde4a13b 100644 --- "a/content/zh/docs/Container/\345\256\211\345\205\250\346\200\247\345\222\214\351\232\224\347\246\273\346\200\247.md" +++ "b/content/zh/docs/Container/\345\256\211\345\205\250\346\200\247\345\222\214\351\232\224\347\246\273\346\200\247.md" @@ -1 +1,341 @@ -# 安全性和隔离性 +# 安全性和隔离性 +- [安全性和隔离性](#安全性和隔离性) + - [user namespace多对多](#user-namespace多对多) + - [用户权限控制](#用户权限控制) + - [proc文件系统隔离(lxcfs)](#proc文件系统隔离(lxcfs)) + + +## user-namespace多对多 + +### 功能描述 + +user namespace是将容器的root映射到主机的普通用户,使得容器中的进程和用户在容器里有特权,但是在主机上就是普通权限,防止容器中的进程逃逸到主机上,进行非法操作。更进一步,使用user namespace技术后,容器和主机使用不同的uid和gid,保证容器内部的用户资源和主机资源进行隔离,例如文件描述符等。 + +系统容器支持通过--user-remap接口参数将不同容器的user namespace映射到宿主机不同的user namespace,实现容器user namespace隔离。 + +### 参数说明 + + + + + + + + + + + + +

命令

+

参数

+

参数指定值说明

+

isula create/run

+

--user-remap

+

参数格式为<uid>:<gid>:<offset>,参数说明如下:

+
  • uid、gid为整数型,且必须大于等于0。
  • offset为整数型,且必须大于0,并且小于65536。取值不能太小,否则容器无法启动。
  • uid加上offset的值必须小于等于232-1,gid加上offset的值必须小于等于232-1,否则容器启动会报错。
+
+ +### 约束限制 + +- 如果系统容器指定了--user-remap,那么rootfs目录必须能够被--user-remap指定的uid/gid用户所访问,否则会导致容器user namespace无法访问rootfs,容器启动失败。 +- 容器内所有的id都应该能映射到主机rootfs,某些目录/文件可能是从主机mount到容器,比如/dev/pts目录下面的设备文件,如果offset值太小可能会导致mount失败。 +- uid、gid和offset的值由上层调度平台控制,容器引擎只做合法性检查。 +- --user-remap只适用于系统容器。 +- --user-remap和--privileged不能共存,否则容器启动会报错。 +- 如果uid或gid指定为0,则--user-remap参数不生效。 + +### 使用指导 + +>![](public_sys-resources/icon-note.gif) **说明:** +>指定--user-remap参数前,请先将rootfs下所有目录和文件的uid和gid做整体偏移,偏移量为--user-remap指定uid和gid的偏移量。 +>例如将dev目录的uid和gid整体uid和gid偏移100000的参考命令为: +>chown 100000:100000 dev + +系统容器启动指定--user-remap参数: + +``` +[root@localhost ~]# isula run -tid --user-remap 100000:100000:65535 --system-container --external-rootfs /home/root-fs none /sbin/init +eb9605b3b56dfae9e0b696a729d5e1805af900af6ce24428fde63f3b0a443f4a +``` + +分别在宿主机和容器内查看/sbin/init进程信息: + +``` +[root@localhost ~]# isula exec eb ps aux | grep /sbin/init +root 1 0.6 0.0 21624 9624 ? Ss 15:47 0:00 /sbin/init +[root@localhost ~]# ps aux | grep /sbin/init +100000 4861 0.5 0.0 21624 9624 ? Ss 15:47 0:00 /sbin/init +root 4948 0.0 0.0 213032 808 pts/0 S+ 15:48 0:00 grep --color=auto /sbin/init +``` + +可以看到/sbin/init进程在容器内的owner是root用户,但是在宿主机的owner是uid=100000这个用户。 + +在容器内创建一个文件,然后在宿主机上查看文件的owner: + +``` +[root@localhost ~]# isula exec -it eb bash +[root@localhost /]# echo test123 >> /test123 +[root@localhost /]# exit +exit +[root@localhost ~]# ll /home/root-fs/test123 +-rw-------. 1 100000 100000 8 Aug 2 15:52 /home/root-fs/test123 +``` + +可以看到,在容器内生成了一个文件,它的owner是root,但是在宿主机上看到的owner是id=100000这个用户。 + +## 用户权限控制 + +### 功能描述 + +容器引擎支持通过TLS认证方式来认证用户的身份,并依此控制用户的权限,当前容器引擎可以对接authz插件实现权限控制。 + +### 接口说明 + +通过配置iSulad容器引擎启动参数来指定权限控制插件,daemon配置文件默认为/etc/isulad/daemon.json。 + + + + + + + + + + + + +

配置参数

+

示例

+

说明

+

--authorization-plugin

+

"authorization-plugin": "authz-broker"

+

用户权限认证插件,当前只支持authz-broker。

+
+ +### 约束限制 + +- authz需要配置用户权限策略,策略文件默认为/var/lib/authz-broker/policy.json,该配置文件支持动态修改,修改完即时生效,不需要重启插件服务。 +- 由于容器引擎为root用户启动,放开一般用户使用的一些命令可能会导致该用户不当获得过大权限,需谨慎配置。目前container\_attach、container\_create和container\_exec\_create动作可能会有风险。 +- 对于某些复合操作,比如isula exec、isula attach等命令依赖isula inspect是否有权限,如果用户没有inspect权限会直接报错。 +- 采用SSL/TLS 加密通道在增加安全性的同时也会带来性能损耗,如增加延时,消耗较多的CPU资源,除了数据传输外,加解密需要更大吞吐量,因此在并发场景下,相比非TLS通信,其并发量有一定程度上的下降。经实测,在ARM服务器(Cortex-A72 64核)接近空载情况下,采用TLS并发起容器,其最大并发量在200\~250范围内。 +- 服务端指定--tlsverify时,认证文件默认配置路径为/etc/isulad。且默认文件名分别为ca.pem、cert.pem、key.pem。 + +### 使用示例 + +1. 确认宿主机安装了authz插件,如果需要安装,安装并启动authz插件服务命令如下: + + ``` + [root@localhost ~]# yum install authz + [root@localhost ~]# systemctl start authz + ``` + +2. 要启动该功能,首先需要配置容器引擎和用户的TLS证书。可以使用OPENSSL来生成需要的证书,具体步骤如下: + + ``` + #SERVERSIDE + + # Generate CA key + openssl genrsa -aes256 -passout "pass:$PASSWORD" -out "ca-key.pem" 4096 + # Generate CA + openssl req -new -x509 -days $VALIDITY -key "ca-key.pem" -sha256 -out "ca.pem" -passin "pass:$PASSWORD" -subj "/C=$COUNTRY/ST=$STATE/L=$CITY/O=$ORGANIZATION/OU=$ORGANIZATIONAL_UNIT/CN=$COMMON_NAME/emailAddress=$EMAIL" + # Generate Server key + openssl genrsa -out "server-key.pem" 4096 + + # Generate Server Certs. + openssl req -subj "/CN=$COMMON_NAME" -sha256 -new -key "server-key.pem" -out server.csr + + echo "subjectAltName = DNS:localhost,IP:127.0.0.1" > extfile.cnf + echo "extendedKeyUsage = serverAuth" >> extfile.cnf + + openssl x509 -req -days $VALIDITY -sha256 -in server.csr -passin "pass:$PASSWORD" -CA "ca.pem" -CAkey "ca-key.pem" -CAcreateserial -out "server-cert.pem" -extfile extfile.cnf + + #CLIENTSIDE + + openssl genrsa -out "key.pem" 4096 + openssl req -subj "/CN=$CLIENT_NAME" -new -key "key.pem" -out client.csr + echo "extendedKeyUsage = clientAuth" > extfile.cnf + openssl x509 -req -days $VALIDITY -sha256 -in client.csr -passin "pass:$PASSWORD" -CA "ca.pem" -CAkey "ca-key.pem" -CAcreateserial -out "cert.pem" -extfile extfile.cnf + ``` + + 若要直接使用以上过程作为脚本,需替换各变量为配置数值。生成CA时使用的参数若为空则写为“''”。PASSWORD、COMMON\_NAME、CLIENT\_NAME、VALIDITY为必选项。 + +3. 容器引擎启动时添加TLS相关参数和认证插件相关参数,并保证认证插件的运行。此外,为了使用TLS认证,容器引擎必须使用TCP侦听的方式启动,不能使用传统的unix socket的方式启动。容器demon端配置如下: + + ``` + { + "tls": true, + "tls-verify": true, + "tls-config": { + "CAFile": "/root/.iSulad/ca.pem", + "CertFile": "/root/.iSulad/server-cert.pem", + "KeyFile":"/root/.iSulad/server-key.pem" + }, + "authorization-plugin": "authz-broker" + } + ``` + +4. 然后需要配置策略,对于基本授权流程,所有策略都位于一个配置文件下/var/lib/authz-broker/policy.json。该配置文件支持动态修改,更改时不需要重新启动插件,只需要向authz进程发送SIGHUP信号。文件格式是每行一个策略JSON对象。每行只有一个匹配。具体的策略配置示例如下: + + - 所有用户都可以运行所有iSulad命令:\{"name":"policy\_0","users":\[""\],"actions":\[""\]\}。 + - Alice可以运行所有iSulad命令:\{"name":"policy\_1","users":\["alice"\],"actions":\[""\]\}。 + - 空用户都可以运行所有iSulad命令: \{"name":"policy\_2","users":\[""\],"actions":\[""\]\}。 + - Alice和Bob可以创建新的容器:\{"name":"policy\_3","users":\["alice","bob"\],"actions":\["container\_create"\]\}。 + - service\_account可以读取日志并运行docker top:\{"name":"policy\_4","users":\["service\_account"\],"actions":\["container\_logs","container\_top"\]\}。 + - Alice可以执行任何container操作:\{"name":"policy\_5","users":\["alice"\],"actions":\["container"\]\}。 + - Alice可以执行任何container操作,但请求的种类只能是get:\{"name":"policy\_5","users":\["alice"\],"actions":\["container"\], "readonly":true \}。 + + >![](public_sys-resources/icon-note.gif) **说明:** + >- 配置中匹配action支持正则表达式。 + >- users不支持正则表达式。 + >- users不能有重复用户,即同一用户不能被多条规则匹配。 + +5. 配置并更新完之后,客户端配置TLS参数连接容器引擎,即是以受限的权限访问。 + + ``` + [root@localhost ~]# isula version --tlsverify --tlscacert=/root/.iSulad/ca.pem --tlscert=/root/.iSulad/cert.pem --tlskey=/root/.iSulad/key.pem -H=tcp://127.0.0.1:2375 + ``` + + 如果想默认配置TLS认证进行客户端连接,可以将文件移动到\~/.iSulad,并设置 ISULAD\_HOST和ISULAD\_TLS\_VERIFY变量(而不是每次调用时传递 -H=tcp://$HOST:2375和--tlsverify)。 + + ``` + [root@localhost ~]# mkdir -pv ~/.iSulad + [root@localhost ~]# cp -v {ca,cert,key}.pem ~/.iSulad + [root@localhost ~]# export ISULAD_HOST=localhost:2375 ISULAD_TLS_VERIFY=1 + [root@localhost ~]# isula version + ``` + + +## proc文件系统隔离(lxcfs) + +### 场景描述 + +容器虚拟化带来轻量高效,快速部署的同时,也因其隔离性不够彻底,给用户带来一定程度的使用不便。由于Linux内核namespace本身还不够完善,因此容器在隔离性方面也存在一些缺陷。例如,在容器内部proc文件系统中可以看到宿主机上的proc信息(如meminfo, cpuinfo,stat, uptime等)。利用lxcfs工具可以将容器内的看到宿主机/proc文件系统的内容,替换成本容器实例的相关/proc内容,以便容器内业务获取正确的资源数值。 + +### 接口说明 + +系统容器对外提供两个工具包:一个是lxcfs软件,另外一个是配合lxcfs一起使用的lxcfs-toolkit工具。其中lxcfs作为宿主机daemon进程常驻,lxcfs-toolkit通过hook机制将宿主机的lxcfs文件系统绑定挂载到容器。 + +lxcfs-toolkit命令行格式如下: + +``` +lxcfs-toolkit [OPTIONS] COMMAND [COMMAND_OPTIONS] +``` + + + + + + + + + + + + + + + + + + + + + + + + +

命令

+

功能说明

+

参数

+

remount

+

将lxcfs重新mount到容器中

+

--all:对所有的容器执行remout lxcfs操作

+

--container-id:remount lxcfs到特定的容器ID

+

umount

+

将lxcfs从容器中umount掉

+

--all:对所有的容器执行umout lxcfs操作

+

--container-id:对特定容器执行umount lxcfs操作

+

check-lxcfs

+

检查lxcfs服务是否运行

+

+

prestart

+

在lxcfs服务启动前将/var/lib/lxcfs目录mount到容器中

+

+
+ +### 约束限制 + +- 当前只支持proc文件系统下的cpuinfo, meminfo, stat, diskstats, partitions,swaps和uptime文件,其他的文件和其他内核API文件系统(比如sysfs)未做隔离 。 +- 安装rpm包后会在/var/lib/isulad/hooks/hookspec.json生成样例json文件,用户如果需要增加日志功能,需要在定制时加入--log配置。 +- diskstats只能显示支持cfq调度的磁盘信息,无法显示分区信息。容器内设备会被显示为/dev目录下的名字。若不存在则为空。此外,容器根目录所在设备会被显示为sda。 +- 挂载lxcfs时必须使用slave参数。若使用shared参数,可能会导致容器内挂载点泄露到主机,影响主机运行 。 +- lxcfs支持服务优雅降级使用,若lxcfs服务crash或者不可用,容器内查看到的cpuinfo, meminfo, stat, diskstats, partitions, swaps和uptime均为host信息,容器其它业务功能不受影响。 +- lxcfs底层依赖fuse内核模块以及libfuse库,因此需要内核支持fuse。 +- lxcfs当前仅支持容器内运行64位的app,如果容器内运行32位的app可能会导致app读取到的cpuinfo信息不符合预期。 +- lxcfs只是对容器cgroup进行资源视图模拟,对于容器内的系统调用(例如sysconf)获取到的仍然是主机的信息,lxcfs无法做到内核隔离。 +- lxcfs使用隔离后的cpuinfo显示的cpu信息具有如下特征: + - processor:从0开始依次递增。 + - physical id:从0开始依次递增。 + - sibliing:固定为1。 + - core id:固定为0。 + - cpu cores:固定为1。 + + +### 使用示例 + +1. 首先需要安装lxcfs和lxcfs-toolkit这两个包,并启动lxcfs服务。 + + ``` + [root@localhost ~]# yum install lxcfs lxcfs-toolkit + [root@localhost ~]# systemctl start lxcfs + ``` + +2. 容器启动完成之后查看容器内是否存在lxcfs挂载点。 + + ``` + [root@localhost ~]# isula run -tid -v /var/lib/lxc:/var/lib/lxc --hook-spec /var/lib/isulad/hooks/hookspec.json --system-container --external-rootfs /home/root-fs none init + a8acea9fea1337d9fd8270f41c1a3de5bceb77966e03751346576716eefa9782 + [root@localhost ~]# isula exec a8 mount | grep lxcfs + lxcfs on /var/lib/lxc/lxcfs type fuse.lxcfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other) + lxcfs on /proc/cpuinfo type fuse.lxcfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other) + lxcfs on /proc/diskstats type fuse.lxcfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other) + lxcfs on /proc/meminfo type fuse.lxcfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other) + lxcfs on /proc/partitions type fuse.lxcfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other) + lxcfs on /proc/stat type fuse.lxcfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other) + lxcfs on /proc/swaps type fuse.lxcfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other) + lxcfs on /proc/uptime type fuse.lxcfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other) + ``` + +3. 执行update命令更新容器的cpu和mem资源配置,然后查看容器资源。根据如下回显可知,容器资源视图显示的是容器真实资源数据而不是宿主机的数据。 + + ``` + [root@localhost ~]# isula update --cpuset-cpus 0-1 --memory 1G a8 + a8 + [root@localhost ~]# isula exec a8 cat /proc/cpuinfo + processor : 0 + BogoMIPS : 100.00 + cpu MHz : 2400.000 + Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid + CPU implementer : 0x41 + CPU architecture: 8 + CPU variant : 0x0 + CPU part : 0xd08 + CPU revision : 2 + + processor : 1 + BogoMIPS : 100.00 + cpu MHz : 2400.000 + Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid + CPU implementer : 0x41 + CPU architecture: 8 + CPU variant : 0x0 + CPU part : 0xd08 + CPU revision : 2 + + [root@localhost ~]# isula exec a8 free -m + total used free shared buff/cache available + Mem: 1024 17 997 7 8 1006 + Swap: 4095 0 4095 + ``` + + diff --git "a/content/zh/docs/Container/\345\256\211\345\205\250\347\211\271\346\200\247.md" "b/content/zh/docs/Container/\345\256\211\345\205\250\347\211\271\346\200\247.md" index 928b182dc658cdf98279e0af3b63e8c6465b0fb8..2b42fa30891ad70be07fdea0620f7c9fe89f0d09 100644 --- "a/content/zh/docs/Container/\345\256\211\345\205\250\347\211\271\346\200\247.md" +++ "b/content/zh/docs/Container/\345\256\211\345\205\250\347\211\271\346\200\247.md" @@ -1,2 +1,249 @@ -# 安全特性 - +# 安全特性 +- [安全特性](#安全特性.md) + - [seccomp安全配置场景](#seccomp安全配置场景) + - [capabilities安全配置场景](#capabilities安全配置场景) + - [SELinux安全配置场景](#selinux安全配置场景) + +## seccomp安全配置场景 + +### 场景说明 + +seccomp(**secure computing** **mode**)是linux kernel从2.6.23版本开始引入的一种简洁的sandboxing机制。在一些特定场景下,用户需要在容器中执行一些“特权”操作,但又不想启动特权容器,用户经常会在run时添加--cap-add来获得一些“小范围”的权限。对于安全要求比较严格的容器实例,上述的CAP粒度不一定能够满足安全需要,可使用一些办法精细化控制权限范围。 + +- 举例 + + 普通容器场景中,用户使用-v将宿主机某目录(包含某普通用户无法执行的二进制),映射到容器中。 + + 在容器中,可以将二进制修改权限chmod 4777加入S标志位。这样在宿主机上,原先不能运行二进制的普通用户(或者运行此二进制受限),可以在S标志位的添加动作后,在运行此二进制的时候,获取到二进制自身的权限(比如root),从而提权运行或者访问其他文件。 + + 这个场景,如果在严格安全要求下,需要使用seccomp裁剪chmod、fchmod、fchmodat系统调用。 + + +### 使用限制 + +- seccomp可能会影响性能,设置seccomp之前需要对场景进行评估,确定必要时加入seccomp配置。 + +### 使用指导 + +通过--security-opt将配置文件传给要过滤系统调用的容器。 + +``` +isula run -itd --security-opt seccomp=/path/to/seccomp/profile.json rnd-dockerhub.huawei.com/official/busybox +``` + +>![](public_sys-resources/icon-note.gif) **说明:** +>1. 创建容器时通过--security-opt将配置文件传给容器时,采用默认配置文件(/etc/isulad/seccomp\_default.json)。 +>2. 创建容器时--security-opt设置为unconfined时,对容器不过滤系统调用。 +>3. “/path/to/seccomp/profile.json”需要是绝对路径。 + +#### 获取普通容器的默认seccomp配置 + +- 启动一个普通容器(或者是带--cap-add的容器),并查看默认权限配置: + + ``` + cat /etc/isulad/seccomp_default.json | python -m json.tool > profile.json + ``` + + 可以看到"seccomp"字段中,有很多的"syscalls",在此基础上,仅提取syscalls的部分,参考定制seccomp配置文件,进行定制化操作。 + + ``` + "defaultAction": "SCMP_ACT_ERRNO", + "syscalls": [ + { + "action": "SCMP_ACT_ALLOW", + "name": "accept" + }, + { + "action": "SCMP_ACT_ALLOW", + "name": "accept4" + }, + { + "action": "SCMP_ACT_ALLOW", + "name": "access" + }, + { + "action": "SCMP_ACT_ALLOW", + "name": "alarm" + }, + { + "action": "SCMP_ACT_ALLOW", + "name": "bind" + }, + ]... + ``` + + +- 查看转换为lxc可识别的seccomp配置 + + ``` + cat /var/lib/isulad/engines/lcr/74353e38021c29314188e29ba8c1830a4677ffe5c4decda77a1e0853ec8197cd/seccomp + ``` + + ``` + ... + waitpid allow + write allow + writev allow + ptrace allow + personality allow [0,0,SCMP_CMP_EQ,0] + personality allow [0,8,SCMP_CMP_EQ,0] + personality allow [0,131072,SCMP_CMP_EQ,0] + personality allow [0,131080,SCMP_CMP_EQ,0] + personality allow [0,4294967295,SCMP_CMP_EQ,0] + ... + ``` + + +#### 定制seccomp配置文件 + +在启动容器的时候使用--security-opt引入seccomp配置文件,容器实例会按照配置文件规则进行限制系统API的运行。首先获取普通容器的默认seccomp,得到完整模板,然后按照本节定制配置文件,启动容器: + +``` +isula run --rm -it --security-opt seccomp:/path/to/seccomp/profile.json rnd-dockerhub.huawei.com/official/busybox +``` + +配置文件模板: + +``` +{ +"defaultAction": "SCMP_ACT_ALLOW", +"syscalls": [ +{ +"name": "syscall-name", +"action": "SCMP_ACT_ERRNO", +"args": null +} +] +} +``` + +>![](public_sys-resources/icon-notice.gif) **须知:** +>- defaultAction、syscalls:对应的action的类型是一样的,但其值是不能一样的,目的就是让所有的syscal都有一个默认的action,并且如果syscalls数组中有明确的定义,就以syscalls中的为准,由于defaultAction、action的值不一样,就能保证action不会有冲突。当前支持的action有: +> "SCMP\_ACT\_ERRNO":禁止,并打印错误信息。 +> "SCMP\_ACT\_ALLOW":允许。 +>- syscalls: 数组,可以只有一个syscall,也可以有多个,可以带args,也可以不带。 +>- name:要过滤的syscall。 +>- args:数组,里面的每个object的定义如下: +> ``` +> type Arg struct { +> Index uint `json:"index"` //参数的序号,如open(fd, buf, len),fd 对应的就是0,buf为1 +> Value uint64 `json:"value"` //跟参数进行比较的值 +> ValueTwo uint64 `json:"value_two"` //仅当Op=MaskEqualTo时起作用,用户传入值跟Value按位与操作后,跟ValueTwo进行比较,若相等则执行action。 +> Op Operator `json:"op"` +> } +> ``` +> args中的Op,其取值可以下页面的任意一种: +> "SCMP\_CMP\_NE": NotEqualTo +> "SCMP\_CMP\_LT": LessThan +> "SCMP\_CMP\_LE": LessThanOrEqualTo +> "SCMP\_CMP\_EQ": EqualTo +> "SCMP\_CMP\_GE": GreaterThanOrEqualTo +> "SCMP\_CMP\_GT": GreaterThan +> "SCMP\_CMP\_MASKED\_EQ": MaskEqualTo + +## capabilities安全配置场景 + +### 场景说明 + +capabilities机制是linux kernel 2.2之后引入的安全特性,用更小的粒度控制超级管理员权限,可以避免使用 root 权限,将root用户的权限细分为不同的领域,可以分别启用或禁用。capabilities详细信息可通过Linux Programmer's Manual进行查看([capabilities\(7\) - Linux man page](http://man7.org/linux/man-pages/man7/capabilities.7.html)): + +``` +man capabilities +``` + +### 使用限制 + +- isulad默认Capabilities(白名单)配置如下,普通容器进程将默认携带: + + ``` + "CAP_CHOWN", + "CAP_DAC_OVERRIDE", + "CAP_FSETID", + "CAP_FOWNER", + "CAP_MKNOD", + "CAP_NET_RAW", + "CAP_SETGID", + "CAP_SETUID", + "CAP_SETFCAP", + "CAP_SETPCAP", + "CAP_NET_BIND_SERVICE", + "CAP_SYS_CHROOT", + "CAP_KILL", + "CAP_AUDIT_WRITE" + ``` + +- 默认的权能配置,包含了CAP\_SETUID和CAP\_FSETID,如host和容器共享目录,容器可对共享目录的二进制文件进行文件权限设置,host上的普通用户可能使用该特性进行提权攻击。CAP\_AUDIT\_WRITE,容器可以对host写入,存在一定的风险,如果使用场景不需要,推荐在启动容器的时候使用--cap-drop将其删除。 +- 增加Capabilities意味着容器进程具备更大的能力,同时也会开放更多的系统调用接口。 + +### 使用指导 + +iSulad使用--cap-add/--cap-drop给容器增加/删去特定的权限,在非必要情况下,不要给容器增加额外的权限,推荐将容器默认但非必要的权限也去掉。 + +``` +isula run --rm -it --cap-add all --cap-drop SYS_ADMIN rnd-dockerhub.huawei.com/official/busybox +``` + +## SELinux安全配置场景 + +### 场景说明 + +SELinux\(Security-Enhanced Linux\)是一个Linux内核的安全模块,提供了访问控制安全策略机制,iSulad将采用MCS(多级分类安全)实现对容器内进程打上标签限制容器访问资源的方式,减少提权攻击的风险,防止造成更为重要的危害。 + +### 使用限制 + +- 确保宿主机已使能SELinux,且daemon端已打开SELinux使能开发(/etc/isulad/daemon.json中“selinux-enabled”字段为true, 或者命令行参数添加--selinux-enabled) +- 确保宿主机上已配置合适的selinux策略,推荐使用container-selinux进行配置 +- 引入SELinux会影响性能,设置SELinux之前需要对场景进行评估,确定必要时打开daemon端SELinux开关并设置容器SELinux配置 +- 对挂载卷进行标签配置时,源目录不允许为/、/usr、/etc、/tmp、/home、/run、/var、/root以及/usr的子目录。 + +>![](public_sys-resources/icon-note.gif) **说明:** +>- 目前iSulad不支持对容器的文件系统打标签,确保容器文件系统及配置目录打上容器可访问标签,需使用chcon命令对其打上标签。 +>- 若iSulad启用SELinux访问控制,建议daemon启动前对/var/lib/isulad目录打上标签,容器容器创建时目录下生产的文件及文件夹将默认继承其标签,例如: +> ``` +> chcon -R system_u:object_r:container_file_t:s0 /var/lib/isulad +> ``` + +### 使用指导 + +- daemon端使能selinux: + + ``` + isulad --selinux-enabled + ``` + + +   + +- 启动容器时配置selinux标签安全上下文 + + --security-opt="label=user:USER" 配置安全上下文用户 + + --security-opt="label=role:ROLE" 配置安全上下文角色 + + --security-opt="label=type:TYPE" 配置安全上下文类型 + + --security-opt="label=level:LEVEL" 配置安全上下文域 + + --security-opt="label=disable" 容器禁用SELinux配置 + + ``` + $ isula run -itd --security-opt label=type:container_t --security-opt label=level:s0:c1,c2 rnd-dockerhub.huawei.com/official/centos + 9be82878a67e36c826b67f5c7261c881ff926a352f92998b654bc8e1c6eec370 + ``` + + +   + +- 为挂载卷打selinux标签\('z'为共享模式\) + + ``` + $ isula run -itd -v /test:/test:z rnd-dockerhub.huawei.com/official/centos + 9be82878a67e36c826b67f5c7261c881ff926a352f92998b654bc8e1c6eec370 + + $ls -Z /test + system_u:object_r:container_file_t:s0 file + ``` + +    + + diff --git "a/content/zh/docs/Container/\345\256\211\345\205\250\351\205\215\347\275\256seccomp.md" "b/content/zh/docs/Container/\345\256\211\345\205\250\351\205\215\347\275\256seccomp.md" deleted file mode 100644 index fee830777edde971a67133bcbbf3b5ecceb4f053..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\256\211\345\205\250\351\205\215\347\275\256seccomp.md" +++ /dev/null @@ -1,8 +0,0 @@ -# 安全配置seccomp - -在做容器网络性能测试时发现,Docker相对于原生内核namespace性能有所下降,经分析开启seccomp后,系统调用(如:sendto)不会通过system\_call\_fastpath进行,而是调用tracesys,这会带来性能大幅下降。因此,建议在有高性能要求的业务的容器场景下关闭seccomp,示例如下: - -``` -docker run -itd --security-opt seccomp=unconfined busybox:latest -``` - diff --git "a/content/zh/docs/Container/\345\256\211\350\243\205-\345\215\207\347\272\247\344\270\216\345\215\270\350\275\275.md" "b/content/zh/docs/Container/\345\256\211\350\243\205-\345\215\207\347\272\247\344\270\216\345\215\270\350\275\275.md" new file mode 100644 index 0000000000000000000000000000000000000000..6c4e4208f5576f4c32f39b658e479a622df62cc9 --- /dev/null +++ "b/content/zh/docs/Container/\345\256\211\350\243\205-\345\215\207\347\272\247\344\270\216\345\215\270\350\275\275.md" @@ -0,0 +1,3 @@ +# 安装、升级与卸载 + +本章介绍 iSulad 的安装、安装后配置,以及升级和卸载的方法。 \ No newline at end of file diff --git "a/content/zh/docs/Container/\345\256\211\350\243\205\344\270\216\351\203\250\347\275\262.md" "b/content/zh/docs/Container/\345\256\211\350\243\205\344\270\216\351\203\250\347\275\262.md" deleted file mode 100644 index 76da5673949fda66cf99b49df0c2a3912a368fd4..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\256\211\350\243\205\344\270\216\351\203\250\347\275\262.md" +++ /dev/null @@ -1,4 +0,0 @@ -# 安装与部署 - - - diff --git "a/content/zh/docs/Container/\345\256\211\345\205\250\345\256\271\345\231\250\345\205\250\345\261\200\351\205\215\347\275\256\346\226\207\344\273\266configuration-toml.md" "b/content/zh/docs/Container/\345\256\211\350\243\205\344\270\216\351\205\215\347\275\256-2.md" similarity index 31% rename from "content/zh/docs/Container/\345\256\211\345\205\250\345\256\271\345\231\250\345\205\250\345\261\200\351\205\215\347\275\256\346\226\207\344\273\266configuration-toml.md" rename to "content/zh/docs/Container/\345\256\211\350\243\205\344\270\216\351\205\215\347\275\256-2.md" index 4aec75883ce2aa25aaea02581c6aa69abcdaa5db..b0ec578131a3ec43447fffbfcc252a2b7cf381c2 100644 --- "a/content/zh/docs/Container/\345\256\211\345\205\250\345\256\271\345\231\250\345\205\250\345\261\200\351\205\215\347\275\256\346\226\207\344\273\266configuration-toml.md" +++ "b/content/zh/docs/Container/\345\256\211\350\243\205\344\270\216\351\205\215\347\275\256-2.md" @@ -1,28 +1,125 @@ -# 安全容器全局配置文件configuration.toml - -安全容器提供全局配置文件configuration.toml进行配置开关,用户也可以定制安全容器配置文件路径与配置选项。 - -在docker-engine的runtimeArges字段可以利用--kata-config指定私有文件,默认的配置文件路径为/usr/share/defaults/kata-containers/configuration.toml。 - -常用配置文件字段如下,详细的配置文件选项参见“安全容器 > 附录 > configuration.toml配置说明”。 - -1. hypervisor.qemu - - path :指定虚拟化qemu执行路径。 - - kernel :指定guest kernel执行路径。 - - initrd :指定guest initrd执行路径。 - - machin\_type :指定模拟芯片类型,其中arm为virt,x86架构为pc。 - - kernel\_params :指定guest内核运行参数。 - -2. proxy.kata - - path :指定kata-proxy运行路径。 - - enable\_debug :kata-proxy进程debug开关。 - -3. agent.kata - - enable\_blk\_mount :开启block设备guest挂载。 - - enable\_debug :kata-agent进程debug开关。 - -4. runtime - - enable\_cpu\_memory\_hotplug:CPU和内存热插拔开关。 - - enable\_debug:kata-runtime进程debug开关。 - - +# 安装与配置 + +- [安装与配置](#安装部署.md) + - [安装方法](#安装方法) + - [配置方法](#配置方法) + + +## 安装方法 + +### 前提条件 + + +- 安全容器的安装需要使用root权限。 +- 为了获取更好的性能体验,安全容器需要运行在裸金属服务器上,**暂不支持安全容器运行在虚拟机内**。 +- 安全容器运行依赖以下组件,请确保环境上已安装所需版本的依赖组件。以下组件来自配套的openEuler版本。如果使用iSula容器引擎,请参考iSula容器引擎的[安装方法](#安装方法.md)章节安装iSulad。 + - docker-engine + - qemu + + +### 安装操作 + +安全容器发布组件集成在同一个kata-containers-<_version_\>.rpm包中,使用rpm命令可以直接安装对应的软件,其中version为。 + +``` +rpm -ivh kata-containers-.rpm +``` + +## 配置方法 + +### docker-engine容器引擎的配置 + +为了让docker-engine容器引擎支持新的容器运行时kata-runtime,需要通过以下步骤对docker-engine容器引擎进行配置: + +1. 请保证环境上所有的软件包(docker-engine、kata-containers)都已经安装完毕。 +2. 停止docker-engine。 + + ``` + systemctl stop docker + ``` + +3. 修改docker-engine的配置文件/etc/docker/daemon.json,并新增如下配置: + + ``` + { + "runtimes": { + "kata-runtime": { + "path": "/usr/bin/kata-runtime", + "runtimeArgs": [ + "--kata-config", + "/usr/share/defaults/kata-containers/configuration.toml" + ] + } + } + } + ``` + +4. 重新启动docker-engine。 + + ``` + systemctl start docker + ``` + + +### iSula容器引擎的配置 + +与docker-engine容器引擎类似,为了让iSula容器引擎支持新的容器运行时kata-runtime,需要通过以下步骤对iSula容器引擎进行配置: + +1. 请保证环境上所有的软件包(iSulad、kata-containers)都已经安装完毕。 +2. 停止isulad。 + + ``` + systemctl stop isulad + ``` + +3. 修改iSula容器引擎的配置文件/etc/isulad/daemon.json,并新增如下配置: + + ``` + { + "runtimes": { + "kata-runtime": { + "path": "/usr/bin/kata-runtime", + "runtime-args": [ + "--kata-config", + "/usr/share/defaults/kata-containers/configuration.toml" + ] + } + } + } + ``` + +4. 重新启动isulad。 + + ``` + systemctl start isulad + ``` + + +### 安全容器全局配置文件configuration-toml + +安全容器提供全局配置文件configuration.toml进行配置开关,用户也可以定制安全容器配置文件路径与配置选项。 + +在docker-engine的runtimeArges字段可以利用--kata-config指定私有文件,默认的配置文件路径为/usr/share/defaults/kata-containers/configuration.toml。 + +常用配置文件字段如下,详细的配置文件选项参见“安全容器 > 附录 > configuration.toml配置说明”。 + +1. hypervisor.qemu + - path :指定虚拟化qemu执行路径。 + - kernel :指定guest kernel执行路径。 + - initrd :指定guest initrd执行路径。 + - machin\_type :指定模拟芯片类型,其中arm为virt,x86架构为pc。 + - kernel\_params :指定guest内核运行参数。 + +2. proxy.kata + - path :指定kata-proxy运行路径。 + - enable\_debug :kata-proxy进程debug开关。 + +3. agent.kata + - enable\_blk\_mount :开启block设备guest挂载。 + - enable\_debug :kata-agent进程debug开关。 + +4. runtime + - enable\_cpu\_memory\_hotplug:CPU和内存热插拔开关。 + - enable\_debug:kata-runtime进程debug开关。 + + diff --git "a/content/zh/docs/Container/\351\203\250\347\275\262\346\226\271\345\274\217.md" "b/content/zh/docs/Container/\345\256\211\350\243\205\344\270\216\351\205\215\347\275\256.md" similarity index 61% rename from "content/zh/docs/Container/\351\203\250\347\275\262\346\226\271\345\274\217.md" rename to "content/zh/docs/Container/\345\256\211\350\243\205\344\270\216\351\205\215\347\275\256.md" index 6eae396342785547a34732322e5318cbce7be5e6..ba1a4f3a5434cc5ca2b683eae10c1f446cf03b3a 100644 --- "a/content/zh/docs/Container/\351\203\250\347\275\262\346\226\271\345\274\217.md" +++ "b/content/zh/docs/Container/\345\256\211\350\243\205\344\270\216\351\205\215\347\275\256.md" @@ -1,71 +1,112 @@ -# 部署方式 - -轻量级容器引擎(iSulad)服务端daemon为isulad,isulad可以通过配置文件进行配置,也可以通过命令行的方式进行配置,例如:isulad --xxx,优先级从高到低是:命令行方式\>配置文件\>代码中默认配置。 - ->![](public_sys-resources/icon-note.gif) **说明:** ->如果采用systemd管理iSulad进程,修改/etc/sysconfig/iSulad文件中的OPTIONS字段,等同于命令行方式进行配置。 - -- **命令行方式** - - 在启动服务的时候,直接通过命令行进行配置。其配置选项可通过以下命令查阅: - - ``` - $ isulad --help - lightweight container runtime daemon - - Usage: isulad [global options] - - GLOBAL OPTIONS: - - --authorization-plugin Use authorization plugin - --cgroup-parent Set parent cgroup for all containers - --cni-bin-dir The full path of the directory in which to search for CNI plugin binaries. Default: /opt/cni/bin - --cni-conf-dir The full path of the directory in which to search for CNI config files. Default: /etc/cni/net.d - --default-ulimit Default ulimits for containers (default []) - -e, --engine Select backend engine - -g, --graph Root directory of the iSulad runtime - -G, --group Group for the unix socket(default is isulad) - --help Show help - --hook-spec Default hook spec file applied to all containers - -H, --host The socket name used to create gRPC server - --image-layer-check Check layer intergrity when needed - --image-opt-timeout Max timeout(default 5m) for image operation - --insecure-registry Disable TLS verification for the given registry - --insecure-skip-verify-enforce Force to skip the insecure verify(default false) - --log-driver Set daemon log driver, such as: file - -l, --log-level Set log level, the levels can be: FATAL ALERT CRIT ERROR WARN NOTICE INFO DEBUG TRACE - --log-opt Set daemon log driver options, such as: log-path=/tmp/logs/ to set directory where to store daemon logs - --native.umask Default file mode creation mask (umask) for containers - --network-plugin Set network plugin, default is null, suppport null and cni - -p, --pidfile Save pid into this file - --pod-sandbox-image The image whose network/ipc namespaces containers in each pod will use. (default "rnd-dockerhub.huawei.com/library/pause-${machine}:3.0") - --registry-mirrors Registry to be prepended when pulling unqualified images, can be specified multiple times - --start-timeout timeout duration for waiting on a container to start before it is killed - -S, --state Root directory for execution state files - --storage-driver Storage driver to use(default overlay2) - -s, --storage-opt Storage driver options - --tls Use TLS; implied by --tlsverify - --tlscacert Trust certs signed only by this CA (default "/root/.iSulad/ca.pem") - --tlscert Path to TLS certificate file (default "/root/.iSulad/cert.pem") - --tlskey Path to TLS key file (default "/root/.iSulad/key.pem") - --tlsverify Use TLS and verify the remote - --use-decrypted-key Use decrypted private key by default(default true) - -V, --version Print the version - --websocket-server-listening-port CRI websocket streaming service listening port (default 10350) - ``` - - 示例: 启动isulad,并将日志级别调整成DEBUG - - ``` - $ isulad -l DEBUG - ``` - - -- **配置文件方式** - - isulad配置文件为/etc/isulad/daemon.json,各配置字段说明如下: - - +# 安装与配置 +本章介绍iSulad的安装、安装后配置,以及升级和卸载的方法。 +>![](public_sys-resources/icon-note.gif) **说明:** +>iSulad的安装、升级、卸载均需要使用root权限。 + + +- [安装与配置](#安装与配置) + - [安装方法](#安装方法) + - [配置方法](#配置方法) + + + + +## 安装方法 + +iSulad可以通过yum或rpm命令两种方式安装,由于yum会自动安装依赖,而rpm命令需要手动安装所有依赖,所以推荐使用yum安装。 + +这里给出两种安装方式的操作方法。 + +- (推荐)使用yum安装iSulad,参考命令如下: + + ``` + # sudo yum install -y iSulad + ``` + + +- 使用rpm安装iSulad,需要下载iSulad及其所有依赖库的RPM包,然后手动安装。安装单个iSulad的RPM包(依赖包安装方式相同),参考命令如下: + + ``` + # sudo rpm -ihv iSulad-xx.xx.xx-YYYYmmdd.HHMMSS.gitxxxxxxxx.aarch64.rpm + ``` + + + ``` + # isulad -l DEBUG + ``` + +## 配置方法 + +iSulad 安装完成后,可以根据需要进行相关配置。 + +### 配置方式 + +轻量级容器引擎(iSulad)服务端daemon为isulad,isulad可以通过配置文件进行配置,也可以通过命令行的方式进行配置,例如:isulad --xxx,优先级从高到低是:命令行方式\>配置文件\>代码中默认配置。 + +>![](public_sys-resources/icon-note.gif) **说明:** +>如果采用systemd管理iSulad进程,修改/etc/sysconfig/iSulad文件中的OPTIONS字段,等同于命令行方式进行配置。 + +- **命令行方式** + + 在启动服务的时候,直接通过命令行进行配置。其配置选项可通过以下命令查阅: + + ``` + # isulad --help + lightweight container runtime daemon + + Usage: isulad [global options] + + GLOBAL OPTIONS: + + --authorization-plugin Use authorization plugin + --cgroup-parent Set parent cgroup for all containers + --cni-bin-dir The full path of the directory in which to search for CNI plugin binaries. Default: /opt/cni/bin + --cni-conf-dir The full path of the directory in which to search for CNI config files. Default: /etc/cni/net.d + --default-ulimit Default ulimits for containers (default []) + -e, --engine Select backend engine + -g, --graph Root directory of the iSulad runtime + -G, --group Group for the unix socket(default is isulad) + --help Show help + --hook-spec Default hook spec file applied to all containers + -H, --host The socket name used to create gRPC server + --image-layer-check Check layer intergrity when needed + --image-opt-timeout Max timeout(default 5m) for image operation + --insecure-registry Disable TLS verification for the given registry + --insecure-skip-verify-enforce Force to skip the insecure verify(default false) + --log-driver Set daemon log driver, such as: file + -l, --log-level Set log level, the levels can be: FATAL ALERT CRIT ERROR WARN NOTICE INFO DEBUG TRACE + --log-opt Set daemon log driver options, such as: log-path=/tmp/logs/ to set directory where to store daemon logs + --native.umask Default file mode creation mask (umask) for containers + --network-plugin Set network plugin, default is null, suppport null and cni + -p, --pidfile Save pid into this file + --pod-sandbox-image The image whose network/ipc namespaces containers in each pod will use. (default "rnd-dockerhub.huawei.com/library/pause-${machine}:3.0") + --registry-mirrors Registry to be prepended when pulling unqualified images, can be specified multiple times + --start-timeout timeout duration for waiting on a container to start before it is killed + -S, --state Root directory for execution state files + --storage-driver Storage driver to use(default overlay2) + -s, --storage-opt Storage driver options + --tls Use TLS; implied by --tlsverify + --tlscacert Trust certs signed only by this CA (default "/root/.iSulad/ca.pem") + --tlscert Path to TLS certificate file (default "/root/.iSulad/cert.pem") + --tlskey Path to TLS key file (default "/root/.iSulad/key.pem") + --tlsverify Use TLS and verify the remote + --use-decrypted-key Use decrypted private key by default(default true) + -V, --version Print the version + --websocket-server-listening-port CRI websocket streaming service listening port (default 10350) + ``` + + 示例: 启动isulad,并将日志级别调整成DEBUG + + ``` + # isulad -l DEBUG + ``` + + +- **配置文件方式** + + isulad配置文件为/etc/isulad/daemon.json,各配置字段说明如下: + + -

配置参数

配置文件示例

@@ -403,52 +444,538 @@
- - 示例: - - ``` - $ cat /etc/isulad/daemon.json - { - "group": "isulad", - "default-runtime": "lcr", - "graph": "/var/lib/isulad", - "state": "/var/run/isulad", - "engine": "lcr", - "log-level": "ERROR", - "pidfile": "/var/run/isulad.pid", - "log-opts": { - "log-file-mode": "0600", - "log-path": "/var/lib/isulad", - "max-file": "1", - "max-size": "30KB" - }, - "log-driver": "stdout", - "hook-spec": "/etc/default/isulad/hooks/default.json", - "start-timeout": "2m", - "storage-driver": "overlay2", - "storage-opts": [ - "overlay2.override_kernel_check=true" - ], - "registry-mirrors": [ - "docker.io" - ], - "insecure-registries": [ - "rnd-dockerhub.huawei.com" - ], - "pod-sandbox-image": "", - "image-opt-timeout": "5m", - "native.umask": "secure", - "network-plugin": "", - "cni-bin-dir": "", - "cni-conf-dir": "", - "image-layer-check": false, - "use-decrypted-key": true, - "insecure-skip-verify-enforce": false - } - ``` - - >![](public_sys-resources/icon-notice.gif) **须知:** - >默认配置文件/etc/isulad/daemon.json仅供参考,请根据实际需要进行配置 - - + + + 示例: + + ``` + # cat /etc/isulad/daemon.json + { + "group": "isulad", + "default-runtime": "lcr", + "graph": "/var/lib/isulad", + "state": "/var/run/isulad", + "engine": "lcr", + "log-level": "ERROR", + "pidfile": "/var/run/isulad.pid", + "log-opts": { + "log-file-mode": "0600", + "log-path": "/var/lib/isulad", + "max-file": "1", + "max-size": "30KB" + }, + "log-driver": "stdout", + "hook-spec": "/etc/default/isulad/hooks/default.json", + "start-timeout": "2m", + "storage-driver": "overlay2", + "storage-opts": [ + "overlay2.override_kernel_check=true" + ], + "registry-mirrors": [ + "docker.io" + ], + "insecure-registries": [ + "rnd-dockerhub.huawei.com" + ], + "pod-sandbox-image": "", + "image-opt-timeout": "5m", + "native.umask": "secure", + "network-plugin": "", + "cni-bin-dir": "", + "cni-conf-dir": "", + "image-layer-check": false, + "use-decrypted-key": true, + "insecure-skip-verify-enforce": false + } + ``` + + >![](public_sys-resources/icon-notice.gif) **须知:** + >默认配置文件/etc/isulad/daemon.json仅供参考,请根据实际需要进行配置 + + +### 存储说明 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

文件名

+

文件路径

+

内容

+

*

+

/etc/default/isulad/

+

存放isulad的OCI配置文件和钩子模板文件,文件夹下的配置文件权限设置为0640,sysmonitor检查脚本权限为0550

+

*

+

/etc/isulad/

+

isulad的默认配置文件和seccomp的默认配置文件

+

isulad.sock

+

/var/run/

+

管道通信文件,客户端和isulad的通信使用的socket文件

+

isulad.pid

+

/var/run/

+

存放isulad的PID,同时也是一个文件锁防止启动多个isulad实例

+

*

+

/run/lxc/

+

文件锁文件,isula运行过程创建的文件

+

*

+

/var/run/isulad/

+

实时通讯缓存文件,isulad运行过程创建的文件

+

*

+

/var/run/isula/

+

实时通讯缓存文件,isula运行过程创建的文件

+

*

+

/var/lib/lcr/

+

LCR 组件临时目录

+

*

+

/var/lib/isulad/

+

isulad运行的根目录,存放创建的容器配置、日志的默认路径、数据库文件、mount点等

+

/var/lib/isulad/mnt/ :容器rootfs的mount点

+

/var/lib/isulad/engines/lcr/ :存放lcr容器配置目录,每个容器一个目录(以容器名命名)

+
+ +### 约束限制 + +- 高并发场景(并发启动200容器)下,glibc的内存管理机制会导致内存空洞以及虚拟内存较大(例如10GB)的问题。该问题是高并发场景下glibc内存管理机制的限制,而不是内存泄露,不会导致内存消耗无限增大。可以通过设置MALLOC\_ARENA\_MAX环境变量来减少虚拟内存的问题,而且可以增大减少物理内存的概率。但是这个环境变量会导致iSulad的并发性能下降,需要用户根据实际情况做配置。 + + ``` + 参考实践情况,平衡性能和内存,可以设置MALLOC_ARENA_MAX为4。(在arm64服务器上面对iSulad的性能影响在10%以内) + + 配置方法: + 1. 手动启动iSulad的场景,可以直接export MALLOC_ARENA_MAX=4,然后再启动iSulad即可。 + 2. systemd管理iSulad的场景,可以修改/etc/sysconfig/iSulad,增加一条MALLOC_ARENA_MAX=4即可。 + ``` + +- 为daemon指定各种运行目录时的注意事项 + + 以--root为例,当使用/new/path/作为daemon新的Root Dir时,如果/new/path/下已经存在文件,且目录或文件名与isulad需要使用的目录或文件名冲突(例如:engines、mnt等目录)时,isulad可能会更新原有目录或文件的属性,包括属主、权限等为自己的属主和权限。 + + 所以,用户需要明白重新指定各种运行目录和文件,会对冲突目录、文件属性的影响。建议用户指定的新目录或文件为isulad专用,避免冲突导致的文件属性变化以及带来的安全问题。 + +- 日志文件管理: + + >![](public_sys-resources/icon-notice.gif) **须知:** + >日志功能对接: iSulad由systemd管理,日志也由systemd管理,然后传输给rsyslogd。rsyslog默认会对写日志速度有限制,可以通过修改/etc/rsyslog.conf文件,增加"$imjournalRatelimitInterval 0"配置项,然后重启rsyslogd的服务即可。 + +- 命令行参数解析限制 + + 使用iSulad命令行接口时,其参数解析方式与docker略有不同,对于命令行中带参数的flag,不管使用长flag还是短flag,只会将该flag后第一个空格或与flag直接相连接的'='后的字符串作为flag的参数,具体如下: + + 1. 使用短flag时,与“-”连接的字符串中的每个字符都被当作短flag(当有=号时,=号后的字符串当成=号前的短flag的参数)。 + + isula run -du=root busybox 等价于 isula run -du root busybox 或 isula run -d -u=root busybox 或 isula run -d -u root busybox ,当使用isula run -du:root时,由于-:不是有效的短flag,因此会报错。前述的命令行也等价于isula run -ud root busybox,但不推荐这种使用方式,可能带来语义困扰。 + + 1. 使用长flag时,与“--”连接的字符串作为一个整体当成长flag,若包含=号,则=号前的字符串为长flag,=号后的为参数。 + + ``` + isula run --user=root busybox + ``` + + 等价于 + + ``` + isula run --user root busybox + ``` + + +- 启动一个isulad容器,不能够以非root用户进行isula run -i/-t/-ti以及isula attach/exec操作。 +- iSulad对接OCI容器时,仅支持kata-runtime启动OCI容器。 + +### DAEMON多端口的绑定 + +## 描述 + +daemon端可以绑定多个unix socket或者tcp端口,并在这些端口上侦听,客户端可以通过这些端口和daemon端进行交互。 + +## 接口 + +用户可以在/etc/isulad/daemon.json文件的hosts字段配置一个或者多个端口。当然用户也可以不指定hosts。 + +``` +{ + "hosts": [ + "unix:///var/run/isulad.sock", + "tcp://localhost:5678", + "tcp://127.0.0.1:6789" + ] +} +``` + +用户也可以在/etc/sysconfig/iSulad中通过-H或者--host配置端口。用户同样可以不指定hosts。 + +``` +OPTIONS='-H unix:///var/run/isulad.sock --host tcp://127.0.0.1:6789' +``` + +如果用户在daemon.json文件及iSulad中均未指定hosts,则daemon在启动之后将默认侦听unix:///var/run/isulad.sock。 + +## 限制 + +- 用户不可以在/etc/isulad/daemon.json和/etc/sysconfig/iSuald两个文件中同时指定hosts,如果这样做将会出现错误,isulad无法正常启动; + + ``` + unable to configure the isulad with file /etc/isulad/daemon.json: the following directives are specified both as a flag and in the configuration file: hosts: (from flag: [unix:///var/run/isulad.sock tcp://127.0.0.1:6789], from file: [unix:///var/run/isulad.sock tcp://localhost:5678 tcp://127.0.0.1:6789]) + ``` + +- 若指定的host是unix socket,则必须是合法的unix socket,需要以"unix://"开头,后跟合法的socket绝对路径; +- 若指定的host是tcp端口,则必须是合法的tcp端口,需要以"tcp://"开头,后跟合法的IP地址和端口,IP地址可以为localhost; +- 可以指定至多10个有效的端口,超过10个则会出现错误,isulad无法正常启动。 + +### 配置TLS认证与开启远程访问 + +#### 描述 + +iSulad采用C/S模式进行设计,在默认情况,iSulad守护进程isulad只侦听本地/var/run/isulad.sock,因此只能在本地通过客户端isula执行相关命令操作容器。为了能使isula可以远程访问容器,isulad守护进程需要通过tcp:ip的方式侦听远程访问的端口。然而,仅通过简单配置tcp ip:port进行侦听,这样会导致所有的ip都可以通过调用isula -H tcp://:port与isulad通信,容易导致安全问题,因此推荐使用较安全版本的TLS\(**Transport Layer Security - 安全传输层协议**)方式进行远程访问。 + +#### 生成TLS证书 + +- 明文私钥和证书生成方法示例 + + ``` + #!/bin/bash + set -e + echo -n "Enter pass phrase:" + read password + echo -n "Enter public network ip:" + read publicip + echo -n "Enter host:" + read HOST + + echo " => Using hostname: $publicip, You MUST connect to iSulad using this host!" + + mkdir -p $HOME/.iSulad + cd $HOME/.iSulad + rm -rf $HOME/.iSulad/* + + echo " => Generating CA key" + openssl genrsa -passout pass:$password -aes256 -out ca-key.pem 4096 + echo " => Generating CA certificate" + openssl req -passin pass:$password -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem -subj "/C=CN/ST=zhejiang/L=hangzhou/O=Huawei/OU=iSulad/CN=iSulad@huawei.com" + echo " => Generating server key" + openssl genrsa -passout pass:$password -out server-key.pem 4096 + echo " => Generating server CSR" + openssl req -passin pass:$password -subj /CN=$HOST -sha256 -new -key server-key.pem -out server.csr + echo subjectAltName = DNS:$HOST,IP:$publicip,IP:127.0.0.1 >> extfile.cnf + echo extendedKeyUsage = serverAuth >> extfile.cnf + echo " => Signing server CSR with CA" + openssl x509 -req -passin pass:$password -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf + echo " => Generating client key" + openssl genrsa -passout pass:$password -out key.pem 4096 + echo " => Generating client CSR" + openssl req -passin pass:$password -subj '/CN=client' -new -key key.pem -out client.csr + echo " => Creating extended key usage" + echo extendedKeyUsage = clientAuth > extfile-client.cnf + echo " => Signing client CSR with CA" + openssl x509 -req -passin pass:$password -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile-client.cnf + rm -v client.csr server.csr extfile.cnf extfile-client.cnf + chmod -v 0400 ca-key.pem key.pem server-key.pem + chmod -v 0444 ca.pem server-cert.pem cert.pem + ``` + + +- 加密私钥和证书请求文件生成方法示例 + + ``` + #!/bin/bash + + echo -n "Enter public network ip:" + read publicip + echo -n "Enter pass phrase:" + read password + + # remove certificates from previous execution. + rm -f *.pem *.srl *.csr *.cnf + + + # generate CA private and public keys + echo 01 > ca.srl + openssl genrsa -aes256 -out ca-key.pem -passout pass:$password 2048 + openssl req -subj '/C=CN/ST=zhejiang/L=hangzhou/O=Huawei/OU=iSulad/CN=iSulad@huawei.com' -new -x509 -days $DAYS -passin pass:$password -key ca-key.pem -out ca.pem + + # create a server key and certificate signing request (CSR) + openssl genrsa -aes256 -out server-key.pem -passout pass:$PASS 2048 + openssl req -new -key server-key.pem -out server.csr -passin pass:$password -subj '/CN=iSulad' + + echo subjectAltName = DNS:iSulad,IP:${publicip},IP:127.0.0.1 > extfile.cnf + echo extendedKeyUsage = serverAuth >> extfile.cnf + # sign the server key with our CA + openssl x509 -req -days $DAYS -passin pass:$password -in server.csr -CA ca.pem -CAkey ca-key.pem -out server-cert.pem -extfile extfile.cnf + + # create a client key and certificate signing request (CSR) + openssl genrsa -aes256 -out key.pem -passout pass:$password 2048 + openssl req -subj '/CN=client' -new -key key.pem -out client.csr -passin pass:$password + + # create an extensions config file and sign + echo extendedKeyUsage = clientAuth > extfile.cnf + openssl x509 -req -days 365 -passin pass:$password -in client.csr -CA ca.pem -CAkey ca-key.pem -out cert.pem -extfile extfile.cnf + + # remove the passphrase from the client and server key + openssl rsa -in server-key.pem -out server-key.pem -passin pass:$password + openssl rsa -in key.pem -out key.pem -passin pass:$password + + # remove generated files that are no longer required + rm -f ca-key.pem ca.srl client.csr extfile.cnf server.csr + ``` + + +#### 接口 + +``` +{ + "tls": true, + "tls-verify": true, + "tls-config": { + "CAFile": "/root/.iSulad/ca.pem", + "CertFile": "/root/.iSulad/server-cert.pem", + "KeyFile":"/root/.iSulad/server-key.pem" + } +} +``` + +#### 限制 + +服务端支持的模式如下: + +- 模式1(验证客户端):tlsverify, tlscacert, tlscert, tlskey。 +- 模式2(不验证客户端):tls, tlscert, tlskey。 + +客户端支持的模式如下: + +- 模式1\(使用客户端证书进行身份验证,并根据给定的CA验证服务器\):tlsverify, tlscacert, tlscert, tlskey。 +- 模式2\(验证服务器\):tlsverify, tlscacert。 + +如果需要采用双向认证方式进行通讯,则服务端采用模式1,客户端采用模式1; + +如果需要采用单向认证方式进行通讯,则服务端采用模式2,客户端采用模式2。 + +>![](public_sys-resources/icon-notice.gif) **须知:** +>- 采用RPM安装方式时,服务端配置可通过/etc/isulad/daemon.json以及/etc/sysconfig/iSulad配置修改 +>- 相比非认证或者单向认证方式,双向认证具备更高的安全性,推荐使用双向认证的方式进行通讯 +>- GRPC开源组件日志不由iSulad进行接管,如果需要查看GRPC相关日志,请按需设置GRPC\_VERBOSITY和GRPC\_TRACE环境变量 +>   + +#### 示例 + +服务端: + +``` + isulad -H=tcp://0.0.0.0:2376 --tlsverify --tlscacert ~/.iSulad/ca.pem --tlscert ~/.iSulad/server-cert.pem --tlskey ~/.iSulad/server-key.pem +``` + +客户端: + +``` + isula version -H=tcp://$HOSTIP:2376 --tlsverify --tlscacert ~/.iSulad/ca.pem --tlscert ~/.iSulad/cert.pem --tlskey ~/.iSulad/key.pem +``` + +### 配置devicemapper存储驱动 + +使用devicemapper存储驱动需要先配置一个thinpool设备,而配置thinpool需要一个独立的块设备,且该设备需要有足够的空闲空间用于创建thinpool,请用户根据实际需求确定。这里假设独立块设备为/dev/xvdf,具体的配置方法如下: + +**一、配置thinpool** + +1. 停止isulad服务。 + + ``` + # systemctl stop isulad + ``` + +2. 基于块设备创建一个lvm卷。 + + ``` + # pvcreate /dev/xvdf + ``` + +3. 使用刚才创建的物理卷创建一个卷组。 + + ``` + # vgcreate isula /dev/xvdf + Volume group "isula" successfully created: + ``` + +4. 创建名为thinpool和thinpoolmeta的两个逻辑卷。 + + ``` + # lvcreate --wipesignatures y -n thinpool isula -l 95%VG + Logical volume "thinpool" created. + ``` + + ``` + # lvcreate --wipesignatures y -n thinpoolmeta isula -l 1%VG + Logical volume "thinpoolmeta" created. + ``` + +5. 将新创建的两个逻辑卷转换成thinpool以及thinpool所使用的metadata,这样就完成了thinpool配置。 + + ``` + # lvconvert -y --zero n -c 512K --thinpool isula/thinpool --poolmetadata isula/thinpoolmeta + + WARNING: Converting logical volume isula/thinpool and isula/thinpoolmeta to + thin pool's data and metadata volumes with metadata wiping. + THIS WILL DESTROY CONTENT OF LOGICAL VOLUME (filesystem etc.) + Converted isula/thinpool to thin pool. + ``` + + +   + +**二、修改isulad配置文件** + +1. 如果环境之前运行过isulad,请先备份之前的数据。 + + ``` + # mkdir /var/lib/isulad.bk + # mv /var/lib/isulad/* /var/lib/isulad.bk + ``` + +2. 修改配置文件 + + 这里提供了两种配置方式,用户可根据实际情况的选择合适的方式。 + + - 编辑/etc/isulad/daemon.json,配置storage-driver字段值为devicemapper,并配置storage-opts字段的相关参数,支持参数请参见[参数说明](#zh-cn_topic_0222861454_section1712923715282)。配置参考如下所示: + + ``` + { + "storage-driver": "devicemapper" + "storage-opts": [ + "dm.thinpooldev=/dev/mapper/isula-thinpool", + "dm.fs=ext4", + "dm.min_free_space=10%" + ] + } + ``` + + - 或者也可以通过编辑/etc/sysconfig/iSulad,在isulad启动参数里显式指定,支持参数请参见[参数说明](#zh-cn_topic_0222861454_section1712923715282)。配置参考如下所示: + + ``` + OPTIONS="--storage-driver=devicemapper --storage-opt dm.thinpooldev=/dev/mapper/isula-thinpool --storage-opt dm.fs=ext4 --storage-opt dm.min_free_space=10%" + ``` + +3. 启动isulad,使配置生效。 + + ``` + # systemctl start isulad + ``` + + +#### 参数说明 + +storage-opts 支持的参数请参见[表1](#zh-cn_topic_0222861454_table3191161993812)。 + +**表 1** starage-opts字段参数说明 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

是否必选

+

含义

+

dm.fs

+

+

用于指定容器使用的文件系统类型。当前必须配置为ext4,即dm.fs=ext4

+

dm.basesize

+

+

用于指定单个容器的最大存储空间大小,单位为k/m/g/t/p,也可以使用大写字母,例如dm.basesize=50G。该参数只在首次初始化时有效。

+

dm.mkfsarg

+

+

用于在创建基础设备时指定额外的mkfs参数。例如“dm.mkfsarg=-O ^has_journal”

+

dm.mountopt

+

+

用于在挂载容器时指定额外的mount参数。例如dm.mountopt=nodiscard

+

dm.thinpooldev

+

+

用于指定容器/镜像存储时使用的thinpool设备。

+

dm.min_free_space

+

+

用于指定最小的预留空间,用百分比表示。例如dm.min_free_space=10%,表示当剩余存储空间只剩10%左右时,创建容器等和存储相关操作就会失败。

+
+ +#### 注意事项 + +- 配置devicemapper时,如果系统上没有足够的空间给thinpool做自动扩容,请禁止自动扩容功能。 + + 禁止自动扩容的方法是把/etc/lvm/profile/isula-thinpool.profile中thin\_pool\_autoextend\_threshold和thin\_pool\_autoextend\_percent两个值都改成100,如下所示: + + ``` + activation { + thin_pool_autoextend_threshold=100 + thin_pool_autoextend_percent=100 + } + ``` + +- 使用devicemapper时,容器文件系统必须配置为ext4,需要在isulad的配置参数中加上--storage-opt dm.fs=ext4。 +- 当graphdriver为devicemapper时,如果metadata文件损坏且不可恢复,需要人工介入恢复。禁止直接操作或篡改daemon存储devicemapper的元数据。 +- 使用devicemapper lvm时,异常掉电导致的devicemapper thinpool损坏,无法保证thinpool损坏后可以修复,也不能保证数据的完整性,需重建thinpool。 + +**iSula开启了user namespace特性,切换devicemapper存储池时的注意事项** + +- 一般启动容器时,deviceset-metadata文件为:/var/lib/isulad/devicemapper/metadata/deviceset-metadata。 +- 使用了user namespace场景下,deviceset-metadata文件使用的是:/var/lib/isulad/\{userNSUID.GID\}/devicemapper/metadata/deviceset-metadata。 +- 使用devicemapper存储驱动,容器在user namespace场景和普通场景之间切换时,需要将对应deviceset-metadata文件中的BaseDeviceUUID内容清空;针对thinpool扩容或者重建的场景下,也同样的需要将对应deviceset-metadata文件中的BaseDeviceUUID内容清空,否则isulad服务会重启失败。 + diff --git "a/content/zh/docs/Container/\345\256\211\350\243\205\346\214\207\345\257\274.md" "b/content/zh/docs/Container/\345\256\211\350\243\205\346\214\207\345\257\274.md" index b2eb729aa396fc0e31036138fa37fa95d0edba6b..204899cbec0479b6a9d747f10defded621a4584d 100644 --- "a/content/zh/docs/Container/\345\256\211\350\243\205\346\214\207\345\257\274.md" +++ "b/content/zh/docs/Container/\345\256\211\350\243\205\346\214\207\345\257\274.md" @@ -1,5 +1,8 @@ # 安装指导 +>![](public_sys-resources/icon-note.gif) **说明:** +>系统容器的安装需要使用root权限。 + 1. 首先需要安装iSulad容器引擎。 ``` diff --git "a/content/zh/docs/Container/\345\256\211\350\243\205\346\226\271\346\263\225-24.md" "b/content/zh/docs/Container/\345\256\211\350\243\205\346\226\271\346\263\225-24.md" deleted file mode 100644 index 6855a55d68e4f3c8e6c8449a5f0161cf8bc4514a..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\256\211\350\243\205\346\226\271\346\263\225-24.md" +++ /dev/null @@ -1,18 +0,0 @@ -# 安装方法 - -## 前提条件 - -- 为了获取更好的性能体验,安全容器需要运行在裸金属服务器上,**暂不支持安全容器运行在虚拟机内**。 -- 安全容器运行依赖以下组件,请确保环境上已安装所需版本的依赖组件。以下组件来自配套的openEuler版本。如果使用iSula容器引擎,请参考iSula容器引擎的[安装方法](安装方法.md)章节安装iSulad。 - - docker-engine - - qemu - - -## 安装操作 - -安全容器发布组件集成在同一个kata-containers-<_version_\>.rpm包中,使用rpm命令可以直接安装对应的软件,其中version为。 - -``` -rpm -ivh kata-containers-.rpm -``` - diff --git "a/content/zh/docs/Container/\345\256\211\350\243\205\346\226\271\346\263\225.md" "b/content/zh/docs/Container/\345\256\211\350\243\205\346\226\271\346\263\225.md" deleted file mode 100644 index aabfbeceac8be10c9c03b1074ead6c622b7bb0ef..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\256\211\350\243\205\346\226\271\346\263\225.md" +++ /dev/null @@ -1,20 +0,0 @@ -# 安装方法 - -iSulad可以通过yum或rpm命令两种方式安装,由于yum会自动安装依赖,而rpm命令需要手动安装所有依赖,所以推荐使用yum安装。 - -这里给出两种安装方式的操作方法。 - -- (推荐)使用yum安装iSulad,参考命令如下: - - ``` - $ sudo yum install -y iSulad - ``` - - -- 使用rpm安装iSulad,需要下载iSulad及其所有依赖库的RPM包,然后手动安装。安装单个iSulad的RPM包(依赖包安装方式相同),参考命令如下: - - ``` - $ sudo rpm -ihv iSulad-xx.xx.xx-YYYYmmdd.HHMMSS.gitxxxxxxxx.aarch64.rpm - ``` - - diff --git "a/content/zh/docs/Container/\345\256\211\350\243\205\351\203\250\347\275\262-30.md" "b/content/zh/docs/Container/\345\256\211\350\243\205\351\203\250\347\275\262-30.md" deleted file mode 100644 index 2e108aca984d214d60e11fd476118273fc168353..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\256\211\350\243\205\351\203\250\347\275\262-30.md" +++ /dev/null @@ -1,2 +0,0 @@ -# 安装部署 - diff --git "a/content/zh/docs/Container/\345\256\211\350\243\205\351\203\250\347\275\262.md" "b/content/zh/docs/Container/\345\256\211\350\243\205\351\203\250\347\275\262.md" deleted file mode 100644 index 8d85d4eaa2ff63568d99fdf2572bd6e109a70949..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\256\211\350\243\205\351\203\250\347\275\262.md" +++ /dev/null @@ -1 +0,0 @@ -# 安装部署 diff --git "a/content/zh/docs/Container/\345\256\211\350\243\205\351\205\215\347\275\256-3.md" "b/content/zh/docs/Container/\345\256\211\350\243\205\351\205\215\347\275\256-3.md" new file mode 100644 index 0000000000000000000000000000000000000000..12d586d56f7a819ae6437f0321f5d018d24970a3 --- /dev/null +++ "b/content/zh/docs/Container/\345\256\211\350\243\205\351\205\215\347\275\256-3.md" @@ -0,0 +1,448 @@ +# 安装配置 +本章节主要介绍和开源容器Docker安装相关的重要配置。 + +- [安装配置](#安装部署) + - [注意事项](#注意事项) + - [基本安装配置](#基本安装配置) + - [配置daemon参数](#配置daemon参数) + - [daemon运行目录配置](#daemon运行目录配置) + - [daemon自带网络配置](#daemon自带网络配置) + - [daemon umask配置](#daemon-umask配置) + - [daemon启动时间](#daemon启动时间) + - [关联组件journald](#关联组件journald) + - [关联组件firewalld](#关联组件firewalld) + - [关联组件iptables](#关联组件iptables) + - [关联组件audit](#关联组件audit) + - [安全配置seccomp](#安全配置seccomp) + - [禁止修改docker daemon的私有目录](#禁止修改docker-daemon的私有目录) + - [普通用户大量部署容器场景下的配置注意事项](#普通用户大量部署容器场景下的配置注意事项) + - [存储驱动配置](#存储驱动配置) + - [配置overlay2存储驱动](#配置overlay2存储驱动) + - [配置devicemapper存储驱动](#配置devicemapper存储驱动) + - [强制退出docker相关后台进程的影响](#强制退出docker相关后台进程的影响) + - [信号量残留](#信号量残留) + - [网卡残留](#网卡残留) + - [重启容器失败](#重启容器失败) + - [服务无法正常重启](#服务无法正常重启) + - [系统掉电影响](#系统掉电影响) + + + +## 注意事项 + +- Docker容器的安装需要使用root权限。 +- docker-engine rpm包与containerd rpm包、runc rpm包、podman rpm包不能同时安装。因为docker-engine rpm包中已经包含Docker运行所需的所有组件,其中包括containerd、runc、docker二进制,且containerd、runc和podman rpm包也分别提供了对应的二进制,所以重复安装时会出现软件包冲突。 + + +## 基本安装配置 +### 配置daemon参数 + +可以通过在/etc/docker/daemon.json文件中添加配置项自定义配置参数,相关配置项以及如何使用可以通过dockerd --help查看。配置示例如下: + +``` +cat /etc/docker/daemon.json +{ + "debug": true, + "storage-driver": "overlay2", + "storage-opts": ["overlay2.override_kernel_check=true"] +} +``` + +### daemon运行目录配置 + +用户需要明白重新指定各种运行目录和文件(包括--graph、--exec-root等),可能会存在目录冲突,或文件属性变换,对应用的正常使用造成影响。 + +>![](public_sys-resources/icon-notice.gif) **须知:** +>用户指定的目录或文件应为docker专用,避免冲突导致的文件属性变化带来安全问题。 + +- 以--graph为例,当我们使用/new/path/作为daemon新的Root Dir时,如果/new/path/下已经存在文件,且目录或文件名与docker需要使用的目录或文件名冲突(例如: containers、hooks、tmp等目录)时,docker可能会更新原有目录或文件的属性,包括属主、权限等为自己的属主和权限。 + +>![](public_sys-resources/icon-notice.gif) **须知:** +>从docker-17.05开始,--graph参数被标记为Deprecated,用新的参数--data-root替代。 + +### daemon自带网络配置 + +- Docker daemon使用--bip参数指定docker0网桥的网段之后,如果在下一次重启的时候去掉--bip参数,docker0网桥会沿用上一次的--bip配置,即使重启之前已经删除docker0网桥。原因是docker会保存网络配置并在下一次重启的时候默认恢复上一次配置。 +- Docker network create 并发创建网络的时候,可以创建具有相同名字的两个网络。原因是docker network是通过id来区分的,name只是个便于识别的别名而已,不保证唯一性。 +- Docker在桥接bridge网络模式下,Docker容器是通过宿主机上的NAT模式,建立与宿主机之外世界的通信。Docker Daemon在启动一个容器时,每在宿主机上映射一个端口都会启动一个docker-proxy进程来实现访问代理。建议用户在使用这种userland-proxy时,只映射必须的端口,减少docker-proxy进行端口映射所消耗的资源。 + +### daemon-umask配置.md">daemon umask配置 + +容器主进程和exec进程的默认umask为0022,为了满足安全性需求,避免容器受到攻击,修改runc的实现,将默认umask修改为0027。修改后others群组将无法访问新建文件或目录。 + +docker启动容器时的默认umask值为0027,可以在dockerd启动时,使用--exec-opt native.umask=normal参数将容器启动时的umask修改为0022。 + +>![](public_sys-resources/icon-notice.gif) **须知:** +>如果docker create/run也配置了native.umask参数,则以docker create/run中的配置为准。 + +详细的配置见[docker create](#create.md#ZH-CN_TOPIC_0184808242)和[docker run](#run.md#ZH-CN_TOPIC_0184808254)章节的参数说明。 + +### daemon启动时间 + +Docker服务由systemd管理,systemd对各个服务的启动时间有限制,如果指定时间内docker服务未能成功启动,则可能由以下原因导致: + +- 如果使用devicemapper且为第一次启动,docker daemon需要对该设备做文件系统初始化操作,而该操作会进行大量磁盘IO操作,在磁盘性能不佳或存在大量IO竞争时,很可能会导致docker daemon启动超时。devicemapper设备只需要初始化一次,后续docker daemon启动时不再需要重复初始化。 +- 如果当前系统资源占用太高,导致系统卡顿,系统所有的操作都会变慢,也可能会出现docker服务启动超时的情况。 +- daemon重启过程中,需要遍历并读取docker工作目录下每一个容器的配置文件、容器init层和可写层的配置,如果当前系统存在过多容器(包含created和exited的容器),并且磁盘读写性能受限,也会出现daemon遍历文件过久导致docker服务启动超时的情况。 + +   + +出现服务启动超时情况,建议对以下两种情况进行排查调整: + +- 容器编排层定期清理不需要的容器,尤其是exited的容器。 +- 结合解决方案的性能要求场景,调整编排层的清理周期和docker服务的启动时间。 + +### 关联组件journald + +重启systemd-journald后需要重启docker daemon。journald通过pipe获取docker daemon的日志,如果journald服务重启,会导致该pipe被关闭,docker的日志写入操作便会触发SIGPIPE信号,该错误信号会导致docker daemon crash。由于忽略该信号影响严重,可能导致后续docker daemon的日志无法记录,因此建议用户在重启journald服务或者journald 异常后主动去重启docker daemon,保证docker日志能够被正常记录,避免daemon crash导致的状态异常。 + +### 关联组件firewalld + +需要在重启或拉起firewalld之后重启docker服务,保证docker服务在firewalld之后启动。 + +- firewalld服务启动会清空当前系统的iptables规则,所以在启动docker daemon过程中,重启firewalld可能会导致docker服务插入iptables规则失败,从而导致docker服务启动失败。 +- docker服务启动后重启firewalld服务,或者状态发生了变化(从启动到停止,或者从停止到启动),会导致docker的iptables规则被删除,创建带端口映射的容器失败。 + +### 关联组件iptables + +docker使用--icc=false选项时,可以限制容器之间互通,但若os自带某些规则,可以造成限制容器之间互通失效,例如: + +``` +Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) +... +0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 +... +0 0 DROP all -- docker0 docker0 0.0.0.0/0 0.0.0.0/0 +... +``` + +在Chain FORWARD中,DROP上面多出了一条ACCEPT icmp的规则,造成加了--icc=false后,容器之间也能ping通,但容器之间如果使用udp/tcp协议,对端仍然是不可达的。 + +因此,在容器os中使用docker,如果需要使用--icc=false选项时,建议先在host上清理一下iptables相关的规则。 + +### 关联组件audit + +docker支持配置audit,但不是强制的。例如: + +``` +-w /var/lib/docker -k docker +-w /etc/docker -k docker +-w /usr/lib/systemd/system/docker.service -k docker +-w /usr/lib/systemd/system/docker.socket -k docker +-w /etc/sysconfig/docker -k docker +-w /usr/bin/docker-containerd -k docker +-w /usr/bin/docker-runc -k docker +-w /etc/docker/daemon.json -k docker +``` + +配置docker的audit,好处在于可以记录更多信息便于审计,但从安全角度来看,它对防攻击并没有实质性的作用。另一方面,audit配置会导致严重的效率问题,可能导致系统卡顿,生产环境中请谨慎使用。 + +下面以“-w /var/lib/docker -k docker”为例,演示docker audit的配置: + +``` +[root@localhost signal]# cat /etc/audit/rules.d/audit.rules | grep docker -w /var/lib/docker/ -k docker +[root@localhost signal]# auditctl -R /etc/audit/rules.d/audit.rules | grep docker +[root@localhost signal]# auditctl -l | grep docker -w /var/lib/docker/ -p rwxa -k docker +``` + +>![](public_sys-resources/icon-note.gif) **说明:** +>-p \[r|w|x|a\] 和-w一起使用,观察用户对这个目录的读、写、执行或者属性变化(如时间戳变化)。这样的话,在/var/lib/docker目录下的任何文件、目录操作,都会打印日志到audit.log中,从而会有太多的日志往audit.log中记录,会严重地影响auditd, 比如内存、cpu占用等,进而影响os的运行。例如:每次执行"ls /var/lib/docker/containers"都会有类似如下日志记录到/var/log/audit/audit.log中。 + +``` +type=SYSCALL msg=audit(1517656451.457:8097): arch=c000003e syscall=257 success=yes exit=3 a0=ffffffffffffff9c a1=1b955b0 a2=90800 a3=0 items=1 ppid=17821 pid=1925 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts6 ses=4 comm="ls" exe="/usr/bin/ls" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="docker"type=CWD msg=audit(1517656451.457:8097): cwd="/root"type=PATH msg=audit(1517656451.457:8097): item=0 name="/var/lib/docker/containers" inode=1049112 dev=fd:00 mode=040700 ouid=0 ogid=0 rdev=00:00 obj=unconfined_u:object_r:container_var_lib_t:s0 objtype=NORMAL +``` + +   + +### 安全配置seccomp + +在做容器网络性能测试时发现,Docker相对于原生内核namespace性能有所下降,经分析开启seccomp后,系统调用(如:sendto)不会通过system\_call\_fastpath进行,而是调用tracesys,这会带来性能大幅下降。因此,建议在有高性能要求的业务的容器场景下关闭seccomp,示例如下: + +``` +docker run -itd --security-opt seccomp=unconfined busybox:latest +``` + +### 禁止修改docker-daemon的私有目录.md">禁止修改docker daemon的私有目录 + +不允许对Docker用的根目录(默认/var/lib/docker)和运行时目录(默认/run/docker)以及其文件作任何修改,包括在该目录下删除文件,添加文件,对目录或者文件做软/硬链接,修改文件的属性/权限,修改文件的内容等,如果确实需要做修改,后果自负。 + +### 普通用户大量部署容器场景下的配置注意事项 + +普通用户在OS主机上能创建的进程数的上限,例如:可以在系统中创建配置文件“/etc/security/limits.d/20-nproc.conf”限制;类似的,普通用户在容器里也能创建的进程数的上限,由容器镜像中“/etc/security/limits.d/20-nproc.conf”文件对应的值决定,如下所示: + +``` +cat /etc/security/limits.conf +* soft nproc 4096 +``` + +当普通用户大量部署容器,导致容器内进程过多资源不够出现报错时,需要把容器镜像“/etc/security/limits.d/20-nproc.conf”文件中如上所示的4096配置值加大。 + +可配置的最大值请参考内核的最大能力,如下: + +``` +[root@localhost ~]# sysctl -a | grep pid_max +kernel.pid_max = 32768 +``` + +## 存储驱动配置 + +本发行版docker支持overlay2和devicemapper两种存储驱动。由于overlay2较devicemapper而言,拥有更好的性能,建议用户在生产环境中优先考虑。 + +### 配置overlay2存储驱动 + +#### 配置方法 + +docker默认为使用overlay2存储驱动,也可以通过如下两种方式显示指定。 + +- 编辑/etc/docker/daemon.json,通过storage-driver字段显示指定。 + + ``` + cat /etc/docker/daemon.json + { + "storage-driver": "overlay2" + } + ``` + + +- 编辑/etc/sysconfig/docker-storage,通过docker deamon启动参数显示指定。 + + ``` + cat /etc/sysconfig/docker-storage + DOCKER_STORAGE_OPTIONS="--storage-driver=overlay2" + ``` + + +#### 注意事项 + +- 部分容器生命周期管理的操作会报找不到相应的rootfs或者相关的可执行文件。 +- 如果容器的健康检查配置的是执行容器内的可执行文件,也会报错,导致容器的健康检查失败。 + +- 如果将overlay2作为graphdriver,在容器中第一次修改镜像中的文件时,若该文件的大小大于系统剩余的空间,修改将会失败。因为即使修改很小,也要把这个文件完整的拷贝到上层,剩余空间不足导致失败。 +- overlay2文件系统相比普通文件系统天然存在一些行为差异,归纳如下: + - 内核版本 + + overlay2只兼容原生4.0以上内核,建议配合使用ext4文件系统。 + + - Copy-UP性能问题 + + 修改lower层文件会触发文件复制到upper层,其中数据块复制和fsync比较耗时。 + + - rename目录问题 + - 只有源路径和目标路径都在merged层时,才允许rename系统调用,否则rename系统调用会报错-EXDEV。 + - 内核4.10引入了redirect dir特性来修复rename问题,对应内核选项为CONFIG\_OVERLAY\_FS\_REDIRECT\_DIR。 + + 在使用overlay2场景下,对文件系统目录进行重命名时,如果系统配置文件/sys/module/overlay/parameters/redirect\_dir中配置的特性开关为关闭状态,则会导致使用失败;如果用户要使用相关特性,需要用户手动设置/sys/module/overlay/parameters/redirect\_dir为“Y”。 + + - Hard link break问题 + - 当lower层目录中有多个硬链接,在merged层写入数据会触发Copy-UP,导致硬链接断开。 + - 内核4.13引入了index feature来修复这个问题,对应内核选项为 CONFIG\_OVERLAY\_FS\_INDEX。注意这个选项没有前向兼容性,不支持热升级。 + + - st\_dev和st\_ino变化 + + 触发Copy-UP之后,用户只能看到merged层中的新文件,inode会变化。虽然attr和xattr可以复制,但st\_dev和st\_ino具有唯一性,不可复制。这会导致stat和ls查看 到相应的变化。 + + - fd变化 + + Copy-UP之前,以只读模式打开文件得到描述符fd1,Copy-UP之后,打开同名文件得到文件描述符fd2, 二者实际指向不同的文件。向fd2写入的数据不会在fd1中体现。 + + + +#### 异常场景 + +容器使用配置了overlay2存储驱动的过程中,可能出现挂载点被覆盖的异常情况。例如 + +   + +#### 异常场景-挂载点被覆盖 + +挂载关系:在问题容器的挂载点的下面,存在一个/var/lib/docker/overlay2的挂载点: + +``` +[root@localhost ~]# mount -l | grep overlay +overlay on /var/lib/docker/overlay2/844fd3bca8e616572935808061f009d106a8748dfd29a0a4025645457fa21785/merged type overlay (rw,relatime,seclabel,lowerdir=/var/lib/docker/overlay2/l/JL5PZQLNDCIBU3ZOG3LPPDBHIJ:/var/lib/docker/overlay2/l/ELRPYU4JJG4FDPRLZJCZZE4UO6,upperdir=/var/lib/docker/overlay2/844fd3bca8e616572935808061f009d106a8748dfd29a0a4025645457fa21785/diff,workdir=/var/lib/docker/overlay2/844fd3bca8e616572935808061f009d106a8748dfd29a0a4025645457fa21785/work) +/dev/mapper/dm-root on /var/lib/docker/overlay2 type ext4 (rw,relatime,seclabel,data=ordered) +``` + +执行部分docker命令会遇到错误,比如: + +``` +[root@localhost ~]# docker rm 1348136d32 +docker rm: Error response from daemon: driver "overlay2" failed to remove root filesystem for 1348136d32: error while removing /var/lib/docker/overlay2/844fd3bca8e616572935808061f009d106a8748dfd29a0a4025645457fa21785: invalid argument +``` + +此时,在主机侧可以发现对应容器的rootfs找不到,但这并不意味着rootfs丢失,只是被/var/lib/docker/overlay2挂载点覆盖,业务仍然可以正常运行,不受影响。修复方案可以参考如下: + +- 修复方案一 + 1. 确定当前docker所使用graphdriver: + + ``` + docker info | grep "Storage Driver" + ``` + +    + + 2. 查询当前的挂载点: + + ``` + Devicemapper: mount -l | grep devicemapper + Overlay2: mount -l | grep overlay2 + ``` + + 输出格式为: A on B type C \(D\) + + - A:块设备名称或overlay + - B:挂载点 + - C:文件系统类型 + - D:挂载属性 + + 3. 从下往上逐一umount这些挂载点B。 + 4. 然后全部docker restart这些容器,或者删除所有容器。 + 5. 重启docker。 + + ``` + systemctl restart docker + ``` + + + +- 修复方案二 + 1. 业务迁移 + 2. 节点重启 + + +### 配置devicemapper存储驱动 + +用户如果需要使用devicemapper存储驱动,可以通过如下两种方式显示指定。 + +- 编辑/etc/docker/daemon.json,通过storage-driver字段显示指定。 + + ``` + cat /etc/docker/daemon.json + { + "storage-driver": "devicemapper" + } + ``` + + +- 编辑/etc/sysconfig/docker-storage,通过docker deamon启动参数显示指定。 + + ``` + cat /etc/sysconfig/docker-storage + DOCKER_STORAGE_OPTIONS="--storage-driver=devicemapper" + ``` + + +#### 注意事项 + +- 使用devicemapper必须使用devicemapper+direct-lvm的方式,配置的方法可以参考 [https://docs.docker.com/engine/userguide/storagedriver/device-mapper-driver/\#configure-direct-lvm-mode-for-production](https://docs.docker.com/engine/userguide/storagedriver/device-mapper-driver/#configure-direct-lvm-mode-for-production) 。 +- 配置devicemapper时,如果系统上没有足够的空间给thinpool做自动扩容,请禁止自动扩容功能。 +- 禁止把/etc/lvm/profile/docker-thinpool.profile中如下两个值都改成100。 + + ``` + activation { + thin_pool_autoextend_threshold=80 + thin_pool_autoextend_percent=20 + } + ``` + +- 使用devicemapper时推荐加上--storage-opt dm.use\_deferred\_deletion=true --storage-opt dm.use\_deferred\_removal=true。 +- 使用devicemapper时,容器文件系统推荐使用ext4,需要在docker daemon的配置参数中加 上--storage-opt dm.fs=ext4。 +- 当graphdriver为devicemapper时,如果metadata文件损坏且不可恢复,需要人工介入恢复。禁止直接操作或篡改daemon存储devicemapper的元数据。 +- 使用devicemapper lvm时,异常掉电导致的devicemapper thinpool损坏,无法保证thinpool损坏后可以修复,也不能保证数据的完整性,需重建thinpool。 + +**docker daemon开启了user namespace特性,切换devicemapper存储池时的注意事项** + +- 一般启动容器时,deviceset-metadata文件为:/var/lib/docker/devicemapper/metadata/deviceset-metadata。 +- 使用了user namespace场景下,deviceset-metadata文件使用的是:/var/lib/docker/\{userNSUID.GID\}/devicemapper/metadata/deviceset-metadata。 +- 使用devicemapper存储驱动,容器在user namespace场景和普通场景之间切换时,需要将对应deviceset-metadata文件中的BaseDeviceUUID内容清空;针对thinpool扩容或者重建的场景下,也同样的需要将对应deviceset-metadata文件中的BaseDeviceUUID内容清空,否则docker服务会重启失败。 + +### 信号量残留 + +使用devicemapper作为graphdriver时,强制退出强制退出可能导致信号量残留。docker在操作dm的过程中会创建信号量,如果在释放信号量前,daemon被强制退出,可能导致该信号量无法释放,一次强制退出最多泄露一个信号量,泄露概率低。而linux系统有信号量上限限制,当信号量泄露次数达到上线值时将无法创建新的信号量,进而导致docker daemon启动失败。排查方法如下: + +1. 首先查看系统上残留的信号量 + + ``` + $ ipcs + ------ Message Queues -------- + key msqid owner perms used-bytes messages + ------ Shared Memory Segments -------- + key shmid owner perms bytes nattch status + ------ Semaphore Arrays -------- + key semid owner perms nsems + 0x0d4d3358 238977024 root 600 1 + 0x0d4d0ec9 270172161 root 600 1 + 0x0d4dc02e 281640962 root 600 1 + ``` + +2. 接着用dmsetup查看devicemapper创建的信号量,该信号量集合是上一步中查看到的系统信号量的子集 + + ``` + $ dmsetup udevcookies + ``` + +3. 最后查看内核信号量设置上限,第四个值就是当前系统的信号量使用上限 + + ``` + $ cat /proc/sys/kernel/sem + 250 32000 32 128 + ``` + + 如果步骤1中残留的信号量数量与步骤3中看到的信号量上限相等,则是达到上限,此时docker daemon无法正常启动。可以使用下述命令增加信号量使用上限值来让docker恢复启动 + + ``` + $ echo 250 32000 32 1024 > /proc/sys/kernel/sem + ``` + + 也可以手动清理devicemapper残留的信号量(下面是清理一分钟以前申请的dm相关信号量) + + ``` + $ dmsetup udevcomplete_all 1 + This operation will destroy all semaphores older than 1 minutes with keys that have a prefix 3405 (0xd4d). + Do you really want to continue? [y/n]: y + 0 semaphores with keys prefixed by 3405 (0xd4d) destroyed. 0 skipped. + ``` + + +### 网卡残留 + +使用bridge模式启动容器的过程中,强制退出daemon可能导致网卡残留。使用bridge网络模式,当docker创建容器时,会先在host上创建一对veth,然后再把该网卡信息存到数据库中,如果在创建完成,存到docker的数据库之前,daemon被强制退出,那么该网卡无法被docker关联,下次启动也无法删除(docker本身会清理自己数据库中不用的网卡),从而造成网卡残留。 + +### 重启容器失败 + +容器hook耗时较长,且启动阶段遇到containerd被强制退出,再次执行容器start操作可能失败。容器启动阶段遇到containerd被强制退出,docker start操作直接返回错误;containerd被重新拉起后,上次启动可能仍处于runc create执行阶段(执行用户自定义hook,可能耗时较长),此时再次下发docker start命令启动该容器,可能提示以下错误: + +``` +Error response from daemon: oci runtime error: container with id exists: xxxxxx +``` + +该错误是由runc create一个已经存在(创建中)的容器导致,等第一次start对应的runc操作结束后再次执行docker start便可以成功。 + +由于hook的执行不受docker控制,这种场景下尝试回收该容器有可能导致containerd进程启动卡死(执行未知hook程序),且问题的风险可控(短期影响当前容器的创建): + +- 问题出现后等待第一次操作结束可以再次成功启动该容器。 +- 一般是在容器启动失败后创建新的容器,不复用已经失败的容器。 + +综上,该问题暂时作为场景约束。 + +### 服务无法正常重启 + +短时间内频繁重启docker服务导致该服务无法正常重启。docker系统服务由systemd负责监控,如果docker服务在10s内重启次数超过5次,systemd服务就会监控到该异常行为,因此会禁止docker服务启动。只有等到下一个10s周期开始后,docker服务才能响应重启命令正常重启。 + +## 系统掉电影响 + +主机意外掉电或系统panic等场景下,由于docker daemon的状态无法及时刷新到磁盘,导致重启后docker daemon状态不正常,可能出现的问题有(包括但不限于): + +- 掉电前创建的容器,重启后docker ps -a看不到,该问题是因为该容器的状态文件没有刷新到磁盘,从而导致重启后daemon无法获取到该容器的状态(镜像、卷、网络等也可能会有类似问题)。 +- 掉电前某个文件正处于写入状态,尚未完全写入,重启后daemon重新加载该文件发现文件格式不正常或内容不完整,导致重启加载出错。 +- 针对掉电时会破坏docker DB的情况,在重启节点时会清理data-root下面的db文件。因此重启前创建的如下信息在重启后会被删除: + - network,用docker network创建的资源会在重启后清除。 + - volume,用 docker volume创建的资源会在重启后删除。 + - 构建缓存,构建缓存信息会在重启后删除。 + - containerd保存的元数据,由于启动容器会重建containerd元数据,重启节点会清理containerd中保存的元数据。 + + >![](public_sys-resources/icon-note.gif) **说明:** + >用户若选择采用手动清理恢复环境的方式,可通过配置环境变量“DISABLE\_CRASH\_FILES\_DELETE=true”屏蔽daemon掉电重启时db文件清理功能。 + + + diff --git "a/content/zh/docs/Container/\345\256\211\350\243\205\351\205\215\347\275\256\344\273\213\347\273\215\345\217\212\346\263\250\346\204\217\344\272\213\351\241\271.md" "b/content/zh/docs/Container/\345\256\211\350\243\205\351\205\215\347\275\256\344\273\213\347\273\215\345\217\212\346\263\250\346\204\217\344\272\213\351\241\271.md" deleted file mode 100644 index 5b7903a567b5e47a7313d6809332fd5a3c419267..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\256\211\350\243\205\351\205\215\347\275\256\344\273\213\347\273\215\345\217\212\346\263\250\346\204\217\344\272\213\351\241\271.md" +++ /dev/null @@ -1,4 +0,0 @@ -# 安装配置介绍及注意事项 - -本章节主要介绍和开源容器docker安装相关的重要配置。 - diff --git "a/content/zh/docs/Container/\345\256\271\345\231\250\344\270\216\344\270\273\346\234\272\344\271\213\351\227\264\346\225\260\346\215\256\346\213\267\350\264\235.md" "b/content/zh/docs/Container/\345\256\271\345\231\250\344\270\216\344\270\273\346\234\272\344\271\213\351\227\264\346\225\260\346\215\256\346\213\267\350\264\235.md" deleted file mode 100644 index 2bb4d941bcb07c034dcc11f5d7c6a50d35ba71c4..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\256\271\345\231\250\344\270\216\344\270\273\346\234\272\344\271\213\351\227\264\346\225\260\346\215\256\346\213\267\350\264\235.md" +++ /dev/null @@ -1,74 +0,0 @@ -# 容器与主机之间数据拷贝 - -## 描述 - -isula cp 用于容器与主机之间的数据拷贝,仅支持runtime类型为lcr的容器。 - -## 用法 - -``` -isula cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH -isula cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH -``` - -## 参数 - -cp命令支持参数参考下表。 - -**表 1** cp命令参数列表 - - - - - - - - - - - -

命令

-

参数

-

说明

-

cp

-

-H, --host

-

指定要连接的iSulad socket文件路径

-
- -## 约束限制 - -- iSulad在执行拷贝时,不会挂载/etc/hostname, /etc/resolv.conf,/etc/hosts三个文件,也不会对--volume和--mount参数传入的参数挂载到host,所以对这些文件的拷贝使用的是镜像中的原始文件,而不是真实容器中的文件。 - - ``` - [root@localhost tmp]# isula cp b330e9be717a:/etc/hostname /tmp/hostname - [root@localhost tmp]# cat /tmp/hostname - [root@localhost tmp]# - ``` - -- iSulad在解压文件时,不会对文件系统中即将被覆盖的文件或文件夹做类型判断,而是直接覆盖,所以在拷贝时,如果源为文件夹,同名的文件会被强制覆盖为文件夹;如果源为文件,同名的文件夹会被强制覆盖为文件。 - - ``` - [root@localhost tmp]# rm -rf /tmp/test_file_to_dir && mkdir /tmp/test_file_to_dir - [root@localhost tmp]# isula exec b330e9be717a /bin/sh -c "rm -rf /tmp/test_file_to_dir && touch /tmp/test_file_to_dir" - [root@localhost tmp]# isula cp b330e9be717a:/tmp/test_file_to_dir /tmp - [root@localhost tmp]# ls -al /tmp | grep test_file_to_dir - -rw-r----- 1 root root 0 Apr 26 09:59 test_file_to_dir - ``` - - -- iSulad 在cp拷贝过程中,会将容器freeze住,在拷贝完成后,恢复容器运行。 - -## 示例 - -将主机/test/host目录拷贝到容器21fac8bb9ea8的/test目录下。 - -``` -isula cp /test/host 21fac8bb9ea8:/test -``` - -将容器21fac8bb9ea8的/www目录拷贝到主机的/tmp目录中。 - -``` -isula cp 21fac8bb9ea8:/www /tmp/ -``` - diff --git "a/content/zh/docs/Container/\345\256\271\345\231\250\344\277\241\346\201\257\346\237\245\350\257\242.md" "b/content/zh/docs/Container/\345\256\271\345\231\250\344\277\241\346\201\257\346\237\245\350\257\242.md" deleted file mode 100644 index 3e305c325fb19fb19f165da3b22dbad3f6ec2aba..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\256\271\345\231\250\344\277\241\346\201\257\346\237\245\350\257\242.md" +++ /dev/null @@ -1,8 +0,0 @@ -# 容器信息查询 - -在任何情况下,容器的状态都不应该以docker命令执行是否成功返回为判断标准。如想查看容器状态,建议使用: - -``` -docker inspect -``` - diff --git "a/content/zh/docs/Container/\345\256\271\345\231\250\345\201\245\345\272\267\347\212\266\346\200\201\346\243\200\346\237\245.md" "b/content/zh/docs/Container/\345\256\271\345\231\250\345\201\245\345\272\267\347\212\266\346\200\201\346\243\200\346\237\245.md" index c2d49b0f6a7e4fb0d68eacdd8a2726f293dfbb81..733495d04b2721ae3a93914b88bee80460deca41 100644 --- "a/content/zh/docs/Container/\345\256\271\345\231\250\345\201\245\345\272\267\347\212\266\346\200\201\346\243\200\346\237\245.md" +++ "b/content/zh/docs/Container/\345\256\271\345\231\250\345\201\245\345\272\267\347\212\266\346\200\201\346\243\200\346\237\245.md" @@ -1,2 +1,68 @@ -# 容器健康状态检查 - +# 容器健康状态检查 + +- [容器健康状态检查](#容器健康状态检查) + - [场景说明](#场景说明) + - [配置方法](#配置方法) + - [检查规则](#检查规则) + - [使用限制](#使用限制) + +## 场景说明 + +在实际的生产环境中,开发者提供的应用程序或者平台提供的服务难免存在bug,因此,一套管理系统对运行的应用程序进行周期性的健康检查和修复就是不可或缺的。容器健康检查机制便添加了用户定义的对容器进行健康检查的功能。在容器创建时配置\--health-cmd选项,在容器内部周期性地执行命令,通过命令的返回值来监测容器的健康状态。 + +## 配置方法 + +在容器启动时的配置: + +``` +isula run -itd --health-cmd "echo iSulad >> /tmp/health_check_file || exit 1" --health-interval 5m --health-timeout 3s --health-exit-on-unhealthy busybox bash +``` + +可配置的选项: + +- \--health-cmd,必选,在容器内执行的命令。返回值为0表示成功,非0表示失败。 +- \--health-interval,默认 30s,最大为int64上限(纳秒),自定义配置最小值1s,相邻两次命令执行的间隔时间(注:入参0s时视为default)。 +- \--health-timeout,默认 30s,最大为int64上限(纳秒),自定义配置最小值1s,单次检查命令执行的时间上限,超时则任务命令执行失败(注:入参0s时视为default),仅支持runtime类型为lcr的容器。 +- \--health-start-period,默认 0s,最大为int64上限(纳秒),自定义配置最小值1s,容器初始化时间。 +- \--health-retries,默认 3,最大为int32上限,健康检查失败最大的重试次数。 +- \--health-exit-on-unhealthy,默认false,检测到容器非健康时是否杀死容器。 + +## 检查规则 + +1. 容器启动后,容器状态中显示health:starting。 +2. 经过start-period时间后开始,以interval为间隔周期性在容器中执行CMD。即:当一次命令执行完毕后,经过interval时间,执行下一次命令。 +3. 若CMD命令在timeout限制的时间内执行完毕,并且返回值为0,则视为一次检查成功。否则视为一次检查失败。检查成功后,容器状态变为health:healthy。 +4. 若CMD命令连续retries次检查失败,则容器状态变为health:unhealthy。失败后容器也会继续进行健康检查。 +5. 容器状态为health:unhealthy时,任意一次检查成功会使得容器状态变为health:healthy。 +6. 设置\--exit-on-unhealthy的情况下,如果容器因为非被杀死退出(退出返回值137)后,健康检查只有容器在重新启动后才会继续生效。 +7. CMD执行完毕或超时时,docker daemon会将这次检查的起始时间、返回值和标准输出记录到容器的配置文件中。最多记录5条。此外,容器的配置文件中还存储着健康检查的相关参数。 +8. 运行中的容器的健康检查状态也会被写入容器配置中。通过isula inspect可以看到。 + +``` +"Health": { + "Status": "healthy", + "FailingStreak": 0, + "Log": [ + { + "Start": "2018-03-07T07:44:15.481414707-05:00", + "End": "2018-03-07T07:44:15.556908311-05:00", + "ExitCode": 0, + "Output": "" + }, + { + "Start": "2018-03-07T07:44:18.557297462-05:00", + "End": "2018-03-07T07:44:18.63035891-05:00", + "ExitCode": 0, + "Output": "" + }, + ...... +} +``` + +## 使用限制 + +- 容器内健康检查的状态信息最多保存5条。会保存最后得到的5条记录。 +- 容器启动时若健康检查相关参数配置为0,则按照默认值处理。 +- 带有健康检查配置的容器启动后,若iSulad daemon退出,则健康检查不会执行。iSulad daemon再次启动后,正在运行且带有健康检查配置的容器其健康状态会变为starting。之后检查规则同上。 +- 如果健康检查从第一次开始便一直失败,其状态保持与之前一致(starting),直到达到指定失败次数(--health-retries)后变为unhealthy,或者检查成功后变为healthy。 +- 对于OCI类型的runtime的容器,健康检查功能待完善。目前仅完整支持lcr类型的容器。 diff --git "a/content/zh/docs/Container/\345\256\271\345\231\250\345\206\205reboot-shutdown.md" "b/content/zh/docs/Container/\345\256\271\345\231\250\345\206\205reboot-shutdown.md" index 5305112f124ead846c6acc2ba98b48899941b15b..14508d324269ffafe4592db409c74aee17837129 100644 --- "a/content/zh/docs/Container/\345\256\271\345\231\250\345\206\205reboot-shutdown.md" +++ "b/content/zh/docs/Container/\345\256\271\345\231\250\345\206\205reboot-shutdown.md" @@ -1,10 +1,10 @@ -# 容器内reboot/shutdown +# 容器内reboot/shutdown -## 功能描述 +## 功能描述 系统容器支持在容器内执行reboot和shutdown命令。执行reboot命令效果同重启容器一致;执行shutdown命令效果同停止容器一致。 -## 参数说明 +## 参数说明

命令

@@ -27,14 +27,14 @@
-## 约束限制 +## 约束限制 - shutdown功能,依赖于不同的OS,以实际容器运行环境对应OS为准。 - 执行“shutdown -h now”命令关闭系统时,不能多次占用console。例如“isula run -ti”命令打开一个console,在另一个host bash中isula attach该容器,会打开另一个console,此时执行shutdown会失败。 -## 使用示例 +## 使用示例 -- 容器启动时指定--restart on-reboot参数,示例如下: +- 容器启动时指定\--restart on-reboot参数,示例如下: ``` [root@localhost ~]# isula run -tid --restart on-reboot --system-container --external-rootfs /root/myrootfs none init diff --git "a/content/zh/docs/Container/\345\256\271\345\231\250\345\274\225\346\223\216.md" "b/content/zh/docs/Container/\345\256\271\345\231\250\345\274\225\346\223\216-4.md" similarity index 97% rename from "content/zh/docs/Container/\345\256\271\345\231\250\345\274\225\346\223\216.md" rename to "content/zh/docs/Container/\345\256\271\345\231\250\345\274\225\346\223\216-4.md" index 709b8dbb1dc573f36a9b20fd7e71498bd831f4a2..a230e281993e13fb393c217bbce61dde05a1d314 100644 --- "a/content/zh/docs/Container/\345\256\271\345\231\250\345\274\225\346\223\216.md" +++ "b/content/zh/docs/Container/\345\256\271\345\231\250\345\274\225\346\223\216-4.md" @@ -1,43 +1,43 @@ -# 容器引擎 - -Docker daemon是一个常驻后台的系统进程,docker 子命令执行前先要启动docker daemon。 - -   - -如果是通过rpm包或者系统包管理工具安装的,就可以使用systemctl start docker来启动docker daemon。 - -docker命令支持多个参数选项,对于参数选项有以下约定: - -1. 单个字符的选项可以合并在一起,如: - - ``` - docker run -t -i busybox /bin/sh - ``` - - 可以写成 - - ``` - docker run -ti busybox /bin/sh - ``` - -2. 在命令帮助中看到的如--icc=true之类的bool命令选项,如果没有使用这个选项,则这个标志位的值就是在命令帮助中看到的默认值,如果使用了这个选项则这个标志位的值就是命令帮助中看的值的相反值,如果启动docker daemon没有加上使用--icc选项,则默认设置了--icc=true,如果使用了--icc选项则表示是--icc=false。 -3. 在命令帮助中看到的--attach=\[\]之类的选项,表示这类的选项可以多次设置,如: - - ``` - docker run --attach=stdin --attach=stdout -i -t busybox /bin/sh - ``` - -4. 在命令帮助中看到的-a, --attach=\[\]之类的选项,表示这种选项既可以用-a value指定也可以用--attach=value指定。如: - - ``` - docker run -a stdin --attach=stdout -i -t busybox /bin/sh - ``` - -5. --name=””之类的选项需要的是一个字符串,只能指定一次,-c=0之类的选项需要的是一个整数,只能指定一次。 - -**表 1** docker daemon启动时指定参数详解 - - +# 容器引擎 + +Docker daemon是一个常驻后台的系统进程,docker 子命令执行前先要启动docker daemon。 + +   + +如果是通过rpm包或者系统包管理工具安装的,就可以使用systemctl start docker来启动docker daemon。 + +docker命令支持多个参数选项,对于参数选项有以下约定: + +1. 单个字符的选项可以合并在一起,如: + + ``` + docker run -t -i busybox /bin/sh + ``` + + 可以写成 + + ``` + docker run -ti busybox /bin/sh + ``` + +2. 在命令帮助中看到的如\--icc=true之类的bool命令选项,如果没有使用这个选项,则这个标志位的值就是在命令帮助中看到的默认值,如果使用了这个选项则这个标志位的值就是命令帮助中看的值的相反值,如果启动docker daemon没有加上使用\--icc选项,则默认设置了\--icc=true,如果使用了\--icc选项则表示是\--icc=false。 +3. 在命令帮助中看到的\--attach=\[\]之类的选项,表示这类的选项可以多次设置,如: + + ``` + docker run --attach=stdin --attach=stdout -i -t busybox /bin/sh + ``` + +4. 在命令帮助中看到的-a, \--attach=\[\]之类的选项,表示这种选项既可以用-a value指定也可以用\--attach=value指定。如: + + ``` + docker run -a stdin --attach=stdout -i -t busybox /bin/sh + ``` + +5. \--name=””之类的选项需要的是一个字符串,只能指定一次,-c=0之类的选项需要的是一个整数,只能指定一次。 + +**表 1** docker daemon启动时指定参数详解 + + -

参数名称

说明

@@ -305,5 +305,4 @@ docker命令支持多个参数选项,对于参数选项有以下约定:
- + diff --git "a/content/zh/docs/Container/\345\210\233\345\273\272\345\256\271\345\231\250-33.md" "b/content/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206-3.md" similarity index 35% rename from "content/zh/docs/Container/\345\210\233\345\273\272\345\256\271\345\231\250-33.md" rename to "content/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206-3.md" index 0bbd1d51709300e144219389338486c084bd180c..65e7d9a39a25be5d622e281a186159cafdb619ed 100644 --- "a/content/zh/docs/Container/\345\210\233\345\273\272\345\256\271\345\231\250-33.md" +++ "b/content/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206-3.md" @@ -1,6 +1,15 @@ -# 创建容器 +# 容器管理 +- [容器管理](#容器管理) + - [创建容器](#创建容器) + - [创建容器使用hook-spec](#创建容器使用hook-spec) + - [创建容器配置健康检查](#创建容器配置健康检查) + - [停止与删除容器](#停止与删除容器) + - [容器信息查询](#容器信息查询) + - [修改操作](#修改操作) -## 下载镜像 +## 创建容器 + +### 下载镜像 运行docker命令需要root权限,当你使用普通用户登录时,需要用sudo权限执行docker命令。 @@ -22,7 +31,7 @@ 可以通过docker images命令查看本地镜像列表。 -## 运行一个简单的应用 +### 运行一个简单的应用 ``` [root@localhost ~]# docker run busybox /bin/echo "Hello world" @@ -37,7 +46,7 @@ CONTAINER ID IMAGE COMMAND CREATED d8c0a3315bc0 busybox "/bin/echo 'Hello wo…" 5 seconds ago Exited (0) 3 seconds ago practical_franklin ``` -## 创建一个交互式的容器 +### 创建一个交互式的容器 ``` [root@localhost ~]# docker run -it busybox /bin/bash @@ -49,9 +58,9 @@ root@bf22919af2cf:/# pwd -ti选项分配一个伪终端给容器并可以使用STDIN进行交互,可以看到这时可以在容器内执行一些命令。这时的容器看起来完全是一个独立的linux虚拟机。使用exit命令退出容器。 -## 后台运行容器 +### 后台运行容器 -执行下面命令行,-d指示这个容器在后台运行,--name=container1 指定容器的名字为container1。 +执行下面命令行,-d指示这个容器在后台运行,\--name=container1 指定容器的名字为container1。 ``` [root@localhost ~]# docker run -d --name=container1 busybox /bin/sh -c "while true;do echo hello world;sleep 1;done" @@ -76,7 +85,7 @@ hello world ... ``` -## 容器网络连接 +### 容器网络连接 默认情况下,容器可以访问外部网络,而外部网络访问容器时需要通过端口映射,下面以在docker中运行私有镜像库服务registry为例。下面的命令行中-P使registry镜像中开放的端口暴露给主机。 @@ -102,7 +111,7 @@ docker run --name=container_registry -d -p 5000:5000 registry 通过-p 5000:5000指定容器的5000端口映射到主机的5000端口。 -## 注意事项 +### 注意事项 - **启动容器不能单独加-a stdin** @@ -129,15 +138,15 @@ docker run --name=container_registry -d -p 5000:5000 registry - **避免使用可能会对host造成影响的选项** - --privileged 选项会让容器获得所有权限,容器可以做挂载操作和修改/proc、/sys等目录,可能会对host造成影响,普通容器需要避免使用该选项。 + \--privileged 选项会让容器获得所有权限,容器可以做挂载操作和修改/proc、/sys等目录,可能会对host造成影响,普通容器需要避免使用该选项。 - 共享host的namespace,比如--pid host/--ipc host/--net host等选项可以让容器跟host共享命名空间,同样会导致容器影响host的结果,需要避免使用。 + 共享host的namespace,比如\--pid host/\--ipc host/\--net host等选项可以让容器跟host共享命名空间,同样会导致容器影响host的结果,需要避免使用。 - **kernel memory cgroup不稳定,禁止使用** kernel memory cgroup在小于4.0版本的Linux内核上仍属于实验阶段,运行起来不稳定,虽然Docker的Warning说是小于4.0就可以,但是我们评估认为,kmemcg在高版本内核仍然不稳定,所以不管是低版本还是高版本,均禁止使用。 - 当docker run --kernel-memory时,会产生如下告警: + 当docker run \--kernel-memory时,会产生如下告警: ``` WARNING: You specified a kernel memory limit on a kernel older than 4.0. Kernel memory limits are experimental on older kernels, it won't work as expected as expected and can cause your system to be unstable. @@ -145,15 +154,15 @@ docker run --name=container_registry -d -p 5000:5000 registry - **blkio-weight参数在支持blkio精确控制的内核下不可用** - --blkio-weight-device 可以实现容器内更为精确的blkio控制,该控制需要指定磁盘设备,可以通过docker --blkio-weight-device参数实现。同时在这种内核下docker不再提供--blkio-weight方式限制容器blkio,使用该参数创建容器将会报错: + \--blkio-weight-device 可以实现容器内更为精确的blkio控制,该控制需要指定磁盘设备,可以通过docker \--blkio-weight-device参数实现。同时在这种内核下docker不再提供\--blkio-weight方式限制容器blkio,使用该参数创建容器将会报错: ``` docker: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "process_linux.go:398: container init caused \"process_linux.go:369: setting cgroup config for ready process caused \\\"blkio.weight not supported, use weight_device instead\\\"\"" ``` -- **使用--blkio-weight-device需要磁盘支持CFQ调度策略** +- **使用\--blkio-weight-device需要磁盘支持CFQ调度策略** - --blkio-weight-device参数需要磁盘工作于完全公平队列调度(CFQ:Completely Fair Queuing)的策略时才能工作。 + \--blkio-weight-device参数需要磁盘工作于完全公平队列调度(CFQ:Completely Fair Queuing)的策略时才能工作。 通过查看磁盘scheduler文件(/sys/block/<磁盘\>/queue/scheduler)可以获知磁盘支持的策略以及当前所采用的策略,如查看sda: @@ -173,12 +182,12 @@ docker run --name=container_registry -d -p 5000:5000 registry 通过基础镜像创建的容器在使用过程中,容器基础镜像中的systemd仅用于系统容器,普通容器不支持使用。 -## 并发性能 +### 并发性能 - docker内部的消息缓冲有一个上限,超过这个上限就会将消息丢弃,因此在并发执行命令时建议不要超过1000条命令,否则有可能会造成docker内部消息丢失,从而造成容器无法启动等严重问题。 - 并发创建容器并对容器执行restart时会偶现“oci runtime error: container init still running”报错,这是因为containerd对事件等待队列进行了性能优化,容器stop过程中执行runc delete,尝试在1s内kill掉容器的init进程,如果1s内init进程还没有被kill掉的话runc会返回该错误。由于containerd的GC(垃圾回收机制)每隔10s会回收之前runc delete的残留资源, 所以并不影响下次对容器的操作,一般出现上述报错的话等待4\~5s之后再次启动容器即可。 -## 安全特性解读 +### 安全特性解读 1. docker默认的权能配置分析 @@ -233,7 +242,7 @@ docker run --name=container_registry -d -p 5000:5000 registry 容器中有ptrace权限,可对容器的进程进行ptrace调试。现runc已经修补该漏洞,但有些工具比如nsenter和docker-enter并没有改保护,容器中可对这些工具执行的进程进行调试,获取这些工具带入的资源信息(Namespace、fd等),另外, ptrace可以绕过seccomp,极大增加内核攻击面。 -8. Docker Cap接口 --cap-add all +8. Docker Cap接口 \--cap-add all --cap-add all表示赋予容器所有的权能,包括本节提到的比较危险的权能,使得容器可以逃逸。 @@ -245,7 +254,7 @@ docker run --name=container_registry -d -p 5000:5000 registry /sys和/proc目录包含了linux维护内核参数、设备管理的接口,容器中配置该目录可写可能会导致容器逃逸。 -11. Docker开放Cap --CAP\_AUDIT\_CONTROL +11. Docker开放Cap \--CAP\_AUDIT\_CONTROL 容器可以通过控制系统audit系统,并且通过AUDIT\_TTY\_GET/AUDIT\_TTY\_SET等命令可以获取审计系统中记录的tty执行输入记录,包括root密码。 @@ -277,12 +286,433 @@ docker run --name=container_registry -d -p 5000:5000 registry Docker默认的Cap,包含了CAP\_SETUID和CAP\_FSETID,如host和容器共享目录,容器可对共享目录的二进制文件进行+s设置,host上的普通用户可使用其进行提权CAP\_AUDIT\_WRITE,容器可以对host写入,容器可以对host写入日志,host需配置日志防爆措施。 -19. Docker和host共享namespace参数,比如--pid,--ipc, --uts +19. Docker和host共享namespace参数,比如 \--pid,\--ipc, \--uts + + 该参数为容器和host共享namespace空间,容器和host的namespace隔离没有了,容器可对host进行攻击。比如,使用\--pid 和host共享pid namespace,容器中可以看到host上的进程pid号,可以随意杀死host的进程。 + +20. \--device 把host的敏感目录或者设备,映射到容器中 + + Docker管理面有接口可以把host上的目录或者设备映射到容器中,比如\--device,-v等参数,不要把host上的敏感目录或者设备映射到容器中。 + + +## 创建容器使用hook-spec + +### 原理及使用场景 + +docker支持hook的扩展特性,hook应用与底层runc的执行过程中,遵循OCI标准:[https://github.com/opencontainers/runtime-spec/blob/master/config.md\#hooks](#https://github.com/opencontainers/runtime-spec/blob/master/config.md#hooks) 。 + +hook主要有三种类型:prestart,poststart,poststop。分别作用于容器内用户应用程序启动之前,容器应用程序启动之后,容器应用程序停止之后。 + +### 接口参考 + +当前为docker run和create命令增加了参数“--hook-spec”,后面接spec文件的绝对路径,可以指定容器启动时的需要添加的hook,这些hook会自动附加在docker自己动态创建的hook后面(当前docker只有一个libnetwork的prestart hook),随容器的启动/销毁过程执行用户指定的程序。 + +spec的结构体定义为: + +``` +// Hook specifies a command that is run at a particular event in the lifecycle of a container +type Hook struct{ + Path string `json:"path"` + Args []string `json:"args,omitempty"` + Env []string `json:"env,omitempty"` + Timeout *int `json:"timeout,omitempty"` +} +// Hooks for container setup and teardown +type Hooks struct{ + // Prestart is a list of hooks to be run before the container process is executed. + // On Linux, they are run after the container namespaces are created. + Prestart []Hook `json:"prestart,omitempty"` + // Poststart is a list of hooks to be run after the container process is started. + Poststart []Hook `json:"poststart,omitempty"` + // Poststop is a list of hooks to be run after the container process exits. + Poststop []Hook `json:"poststop,omitempty"` +} +``` + +- Spec文件的path、args、env 都是必填信息; +- Timeout选填\(建议配置\),参数类型为int,不接受浮点数,范围为\[1, 120\]。 +- Spec内容应该是json格式的,格式不对会报错,示例参考前面。 +- 使用的时候既可以\`docker run \--hook-spec /tmp/hookspec.json xxx\`, 也可以 \`docker create \--hook-spec /tmp/hookspec.json xxx && docker start xxx\`。 + +### 为容器定制特有的hook + +以启动过程中添加一个网卡的过程来说明。下面是相应的hook spec文件内容: + +``` +{ + "prestart": [ + { + "path": "/var/lib/docker/hooks/network-hook", + "args": ["network-hook", "tap0", "myTap"], + "env": [], + "timeout": 5 + } + ], + "poststart":[], + "poststop":[] +} +``` + +指定prestart hook增加一个网络hook的执行。路径是/var/lib/docker/hooks/network-hook,args代表程序的参数,第一个参数一般是程序名字,第二个是程序接受的参数。对于network-hook这个hook程序,需要两个参数,第一个是主机上的网卡名字,第二个是在容器内的网卡重命名。 + +   + +- 注意事项 + 1. hook path必须为docker的graph目录(\--graph)下的hooks文件夹下,默认一般为 /var/lib/docker/hooks,可以通过docker info命令查看root路径。 + + ``` + [root@localhost ~]# docker info + ... + Docker Root Dir: /var/lib/docker + ... + ``` + + 这个路径可能会跟随用户手动配置,以及user namespace的使用(daemon --userns-remap)而变化。 path进行软链接解析后,必须以Docker Root Dir/hooks开头(如本例中使用 /var/lib/docker/hooks开头),否则会直接报错。 + + 2. hooks path必须指定绝对路径,因为这个是由daemon处理,相对路径对daemon无意义。同时绝对路径也更满足安全要求。 + 3. hook程序打印到stderr的输出会打印给客户端并对容器的声明周期产生影响(比如启动失败),而输出到stdout的打印信息会被直接忽略。 + 4. 严禁在hook里反向调用docker的指令。 + 5. 配置的hook执行文件必须要有可执行权限,否则hook执行会报错。 + 6. 使用hook时,执行时间应尽量短。如果hook中的prestart时间过长(超过2分钟),则会导致容器启动超时失败,如果hook中的poststop时间过长(超过2分钟),也会导致容器异常。 + + 目前已知的异常如下:执行docker stop命令停止容器时,2分钟超时执行清理时,由于hook还没执行结束,因此会等待hook执行结束(该过程持有锁),从而导致和该容器相关的操作都会卡住,需要等到hook执行结束才能恢复。另外,由于docker stop命令的2分钟超时处理是异步的过程,因此即使docker stop命令返回了成功,容器的状态也依然是up状态,需要等到hook执行完后状态才会修改为exited。 + + + +- 使用建议 + 1. 建议配置hook的Timeout超时时间阈值,超时时间最好在5s以内。 + 2. 建议不要配置过多hook,每个容器建议prestart、poststart、poststop这三个hook都只配置一个,过多hook会导致启动时间长。 + 3. 建议用户识别多个hook之间的依赖关系,如果存在依赖关系,在组合hook配置文件时要根据依赖关系灵活调整顺序,hook的执行顺序是按照配置的spec文件上的先后顺序。 + + +### 多个hook-spec + +当有多个hook配置文件,要运行多个hook时,用户必须自己手工将多个hook配置文件组合成一个配置文件,使用\--hook-spec参数指定此合并后的配置文件,方可生效所有的hook;如果配置多个\--hook-spec参数,则只有最后一个生效。 + +配置举例: + +hook1.json内容如下: + +``` +# cat /var/lib/docker/hooks/hookspec.json +{ + "prestart": [ + { + "path": "/var/lib/docker/hooks/lxcfs-hook", + "args": ["lxcfs-hook", "--log", "/var/log/lxcfs-hook.log"], + "env": [] + } + ], + "poststart":[], + "poststop":[] +} +``` + +hook2.json内容如下: + +``` +# cat /etc/isulad-tools/hookspec.json +{ + "prestart": [ + { + "path": "/docker-root/hooks/docker-hooks", + "args": ["docker-hooks", "--state", "prestart"], + "env": [] + } + ], + "poststart":[], + "poststop":[ + { + "path": "/docker-root/hooks/docker-hooks", + "args": ["docker-hooks", "--state", "poststop"], + "env": [] + } + ] +} +``` + +手工合并后的json内容如下: + +``` +{ + "prestart":[ + { + "path": "/var/lib/docker/hooks/lxcfs-hook", + "args": ["lxcfs-hook", "--log", "/var/log/lxcfs-hook.log"], + "env": [] + }, + { + "path": "/docker-root/hooks/docker-hooks", + "args": ["docker-hooks", "--state", "prestart"], + "env": [] + } + ], + "poststart":[], + "poststop":[ + { + "path": "/docker-root/hooks/docker-hooks", + "args": ["docker-hooks", "--state", "poststop"], + "env": [] + } + ] +} +``` + +需要注意的是,docker daemon会按照数组顺序依次读取hook配置文件中prestart等action中的hook二进制,进行执行动作。用户需要识别多个hook之间的依赖关系,如果有依赖关系,在组合hook配置文件时要根据依赖关系灵活调整顺序。 + +### 为所有容器定制默认的hook + +Docker daemon同样可以接收--hook-spec的参数,--hook-spec的语义与docker create/run的--hook-spec参数相同,这里不再复述。也可以在/etc/docker/daemon.json里添加hook配置: + +``` +{ + "hook-spec": "/tmp/hookspec.json" +} +``` + +容器在运行时,会首先执行daemon定义的--hook-spec中指定的hooks,然后再执行每个容器单独定制的hooks。 + +## 创建容器配置健康检查 + +Docker提供了用户定义的对容器进行健康检查的功能。在Dockerfile中配置HEALTHCHECK CMD选项,或在容器创建时配置\--health-cmd选项,在容器内部周期性地执行命令,通过命令的返回值来监测容器的健康状态。 + +### 配置方法 + +- 在Dockerfile中添加配置,如: + + ``` + HEALTHCHECK --interval=5m --timeout=3s --health-exit-on-unhealthy=true \ + CMD curl -f http://localhost/ || exit 1 + ``` + + 可配置的选项: + + 1. --interval=DURATION,默认 30s,相邻两次命令执行的间隔时间。另外,容器启动后,经过interval时间进行第一次检查。 + 2. --timeout=DURATION,默认 30s,单次检查命令执行的时间上限,超时则任务命令执行失败。 + 3. --start-period=DURATION,默认 0s,容器初始化时间。初始化期间也会执行健康检查,健康检查失败不会计入最大重试次数。但是,如果在初始化期间运行状况检查成功,则认为容器已启动。之后所有连续的检查失败都将计入最大重试次数。 + 4. --retries=N,默认 3,健康检查失败最大的重试次数。 + 5. --health-exit-on-unhealthy=BOOLEAN,默认false,检测到容器非健康时是否杀死容器 + 6. CMD,必选,在容器内执行的命令。返回值为0表示成功,非0表示失败。 + + 在配置了HEALTHCHECK后创建镜像,HEALTHCHECK相关配置会被写入镜像的配置中。通过docker inspect可以看到。如: + + ``` + "Healthcheck": { + "Test": [ + "CMD-SHELL", + "/test.sh" + ] + }, + ``` + + +- 在容器创建时的配置: + + ``` + docker run -itd --health-cmd "curl -f http://localhost/ || exit 1" --health-interval 5m --health-timeout 3s --health-exit-on-unhealthy centos bash + ``` + + 可配置的选项: - 该参数为容器和host共享namespace空间,容器和host的namespace隔离没有了,容器可对host进行攻击。比如,使用--pid 和host共享pid namespace,容器中可以看到host上的进程pid号,可以随意杀死host的进程。 + 1. \--health-cmd,必选,在容器内执行的命令。返回值为0表示成功,非0表示失败。 + 2. \--health-interval,默认 30s,最大为int64上限(纳秒)相邻两次命令执行的间隔时间。 + 3. \--health-timeout,默认 30s,最大为int64上限(纳秒),单次检查命令执行的时间上限,超时则任务命令执行失败。 + 4. \--health-start-period,默认 0s,最大为int64上限(纳秒),容器初始化时间。 + 5. \--health-retries,默认 3,最大为int32上限,健康检查失败最大的重试次数。 + 6. \--health-exit-on-unhealthy,默认false,检测到容器非健康时是否杀死容器。 -20. --device 把host的敏感目录或者设备,映射到容器中 + 容器启动后,HEALTHCHECK相关配置会被写入容器的配置中。通过docker inspect可以看到。如: - Docker管理面有接口可以把host上的目录或者设备映射到容器中,比如--device,-v等参数,不要把host上的敏感目录或者设备映射到容器中。 + ``` + "Healthcheck": { + "Test": [ + "CMD-SHELL", + "/test.sh" + ] + }, + ``` + +### 检查规则 + +1. 容器启动后,容器状态中显示health:starting。 +2. 经过start-period时间后开始,以interval为间隔周期性在容器中执行CMD。即:当一次命令执行完毕后,经过interval时间,执行下一次命令。 +3. 若CMD命令在timeout限制的时间内执行完毕,并且返回值为0,则视为一次检查成功,否则视为一次检查失败。检查成功后,容器状态变为health:healthy。 +4. 若CMD命令连续retries次检查失败,则容器状态变为health:unhealthy。失败后容器也会继续进行健康检查。 +5. 容器状态为health:unhealthy时,任意一次检查成功会使得容器状态变为health:healthy。 +6. 设置--health-exit-on-unhealthy的情况下,如果容器因为非被杀死退出(退出返回值137)后,健康检查只有容器在重新启动后才会继续生效。 +7. CMD执行完毕或超时时,docker daemon会将这次检查的起始时间、返回值和标准输出记录到容器的配置文件中。最多记录最新的5条数据。此外,容器的配置文件中还存储着健康检查的相关参数。 + +通过docker ps可以看到容器状态。 + +``` +[root@bac shm]# docker ps +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +7de2228674a2 testimg "bash" About an hour ago Up About an hour (unhealthy) cocky_davinci +``` + +运行中的容器的健康检查状态也会被写入容器配置中。通过docker inspect可以看到。 + +``` +"Health": { + "Status": "healthy", + "FailingStreak": 0, + "Log": [ + { + "Start": "2018-03-07T07:44:15.481414707-05:00", + "End": "2018-03-07T07:44:15.556908311-05:00", + "ExitCode": 0, + "Output": "" + }, + { + "Start": "2018-03-07T07:44:18.557297462-05:00", + "End": "2018-03-07T07:44:18.63035891-05:00", + "ExitCode": 0, + "Output": "" + }, + ...... +} +``` + +>![](public_sys-resources/icon-note.gif) **说明:** +>- 容器内健康检查的状态信息最多保存5条。会保存最后得到的5条记录。 +>- 容器内健康检查相关配置同时最多只能有一条生效。Dockerfile中配置的靠后的条目会覆盖靠前的;容器创建时的配置会覆盖镜像中的。 +>- 在Dockerfile中可以通过 HEALTHCHECK NONE来取消引用的镜像中的健康检查配置。在容器运行时可以通过配置--no-healthcheck来取消镜像中的健康检查配置。不允许在启动时同时配置健康检查相关选项与--no-healthcheck选项。 +>- 带有健康检查配置的容器启动后,若docker daemon退出,则健康检查不会执行,一直等待。docker daemon再次启动后,容器健康状态会变为starting。之后检查规则同上。 +>- 构建容器镜像时若健康检查相关参数配置为空,则按照默认值处理。 +>- 容器启动时若健康检查相关参数配置为0,则按照默认值处理。 + +## 停止与删除容器 + +用docker stop停止名为container1的容器: + +``` +[root@localhost ~]# docker stop container1 +``` + +也可以用docker kill来杀死容器达到停止容器的目的: + +``` +[root@localhost ~]# docker kill container1 +``` + +当容器停止之后,可以使用docker rm删除容器: + +``` +[root@localhost ~]# docker rm container1 +``` + +当然,使用docker rm -f 强制删除容器也是可以的: + +``` +[root@localhost ~]# docker rm -f container1 +``` + +### 注意事项 + +- 禁止使用docker rm -f XXX 删除容器。如果使用强制删除,docker rm会忽略过程中的错误,可能导致容器相关元数据残留。如果使用普通删除,如果删除过程出错,则会删除失败,不会导致元数据残留。 +- 避免使用docker kill命令。docker kill命令发送相关信号给容器内业务进程,依赖于容器内业务进程对信号的处理策略,可能导致业务进程的信号处理行为与指令的预期不符合的情况。 +- docker stop处于restarting状态的容器可能容器不会马上停止。如果一个容器使用了重启规则,当容器处于restarting状态时,docker stop这个容器时有很低的概率会立即返回,容器仍然会在重启规则的作用下再次启动。 +- 不能用docker restart重启加了--rm参数的容器。加了--rm参数的容器在退出时,容器会主动删除,如果重启一个加了--rm的参数的容器, 可能会导致一些异常情况,比如启动容器时,同时加了--rm与-ti参数,对容器执行restart操作,可能会概率性卡住无法退出。 + +### docker stop/restart 指定t参数且t<0时,请确保自己容器的应用会处理stop信号 + +Stop的原理:(Restart会调用Stop流程) + +1. Stop会首先给容器发送Stop 信号(15) +2. 然后等待一定的时间(这个时间就是用户输入的 t) +3. 过了一定时间,如果容器还活着,那么就发送kill信号(9)使容器强制退出 + +输入参数t(单位s)的含义: + +- t<0 : 表示死等,不管多久都等待程序优雅退出,既然用户这么输入了,表示对自己的应用比较放心,认为自己的程序有合理的stop信号的处理机制 +- t=0 : 表示不等,立即发送kill -9 到容器 +- t\>0 : 表示等一定的时间,如果容器还未退出,就发送kill -9 到容器 + +所以如果用户使用t<0 \(比如t=-1\),请确保自己容器的应用会正确处理signal 15,如果容器忽略了该信号,会导致docker stop一直卡住。 + +### 如果容器处于Dead状态,可能底层文件系统处于busy状态,需要手动删除 + +Docker在执行容器删除时,先停止容器的相关进程,之后将容器状态更改为Dead,最后执行容器rootfs的删除操作。当文件系统或者device mapper处于忙碌状态时,最后一步rootfs的删除会失败。docker ps -a查看会发现容器处于Dead状态。Dead状态的容器不能再次启动,需要等待文件系统不繁忙时,手动再次执行docker rm进行删除。 + +### 共享pid namespace容器,子容器处于pause状态会使得父容器stop卡住,并影响docker run命令执行 + +使用--pid参数创建共享pid namespace的父子容器,在执行docker stop父容器时,如果子容器中有进程无法退出(比如处于D状态、pause状态),会产生父容器docker stop命令等待的情况,需要手动恢复这些进程,才能正常执行命令。 + +遇到该问题的时候,请对pause状态的容器使用docker inspect 命令查询 PidMode对应的父容器是否为需要docker stop的容器。如果是该容器,请使用docker unpause将子容器解除pause状态,指令即可继续执行。 + +一般来说,导致该类问题的可能原因是容器对应的pid namespace由于进程残留导致无法被销毁。如果上述方法无法解决问题,可以通过借助linux工具,获取容器内残留进程,确定pid namespace中进程无法退出的原因,解决后容器就可以退出: + +- 获取容器pid namespace id + + ``` + docker inspect --format={{.State.Pid}} CONTAINERID | awk '{print "/proc/"$1"/ns/pid"}' |xargs readlink + ``` + +- 获取该namespace下的线程 + + ``` + ls -l /proc/*/task/*/ns/pid |grep -F PIDNAMESPACE_ID |awk '{print $9}' |awk -F \/ '{print $5}' + ``` + + +## 容器信息查询 + +在任何情况下,容器的状态都不应该以docker命令执行是否成功返回为判断标准。如想查看容器状态,建议使用: + +``` +docker inspect +``` + +## 修改操作 + +### docker exec进入容器启动多个进程的注意事项 + +docker exec进入容器执行的第一个命令为 bash 命令时,当退出 exec 时,要保证在这次exec启动的进程都退出了,再执行exit退出,否则会导致exit退出时终端卡主的情况。如果要在exit退出时,exec中启动的进程仍然在后台保持运行,要在启动进程时加上nohup。 + +### docker rename和docker stats 的使用冲突 + +如果使用docker stats 实时监控容器,当使用docker rename重命名容器之后,docker stats中显示的名字将还是原来的名字,不是rename后的名字。 + +### docker rename操作restarting状态的容器可能会失败 + +对一个处于restarting状态的容器执行rename操作的时候,docker会同步修改容器网络的相关配置。由于restarting状态的容器可能还未真正启动起来,网络是不存在的,导致rename操作报错sandbox不存在。建议rename只操作非restarting的稳定状态的容器。 + +### docker cp + +1. 使用docker cp向容器中拷贝文件时,docker ps以及所有对这个容器的操作都将等待docker cp结束之后才能进行。 +2. 容器以非root用户运行,当使用docker cp命令复制主机上的一个非root权限的文件到容器时,文件在容器中的权限角色会变成root。docker cp与cp命令不同,docker cp会修改复制到容器中文件的uid和gid为root。 + +### docker login + +执行docker login后,会将usrer/passwd经 aes(256位)加密后保存在/root/.docker/config.json,同时生成 _root_.docker/aeskey\(权限0600\),用来解密/root/.docker/config.json中的 usrer/passwd。目前不能定时更新aeskey,只能由用户手动删除aeskey来更新。aeskey更新后,不管是否重启过docker daemon,都需要重新login,才可以push。例如: + +``` +root@hello:~/workspace/dockerfile# docker login +Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one. +Username: example Password: +Login Succeeded +root@hello:~/workspace/dockerfile# docker push example/empty +The push refers to a repository [docker.io/example/empty] +547b6288eb33: Layer already exists +latest: digest: sha256:99d4fb4ce6c6f850f3b39f54f8eca0bbd9e92bd326761a61f106a10454b8900b size: 524 +root@hello:~/workspace/dockerfile# rm /root/.docker/aeskey +root@hello:~/workspace/dockerfile# docker push example/empty +WARNING: Error loading config file:/root/.docker/config.json - illegal base64 data at input byte 0 +The push refers to a repository [docker.io/example/empty] +547b6288eb33: Layer already exists +errors: +denied: requested access to the resource is denied +unauthorized: authentication required +root@hello:~/workspace/dockerfile# docker login +Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one. +Username: example +Password: +Login Succeeded +root@hello:~/workspace/dockerfile# docker push example/empty +The push refers to a repository [docker.io/example/empty] +547b6288eb33: Layer already exists +latest: digest: sha256:99d4fb4ce6c6f850f3b39f54f8eca0bbd9e92bd326761a61f106a10454b8900b size: 524 +``` + diff --git "a/content/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206-32.md" "b/content/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206-32.md" deleted file mode 100644 index d17c8fa2ad21c3184b3a77c0c2965a8d15680dcb..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206-32.md" +++ /dev/null @@ -1,2 +0,0 @@ -# 容器管理 - diff --git "a/content/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206-36.md" "b/content/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206-36.md" deleted file mode 100644 index e466652a93a6ebc7ff56aa67b8812f2aa8d6a378..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206-36.md" +++ /dev/null @@ -1,231 +0,0 @@ -# 容器管理 - -当前docker支持的子命令,按照功能划分为以下几组: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

功能划分

-

命令

-

命令功能

-

主机环境相关

-

version

-

查看docker版本信息

-

info

-

查看docker系统和主机环境信息

-

容器相关

-

容器生命周期管理

-

create

-

由image创建一个容器

-

run

-

由image创建一个容器并运行

-

start

-

开始一个已停止运行的容器

-

stop

-

停止一个运行中的容器

-

restart

-

重启一个容器

-

wait

-

等待一个容器停止,并打印出退出码

-

rm

-

删除一个容器

-

容器内进程管理

-

pause

-

暂停一个容器内的所有进程

-

unpause

-

恢复一个容器内被暂停的所用进程

-

top

-

查看容器内的进程

-

exec

-

在容器内执行进程

-

容器检视工具

-

ps

-

查看运行中的容器(不加任何选项)

-

logs

-

显示一个容器的日志信息

-

attach

-

连接到一个容器的标准输入输出

-

inspect

-

返回容器的底层信息

-

port

-

列出容器与主机的端口映射

-

diff

-

返回容器相对于镜像中的rootfs所作的改动

-

cp

-

容器与主机之间复制文件

-

export

-

将一个容器中的文件系统导出为一个tar包

-

stats

-

实时查看容器的资源占用情况

-

images相关

-

生成一个新image

-

build

-

通过一个Dockerfile构建一个image

-

commit

-

基于容器的rootfs创建一个新的image

-

import

-

将tar包中的内容作为文件系统创建一个image

-

load

-

从一个tar包中加载一个image

-

与image仓库有关

-

login

-

登录一个registry

-

logout

-

登出一个registry

-

pull

-

从registry中拉取一个image

-

push

-

将一个image推送到registry中

-

search

-

在registry中搜寻image

-

与image管理有关

-

images

-

显示系统中的image

-

history

-

显示一个image的变化历史

-

rmi

-

删除image

-

tag

-

给image打标签

-

save

-

将一个image保存到一个tar包中

-

其他

-

events

-

从docker daemon中获取实时事件

-

rename

-

重命名容器

-
- -其中有些子命令还有一些参数选项如docker run,通过docker COMMAND --help可以查看相应COMMAND命令的帮助,命令选项参考上文的命令选项约定。下面详细介绍每个命令的使用。 - - - - diff --git a/content/zh/docs/Container/create.md "b/content/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206-4.md" similarity index 50% rename from content/zh/docs/Container/create.md rename to "content/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206-4.md" index 20f82a1c1fbe19c1fb6610ae21358a6a00c0afd5..9f9f5c15d95632319573d095b2a74399259b31e9 100644 --- a/content/zh/docs/Container/create.md +++ "b/content/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206-4.md" @@ -1,14 +1,346 @@ -# create - -用法:**docker create \[OPTIONS\] IMAGE \[COMMAND\] \[ARG...\]** - -功能:使用image创建一个新的容器,并将返回一个容器的ID,创建之后的容器用docker start命令启动,OPTIONS用于创建容器时对容器进行配置,有些选项将覆盖image中对容器的配置,COMMAND指定容器启动时执行的命令。 - -选项: - -**表 1** 参数说明 - - +# 容器管理 + +- [容器管理](#容器管理) + - [总体说明](#总体说明) + - [attach](#attach) + - [commit](#commit) + - [cp](#cp) + - [create](#create) + - [diff](#diff) + - [exec](#exec) + - [export](#export) + - [inspect](#inspect) + - [logs](#logs) + - [pause/unpause](#pause-unpause) + - [port](#port) + - [ps](#ps) + - [rename](#rename) + - [restart](#restart) + - [rm](#rm) + - [run](#run) + - [start](#start) + - [stats](#stats) + - [stop](#stop) + - [top](#top) + - [update](#update) + - [wait](#wait) + + + +# 总体说明 + +当前docker支持的子命令,按照功能划分为以下几组: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

功能划分

+

命令

+

命令功能

+

主机环境相关

+

version

+

查看docker版本信息

+

info

+

查看docker系统和主机环境信息

+

容器相关

+

容器生命周期管理

+

create

+

由image创建一个容器

+

run

+

由image创建一个容器并运行

+

start

+

开始一个已停止运行的容器

+

stop

+

停止一个运行中的容器

+

restart

+

重启一个容器

+

wait

+

等待一个容器停止,并打印出退出码

+

rm

+

删除一个容器

+

容器内进程管理

+

pause

+

暂停一个容器内的所有进程

+

unpause

+

恢复一个容器内被暂停的所用进程

+

top

+

查看容器内的进程

+

exec

+

在容器内执行进程

+

容器检视工具

+

ps

+

查看运行中的容器(不加任何选项)

+

logs

+

显示一个容器的日志信息

+

attach

+

连接到一个容器的标准输入输出

+

inspect

+

返回容器的底层信息

+

port

+

列出容器与主机的端口映射

+

diff

+

返回容器相对于镜像中的rootfs所作的改动

+

cp

+

容器与主机之间复制文件

+

export

+

将一个容器中的文件系统导出为一个tar包

+

stats

+

实时查看容器的资源占用情况

+

images相关

+

生成一个新image

+

build

+

通过一个Dockerfile构建一个image

+

commit

+

基于容器的rootfs创建一个新的image

+

import

+

将tar包中的内容作为文件系统创建一个image

+

load

+

从一个tar包中加载一个image

+

与image仓库有关

+

login

+

登录一个registry

+

logout

+

登出一个registry

+

pull

+

从registry中拉取一个image

+

push

+

将一个image推送到registry中

+

search

+

在registry中搜寻image

+

与image管理有关

+

images

+

显示系统中的image

+

history

+

显示一个image的变化历史

+

rmi

+

删除image

+

tag

+

给image打标签

+

save

+

将一个image保存到一个tar包中

+

其他

+

events

+

从docker daemon中获取实时事件

+

rename

+

重命名容器

+
+ +其中有些子命令还有一些参数选项如docker run,通过docker COMMAND --help可以查看相应COMMAND命令的帮助,命令选项参考上文的命令选项约定。下面详细介绍每个命令的使用。 + + + + +## attach + +用法:**docker attach \[OPTIONS\] CONTAINER** + +功能:附加到一个运行着的容器 + +选项: + +\--no-stdin=false 不附加STDIN + +\--sig-proxy=true 代理所有到容器内部的信号,不代理SIGCHLD, SIGKILL, SIGSTOP + +示例: + +``` +$ sudo docker attach attach_test +root@2988b8658669:/# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var +``` + +## commit + +用法:**docker commit \[OPTIONS\] CONTAINER \[REPOSITORY\[:TAG\]\]** + +功能:由一个容器创建一个新的image + +选项: + +-a, \--author="" 指定作者 + +-m, \--message="" 提交的信息 + +-p, \--pause=true 在提交过程中暂停容器 + +示例: + +运行一个容器,然后将这个容器提交成一个新的image + +``` +$ sudo docker commit test busybox:test +sha256:be4672959e8bd8a4291fbdd9e99be932912fe80b062fba3c9b16ee83720c33e1 + +$ sudo docker images +REPOSITORY TAG IMAGE ID CREATED SIZE +busybox latest e02e811dd08f 2 years ago 1.09MB +``` + +   + +## cp + +用法:docker cp \[OPTIONS\] CONTAINER:SRC\_PATH DEST\_PATH|- + +docker cp \[OPTIONS\] SRC\_PATH|- CONTAINER:DEST\_PATH + +功能:从指定的容器内的一个路径复制文件或文件夹到主机的指定路径中,或者把主机的文件或者文件夹拷贝到容器内。 + +注意:docker cp不支持容器内/proc,/sys,/dev,/tmp等虚拟文件系统以及用户在容器内自行挂载的文件系统内的文件拷贝。 + +选项: + +-a, \--archive 将拷贝到容器的文件属主设置为容器运行用户(\--user) + +-L, \--follow-link 解析并跟踪文件的符号链接 + +示例: + +复制reigistry容器中/test目录到主机的/home/aaa目录中 + +``` +$ sudo docker cp registry:/test /home/aaa +``` + +## create + +用法:**docker create \[OPTIONS\] IMAGE \[COMMAND\] \[ARG...\]** + +功能:使用image创建一个新的容器,并将返回一个容器的ID,创建之后的容器用docker start命令启动,OPTIONS用于创建容器时对容器进行配置,有些选项将覆盖image中对容器的配置,COMMAND指定容器启动时执行的命令。 + +选项: + +**表 2** 参数说明 + + @@ -376,13 +708,631 @@ -

参数

参数含义

@@ -34,7 +366,7 @@

--annotation

设置容器的annotations。例如支持native.umask选项:

-
--annotation native.umask=normal # 启动的容器umask值为0022
+
--annotation native.umask=normal  启动的容器umask值为0022
 --annotation native.umask=secure # 启动的容器umask值为0027

注意如果没有配置该参数,则使用dockerd中的umask配置。

- -示例: - -创建了一个名为busybox的容器,创建之后的容器用docker start命令启动。 - -``` -$ sudo docker create -ti --name=busybox busybox /bin/bash -``` - + + +示例: + +创建了一个名为busybox的容器,创建之后的容器用docker start命令启动。 + +``` +$ sudo docker create -ti --name=busybox busybox /bin/bash +``` + +## diff + +用法:**docker diff CONTAINER** + +功能:检视容器的差异,相比于容器刚创建时做了哪些改变 + +选项:无 + +示例: + +``` +$ sudo docker diff registry +C /root +A /root/.bash_history +A /test +``` + +   + +## exec + +### 接口原型 + +``` +rpc Exec(ExecRequest) returns (ExecResponse) {} +``` + +### 接口描述 + +在容器中执行命令,采用的gRPC通讯方式从CRI服务端获取url,再通过获得的url与websocket服务端建立长连接,实现与容器的交互。 + +### 注意事项 + +执行执行一条单独的命令,也能打开终端与容器交互。stdin/stdout/stderr之一必须是真的。如果tty为真,stderr必须是假的。 不支持多路复用, 在这种情况下, stdout和stderr的输出将合并为单流。 + +### 参数 + + + + + + + + + + + + + + + + + + + + + + + + +

参数成员

+

描述

+

string container_id

+

容器ID

+

repeated string cmd

+

待执行的命令

+

bool tty

+

是否在TTY中执行命令

+

bool stdin

+

是否流式标准输入

+

bool stdout

+

是否流式标准输出

+

bool stderr

+

是否流式输出标准错误

+
+ +### 返回值 + + + + + + + + + +

返回值

+

描述

+

string url

+

exec流服务器的完全限定URL

+
+ +## export + +用法:**docker export CONTAINER** + +功能:将一个容器的文件系统内容以tar包导出到STDOUT + +选项:无 + +示例: + +将名为busybox的容器的内容导出到busybox.tar包中: + +``` +$ sudo docker export busybox > busybox.tar +$ ls +busybox.tar +``` + +   + +## inspect + +用法:**docker inspect \[OPTIONS\] CONTAINER|IMAGE \[CONTAINER|IMAGE...\]** + +功能:返回一个容器或者镜像的底层信息 + +选项: + +-f, \--format="" 按照给定的格式输出信息 + +-s, \--size 若查询类型为容器,显示该容器的总体文件大小 + +\--type 返回指定类型的JSON格式 + +-t, \--time=120 超时时间的秒数,若在该时间内docker inspect未执行成功,则停止等待并立即报错。默认为120秒。 + +示例: + +1. 返回一个容器的信息 + + ``` + $ sudo docker inspect busybox_test + [ + { + "Id": "9fbb8649d5a8b6ae106bb0ac7686c40b3cbd67ec2fd1ab03e0c419a70d755577", + "Created": "2019-08-28T07:43:51.27745746Z", + "Path": "bash", + "Args": [], + "State": { + "Status": "running", + "Running": true, + "Paused": false, + "Restarting": false, + "OOMKilled": false, + "Dead": false, + "Pid": 64177, + "ExitCode": 0, + "Error": "", + "StartedAt": "2019-08-28T07:43:53.021226383Z", + "FinishedAt": "0001-01-01T00:00:00Z" + }, + ...... + ``` + +    + +2. 按照给定格式返回一个容器的指定信息,下面的例子返回busybox\_test容器IP地址 + + ``` + $ sudo docker inspect -f {{.NetworkSettings.IPAddress}} busybox_test + 172.17.0.91 + ``` + + +## logs + +用法:**docker logs \[OPTIONS\] CONTAINER** + +功能:抓取容器内的日志信息,容器可以使运行状态的也可以是停止状态的 + +选项: + +-f, \--follow=false 实时打印日志信息 + +-t, \--timestamps=false 显示日志的时间戳 + +\--since 显示指定时间之后的日志 + +\--tail="all" 设置显示的行数,默认显示所有 + +示例: + +1. 查看jaegertracing容器的日志信息,该容器上跑了一个jaegertracing服务 + + ``` + $ sudo docker logs jaegertracing + {"level":"info","ts":1566979103.3696961,"caller":"healthcheck/handler.go:99","msg":"Health Check server started","http-port":14269,"status":"unavailable"} + {"level":"info","ts":1566979103.3820567,"caller":"memory/factory.go:55","msg":"Memory storage configuration","configuration":{"MaxTraces":0}} + {"level":"info","ts":1566979103.390773,"caller":"tchannel/builder.go:94","msg":"Enabling service discovery","service":"jaeger-collector"} + {"level":"info","ts":1566979103.3908608,"caller":"peerlistmgr/peer_list_mgr.go:111","msg":"Registering active peer","peer":"127.0.0.1:14267"} + {"level":"info","ts":1566979103.3922884,"caller":"all-in-one/main.go:186","msg":"Starting agent"} + {"level":"info","ts":1566979103.4047635,"caller":"all-in-one/main.go:226","msg":"Starting jaeger-collector TChannel server","port":14267} + {"level":"info","ts":1566979103.404901,"caller":"all-in-one/main.go:236","msg":"Starting jaeger-collector HTTP server","http-port":14268} + {"level":"info","ts":1566979103.4577134,"caller":"all-in-one/main.go:256","msg":"Listening for Zipkin HTTP traffic","zipkin.http-port":9411} + ``` + +    + +2. 加上-f选项,实时打印jaegertracing容器的日志信息 + + ``` + $ sudo docker logs -f jaegertracing + {"level":"info","ts":1566979103.3696961,"caller":"healthcheck/handler.go:99","msg":"Health Check server started","http-port":14269,"status":"unavailable"} + {"level":"info","ts":1566979103.3820567,"caller":"memory/factory.go:55","msg":"Memory storage configuration","configuration":{"MaxTraces":0}} + {"level":"info","ts":1566979103.390773,"caller":"tchannel/builder.go:94","msg":"Enabling service discovery","service":"jaeger-collector"} + {"level":"info","ts":1566979103.3908608,"caller":"peerlistmgr/peer_list_mgr.go:111","msg":"Registering active peer","peer":"127.0.0.1:14267"} + {"level":"info","ts":1566979103.3922884,"caller":"all-in-one/main.go:186","msg":"Starting agent"} + ``` + +    + + +## pause-unpause + +用法:**docker pause CONTAINER** + +**docker unpause CONTAINER** + +功能:这两个命令是配对使用的,docker pause暂停容器内的所有进程,docker unpause恢复暂停的进程 + +选项:无 + +示例: + +本示例将演示一个跑了docker registry(docker镜像服务)服务的容器,当使用docker pause 命令暂停这个容器的进程后,使用curl命令访问该registry服务将阻塞,使用docker unpause命令将恢复registry服务,可以用curl命令访问。 + +1. 启动一个registry容器 + + ``` + $ sudo docker run -d --name pause_test -p 5000:5000 registry + ``` + + 此时可以用curl命令访问这个服务,请求状态码会返回200 OK。 + + ``` + $ sudo curl -v 127.0.0.1:5000 + ``` + +    + +2. 暂停这个容器内的进程 + + ``` + $ sudo docker pause pause_test + ``` + + 此时用curl命令访问这个服务将阻塞,等待服务开启。 + +3. 恢复运行这个容器内的进程 + + ``` + $ sudo docker unpause pause_test + ``` + + 此时步骤2中的curl访问将恢复运行,请求状态码返回200 OK。 + +    + + +## port + +用法:**docker port CONTAINER \[PRIVATE\_PORT\[/PROTO\]\]** + +功能:列出容器的端口映射,或者查找指定端口在主机的哪个端口 + +选项:无 + +示例: + +1. 列出容器所有的端口映射 + + ``` + $ sudo docker port registry + 5000/tcp -> 0.0.0.0.:5000 + ``` + +2. 查找容器指定端口的映射 + + ``` + $ sudo docker port registry 5000 + 0.0.0.0.:5000 + ``` + + +## ps + +用法:**docker ps \[OPTIONS\]** + +功能:根据不同的选项列出不同状态的容器,在不加任何选项的情况下,将列出正在运行的容器 + +选项: + +-a, \--all=false 显示所用的容器 + +-f, \--filter=\[\] 筛选值,可用的筛选值有:exited=容器的退出码status=\(restarting|running|paused|exited\)容器的状态码(e.g. -f status=running,列出正在运行的容器) + +-l, \--latest=false 列出最近创建的一个容器 + +-n=-1 列出最近n此创建的容器 + +\--no-trunc=false 将64位的容器ID全部显示出来,默认显示12位容器的ID + +-q, \--quiet=false 显示容器的ID + +-s, \--size=false 显示容器的大小 + +示例: + +1. 列出正在运行的容器 + + ``` + $ sudo docker ps + ``` + +2. 列出所有的容器 + + ``` + $ sudo docker ps -a + ``` + + +## rename + +用法:**docker rename OLD\_NAME NEW\_NAME** + +功能:重命名容器 + +示例: + +示例中,用docker run创建并启动一个容器,使用docker rename对容器重命名,并查看容器名是否改变。 + +``` +$ sudo docker ps +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +b15976967abb busybox:latest "bash" 3 seconds ago Up 2 seconds festive_morse +$ sudo docker rename pedantic_euler new_name +$ sudo docker ps +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +b15976967abb busybox:latest "bash" 34 seconds ago Up 33 seconds new_name +``` + +   + +## restart + +用法:**docker restart \[OPTIONS\] CONTAINER \[CONTAINER...\]** + +功能:重启一个运行中的容器 + +选项: + +-t, \--time=10 在杀掉容器之前等待容器停止的秒数,如果容器已停止,就重启。默认为10秒。 + +示例: + +``` +$ sudo docker restart busybox +``` + +>![](public_sys-resources/icon-note.gif) **说明:** +>容器在restart过程中,如果容器内存在D状态或Z状态的进程,可能会导致容器重启失败,这需要进一步分析导致容器内进程D状态或Z状态的原因,待容器内进程D状态或Z状态解除后,再进行容器restart操作。 + +## rm + +用法:**docker rm \[OPTIONS\] CONTAINER \[CONTAINER...\]** + +功能:删除一个或多个容器 + +选项: + +-f, \--force=false 强制删除运行中的容器 + +-l, \--link=false Remove the specified link and not the underlying container + +-v, \--volumes=false Remove the volumes associated with the container + +示例: + +1. 删除一个停止运行的容器 + + ``` + $ sudo docker rm test + ``` + +2. 删除一个正在运行的容器 + + ``` + $ sudo docker rm -f rm_test + ``` + + +## run + +用法:**docker run \[OPTIONS\] IMAGE \[COMMAND\] \[ARG...\]** + +功能:该命令将由指定的image(如果指定的IMAGE不存在,则从官方镜像库中下载一个镜像)创建一个容器,并启动这个容器,并在容器中执行指定的命令。该命令集成了docker create命令、docker start命令、docker exec命令。 + +选项:(该命令的选项与docker create命令的选项一样,请参考docker create命令选项,仅仅多了以下两个选项) + +\--rm=false 设置容器退出时自动删除容器 + +-v 挂载本地目录或匿名卷到容器内。注意:当将本地目录以带有selinux的安全标签的方式挂载到容器内的同时,尽量不要同时做该本地目录的增删操作,否则该安全标签可能不生效 + +\--sig-proxy=true 发往进程信号的代理,SIGCHLD, SIGSTOP, SIGKILL不使用代理 + +示例: + +使用busybox镜像运行一个容器,在容器启动后执行/bin/sh + +``` +$ sudo docker run -ti busybox /bin/sh +``` + +## start + +用法:**docker start \[OPTIONS\] CONTAINER \[CONTAINER...\]** + +功能:启动一个或多个未运行容器 + +选项: + +-a, \--attach=false 容器的标准输出和错误输出附加到host的STDOUT和STDERR上 + +-i, \--interactive=false 容器的标准输入附加到host的STDIN上 + +实例: + +启动一个名为busybox的容器,添加-i -a选项附加标准输入输出,容器启动后直接进入容器内部,输入exit可以退出容器。 + +如果启动容器时不加-i -a选项,容器将在后台启动。 + +``` +$ sudo docker start -i -a busybox +``` + +## stats + +用法:**docker stats \[OPTIONS\] \[CONTAINER...\]** + +功能:持续监控并显示指定容器(若不指定,则默认全部容器)的资源占用情况 + +选项: + +-a, \--all 显示所有容器(默认仅显示运行状态的容器) + +\--no-stream 只显示第一次的结果,不持续监控 + +示例: + +示例中,用docker run创建并启动一个容器,docker stats将输出容器的资源占用情况。 + +``` +$ sudo docker stats +CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS +2e242bcdd682 jaeger 0.00% 77.08MiB / 125.8GiB 0.06% 42B / 1.23kB 97.9MB / 0B 38 +02a06be42b2c relaxed_chandrasekhar 0.01% 8.609MiB / 125.8GiB 0.01% 0B / 0B 0B / 0B 10 +deb9e49fdef1 hardcore_montalcini 0.01% 12.79MiB / 125.8GiB 0.01% 0B / 0B 0B / 0B 9 +``` + +   + +## stop + +用法:**docker stop \[OPTIONS\] CONTAINER \[CONTAINER...\]** + +功能:通过向容器发送一个SIGTERM信号并在一定的时间后发送一个SIGKILL信号停止容器 + +选项: + +-t, \--time=10 在杀掉容器之前等待容器退出的秒数,默认为10S + +示例: + +``` +$ sudo docker stop -t=15 busybox +``` + +## top + +用法:**docker top CONTAINER \[ps OPTIONS\]** + +功能:显示一个容器内运行的进程 + +选项:无 + +示例: + +先运行了一个名为top\_test的容器,并在其中执行了top指令 + +``` +$ sudo docker top top_test +UID PID PPID C STIME TTY TIME CMD +root 70045 70028 0 15:52 pts/0 00:00:00 bash +``` + +显示的PID是容器内的进程在主机中的PID号。 + +## update + +用法:**docker update \[OPTIONS\] CONTAINER \[CONTAINER...\]** + +功能:热变更一个或多个容器配置。 + +选项: + +**表 3** 参数说明 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

参数含义

+

--accel=[]

+

设置容器加速器,可设置一个或多个

+

--blkio-weight

+

设置容器blockio的相对权重,从10到1000

+

--cpu-shares

+

设置容器获得主机CPU的相对权重,通过设置这个选项获得更高的优先级,默认所有的容器都是获得相同的CPU优先权。

+

--cpu-period

+

设置CFS(完全公平调度策略)进程的CPU周期。

+

默认值为100ms;一般--cpu-period参数和--cpu-quota是配合使用的,比如--cpu-period=50000 --cpu-quota=25000,意味着如果有1个CPU,该容器可以每50ms获取到50%的CPU。

+

--cpu-quota

+

设置CFS(完全公平调度策略)进程的CPU配额,默认为0,即没有限制

+

--cpuset-cpus

+

设置容器中进程允许运行的CPU (0-3, 0,1)。默认没有限制

+

--cpuset-mems

+

设置容器中进程运行运行的内存内存节点 (0-3, 0,1),只对NUMA系统起作用

+

--kernel-memory=""

+

设置容器的kernerl内存限制,格式<number><optional unit>, 其中 unit = b, k, m or g

+

-m, --memory=""

+

设置容器的内存限制,格式<number><optional unit>, 其中 unit = b, k, m or g。该参数最小值为4m。

+

--memory-reservation

+

设置容器内存限制,默认与--memory一致。可认为--memory是硬限制,--memory-reservation是软限制;当使用内存超过预设值时,会动态调整(系统回收内存时尝试将使用内存降低到预设值以下),但不确保一定不超过预设值。一般可以和--memory一起使用,数值小于--memory的预设值。

+

--memory-swap

+

设置普通内存和交换分区的使用总量,-1为不做限制。如果不设置,则为--memory值的2倍,即SWAP可再使用与--memory相同的内存量。

+

--restart=""

+

设置容器退出时候的重启规则,当前1.3.1版本支持3个规则:

+
  • no:当容器停止时,不重启。
  • on-failure:当容器退出码为非0时重启容器,这个规则可以附加最大重启次数,如on-failure:5,最多重启5次。
  • always:无论退出码是什么都退出。
+

--help

+

打印help信息

+
+ +示例: + +变更一个容器名为busybox的cpu和mem配置,包括容器获得主机CPU的相对权重值为512,容器中进程允许运行的CPU核心为0,1,2,3,容器运行内存限制为512m。 + +``` +$ sudo docker update --cpu-shares 512 --cpuset-cpus=0,3 --memory 512m ubuntu +``` + +## wait + +用法:**docker wait CONTAINER \[CONTAINER...\]** + +功能:等待一个容器停止,并打印出容器的退出码 + +选项:无 + +示例: + +先开启一个名为busybox的容器 + +``` +$ sudo docker start -i -a busybox +``` + +执行docker wait + +``` +$ sudo docker wait busybox +0 +``` + +将阻塞等待busybox容器的退出,退出busybox容器后将看到打印退出码“0”。 diff --git "a/content/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206.md" "b/content/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206.md" index 837392ffe59725c9ccb71574e220148f88edc424..66d302f6d978f67e43b6e734657201d0a2b74b11 100644 --- "a/content/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206.md" +++ "b/content/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206.md" @@ -1,3 +1,1959 @@ -# 容器管理 - - +# 容器管理 + +- [容器管理](#容器管理) + - [创建容器](#创建容器) + - [启动容器](#启动容器) + - [运行容器](#运行容器) + - [停止容器](#停止容器) + - [强制停止容器](#强制停止容器) + - [删除容器](#删除容器) + - [接入容器](#接入容器) + - [重命名容器](#重命名容器) + - [在容器中执行新命令](#在容器中执行新命令) + - [查询单个容器信息](#查询单个容器信息) + - [查询所有容器信息](#查询所有容器信息) + - [重启容器](#重启容器) + - [等待容器退出](#等待容器退出) + - [查看容器中进程信息](#查看容器中进程信息) + - [查看容器使用的资源](#查看容器使用的资源) + - [获取容器日志](#获取容器日志) + - [容器与主机之间数据拷贝](#容器与主机之间数据拷贝) + - [暂停容器](#暂停容器) + - [恢复容器](#恢复容器) + - [从服务端实时获取事件消息](#从服务端实时获取事件消息) + + +## 创建容器 + +### 描述 + +isula create 命令用于创建一个新的容器。容器引擎会使用指定的容器镜像创建容器读写层,或者使用指定的本地rootfs作为容器的运行环境。创建完成后,会将容器的ID输出到标准输出,后续可以使用isula start 命令启动该容器。新创建的容器状态为**inited**状态 + +### 用法 + +``` +isula create [OPTIONS] IMAGE [COMMAND] [ARG...] +``` + +### 参数 + +create命令支持参数参考下表。 + +**表 1** create命令参数列表 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

命令

+

参数

+

说明

+

create

+

  

+

--annotation

+

设置容器的annotations。例如支持native.umask选项:

+
--annotation native.umask=normal # 启动的容器umask值为0022
+--annotation native.umask=secure # 启动的容器umask值为0027
+

注意如果没有配置该参数,则使用isulad中的umask配置。

+

--cap-drop

+

删除Linux 权限功能

+

--cgroup-parent

+

指定容器cgroup父路径

+

--cpuset-cpus

+

允许执行的CPU(e.g. 0-3,0,1)

+

--cpu-shares

+

CPU份额(相对权重)

+

--cpu-quota

+

限制CPU CFS(完全公平调度器)的配额

+

--device=[]

+

为容器添加一个主机设备

+

--dns

+

添加DNS服务器

+

--dns-opt

+

添加DNS选项

+

--dns-search

+

设定容器的搜索域

+

-e, --env

+

设置环境变量

+

--env-file

+

通过文件配置环境变量

+

--entrypoint

+

启动容器时要运行的入口点

+

--external-rootfs=PATH

+

指定一个不由iSulad管理的rootfs(可以为文件夹或块设备)给容器

+

--files-limit

+

调整容器内能够打开的文件句柄数(-1表示不限制)

+

--group-add=[]

+

指定额外的用户组添加到容器

+

--help

+

打印帮助信息

+

--health-cmd

+

在容器内执行的命令

+

--health-exit-on-unhealthy

+

检测到容器非健康时是否杀死容器

+

--health-interval

+

相邻两次命令执行的间隔时间

+

--health-retries

+

健康检查失败最大的重试次数

+

--health-start-period

+

容器初始化时间

+

--health-timeout

+

单次检查命令执行的时间上限

+

--hook-spec

+

钩子配置文件

+

-H, --host

+

指定要连接的iSulad socket文件路径

+

-h, --hostname

+

容器主机名称

+

-i, --interactive

+

即使没有连接到容器的标准输入,也要保持容器的标准输入打开

+

--hugetlb-limit=[]

+

大页文件限制,例如:--hugetlb-limit 2MB:32MB

+

--log-opt=[]

+

日志驱动程序选项,默认禁用记录容器串口日志功能,可以通过"--log-opt disable-log=false"来开启。

+

-l,--label

+

为容器设置标签

+

--lablel-file

+

通过文件设置容器标签

+

-m, --memory

+

内存限制

+

--memory-reservation

+

设置容器内存限制,默认与--memory一致。可认为--memory是硬限制,--memory-reservation是软限制;当使用内存超过预设值时,会动态调整(系统回收内存时尝试将使用内存降低到预设值以下),但不确保一定不超过预设值。一般可以和--memory一起使用,数值小于--memory的预设值,最小设置为4MB。

+

--memory-swap

+

正整数,内存 + 交换空间,-1 表示不限制

+

--memory-swappiness

+

正整数,swappiness参数值可设置范围在0到100之间。 此参数值越低,就会让Linux系统尽量少用swap分区,多用内存;参数值越高就是反过来,使内核更多的去使用swap空间,默认值为-1,表示使用系统默认值。

+

--mount

+

挂载主机目录到容器中

+

--no-healthcheck

+

禁用健康检查配置

+

--name=NAME

+

容器名

+

--net=none

+

容器连接到网络

+

--pids-limit

+

调整容器内能够执行的进程数(-1表示不限制)

+

--privileged

+

给予容器扩展的特权

+

-R, --runtime

+

容器运行时,参数支持"lcr",忽略大小写,因此"LCR"和"lcr"是等价的

+

--read-only

+

设置容器的根文件系统为只读

+

--restart

+

当容器退出时重启策略

+

系统容器支持--restart on-reboot

+

--storage-opt

+

配置容器的存储驱动选项

+

-t, --tty

+

分配伪终端

+

--ulimit

+

为容器设置ulimit限制

+

-u, --user

+

用户名或UID,格式[<name|uid>][:<group|gid>]

+

-v, --volume=[]

+

挂载一个卷

+
+ +### 约束限制 + +- 使用--user或--group-add参数,在容器启动阶段校验user或group时,容器如果使用的是OCI镜像,是从镜像的真实rootfs的etc/passwd和etc/group文件中校验,如果使用的是rootfs文件夹或块设备作为容器的rootfs,则校验的是host中的etc/passwd和etc/group文件;查找时使用的rootfs会忽略-v 和--mount等挂载参数,意味着使用这些参数尝试覆盖etc/passwd和etc/group两个文件时,在查找阶段不生效,只在容器真正启动时生效。生成的配置保存在"iSulad根目录/engine/容器ID/start\_generate\_config.json",文件格式如下: + + ``` + { + "uid": 0, + "gid": 8, + "additionalGids": [ + 1234, + 8 + ] + } + ``` + + +### 示例 + +创建一个新容器 + +``` +# isula create busybox +fd7376591a9c3d8ee9a14f5d2c2e5255b02cc44cddaabca82170efd4497510e1 +# isula ps -a +STATUS PID IMAGE COMMAND EXIT_CODE RESTART_COUNT STARTAT FINISHAT RUNTIME ID NAMES inited - busybox "sh" 0 0 - - lcr fd7376591a9c fd7376591a9c4521... +``` + +## 启动容器 + +### 描述 + +isula start命令用于启动一个或多个容器。 + +### 用法 + +``` +isula start [OPTIONS] CONTAINER [CONTAINER...] +``` + +### 参数 + +start命令支持参数参考下表。 + +**表 1** start命令参数列表 + + + + + + + + + + + + + + +

命令

+

参数

+

说明

+

start

+

-H, --host

+

指定要连接的iSulad socket文件路径

+

-R, --runtime

+

容器运行时,参数支持"lcr",忽略大小写,因此"LCR"和"lcr"是等价的

+
+ +### 示例 + +启动一个新容器 + +``` +# isula start fd7376591a9c3d8ee9a14f5d2c2e5255b02cc44cddaabca82170efd4497510e1 +``` + +## 运行容器 + +### 描述 + +isula run命令命令用于创建一个新的容器。会使用指定的容器镜像创建容器读写层,并且为运行指定的命令做好准备。创建完成后,使用指定的命令启动该容器。run命令相当于create然后start容器。 + +### 用法 + +``` +isula run [OPTIONS] ROOTFS|IMAGE [COMMAND] [ARG...] +``` + +### 参数 + +run命令支持参数参考下表。 + +**表 1** run命令参数列表 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

命令

+

参数

+

说明

+

run

+

--annotation

+

设置容器的annotations。例如支持native.umask选项:

+
--annotation native.umask=normal # 启动的容器umask值为0022
+--annotation native.umask=secure # 启动的容器umask值为0027
+

注意如果没有配置该参数,则使用isulad中的umask配置。

+

--cap-add

+

添加Linux功能

+

--cap-drop

+

删除Linux功能

+

--cgroup-parent

+

指定容器cgroup父路径

+

--cpuset-cpus

+

允许执行的CPU(e.g. 0-3,0,1)

+

--cpu-shares

+

CPU份额(相对权重)

+

--cpu-quota

+

限制CPU CFS(完全公平调度器)的配额

+

-d, --detach

+

后台运行容器并打印容器ID

+

--device=[]

+

为容器添加一个主机设备

+

--dns

+

添加DNS服务器

+

--dns-opt

+

添加DNS选项

+

--dns-search

+

设定容器的搜索域

+

-e, --env

+

设置环境变量

+

--env-file

+

通过文件配置环境变量

+

--entrypoint

+

启动容器时要运行的入口点

+

--external-rootfs=PATH

+

指定一个不由iSulad管理的rootfs(可以为文件夹或块设备)给容器

+

--files-limit

+

调整容器内能够打开的文件句柄数(-1表示不限制)

+

--group-add=[]

+

指定额外的用户组添加到容器

+

--help

+

打印帮助信息

+

--health-cmd

+

在容器内执行的命令

+

--health-exit-on-unhealthy

+

检测到容器非健康时是否杀死容器

+

--health-interval

+

相邻两次命令执行的间隔时间

+

--health-retries

+

健康检查失败最大的重试次数

+

--health-start-period

+

容器初始化时间

+

--health-timeout

+

单次检查命令执行的时间上限

+

--hook-spec

+

钩子配置文件

+

-H, --host

+

指定要连接的iSulad socket文件路径

+

-h, --hostname

+

容器主机名称

+

--hugetlb-limit=[]

+

大页文件限制,例如:--hugetlb-limit 2MB:32MB

+

-i, --interactive

+

即使没有连接到容器的标准输入,也要保持容器的标准输入打开

+

--log-opt=[]

+

日志驱动程序选项,默认禁用记录容器串口日志功能,可以通过"--log-opt disable-log=false"来开启。

+

-m, --memory

+

内存限制

+

--memory-reservation

+

设置容器内存限制,默认与--memory一致。可认为--memory是硬限制,--memory-reservation是软限制;当使用内存超过预设值时,会动态调整(系统回收内存时尝试将使用内存降低到预设值以下),但不确保一定不超过预设值。一般可以和--memory一起使用,数值小于--memory的预设值,最小设置为4MB。

+

--memory-swap

+

正整数,内存 + 交换空间,-1 表示不限制

+

--memory-swappiness

+

正整数,swappiness参数值可设置范围在0到100之间。 此参数值越低,就会让Linux系统尽量少用swap分区,多用内存;参数值越高就是反过来,使内核更多的去使用swap空间,默认值为-1,表示使用系统默认值。

+

--mount

+

挂载主机目录到容器中

+

--no-healthcheck

+

禁用健康检查配置

+

--name=NAME

+

容器名

+

--net=none

+

容器连接到网络

+

--pids-limit

+

调整容器内能够执行的进程数(-1表示不限制)

+

--privileged

+

给予容器扩展的特权

+

-R, --runtime

+

容器运行时,参数支持"lcr",忽略大小写,因此"LCR"和"lcr"是等价的

+

--read-only

+

设置容器的根文件系统为只读

+

--restart

+

当容器退出时重启策略

+

系统容器支持--restart on-reboot

+

--rm

+

当容器退出时自动清理容器

+

--storage-opt

+

配置容器的存储驱动选项

+

-t, --tty

+

分配伪终端

+

--ulimit

+

为容器设置ulimit限制

+

-u, --user

+

用户名或UID,格式[<name|uid>][:<group|gid>]

+

-v, --volume=[]

+

挂载一个卷

+
+ +### 约束限制 + +- 容器父进程进程退出时,则对应的容器也自动退出。 +- 创建普通容器时父进程不能为init,因为普通容器的权限不够,导致容器可以创建成功,但是attach进去的时候会卡住。 +- 运行容器时,不指定--net,默认hostname为**localhost**。 +- 使用--files-limit参数传入一个很小的值,如1时,启动容器时,iSulad创建cgroup子组后先设置files.limit值,再将容器进程的PID写入该子组的cgroup.procs文件,此时容器进程已经打开超过1个句柄,因而写入报错导致启动失败启动容器会失败。 +- --mount参数和--volume参数同时存在时,如果目的路径有冲突,则--mount会在--volume之后挂载\(即将--volume中的挂载点覆盖掉\)。 + + 备注:轻量级容器的参数中type支持bind或squashfs,当type=squashfs时,src是镜像的路径;原生docker的参数type支持bind、volume、tmpfs。 + +- restart重启策略不支持unless-stopped。 +- 以下三种情况与docker 返回值不一致,docker返回127,轻量级容器返回125 + + --device参数指定主机设备为不存在的设备 + + --hook-spec参数指定不存在的hook json文件 + + --entrypoint 参数指定不存在的入口参数 + +- 使用--volume参数时,由于容器启动时会对/dev/ptmx设备进行删除重建,因此请勿将/dev目录挂载至容器/dev目录,应使用--device对/dev下的设备在容器中进行挂载 +- 禁止使用echo的方式向run命令的stdin输入数据,会导致客户端卡死。应该直接将echo的值作为命令行参数传给容器 + + ``` + # echo ls | isula run -i busybox /bin/sh + + + ^C + # + ``` + + 上述命令出现客户端卡死现象,这是由于上述命令相当于往stdin输入ls,随后EOF被读取,客户端不再发送数据,等待服务端退出,但是服务端无法区分客户端是否需要继续发送数据,因而服务端卡在read数据上,最终导致双方均卡死。 + + 正确的执行方式为: + + ``` + # isula run -i busybox ls + bin + dev + etc + home + proc + root + sys + tmp + usr + var + # + ``` + +- 使用host的根目录(/)作为容器的文件系统,那么在挂载路径时,如果有如下情况 + + **表 2** 挂载情况 + + + + + + + + + + + + + +

Host 路径(source)

+

容器路径(dest

+

/home/test1

+

/mnt/

+

/home/test2

+

/mnt/abc

+
+ + >![](public_sys-resources/icon-notice.gif) **须知:** + >第一种情况,先挂载/home/test1,然后挂载/home/test2,这种情况会导致/home/test1的内容覆盖掉原来/mnt下面的内容,这样可能导致/mnt下面不存在abc目录,这样会导致挂载/home/test2到/mnt/abc失败。 + >第二种情况,先挂载/home/test2,然后挂载/home/test1。这种情况,第二次的挂载会把/mnt的内容替换为/home/test1的内容,这样第一次挂载的/home/test2到/mnt/abc的内容就看不到了。 + >因此,不支持第一种使用方式;第二种使用用户需要了解这种数据无法访问的风险 + + >![](public_sys-resources/icon-notice.gif) **须知:** + >- 高并发场景(并发启动200容器)下,glibc的内存管理机制会导致内存空洞以及虚拟内存较大(例如10GB)的问题。该问题是高并发场景下glibc内存管理机制的限制,而不是内存泄露,不会导致内存消耗无限增大。可以通过设置MALLOC\_ARENA\_MAX环境变量来减少虚拟内存的问题,而且可以增大减少物理内存的概率。但是这个环境变量会导致iSulad的并发性能下降,需要用户根据实际情况做配置。 + > ``` + > 参考实践情况,平衡性能和内存,可以设置MALLOC_ARENA_MAX为4。(在arm64服务器上面对iSulad的性能影响在10%以内) + > 配置方法: + > 1. 手动启动iSulad的场景,可以直接export MALLOC_ARENA_MAX=4,然后再启动iSulad即可。 + > 2. systemd管理iSulad的场景,可以修改/etc/sysconfig/iSulad,增加一条MALLOC_ARENA_MAX=4即可。 + > ``` + + +### 示例 + +运行一个新容器 + +``` +# isula run -itd busybox +9c2c13b6c35f132f49fb7ffad24f9e673a07b7fe9918f97c0591f0d7014c713b +``` + +## 停止容器 + +### 描述 + +isula stop命令用于停止一个或多个运行中的容器。首先向容器中的首进程会发送**SIGTERM**信号,在指定时间(默认为10s)内容器未停止时,会发送**SIGKILL**。 + +### 用法 + +``` +isula stop [OPTIONS] CONTAINER [CONTAINER...] +``` + +### 参数 + +stop命令支持参数参考下表。 + +**表 1** stop命令参数列表 + + + + + + + + + + + + + + + + + +

命令

+

参数

+

说明

+

stop

+

-f, --force

+

强制停止正在运行的容器

+

-H, --host

+

指定要连接的iSulad socket文件路径

+

-t, --time

+

先优雅停止,超过这个时间,则强行终止

+
+ +### 约束限制 + +- 指定t参数且t<0时,请确保自己容器的应用会处理stop信号。 + + Stop的原理:Stop会首先给容器发送Stop 信号(SIGTERM),然后等待一定的时间(这个时间就是用户输入的 t),过了指定时间如果容器还仍处于运行状态,那么就发送kill信号(SIGKILL)使容器强制退出。 + + +- 输入参数t的含义: + + t<0 : 表示一直等待,不管多久都等待程序优雅退出,既然用户这么输入了,表示对自己的应用比较放心,认为自己的程序有 合理的stop信号的处理机制。 + + t=0 : 表示不等,立即发送kill -9 到容器。 + + t\>0 : 表示等一定的时间,如果容器还未退出,就发送kill -9 到容器。 + + 所以如果用户使用t<0 (比如t=-1),请确保自己容器的应用会正确处理SIGTERM. 如果容器忽略了该信号,会导致isula stop一直卡住。 + + +### 示例 + +停止一个容器 + +``` +# isula stop fd7376591a9c3d8ee9a14f5d2c2e5255b02cc44cddaabca82170efd4497510e1 +fd7376591a9c3d8ee9a14f5d2c2e5255b02cc44cddaabca82170efd4497510e1 +``` + +## 强制停止容器 + +### 描述 + +isula kill命令用于强制停止一个或多个运行中的容器。 + +### 用法 + +``` +isula kill [OPTIONS] CONTAINER [CONTAINER...] +``` + +### 参数 + +kill命令支持参数参考下表。 + +**表 1** kill命令参数列表 + + + + + + + + + + + + + + +

命令

+

参数

+

说明

+

kill

+

-H, --host

+

指定要连接的iSulad socket文件路径

+

-s, --signal

+

发送给容器的信号

+
+ +### 示例 + +杀掉一个容器 + +``` +# isula kill fd7376591a9c3d8ee9a14f5d2c2e5255b02cc44cddaabca82170efd4497510e1 +fd7376591a9c3d8ee9a14f5d2c2e5255b02cc44cddaabca82170efd4497510e1 +``` + +## 删除容器 + +### 描述 + +isula rm命令用于删除一个或多个容器。 + +### 用法 + +``` +isula rm [OPTIONS] CONTAINER [CONTAINER...] +``` + +### 参数 + +rm命令支持参数参考下表。 + +**表 1** rm命令参数列表 + + + + + + + + + + + + + + + + + +

命令

+

参数

+

说明

+

rm

+

-f, --force

+

强制移除正在运行的容器

+

-H, --host

+

指定要连接的iSulad socket文件路径

+

-v, --volume

+

移除挂载在容器上的卷(备注:目前iSulad尚不使用此功能)

+
+ +### 约束限制 + +- 在IO正常情况,空环境(只有1个容器)删除一个running容器的时间为T1,200个容器的环境(容器无大量IO操作,host IO正常)删除一个running容器所需时间为T2。T2的规格为:T2 = max \{ T1 \* 3, 5 \} 秒钟。 + +### 示例 + +删除一个停止状态的容器 + +``` +# isula rm fd7376591a9c3d8ee9a14f5d2c2e5255b02cc44cddaabca82170efd4497510e1 +fd7376591a9c3d8ee9a14f5d2c2e5255b02cc44cddaabca82170efd4497510e1 +``` + +## 接入容器 + +### 描述 + +isula attach命令用于将当前终端的标准输入、标准输出和标准错误连接到正在运行的容器。仅支持runtime类型为lcr的容器。 + +### 用法 + +``` +isula attach [OPTIONS] CONTAINER +``` + +### 参数 + +attach命令支持参数参考下表。 + +**表 1** attach命令参数列表 + + + + + + + + + + + + + + + + + + +

命令

+

参数

+

说明

+

attach

+

--help

+

打印帮助信息

+

-H, --host

+

指定要连接的iSulad socket文件路径

+

-D, --debug

+

开启debug模式

+
+ +### 约束限制 + +- 原生docker attach容器会直接进入容器,而isulad attach容器后需要敲一个回车才进入。 + +### 示例 + +接入一个运行状态的容器 + +``` +# isula attach fd7376591a9c3d8ee9a14f5d2c2e5255b02cc44cddaabca82170efd4497510e1 +/ # +/ # +``` + +## 重命名容器 + +### 描述 + +isula rename命令用于重命名容器。 + +### 用法 + +``` +isula rename [OPTIONS] OLD_NAME NEW_NAME +``` + +### 参数 + +rename命令支持参数参考下表。 + +**表 1** rename 命令参数列表 + + + + + + + + + + + +

命令

+

参数

+

说明

+

rename

+

-H, --host

+

重命名容器

+
+ +### 示例 + +重命名一个容器 + +``` +# isula rename my_container my_new_container +``` + +## 在容器中执行新命令 + +### 描述 + +isula exec命令用于正在运行的容器中运行一个新命令。新执行的命令将在容器的默认目录中运行。如果基础镜像指定了自定义目录,则将使用该目录。 + +### 用法 + +``` +isula exec [OPTIONS] CONTAINER COMMAND [ARG...] +``` + +### 参数 + +exec命令支持参数参考下表。 + +**表 1** exec命令参数列表 + + + + + + + + + + + + + + + + + + + + + + + + + + +

命令

+

参数

+

说明

+

exec

+

  

+

-d, --detach

+

后台运行命令

+

-e, --env

+

设置环境变量(备注:目前iSulad尚不使用此功能)

+

-H, --host

+

指定要连接的iSulad socket文件路径

+

-i, --interactive

+

没有连接,也要保持标准输入打开(备注:目前iSulad尚不使用此功能)

+

-t, --tty

+

分配伪终端(备注:目前iSulad尚不使用此功能)

+

-u, --user

+

指定用户登录容器执行命令

+
+ +### 约束限制 + +- isula exec 不指定任何参数时,会默认使用-it参数, 表示分配一个伪终端,以交互式的方式进入容器 +- 当使用isula exec 执行脚本,在脚本中执行后台进程时,需使用nohup标志忽略SIGHUP信号。 + + 使用isula exec运行脚本,在脚本中运行后台进程需使用nohup标志。否则内核会在exec执行的进程(session首进程)退出时,向后台执行的进程发送SIGHUP信号,导致后台进程退出,出现僵尸进程。 + +- isula exec 进入容器进程后,不能执行后台程序,否则会出现卡死现象。 + + isula exec执行后台进程的方式如下: + + 1. 使用isula exec进入容器终端,isula exec container\_name bash + 2. 进入容器后,执行 script & + 3. 执行exit,导致终端卡死 + + ``` + isula exec 进入容器后,执行后台程序卡住的原因为isula exec进入容器运行后台while1程序,当bash退出时,while1程序并不会退出,变为孤儿进程由1号 + 进程接管,while1程序是由容器的初始bash进程fork &exec执行的,while1进程复制了bash进程的文件句柄,导致bash退出时,句柄并未完全关闭,导致 + console进程收不到句柄关闭事件,epoll_wait卡住,进程不退出。 + ``` + +- isula exec 不能用后台方式执行,否则可能会出现卡死现象。 + + isula exec后台执行的方式如下: + + 使用**isula exec 脚本 & **的方式后台执行exec,如:isula exec container\_name script & ,isula exec 后台执行,执行的脚本中不断cat某一文件,正常时在当前终端有输出,如果在当前终端执行回车操作,客户端会因读IO失败而退出读stdout的动作,使终端不再输出,服务端由于进程仍然在cat文件,会继续往fifo的buffer里写入数据,当缓存写满时,容器内进程会卡死在write动作上。 + +- 轻量级容器使用exec执行带有管道操作的命令时,建议使用/bin/bash -c 方式执行该命令。 + + 典型应用场景: + + 使用isula exec container\_name -it ls /test | grep "xx" | wc -l,用于统计test目录下xx的文件个数,因exec执行的为"ls /test",其输出通过管道进行grep、wc 处理。exec执行的为"ls /test"的输出会换行,再针对该输出进行处理时,结果有误。 + + 原因:使用exec 执行ls /test,输出带有换行,针对该输出进行“| grep "xx" | wc -l“,处理结果为2(两行) + + ``` + # isula exec -it container ls /test + xx xx10 xx12 xx14 xx3 xx5 xx7 xx9 + xx1 xx11 xx13 xx2 xx4 xx6 xx8 + # + ``` + + 建议处理方式:使用run/exec执行带有管道操作的命令时,使用/bin/bash -c 执行命令,在容器中执行管道操作。 + + ``` + # isula exec -it container /bin/sh -c "ls /test | grep "xx" | wc -l" + 15 + # + ``` + +- 禁止使用echo的方式向exec命令的stdin输入数据,会导致客户端卡死。应该直接将echo的值作为命令行参数传给容器 + + ``` + # echo ls | isula exec 38 /bin/sh + + + ^C + # + ``` + + 上述命令可能出现客户端卡死现象,这是由于上述命令相当于往stdin输入ls,随后EOF被读取,客户端不再发送数据,等待服务端退出,但是服务端无法区分客户端是否需要继续发送数据,因而服务端卡在read数据上,最终导致双方均卡死。 + + 正确的执行方式为: + + ``` + # isula exec 38 ls + bin dev etc home proc root sys tmp usr var + ``` + + +### 示例 + +在运行中的容器中,执行echo命令 + +``` +# isula exec c75284634bee echo "hello,world" +hello,world +``` + +## 查询单个容器信息 + +### 描述 + +isula inspect提供了容器的详细信息。 + +### 用法 + +``` +isula inspect [OPTIONS] CONTAINER|IMAGE [CONTAINER|IMAGE...] +``` + +### 参数 + +inspect命令支持参数参考下表。 + +**表 1** inspect命令参数列表 + + + + + + + + + + + + + + + + + +

命令

+

参数

+

说明

+

inspect

+

  

+

-H, --host

+

指定要连接的iSulad socket文件路径

+

-f, --format

+

使用模板格式化输出

+

-t, --time

+

超时时间的秒数,若在该时间内inspect查询容器信息未执行成功,则停止等待并立即报错,默认为120秒,当配置小于等于0的值,表示不启用timeout机制inspect查询容器信息会一直等待,直到获取容器信息成功后返回。

+
+ +### 约束限制 + +- 轻量级容器不支持format为“\{\{.State\}\}”的格式化输出,支持“\{\{json .State\}\}”的json格式化输出。当inspect镜像时,不支持-f参数。 + +### 示例 + +查询容器信息 + +``` +# isula inspect c75284634bee +[ + { + "Id": "c75284634beeede3ab86c828790b439d16b6ed8a537550456b1f94eb852c1c0a", + "Created": "2019-08-01T22:48:13.993304927-04:00", + "Path": "sh", + "Args": [], + "State": { + "Status": "running", + "Running": true, + "Paused": false, + "Restarting": false, + "Pid": 21164, + "ExitCode": 0, + "Error": "", + "StartedAt": "2019-08-02T06:09:25.535049168-04:00", + "FinishedAt": "2019-08-02T04:28:09.479766839-04:00", + "Health": { + "Status": "", + "FailingStreak": 0, + "Log": [] + } + }, + "Image": "busybox", + "ResolvConfPath": "", + "HostnamePath": "", + "HostsPath": "", + "LogPath": "none", + "Name": "c75284634beeede3ab86c828790b439d16b6ed8a537550456b1f94eb852c1c0a", + "RestartCount": 0, + "HostConfig": { + "Binds": [], + "NetworkMode": "", + "GroupAdd": [], + "IpcMode": "", + "PidMode": "", + "Privileged": false, + "SystemContainer": false, + "NsChangeFiles": [], + "UserRemap": "", + "ShmSize": 67108864, + "AutoRemove": false, + "AutoRemoveBak": false, + "ReadonlyRootfs": false, + "UTSMode": "", + "UsernsMode": "", + "Sysctls": {}, + "Runtime": "lcr", + "RestartPolicy": { + "Name": "no", + "MaximumRetryCount": 0 + }, + "CapAdd": [], + "CapDrop": [], + "Dns": [], + "DnsOptions": [], + "DnsSearch": [], + "ExtraHosts": [], + "HookSpec": "", + "CPUShares": 0, + "Memory": 0, + "OomScoreAdj": 0, + "BlkioWeight": 0, + "BlkioWeightDevice": [], + "CPUPeriod": 0, + "CPUQuota": 0, + "CPURealtimePeriod": 0, + "CPURealtimeRuntime": 0, + "CpusetCpus": "", + "CpusetMems": "", + "SecurityOpt": [], + "StorageOpt": {}, + "KernelMemory": 0, + "MemoryReservation": 0, + "MemorySwap": 0, + "OomKillDisable": false, + "PidsLimit": 0, + "FilesLimit": 0, + "Ulimits": [], + "Hugetlbs": [], + "HostChannel": { + "PathOnHost": "", + "PathInContainer": "", + "Permissions": "", + "Size": 0 + }, + "EnvTargetFile": "", + "ExternalRootfs": "" + }, + "Mounts": [], + "Config": { + "Hostname": "localhost", + "User": "", + "Env": [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", + "TERM=xterm", + "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + ], + "Tty": true, + "Cmd": [ + "sh" + ], + "Entrypoint": [], + "Labels": {}, + "Annotations": { + "log.console.file": "none", + "log.console.filerotate": "7", + "log.console.filesize": "1MB", + "rootfs.mount": "/var/lib/isulad/mnt/rootfs", + "native.umask": "secure" + }, + "HealthCheck": { + "Test": [], + "Interval": 0, + "Timeout": 0, + "StartPeriod": 0, + "Retries": 0, + "ExitOnUnhealthy": false + } + }, + "NetworkSettings": { + "IPAddress": "" + } + } +] +``` + +## 查询所有容器信息 + +### 描述 + +isula ps 用于查询所有容器的信息。 + +### 用法 + +``` +isula ps [OPTIONS] +``` + +### 参数 + +ps命令支持参数参考下表。 + +**表 1** ps命令参数列表 + + + + + + + + + + + + + + + + + + + + + + + + + + +

命令

+

参数

+

说明

+

ps

+

  

+

  

+

  

+

  

+

-a, --all

+

显示所有的容器

+

-H, --host

+

指定要连接的iSulad socket文件路径

+

-q, --quiet

+

只显示容器名字

+

-f, --filter

+

增加筛选过滤条件

+

--format

+

按照模板声明的方式输出数据

+

--no-trunc

+

不对容器ID进行截断打印

+
+ +### 示例 + +查询所有容器信息 + +``` +# isula ps -a + +ID IMAGE STATUS PID COMMAND EXIT_CODE RESTART_COUNT STARTAT FINISHAT RUNTIME NAMES +e84660aa059c rnd-dockerhub.huawei.com/official/busybox running 304765 "sh" 0 0 13 minutes ago - lcr e84660aa059cafb0a77a4002e65cc9186949132b8e57b7f4d76aa22f28fde016 +# isula ps -a --format "table {{.ID}} {{.Image}}" --no-trunc +ID IMAGE +e84660aa059cafb0a77a4002e65cc9186949132b8e57b7f4d76aa22f28fde016 rnd-dockerhub.huawei.com/official/busybox + +``` + +## 重启容器 + +### 描述 + +isula restart 用于重启一个或者多个容器。 + +### 用法 + +``` +isula restart [OPTIONS] CONTAINER [CONTAINER...] +``` + +### 参数 + +restart命令支持参数参考下表。 + +**表 1** restart 命令参数列表 + + + + + + + + + + + + + + +

命令

+

参数

+

说明

+

restart

+

-H, --host

+

指定要连接的iSulad socket文件路径

+

-t, --time

+

先优雅停止,超过这个时间,则强行终止

+
+ +### 约束限制 + +- 指定t参数且t<0时,请确保自己容器的应用会处理stop信号。 + + restart会首先调用stop停止容器。stop会首先给容器发送stop信号(SIGTERM),然后等待一定的时间(这个时间就是用户输入的 t),过了一定时间如果容器仍处于运行状态,那么就发送kill信号(SIGKILL)使容器强制退出。 + +- 输入参数t的含义: + + t<0 : 表示一直等待,不管多久都等待程序优雅退出,既然用户这么输入了,表示对自己的应用比较放心,认为自己的程序有合理的stop信号的处理机制。 + + t=0 : 表示不等,立即发送kill -9 到容器。 + + t\>0 : 表示等一定的时间,如果容器还未退出,就发送kill -9 到容器。 + + 所以如果用户使用t<0(比如t=-1),请确保自己容器的应用会正确处理SIGTERM. 如果容器忽略了该信号,会导致isula restart一直卡住。 + + +### 示例 + +重启单个容器 + +``` +# isula restart c75284634beeede3ab86c828790b439d16b6ed8a537550456b1f94eb852c1c0a + c75284634beeede3ab86c828790b439d16b6ed8a537550456b1f94eb852c1c0a +``` + +## 等待容器退出 + +### 描述 + +isula wait用于等待一个或者多个容器退出。仅支持runtime类型为lcr的容器。 + +### 用法 + +``` +isula wait [OPTIONS] CONTAINER [CONTAINER...] +``` + +### 参数 + +wait命令支持参数参考下表。 + +**表 1** wait命令参数列表 + + + + + + + + + + + + + + +

命令

+

参数

+

说明

+

wait

+

-H, --host

+

指定要连接的iSulad socket文件路径

+

/

+

阻塞,直到容器停止,然后打印退出代码

+
+ +### 示例 + +等待单个容器退出 + +``` +# isula wait c75284634beeede3ab86c828790b439d16b6ed8a537550456b1f94eb852c1c0a + 137 +``` + +## 查看容器中进程信息 + +### 描述 + +isula top用于查看容器中的进程信息。仅支持runtime类型为lcr的容器。 + +### 用法 + +``` +isula top [OPTIONS] container [ps options] +``` + +### 参数 + +top命令支持参数参考下表。 + +**表 1** top命令参数列表 + + + + + + + + + + + + + + +

命令

+

参数

+

说明

+

top

+

  

+

-H, --host

+

指定要连接的iSulad socket文件路径

+

/

+

查询运行容器的进程信息

+
+ +### 示例 + +查询容器中进程信息 + +``` +# isula top 21fac8bb9ea8e0be4313c8acea765c8b4798b7d06e043bbab99fc20efa72629c +UID PID PPID C STIME TTY TIME CMD +root 22166 22163 0 23:04 pts/1 00:00:00 sh +``` + +## 查看容器使用的资源 + +### 描述 + +isula stats用于实时显示资源使用的统计信息。仅支持runtime类型为lcr的容器。 + +### 用法 + +``` +isula stats [OPTIONS] [CONTAINER...] +``` + +### 参数 + +stats命令支持参数参考下表。 + +**表 1** stats命令参数列表 + + + + + + + + + + + + + + + + + +

命令

+

参数

+

说明

+

stats

+

  

+

  

+

-H, --host

+

指定要连接的iSulad socket文件路径

+

-a, --all

+

显示所有容器(默认只显示运行中的容器)

+

--no-stream

+

非流式方式的stats,只打印第一次结果

+
+ +### 示例 + +显示资源使用的统计信息 + +``` +# isula stats --no-stream 21fac8bb9ea8e0be4313c8acea765c8b4798b7d06e043bbab99fc20efa72629c CONTAINER CPU % MEM USAGE / LIMIT MEM % BLOCK I / O PIDS +21fac8bb9ea8 0.00 56.00 KiB / 7.45 GiB 0.00 0.00 B / 0.00 B 1 +``` + +## 获取容器日志 + +### 描述 + +isula logs用于获取容器的日志。仅支持runtime类型为lcr的容器。 + +### 用法 + +``` +isula logs [OPTIONS] [CONTAINER...] +``` + +### 参数 + +logs命令支持参数参考下表。 + +**表 1** logs命令参数列表 + + + + + + + + + + + + + + + + + +

命令

+

参数

+

说明

+

logs

+

  

+

-H, --host

+

指定要连接的iSulad socket文件路径

+

-f, --follow

+

跟踪日志输出

+

--tail

+

显示日志行数

+
+ +### 约束限制 + +- 容器串口logs日志记录功能,默认为开启状态,需要关闭可以通过 isula create --log-opt disable-log=true 或 isula run --log-opt disable-log=true 关闭。 + +### 示例 + +获取容器日志 + +``` +# isula logs 6a144695f5dae81e22700a8a78fac28b19f8bf40e8827568b3329c7d4f742406 +hello, world +hello, world +hello, world +``` + +## 容器与主机之间数据拷贝 + +### 描述 + +isula cp 用于容器与主机之间的数据拷贝,仅支持runtime类型为lcr的容器。 + +### 用法 + +``` +isula cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH +isula cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH +``` + +### 参数 + +cp命令支持参数参考下表。 + +**表 1** cp命令参数列表 + + + + + + + + + + + +

命令

+

参数

+

说明

+

cp

+

-H, --host

+

指定要连接的iSulad socket文件路径

+
+ +### 约束限制 + +- iSulad在执行拷贝时,不会挂载/etc/hostname, /etc/resolv.conf,/etc/hosts三个文件,也不会对--volume和--mount参数传入的参数挂载到host,所以对这些文件的拷贝使用的是镜像中的原始文件,而不是真实容器中的文件。 + + ``` + # isula cp b330e9be717a:/etc/hostname /tmp/hostname + # cat /tmp/hostname + # + ``` + +- iSulad在解压文件时,不会对文件系统中即将被覆盖的文件或文件夹做类型判断,而是直接覆盖,所以在拷贝时,如果源为文件夹,同名的文件会被强制覆盖为文件夹;如果源为文件,同名的文件夹会被强制覆盖为文件。 + + ``` + # rm -rf /tmp/test_file_to_dir && mkdir /tmp/test_file_to_dir + # isula exec b330e9be717a /bin/sh -c "rm -rf /tmp/test_file_to_dir && touch /tmp/test_file_to_dir" + # isula cp b330e9be717a:/tmp/test_file_to_dir /tmp + # ls -al /tmp | grep test_file_to_dir + -rw-r----- 1 root root 0 Apr 26 09:59 test_file_to_dir + ``` + + +- iSulad 在cp拷贝过程中,会将容器freeze住,在拷贝完成后,恢复容器运行。 + +### 示例 + +将主机/test/host目录拷贝到容器21fac8bb9ea8的/test目录下。 + +``` +isula cp /test/host 21fac8bb9ea8:/test +``` + +将容器21fac8bb9ea8的/www目录拷贝到主机的/tmp目录中。 + +``` +isula cp 21fac8bb9ea8:/www /tmp/ +``` + +## 暂停容器 + +### 描述 + +isula pause用于暂停容器中所有的进程,仅支持runtime类型为lcr的容器。 + +### 用法 + +``` +isula pause CONTAINER [CONTAINER...] +``` + +### 参数 + + + + + + + + + + + +

命令

+

参数

+

说明

+

pause

+

-H, --host

+

指定要连接的iSulad socket文件路径

+
+ +### 约束限制 + +- 只有状态为running的容器可以被执行pause操作 +- 当容器被pause后,无法执行其他生命周期管理操作(如restart/exec/attach/kill/stop/rm等) +- 当带有健康检查配置的容器被pause后,容器状态最终变为unhealthy状态 + +### 示例 + +暂停一个正在运行的容器,命令示例如下: + +``` +# isula pause 8fe25506fb5883b74c2457f453a960d1ae27a24ee45cdd78fb7426d2022a8bac + 8fe25506fb5883b74c2457f453a960d1ae27a24ee45cdd78fb7426d2022a8bac +``` + +## 恢复容器 + +### 描述 + +isula unpause用于恢复容器中所有的进程, 为isula pause的逆过程,仅支持runtime类型为lcr的容器。 + +### 用法 + +``` +isula unpause CONTAINER [CONTAINER...] +``` + +### 参数 + + + + + + + + + + + +

命令

+

参数

+

说明

+

pause

+

-H, --host

+

指定要连接的iSulad socket文件路径

+
+ +### 约束限制 + +- 只有状态为paused的容器可以被执行unpause操作 + +### 示例 + +恢复一个被暂停的容器,命令示例如下: + +``` +# isula unpause 8fe25506fb5883b74c2457f453a960d1ae27a24ee45cdd78fb7426d2022a8bac + 8fe25506fb5883b74c2457f453a960d1ae27a24ee45cdd78fb7426d2022a8bac +``` + +## 从服务端实时获取事件消息 + +### 描述 + +isula events用于从服务端实时获取容器镜像生命周期、运行等事件消息, 仅支持runtime类型为lcr的容器。 + +### 用法 + +``` +isula events [OPTIONS] +``` + +### 参数 + + + + + + + + + + + + + + + + + +

命令

+

参数

+

说明

+

events

+

-H, --host

+

指定要连接的iSulad socket文件路径

+

-n, --name

+

获取指定容器的事件消息

+

-S, --since

+

获取指定时间以来的事件消息

+
+ +### 示例 + +从服务端实时获取事件消息,命令示例如下: + +``` +# isula events +``` + diff --git "a/content/zh/docs/Container/\350\256\276\345\244\207\347\256\241\347\220\206.md" "b/content/zh/docs/Container/\345\256\271\345\231\250\350\265\204\346\272\220\345\212\250\346\200\201\347\256\241\347\220\206.md" similarity index 31% rename from "content/zh/docs/Container/\350\256\276\345\244\207\347\256\241\347\220\206.md" rename to "content/zh/docs/Container/\345\256\271\345\231\250\350\265\204\346\272\220\345\212\250\346\200\201\347\256\241\347\220\206.md" index 3edd8d8b0fa0396c64ef84aaa4b71796a16238fd..720cb8835ac73b4abf167a95cce048457d011151 100644 --- "a/content/zh/docs/Container/\350\256\276\345\244\207\347\256\241\347\220\206.md" +++ "b/content/zh/docs/Container/\345\256\271\345\231\250\350\265\204\346\272\220\345\212\250\346\200\201\347\256\241\347\220\206.md" @@ -1,28 +1,45 @@ -# 设备管理 - -## 功能描述 - -isulad-tools支持将宿主机上的块设备(比如磁盘、LVM)或字符设备(比如GPU、binner、fuse)添加到容器中。在容器中使用该设备,例如可以对磁盘进行fdisk格式化,写入fs等操作。在容器不需要设备时,isulad-tools可以将设备从容器中删除,归还宿主机。 - -## 命令格式 - -``` -isulad-tools [COMMADN][OPTIONS] [ARG...] -``` - -其中: - -COMMAND:设备管理相关的命令。 - -OPTIONS:设备管理命令支持的选项。 - -container\_id:容器id。 - -ARG:命令对应的参数。 - -## 参数说明 - - +# 容器资源动态管理 + +普通容器无法支持对容器内的资源进行管理,例如添加一个块设备到容器、插入一块物理/虚拟网卡到容器。系统容器场景下,通过syscontainer-tools工具可以实现动态为容器挂载/卸载块设备,网络设备,路由和卷等资源。 + +要使用此功能,需要安装syscontainer-tools工具: + +``` +[root@localhost ~]# yum install syscontainer-tools +``` + +- [容器资源动态管理](#容器资源动态管理.md) + - [设备管理](#设备管理) + - [网卡管理](#网卡管理) + - [路由管理](#路由管理) + - [挂卷管理](#挂卷管理) + + +## 设备管理 + +### 功能描述 + +isulad-tools支持将宿主机上的块设备(比如磁盘、LVM)或字符设备(比如GPU、binner、fuse)添加到容器中。在容器中使用该设备,例如可以对磁盘进行fdisk格式化,写入fs等操作。在容器不需要设备时,isulad-tools可以将设备从容器中删除,归还宿主机。 + +### 命令格式 + +``` +isulad-tools [COMMADN][OPTIONS] [ARG...] +``` + +其中: + +COMMAND:设备管理相关的命令。 + +OPTIONS:设备管理命令支持的选项。 + +container\_id:容器id。 + +ARG:命令对应的参数。 + +### 参数说明 + + -

命令

功能说明

@@ -81,57 +98,395 @@ ARG:命令对应的参数。
- -## 约束限制 - -- 添加/删除设备的时机可以是容器实例非运行状态,完成操作后启动容器,容器内会有体现;也可以在容器运行时(running)动态添加。 -- 不能在容器内和host上并发进行fdisk对磁盘的格式化写入,会影响容器磁盘使用。 -- add-device将磁盘添加到容器的特定目录时,如果容器内的父目录为多级目录(比如/dev/a/b/c/d/e...)且目录层级不存在,则isulad-tools会自动在容器内创建对应目录;当删除时,不会将创建的父目录删除。如果用户下一次add-device到该父目录,则会提示已经存在无法添加成功。 -- add-device添加磁盘、更新磁盘参数时,配置磁盘Qos;当配置磁盘Qos的read/write bps、read/write IOPS值时,不建议配置值过小,当设置过小时,会造成磁盘表现为不可读(实际原因是速度过慢),最终影响业务功能。 -- 使用--blkio-weight-device来限制指定块设备的权重,如果当前块设备仅支持BFQ模式,可能会报错,提示用户检查当前OS环境是否支持BFQ块设备权重值设置。 - -## 使用示例 - -- 启动一个系统容器,指定hook spec为isulad hook执行配置脚本 - - ``` - [root@localhost ~]# isula run -tid --hook-spec /etc/isulad-tools/hookspec.json --system-container --external-rootfs /root/root-fs none init - eed1096c8c7a0eca6d92b1b3bc3dd59a2a2adf4ce44f18f5372408ced88f8350 - ``` - - -- 添加一个块设备到容器 - - ``` - [root@localhost ~]# isulad-tools add-device ee /dev/sdb:/dev/sdb123 - Add device (/dev/sdb) to container(ee,/dev/sdb123) done. - [root@localhost ~]# isula exec ee fdisk -l /dev/sdb123 - Disk /dev/sdb123: 50 GiB, 53687091200 bytes, 104857600 sectors - Units: sectors of 1 * 512 = 512 bytes - Sector size (logical/physical): 512 bytes / 512 bytes - I/O size (minimum/optimal): 512 bytes / 512 bytes - Disklabel type: dos - Disk identifier: 0xda58a448 - - Device Boot Start End Sectors Size Id Type - /dev/sdb123p1 2048 104857599 104855552 50G 5 Extended - /dev/sdb123p5 4096 104857599 104853504 50G 83 Linux - ``` - -- 更新设备信息 - - ``` - [root@localhost ~]# isulad-tools update-device --device-read-bps /dev/sdb:10m ee - Update read bps for device (/dev/sdb,10485760) done. - ``` - -- 删除设备 - - ``` - [root@localhost ~]# isulad-tools remove-device ee /dev/sdb:/dev/sdb123 - Remove device (/dev/sdb) from container(ee,/dev/sdb123) done. - Remove read bps for device (/dev/sdb) done. - ``` - - + + +### 约束限制 + +- 添加/删除设备的时机可以是容器实例非运行状态,完成操作后启动容器,容器内会有体现;也可以在容器运行时(running)动态添加。 +- 不能在容器内和host上并发进行fdisk对磁盘的格式化写入,会影响容器磁盘使用。 +- add-device将磁盘添加到容器的特定目录时,如果容器内的父目录为多级目录(比如/dev/a/b/c/d/e...)且目录层级不存在,则isulad-tools会自动在容器内创建对应目录;当删除时,不会将创建的父目录删除。如果用户下一次add-device到该父目录,则会提示已经存在无法添加成功。 +- add-device添加磁盘、更新磁盘参数时,配置磁盘Qos;当配置磁盘Qos的read/write bps、read/write IOPS值时,不建议配置值过小,当设置过小时,会造成磁盘表现为不可读(实际原因是速度过慢),最终影响业务功能。 +- 使用--blkio-weight-device来限制指定块设备的权重,如果当前块设备仅支持BFQ模式,可能会报错,提示用户检查当前OS环境是否支持BFQ块设备权重值设置。 + +### 使用示例 + +- 启动一个系统容器,指定hook spec为isulad hook执行配置脚本 + + ``` + [root@localhost ~]# isula run -tid --hook-spec /etc/isulad-tools/hookspec.json --system-container --external-rootfs /root/root-fs none init + eed1096c8c7a0eca6d92b1b3bc3dd59a2a2adf4ce44f18f5372408ced88f8350 + ``` + + +- 添加一个块设备到容器 + + ``` + [root@localhost ~]# isulad-tools add-device ee /dev/sdb:/dev/sdb123 + Add device (/dev/sdb) to container(ee,/dev/sdb123) done. + [root@localhost ~]# isula exec ee fdisk -l /dev/sdb123 + Disk /dev/sdb123: 50 GiB, 53687091200 bytes, 104857600 sectors + Units: sectors of 1 * 512 = 512 bytes + Sector size (logical/physical): 512 bytes / 512 bytes + I/O size (minimum/optimal): 512 bytes / 512 bytes + Disklabel type: dos + Disk identifier: 0xda58a448 + + Device Boot Start End Sectors Size Id Type + /dev/sdb123p1 2048 104857599 104855552 50G 5 Extended + /dev/sdb123p5 4096 104857599 104853504 50G 83 Linux + ``` + +- 更新设备信息 + + ``` + [root@localhost ~]# isulad-tools update-device --device-read-bps /dev/sdb:10m ee + Update read bps for device (/dev/sdb,10485760) done. + ``` + +- 删除设备 + + ``` + [root@localhost ~]# isulad-tools remove-device ee /dev/sdb:/dev/sdb123 + Remove device (/dev/sdb) from container(ee,/dev/sdb123) done. + Remove read bps for device (/dev/sdb) done. + ``` + + +## 网卡管理 + +### 功能描述 + +isulad-tools支持将宿主机上的物理网卡或虚拟网卡插入到容器,在不使用网卡的时候从容器中删除归还给宿主机,并且可以动态修改网卡配置。插入物理网卡即把宿主机上一块网卡直接添加到容器中,插入虚拟网卡则需要先创建一对veth pair,之后将一端插入到容器中。 + +### 命令格式 + +``` +isulad-tools [COMMADN][OPTIONS] +``` + +其中: + +COMMAND:网卡管理相关的命令。 + +OPTIONS:网卡管理命令支持的选项。 + +container\_id:容器id。 + +### 参数说明 + + + + + + + + + + + + + + + + + + + + + + + + +

命令

+

功能说明

+

选项说明

+

add-nic

+

给容器创建一个网卡。

+

支持的选项如下:

+
  • --type:设置网卡类型,当前只支持eth/veth。
  • --name:设置网卡名称,格式为[host:]<container>,host不写是随机名字。
  • --ip:设置网卡IP地址。
  • --mac:设置网卡mac地址。
  • --bridge:设置网卡绑定的网桥。
  • --mtu:设置网卡的mtu值,默认1500。
  • --update-config-only:如果此flag设置了,只更新配置文件,不会实际做添加网卡的动作。
  • --qlen:配置qlen值,默认为1000。
+

remove-nic

+

从容器中将网卡删除,还原至宿主机。

+

支持的选项如下:

+
  • --type:设置网卡的类型。
  • --name:设置网卡的名称,格式为[host:]<container>。
+

list-nic

+

列出容器中所有的网卡。

+

支持的选项如下:

+
  • --pretty:按照json格式输出。
  • --filter:按照过滤格式输出,比如--filter '{"ip":"192.168.3.4/24", "Mtu":1500}'。
+

update-nic

+

更改容器内指定网卡的配置参数。

+

支持的选项如下:

+
  • --name:容器内网卡名(必须项)。
  • --ip:设置网卡IP地址。
  • --mac:设置网卡mac地址。
  • --bridge:设置网卡绑定的网桥。
  • --mtu:设置网卡的mtu值。
  • --update-config-only:如果此flag设置了,只更新配置文件,不会实际做更新网卡的动作。
  • --qlen:配置qlen值。
+
+ +### 约束限制 + +- 支持添加物理网卡(eth)和虚拟网卡(veth)两种类型。 +- 在添加网卡时可以同时对网卡进行配置,参数包括--ip/--mac/--bridge/--mtu/--qlen。 +- 支持最多添加8个物理网卡到容器。 +- 使用isulad-tools add-nic向容器添加eth网卡后,如果不加hook,在容器退出前必须手工将nic删除,否则在host上的eth网卡的名字会被更改成容器内的名字。 +- 对于物理网卡(1822 vf网卡除外),add-nic必须使用原mac地址,update-nic禁止修改mac地址,容器内也不允许修改mac地址。 +- 使用isulad-tools add-nic时,设置mtu值,设置范围跟具体的网卡型号有关。 +- 使用isulad-tools向容器添加网卡和路由时,建议先执行add-nic添加网卡,然后执行add-route添加路由;使用isulad-tools从容器删除网卡和路由时,建议先执行remove-route删除路由,然后执行remove-nic删除网卡。 +- 使用isulad-tools添加网卡时,一块网卡只能添加到一个容器中。 + +### 使用示例 + +- 启动一个系统容器,指定hook spec为isulad hook执行配置脚本: + + ``` + [root@localhost ~]# isula run -tid --hook-spec /etc/isulad-tools/hookspec.json --system-container --external-rootfs /root/root-fs none init + 2aaca5c1af7c872798dac1a468528a2ccbaf20b39b73fc0201636936a3c32aa8 + ``` + + +- 添加一个虚拟网卡到容器 + + ``` + [root@localhost ~]# isulad-tools add-nic --type "veth" --name abc2:bcd2 --ip 172.17.28.5/24 --mac 00:ff:48:13:xx:xx --bridge docker0 2aaca5c1af7c + Add network interface to container 2aaca5c1af7c (bcd2,abc2) done + ``` + +- 添加一个物理网卡到容器 + + ``` + [root@localhost ~]# isulad-tools add-nic --type "eth" --name eth3:eth1 --ip 172.17.28.6/24 --mtu 1300 --qlen 2100 2aaca5c1af7c + Add network interface to container 2aaca5c1af7c (eth3,eth1) done + ``` + + >![](public_sys-resources/icon-note.gif) **说明:** + >添加虚拟网卡或物理网卡时,请确保网卡处于空闲状态,添加正在使用的网卡会导致系统网络断开。 + + +## 路由管理 + +### 功能描述 + +isulad-tools工具可以对系统容器进行动态添加/删除路由表。 + +### 命令格式 + +``` +isulad-tools [COMMADN][OPTIONS] [ARG...] +``` + +其中: + +COMMAND:路由管理相关的命令。 + +OPTIONS:路由管理命令支持的选项。 + +container\_id:容器id。 + +ARG:命令对应的参数。 + +### 接口说明 + + + + + + + + + + + + + + + + + + + + + + + + +

命令

+

功能说明

+

选项说明

+

参数说明

+

add-route

+

将网络路由规则添加到容器中。

+

支持的选项如下:

+

--update-config-only:添加此参数,只更新配置文件,不做实际的更新路由表的动作。

+

参数格式:[{rule1},{rule2}]

+

rule样例:

+

'[{"dest":"default", "gw":"192.168.10.1"},{"dest":"192.168.0.0/16","dev":"eth0","src":"192.168.1.2"}]'

+
  • dest:目标网络,如果为空则是默认网关。
  • src:路由源IP。
  • gw:路由网关。
  • dev:网络设备。
+

remove-route

+

从容器中删除路由。

+

支持的选项如下:

+

--update-config-only:设置此参数,只更新配置文件,不做实际从容器中删除路由的动作。

+

参数格式:[{rule1},{rule2}]

+

rule样例:

+

'[{"dest":"default", "gw":"192.168.10.1"},{"dest":"192.168.0.0/16","dev":"eth0","src":"192.168.1.2"}]'

+
  • dest:目标网络,如果为空则是默认网关。
  • src:路由源IP。
  • gw:路由网关。
  • dev:网络设备。
+

list-route

+

列出容器中所有的路由规则。

+

支持的选项如下:

+
  • --pretty:按照json格式输出。
  • --filter:按照过滤格式输出,比如--filter '{"ip":"192.168.3.4/24", "Mtu":1500}'。
+

+
+ +### 约束限制 + +- 使用isulad-tools向容器添加网卡和路由时,建议先执行add-nic添加网卡,然后执行add-route添加路由;使用isulad-tools从容器删除网卡和路由时,建议先执行remove-route删除路由,然后执行remove-nic删除网卡。 +- 向容器内添加路由规则时,需确保所添加的路由规则与容器内现有的路由规则不会产生冲突。 + +### 使用示例 + +- 启动一个系统容器,指定hook spec为isulad hook执行配置脚本: + + ``` + [root@localhost ~]# isula run -tid --hook-spec /etc/isulad-tools/hookspec.json --system-container --external-rootfs /root/root-fs none init + 0d2d68b45aa0c1b8eaf890c06ab2d008eb8c5d91e78b1f8fe4d37b86fd2c190b + ``` + + +- isulad-tools向系统容器添加一块物理网卡: + + ``` + [root@localhost ~]# isulad-tools add-nic --type "eth" --name enp4s0:eth123 --ip 172.17.28.6/24 --mtu 1300 --qlen 2100 0d2d68b45aa0 + Add network interface (enp4s0) to container (0d2d68b45aa0,eth123) done + ``` + + +- isulad-tools添加一条路由规则到系统容器,注意格式需按照'\[\{"dest":"default", "gw":"192.168.10.1"\},\{"dest":"192.168.0.0/16","dev":"eth0","src":"192.168.1.2"\}\]'来配置。如果dest为空会自动填成default。 + + ``` + [root@localhost ~]# isulad-tools add-route 0d2d68b45aa0 '[{"dest":"172.17.28.0/32", "gw":"172.17.28.5","dev":"eth123"}]' + Add route to container 0d2d68b45aa0, route: {dest:172.17.28.0/32,src:,gw:172.17.28.5,dev:eth123} done + ``` + +- 查看容器内是否新增一条路由规则: + + ``` + [root@localhost ~]# isula exec -it 0d2d68b45aa0 route + Kernel IP routing table + Destination Gateway Genmask Flags Metric Ref Use Iface + 172.17.28.0 172.17.28.5 255.255.255.255 UGH 0 0 0 eth123 + 172.17.28.0 0.0.0.0 255.255.255.0 U 0 0 0 eth123 + ``` + + +## 挂卷管理 + +### 功能描述 + +普通容器仅支持在创建时指定--volume参数将宿主机的目录/卷挂载到容器实现资源共享,但是无法在容器运行时将挂载到容器中的目录/卷卸载掉,也不支持将宿主机的目录/卷挂载到容器。系统容器可以通过isulad-tools工具实现动态将宿主机的目录/卷挂载到容器,以及将容器中的目录/卷进行卸载。 + +### 命令格式 + +``` +isulad-tools [COMMADN][OPTIONS] [ARG...] +``` + +其中: + +COMMAND:路由管理相关的命令。 + +OPTIONS:路由管理命令支持的选项。 + +container\_id:容器id。 + +ARG:命令对应的参数。 + +### 接口说明 + + + + + + + + + + + + + + + + + + + + + + + + +

命令

+

功能说明

+

选项说明

+

参数说明

+

add-path

+

将宿主机文件/目录添加到容器中。

+

+

参数格式为:

+

hostpath:containerpath:permission [hostpath:containerpath:permission ...]

+

其中:

+

hostdevice:卷在主机上的路径。

+

containerdevice:卷在容器中的路径。

+

permission:容器内对挂载路径的操作权限。

+

remove-path

+

将容器中的目录/文件删除,还原到宿主机中。

+

+

参数格式为:hostpath:containerpath [hostpath:containerpath ...]

+

其中:

+

hostdevice:卷在主机上的路径。

+

containerdevice:卷在容器中的路径。

+

list-path

+

列出容器中所有的path目录。

+

支持的选项如下:

+

--pretty:按照json格式输出。

+

+
+ +### 约束限制 + +- 挂载目录(add-path)的时候必须要指定绝对路径。 +- 挂载目录(add-path)会在主机上生成/.sharedpath挂载点。 +- 最多可以向单个容器中添加128个volume,超过128后无法添加成功。 +- add-path不能将主机目录覆盖容器中的根目录目录(/),否则会造成功能影响。 + +### 使用示例 + +- 启动一个系统容器,指定hook spec为isulad hook执行配置脚本: + + ``` + [root@localhost ~]# isula run -tid --hook-spec /etc/isulad-tools/hookspec.json --system-container --external-rootfs /root/root-fs none init + e45970a522d1ea0e9cfe382c2b868d92e7b6a55be1dd239947dda1ee55f3c7f7 + ``` + + +- isulad-tools将宿主机某个目录挂载到容器,实现资源共享: + + ``` + [root@localhost ~]# isulad-tools add-path e45970a522d1 /home/test123:/home/test123 + Add path (/home/test123) to container(e45970a522d1,/home/test123) done. + ``` + +- 宿主机目录/home/test123创建一个文件,然后在容器内查看文件是否可以访问: + + ``` + [root@localhost ~]# echo "hello world" > /home/test123/helloworld + [root@localhost ~]# isula exec e45970a522d1 bash + [root@localhost /]# cat /home/test123/helloworld + hello world + ``` + +- isulad-tools将挂载目录从容器内删除: + + ``` + [root@localhost ~]# isulad-tools remove-path e45970a522d1 /home/test123:/home/test123 + Remove path (/home/test123) from container(e45970a522d1,/home/test123) done + [root@localhost ~]# isula exec e45970a522d1 bash + [root@localhost /]# ls /home/test123/helloworld + ls: cannot access '/home/test123/helloworld': No such file or directory + ``` + + diff --git "a/content/zh/docs/Container/\345\256\271\345\231\250\350\265\204\346\272\220\345\212\250\346\200\201\347\256\241\347\220\206\357\274\210syscontainer-tools\357\274\211.md" "b/content/zh/docs/Container/\345\256\271\345\231\250\350\265\204\346\272\220\345\212\250\346\200\201\347\256\241\347\220\206\357\274\210syscontainer-tools\357\274\211.md" deleted file mode 100644 index b2b2fc0fcea0e30af9a40ac5afaffc47593dbeba..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\256\271\345\231\250\350\265\204\346\272\220\345\212\250\346\200\201\347\256\241\347\220\206\357\274\210syscontainer-tools\357\274\211.md" +++ /dev/null @@ -1,9 +0,0 @@ -# 容器资源动态管理(syscontainer-tools) - -普通容器无法支持对容器内的资源进行管理,例如添加一个块设备到容器、插入一块物理/虚拟网卡到容器。系统容器场景下,通过syscontainer-tools工具可以实现动态为容器挂载/卸载块设备,网络设备,路由和卷等资源。 - -要使用此功能,需要安装syscontainer-tools工具: - -``` -[root@localhost ~]# yum install syscontainer-tools -``` diff --git "a/content/zh/docs/Container/\345\256\271\345\231\250\350\265\204\346\272\220\347\256\241\347\220\206.md" "b/content/zh/docs/Container/\345\256\271\345\231\250\350\265\204\346\272\220\347\256\241\347\220\206.md" index 2414c7aed96ab4b77aa509e1ea868d01bf553527..20223d146e428ef50ec37117298c54a0f9aefedc 100644 --- "a/content/zh/docs/Container/\345\256\271\345\231\250\350\265\204\346\272\220\347\256\241\347\220\206.md" +++ "b/content/zh/docs/Container/\345\256\271\345\231\250\350\265\204\346\272\220\347\256\241\347\220\206.md" @@ -1 +1,729 @@ -# 容器资源管理 +# 容器资源管理 + + +- [容器资源管理](#容器资源管理) + - [资源共享](#资源共享) + - [限制运行时的CPU资源](#限制运行时的CPU资源) + - [限制运行时的内存](#限制运行时的内存) + - [限制运行时的IO资源](#限制运行时的IO资源) + - [限制容器rootfs存储空间](#限制容器rootfs存储空间) + - [限制容器内文件句柄数](#限制容器内文件句柄数) + - [限制容器内可以创建的进程/线程数](#限制容器内可以创建的进程-线程数) + - [配置容器内的ulimit值](#配置容器内的ulimit值) + + +## 资源共享 + +### 描述 + +容器间或者容器与host之间可以共享namespace信息,包括pid, net, ipc, uts。 + +### 用法 + +isula create/run时使用namespace相关的参数共享资源,具体参数见下方参数列表。 + +### 参数 + +create/run时可以指定下列参数。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数项

+

参数说明

+

取值范围

+

是否必选

+

--pid

+

指定要共享的pid namespace

+

[none, host, container:<containerID>],none表示不共享,host表示与host共用namespace,container:<containerID>表示与容器containerID共享同一个namespace

+

+

--net

+

指定要共享的net namespace

+

[none, host, container:<containerID>],none表示不共享,host表示与host共用namespace,container:<containerID>表示与容器containerID共享同一个namespace

+

+

--ipc

+

指定要共享的ipc namespace

+

[none, host, container:<containerID>],none表示不共享,host表示与host共用namespace,container:<containerID>表示与容器containerID共享同一个namespace

+

+

--uts

+

指定要共享的uts namespace

+

[none, host, container:<containerID>],none表示不共享,host表示与host共用namespace,container:<containerID>表示与容器containerID共享同一个namespace

+

+
+ +### 示例 + +如果两个容器需要共享同一个pid namespace,在运行容器时,直接加上--pid container: 即可,如: + +``` +isula run -tid --name test_pid busybox sh +isula run -tid --name test --pid container:test_pid busybox sh +``` + +## 限制运行时的CPU资源 + +### 描述 + +可以通过参数限制容器的各项cpu资源值。 + +### 用法 + +isula create/run时使用cpu相关的参数限制容器的各项cpu资源值,具体参数及取值见下方参数列表。 + +### 参数 + +create/run时可以指定下列参数。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数项

+

参数说明

+

取值范围

+

是否必选

+

--cpu-period

+

限制容器中cpu cfs(完全公平调度)周期

+

64位整数(int64)

+

+

--cpu-quota

+

限制容器中cpu cfs(完全公平调度) 的配额

+

64位整数(int64)

+

+

--cpu-shares

+

限制容器中cpu相对权重

+

64位整数(int64)

+

+

--cpuset-cpus

+

限制容器中使用cpu节点

+

字符串。值为要设置的cpu编号,有效范围为主机上的cpu数量,例如可以设置0-3或者0,1.

+

+

--cpuset-mems

+

限制容器中cpuset使用的mem节点

+

字符串。值为要设置的cpu编号,有效范围为主机上的cpu数量,例如可以设置0-3或者0,1.

+

+
+ +### 示例 + +如果需要限制容器只是用特定的cpu,在运行容器时,直接加上--cpuset-cpus number 即可,如: + +``` +isula run -tid --cpuset-cpus 0,2-3 busybox sh +``` + +>![](public_sys-resources/icon-note.gif) **说明:** +>是否设置成功,请参见“查询单个容器信息”章节。 + +## 限制运行时的内存 + +### 描述 + +可以通过参数限制容器的各项内存值上限。 + +### 用法 + +isula create/run时使用内存相关的参数限制容器的各项内存使用上限,具体参数及取值见下方参数列表。 + +### 参数 + +create/run时可以指定下列参数。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数项

+

参数说明

+

取值范围

+

是否必选

+

--memory

+

限制容器中内存使用上限

+

64位整数(int64)。值为非负数,0表示不设置(不限制);单位可以为空(byte),KB,MB,GB,TB,PB.

+

+

--memory-reservation

+

限制容器中内存的软上限

+

64位整数(int64)。值为非负数,0表示不设置(不限制);单位可以为空(byte),KB,MB,GB,TB,PB.

+

+

--memory-swap

+

限制容器中交换内存的上限

+

64位整数(int64)。值为-1或非负数,-1表示不限制,0表示不设置(不限制);单位可以为空(byte),KB,MB,GB,TB,PB.

+

+

--kernel-memory

+

限制容器中内核内存的上限

+

64位整数(int64)。值为非负数,0表示不设置(不限制);单位可以为空(byte),KB,MB,GB,TB,PB.

+

+
+ +### 示例 + +如果需要限制容器内内存的上限,在运行容器时,直接加上--memory \[\]即可,如: + +``` +isula run -tid --memory 1G busybox sh +``` + +## 限制运行时的IO资源 + +### 描述 + +可以通过参数限制容器中设备读写速度。 + +### 用法 + +isula create/run时使用--device-read-bps/--device-write-bps :\[\]来限制容器中设备的读写速度。 + +### 参数 + +create/run时指定--device-read/write-bps参数。 + + + + + + + + + + + + + + +

参数项

+

参数说明

+

取值范围

+

是否必选

+

--device-read-bps/--device-write-bps

+

限制容器中设备的读速度/写速度

+

64位整数(int64)。值为正整数,可以为0,0表示不设置(不限制);单位可以为空(byte),KB,MB,GB,TB,PB.

+

+
+ +### 示例 + +如果需要限制容器内设备的读写速度,在运行容器时,直接加上--device-write-bps/--device-read-bps :\[\]即可,例如,限制容器busybox内设备/dev/sda的读速度为 1MB 每秒,则命令如下: + +``` +isula run -tid --device-write /dev/sda:1mb busybox sh +``` + +限制写速度的命令如下: + +``` +isula run -tid read-bps /dev/sda:1mb busybox sh +``` + +## 限制容器rootfs存储空间 + +### 描述 + +在ext4上使用overlay2时,可以设置单个容器的文件系统限额,比如设置A容器的限额为5G,B容器为10G。 + +该特性通过ext4文件系统的project quota功能来实现,在内核支持的前提下,通过系统调用SYS\_IOCTL设置某个目录的project ID,再通过系统调用SYS\_QUOTACTL设置相应的project ID的hard limit和solft limit值达到限额的目的。 + +### 用法 + +1. 环境准备 + + 文件系统支持Project ID和Project Quota属性,4.19版本内核已经支持,外围包e2fsprogs版本不低于1.43.4-2。 + +2. 在容器挂载overlayfs之前,需要对不同容器的upper目录和work目录设置不同的project id,同时设置继承选项,在容器挂载overlayfs之后不允许再修改project id和继承属性。 +3. 配额的设置需要在容器外以特权用户进行。 +4. daemon中增加如下配置 + + ``` + -s overlay2 --storage-opt overlay2.override_kernel_check=true + ``` + +5. daemon支持以下选项,用于为容器设置默认的限制, + + --storage-opt overlay2.basesize=128M 指定默认限制的大小,若isula run时也指定 了--storeage-opt size选项,则以run时指定来生效,若daemon跟isula run时都不指定大小,则表示不限制。 + +6. 需要开启文件系统Project ID和Project Quota属性。 + - 新格式化文件系统并mount + + ``` + # mkfs.ext4 -O quota,project /dev/sdb + # mount -o prjquota /dev/sdb /var/lib/isulad + ``` + + + +### 参数 + +create/run时指定--storage-opt参数。 + + + + + + + + + + + + + + +

参数项

+

参数说明

+

取值范围

+

是否必选

+

--storage-opt size=${rootfsSize}

+

限制容器rootfs存储空间。

+

rootfsSize解析出的大小为int64范围内以字节表示的正数,默认单位为B,也可指定为([kKmMgGtTpP])?[iI]?[bB]?$

+

+
+ +### 示例 + +在isula run/create命令行上通过已有参数“--storage-opt size=”来设置限额。其中value是一个正数,单位可以是\[kKmMgGtTpP\]?\[iI\]?\[bB\]?,在不带单位的时候默认单位是字节。 + +``` +# isula run -ti --storage-opt size=10M busybox +/ # df -h +Filesystem Size Used Available Use% Mounted on +overlay 10.0M 48.0K 10.0M 0% / +none 64.0M 0 64.0M 0% /dev +none 10.0M 0 10.0M 0% /sys/fs/cgroup +tmpfs 64.0M 0 64.0M 0% /dev +shm 64.0M 0 64.0M 0% /dev/shm +/dev/mapper/vg--data-ext41 + 9.8G 51.5M 9.2G 1% /etc/hostname +/dev/mapper/vg--data-ext41 + 9.8G 51.5M 9.2G 1% /etc/resolv.conf +/dev/mapper/vg--data-ext41 + 9.8G 51.5M 9.2G 1% /etc/hosts +tmpfs 3.9G 0 3.9G 0% /proc/acpi +tmpfs 64.0M 0 64.0M 0% /proc/kcore +tmpfs 64.0M 0 64.0M 0% /proc/keys +tmpfs 64.0M 0 64.0M 0% /proc/timer_list +tmpfs 64.0M 0 64.0M 0% /proc/sched_debug +tmpfs 3.9G 0 3.9G 0% /proc/scsi +tmpfs 64.0M 0 64.0M 0% /proc/fdthreshold +tmpfs 64.0M 0 64.0M 0% /proc/fdenable +tmpfs 3.9G 0 3.9G 0% /sys/firmware +/ # +/ # dd if=/dev/zero of=/home/img bs=1M count=12 && sync +dm-4: write failed, project block limit reached. +10+0 records in +9+0 records out +10432512 bytes (9.9MB) copied, 0.011782 seconds, 844.4MB/s +/ # df -h | grep overlay +overlay 10.0M 10.0M 0 100% / +/ # +``` + +### 约束 + +1. 限额只针对rw层。 + + overlay2的限额是针对容器的rw层的,镜像的大小不计算在内。 + +2. 内核支持并使能。 + + 内核必须支持ext4的project quota功能,并在mkfs的时候要加上-O quota,project,挂载的时候要加上-o prjquota。任何一个不满足,在使用--storage-opt size=时都将报错。 + + ``` + # isula run -it --storage-opt size=10Mb busybox df -h + Error response from daemon: Failed to prepare rootfs with error: time="2019-04-09T05:13:52-04:00" level=fatal msg="error creating read- + write layer with ID "a4c0e55e82c55e4ee4b0f4ee07f80cc2261cf31b2c2dfd628fa1fb00db97270f": --storage-opt is supported only for overlay over + xfs or ext4 with 'pquota' mount option" + ``` + +3. 限制额度的说明。 + 1. 限制的额度大于isulad的root所在分区的size时,在容器内用df看到的文件系统的额度是isulad的root所在分区的size,而不是设置的限额。 + 2. --storage-opt size=0代表不限制,且设置值不能小于4096。size的精度为1个字节,如果指定精度含小数个字节,小数部分被忽略,如指定size=0.1实际等同于size=0不限制。(受计算机存储浮点数精度的限制,即0.999999999999999999999999999与1是等价的,具体的9的个数不同计算机可能存在差异,故设置4095.999999999999999999999999999与4096等价,其它情况类似),注意isula inspect显示原始命令行指定形式,如果含小数字节,需自行忽略小数部分。 + 3. 限制的额度过小时,比如--storage-opt size=4k,可能会导致容器无法启动,因为启动容器本身需要创建一些文件。 + 4. 上一次启动isulad时,isulad的root所在分区挂载时加了-o prjquota选项,这次启动时不加,那么上一次启动中创建的带quota的容器的设置值不生效。 + 5. daemon端配额--storage-opt overlay2.basesize,其取值范围与--storage-opt size相同。 + +4. 指定storage-opt为4k时,轻量级容器启动与docker有差异 + + 使用选项 storage-opt size=4k 和镜像 rnd-dockerhub.huawei.com/official/ubuntu-arm64:latest 运行容器。 + + docker启动失败。 + + ``` + # docker run -itd --storage-opt size=4k rnd-dockerhub.huawei.com/official/ubuntu-arm64:latest + docker: Error response from daemon: symlink /proc/mounts /var/lib/docker/overlay2/e6e12701db1a488636c881b44109a807e187b8db51a50015db34a131294fcf70-init/merged/etc/mtab: disk quota exceeded. + See 'docker run --help'. + ``` + + 轻量级容器不报错,正常启动 + + ``` + # isula run -itd --storage-opt size=4k rnd-dockerhub.huawei.com/official/ubuntu-arm64:latest + 636480b1fc2cf8ac895f46e77d86439fe2b359a1ff78486ae81c18d089bbd728 + # isula ps + STATUS PID IMAGE COMMAND EXIT_CODE RESTART_COUNT STARTAT FINISHAT RUNTIME ID NAMES + running 17609 rnd-dockerhub.huawei.com/official/ubuntu-arm64:latest /bin/bash 0 0 2 seconds ago - lcr 636480b1fc2c 636480b1fc2cf8ac895f46e77d86439fe2b359a1ff78486ae81c18d089bbd728 + ``` + + 在启动容器的过程中,如果需要在容器的rootfs路径下创建文件,若镜像本身占用的大小超过4k,且此时的quota设置为4k,则创建文件必定失败。 + + docker在启动容器的过程中,会比isulad创建更多的挂载点,用于挂载host上的某些路径到容器中,如/proc/mounts, /dev/shm等,如果镜像内本身不存在这些文件,则会创建,根据上述原因该操作会导致文件创建失败,因而容器启动失败。 + + 轻量级容器在启动容器过程中,使用默认配置时,挂载点较少,如/proc,或/sys等路径不存在时,才会创建。用例中的镜像rnd-dockerhub.huawei.com/official/ubuntu-arm64:latest本身含有/proc, /sys等,因此整个启动容器的过程中,都不会有新文件或路径生成,故轻量级容器启动过程不会报错。为验证这一过程,当把镜像替换为rnd-dockerhub.huawei.com/official/busybox-aarch64:latest时,由于该镜像内无/proc存在,轻量级容器启动一样会报错。 + + ``` + # isula run -itd --storage-opt size=4k rnd-dockerhub.huawei.com/official/busybox-aarch64:latest + 8e893ab483310350b8caa3b29eca7cd3c94eae55b48bfc82b350b30b17a0aaf4 + Error response from daemon: Start container error: runtime error: 8e893ab483310350b8caa3b29eca7cd3c94eae55b48bfc82b350b30b17a0aaf4:tools/lxc_start.c:main:404 starting container process caused "Failed to setup lxc, + please check the config file." + ``` + +5. 其他说明。 + + 使用限额功能的isulad切换数据盘时,需要保证被切换的数据盘使用\`prjquota\`选项挂载,且/var/lib/isulad/storage/overlay2目录的挂载方式与/var/lib/isulad相同。 + + >![](public_sys-resources/icon-note.gif) **说明:** + >切换数据盘时需要保证/var/lib/isulad/storage/overlay2的挂载点被卸载。 + + +## 限制容器内文件句柄数 + +### 描述 + +可以通过参数限制容器中可以打开的文件句柄数。 + +### 用法 + +isula create/run时使用--files-limit来限制容器中可以打开的文件句柄数。 + +### 参数 + +create/run时指定--files-limit参数。 + + + + + + + + + + + + + + +

参数项

+

参数说明

+

取值范围

+

是否必选

+

--files-limit

+

限制容器中可以打开的文件句柄数。

+

64位整数(int64)。可以为0、负,但不能超过2的63 次方减 1,0、负表示不做限制(max)。

+

由于创建容器的过程中会临时打开一些句柄,所以此值不能设置的太小,不然容器可能不受files limit的限制(如果设置的数小于当前已经打开的句柄数,会导致cgroup文件写不进去),建议大于30。

+

+
+ +### 示例 + +在运行容器时,直接加上--files-limit n 即可,如: + +``` +isula run -ti --files-limit 1024 busybox bash +``` + +### 约束 + +1. 使用--files-limit参数传入一个很小的值,如1,可能导致容器启动失败。 + + ``` + # isula run -itd --files-limit 1 rnd-dockerhub.huawei.com/official/busybox-aarch64 + 004858d9f9ef429b624f3d20f8ba12acfbc8a15bb121c4036de4e5745932eff4 + Error response from daemon: Start container error: Container is not running:004858d9f9ef429b624f3d20f8ba12acfbc8a15bb121c4036de4e5745932eff4 + ``` + + 而docker会启动成功,其files.limit cgroup值为max。 + + ``` + # docker run -itd --files-limit 1 rnd-dockerhub.huawei.com/official/busybox-aarch64 + ef9694bf4d8e803a1c7de5c17f5d829db409e41a530a245edc2e5367708dbbab + # docker exec -it ef96 cat /sys/fs/cgroup/files/files.limit + max + ``` + + 根因是lxc和runc启动过程的原理不一样,lxc创建cgroup子组后先设置files.limit值,再将容器进程的PID写入该子组的cgroup.procs文件,此时该进程已经打开超过1个句柄,因而写入报错导致启动失败。runc创建cgroup子组后先将容器进程的PID写入该子组的cgroup.procs文件,再设置files.limit值,此时由于该子组内的进程已经打开超过1个句柄,因而写入files.limit不会生效,内核也不会报错,容器启动成功。 + + +## 限制容器内可以创建的进程-线程数.md">限制容器内可以创建的进程/线程数 + +### 描述 + +可以通过参数限制容器中能够创建的进程/线程数。 + +### 用法 + +在容器create/run时,使用参数--pids-limit来限制容器中可以创建的进程/线程数。 + +### 参数 + +create/run时指定--pids-limit参数。 + + + + + + + + + + + + + + +

参数项

+

参数说明

+

取值范围

+

是否必选

+

--pids-limit

+

限制容器中可以打开的文件句柄数。

+

64位整数(int64)。可以为0、负,但不能超过2的63 次方减 1,0、负表示不做限制(max)。

+

+
+ +### 示例 + +在运行容器时,直接加上--pids-limit n 即可,如: + +``` +isula run -ti --pids-limit 1024 busybox bash +``` + +### 约束 + +由于创建容器的过程中会临时创建一些进程,所以此值不能设置的太小,不然容器可能起不来,建议大于10。 + +## 配置容器内的ulimit值 + +### 描述 + +可以通过参数控制执行程序的资源。 + +### 用法 + +在容器create/run时配置--ulimit参数,或通过daemon端配置,控制容器中执行程序的资源。 + +### 参数 + +通过两种方法配置ulimit + +1. isula create/run时使用--ulimit =\[:\]来控制shell执行程序的资源。 + + + + + + + + + + + + + + +

参数项

+

参数说明

+

取值范围

+

是否必选

+

--ulimit

+

限制shell执行程序的资源

+

soft/hard是64位整数(int64)。soft取值 <= hard取值,如果仅仅指定了soft的取值,则hard=soft。对于某些类型的资源并不支持负数,详见下表

+

+
+ +2. 通过daemon端参数或配置文件 + + 详见"(命令行参数说明"与"部署方式"的--default-ulimits相关选项。 + + --ulimit可以对以下类型的资源进行限制。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

类型

+

说明

+

取值范围

+

core

+

limits the core file size (KB)

+

64位整数(INT64),无单位。可以为0、负、其中-1表示UNLIMITED,即不做限制,其余的负数会被强制转换为一个大的正整数。

+

cpu

+

max CPU time (MIN)

+

data

+

max data size (KB)

+

fsize

+

maximum filesize (KB)

+

locks

+

max number of file locks the user can hold

+

memlock

+

max locked-in-memory address space (KB)

+

msgqueue

+

max memory used by POSIX message queues (bytes)

+

nice

+

nice priority

+

nproc

+

max number of processes

+

rss

+

max resident set size (KB)

+

rtprio

+

max realtime priority

+

rttime

+

realtime timeout

+

sigpending

+

max number of pending signals

+

stack

+

max stack size (KB)

+

nofile

+

max number of open file descriptors

+

64位整数(int64),无单位。不可以为负,负数被强转为大数,设置时会出现Operation not permitted

+
+ + +### 示例 + +在容器的创建或者运行时,加上--ulimit =\[:\]即可,如: + +``` +isula create/run -tid --ulimit nofile=1024:2048 busybox sh +``` + +### 约束 + +不能在daemon.json和/etc/sysconfig/iSulad文件(或isulad命令行)中同时配置ulimit限制,否则isulad启动会报错。 + diff --git "a/content/zh/docs/Container/\345\274\272\345\210\266\345\201\234\346\255\242\345\256\271\345\231\250.md" "b/content/zh/docs/Container/\345\274\272\345\210\266\345\201\234\346\255\242\345\256\271\345\231\250.md" deleted file mode 100644 index 26c70f3dc11204f0e57ae3f1e8da1b4388391df7..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\274\272\345\210\266\345\201\234\346\255\242\345\256\271\345\231\250.md" +++ /dev/null @@ -1,50 +0,0 @@ -# 强制停止容器 - -## 描述 - -isula kill命令用于强制停止一个或多个运行中的容器。 - -## 用法 - -``` -isula kill [OPTIONS] CONTAINER [CONTAINER...] -``` - -## 参数 - -kill命令支持参数参考下表。 - -**表 1** kill命令参数列表 - - - - - - - - - - - - - - -

命令

-

参数

-

说明

-

kill

-

-H, --host

-

指定要连接的iSulad socket文件路径

-

-s, --signal

-

发送给容器的信号

-
- -## 示例 - -杀掉一个容器 - -``` -$ isula kill fd7376591a9c3d8ee9a14f5d2c2e5255b02cc44cddaabca82170efd4497510e1 -fd7376591a9c3d8ee9a14f5d2c2e5255b02cc44cddaabca82170efd4497510e1 -``` - diff --git "a/content/zh/docs/Container/\345\274\272\346\235\200docker\347\233\270\345\205\263\345\220\216\345\217\260\350\277\233\347\250\213\347\232\204\345\275\261\345\223\215.md" "b/content/zh/docs/Container/\345\274\272\346\235\200docker\347\233\270\345\205\263\345\220\216\345\217\260\350\277\233\347\250\213\347\232\204\345\275\261\345\223\215.md" deleted file mode 100644 index d9ba6ef42ef76a461d1f031bd2c6cd194144bb92..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\345\274\272\346\235\200docker\347\233\270\345\205\263\345\220\216\345\217\260\350\277\233\347\250\213\347\232\204\345\275\261\345\223\215.md" +++ /dev/null @@ -1,4 +0,0 @@ -# 强制退出docker相关后台进程的影响 - -docker的调用链很长,强制退出docker相关后台进程可能会导致一些数据状态不一致,本章节列举一些强制退出可能导致的问题。 - diff --git "a/content/zh/docs/Container/\346\201\242\345\244\215\345\256\271\345\231\250.md" "b/content/zh/docs/Container/\346\201\242\345\244\215\345\256\271\345\231\250.md" deleted file mode 100644 index b6dc2c0282855cf633734785282e00463e5c92c7..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\346\201\242\345\244\215\345\256\271\345\231\250.md" +++ /dev/null @@ -1,45 +0,0 @@ -# 恢复容器 - -## 描述 - -isula unpause用于恢复容器中所有的进程, 为isula pause的逆过程,仅支持runtime类型为lcr的容器。 - -## 用法 - -``` -isula unpause CONTAINER [CONTAINER...] -``` - -## 参数 - - - - - - - - - - - -

命令

-

参数

-

说明

-

pause

-

-H, --host

-

指定要连接的iSulad socket文件路径

-
- -## 约束限制 - -- 只有状态为paused的容器可以被执行unpause操作 - -## 示例 - -恢复一个被暂停的容器,命令示例如下: - -``` -$ isula unpause 8fe25506fb5883b74c2457f453a960d1ae27a24ee45cdd78fb7426d2022a8bac - 8fe25506fb5883b74c2457f453a960d1ae27a24ee45cdd78fb7426d2022a8bac -``` - diff --git "a/content/zh/docs/Container/\346\214\202\345\215\267\347\256\241\347\220\206.md" "b/content/zh/docs/Container/\346\214\202\345\215\267\347\256\241\347\220\206.md" deleted file mode 100644 index 8653e09103c324ee24ba22474a8422bcaca71691..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\346\214\202\345\215\267\347\256\241\347\220\206.md" +++ /dev/null @@ -1,120 +0,0 @@ -# 挂卷管理 - -## 功能描述 - -普通容器仅支持在创建时指定--volume参数将宿主机的目录/卷挂载到容器实现资源共享,但是无法在容器运行时将挂载到容器中的目录/卷卸载掉,也不支持将宿主机的目录/卷挂载到容器。系统容器可以通过isulad-tools工具实现动态将宿主机的目录/卷挂载到容器,以及将容器中的目录/卷进行卸载。 - -## 命令格式 - -``` -isulad-tools [COMMADN][OPTIONS] [ARG...] -``` - -其中: - -COMMAND:路由管理相关的命令。 - -OPTIONS:路由管理命令支持的选项。 - -container\_id:容器id。 - -ARG:命令对应的参数。 - -## 接口说明 - -**表 1**    - - - - - - - - - - - - - - - - - - - - - - - - -

命令

-

功能说明

-

选项说明

-

参数说明

-

add-path

-

将宿主机文件/目录添加到容器中。

-

-

参数格式为:

-

hostpath:containerpath:permission [hostpath:containerpath:permission ...]

-

其中:

-

hostdevice:卷在主机上的路径。

-

containerdevice:卷在容器中的路径。

-

permission:容器内对挂载路径的操作权限。

-

remove-path

-

将容器中的目录/文件删除,还原到宿主机中。

-

-

参数格式为:hostpath:containerpath [hostpath:containerpath ...]

-

其中:

-

hostdevice:卷在主机上的路径。

-

containerdevice:卷在容器中的路径。

-

list-path

-

列出容器中所有的path目录。

-

支持的选项如下:

-

--pretty:按照json格式输出。

-

-
- -## 约束限制 - -- 挂载目录(add-path)的时候必须要指定绝对路径。 -- 挂载目录(add-path)会在主机上生成/.sharedpath挂载点。 -- 最多可以向单个容器中添加128个volume,超过128后无法添加成功。 -- add-path不能将主机目录覆盖容器中的根目录目录(/),否则会造成功能影响。 - -## 使用示例 - -- 启动一个系统容器,指定hook spec为isulad hook执行配置脚本: - - ``` - [root@localhost ~]# isula run -tid --hook-spec /etc/isulad-tools/hookspec.json --system-container --external-rootfs /root/root-fs none init - e45970a522d1ea0e9cfe382c2b868d92e7b6a55be1dd239947dda1ee55f3c7f7 - ``` - - -- isulad-tools将宿主机某个目录挂载到容器,实现资源共享: - - ``` - [root@localhost ~]# isulad-tools add-path e45970a522d1 /home/test123:/home/test123 - Add path (/home/test123) to container(e45970a522d1,/home/test123) done. - ``` - -- 宿主机目录/home/test123创建一个文件,然后在容器内查看文件是否可以访问: - - ``` - [root@localhost ~]# echo "hello world" > /home/test123/helloworld - [root@localhost ~]# isula exec e45970a522d1 bash - [root@localhost /]# cat /home/test123/helloworld - hello world - ``` - -- isulad-tools将挂载目录从容器内删除: - - ``` - [root@localhost ~]# isulad-tools remove-path e45970a522d1 /home/test123:/home/test123 - Remove path (/home/test123) from container(e45970a522d1,/home/test123) done - [root@localhost ~]# isula exec e45970a522d1 bash - [root@localhost /]# ls /home/test123/helloworld - ls: cannot access '/home/test123/helloworld': No such file or directory - ``` - - diff --git "a/content/zh/docs/Container/\346\214\207\345\256\232rootfs\345\210\233\345\273\272\345\256\271\345\231\250.md" "b/content/zh/docs/Container/\346\214\207\345\256\232rootfs\345\210\233\345\273\272\345\256\271\345\231\250.md" index 534d94d05748a09a3ba0e43d0840906f59ed7967..7a5ab73002b37ece92515761b5b5742557ae6443 100644 --- "a/content/zh/docs/Container/\346\214\207\345\256\232rootfs\345\210\233\345\273\272\345\256\271\345\231\250.md" +++ "b/content/zh/docs/Container/\346\214\207\345\256\232rootfs\345\210\233\345\273\272\345\256\271\345\231\250.md" @@ -1,10 +1,10 @@ -# 指定rootfs创建容器 +# 指定rootfs创建容器 -## 功能描述 +## 功能描述 -系统容器不同于普通容器,普通容器需要指定一个容器镜像来启动,而系统容器通过参数 --external-rootfs 指定一个本地的根文件系统rootfs(Root File System)来启动,rootfs包含了容器运行时依赖的操作系统环境。 +系统容器不同于普通容器,普通容器需要指定一个容器镜像来启动,而系统容器通过参数 \--external-rootfs 指定一个本地的根文件系统rootfs(Root File System)来启动,rootfs包含了容器运行时依赖的操作系统环境。 -## 参数说明 +## 参数说明

命令

@@ -25,7 +25,7 @@
-## 约束限制 +## 约束限制 - 参数--external-rootfs指定的rootfs目录必须为绝对路径,不能为相对路径。 - 参数--external-rootfs指定的rootfs目录必须为一个完整运行的操作系统环境,否则容器会启动失败。 @@ -33,7 +33,7 @@ - 不支持在x86环境上运行基于arm rootfs的容器,也不支持在arm环境上运行基于x86 rootfs的容器。 - 同一份rootfs,不建议启动多个容器实例,即同一份rootfs只供一个生命周期内的容器实例使用。 -## 使用示例 +## 使用示例 假设本地rootfs的路径为/root/myrootfs,那么启动一个系统容器的命令如下: diff --git "a/content/zh/docs/Container/\346\216\245\345\205\245\345\256\271\345\231\250.md" "b/content/zh/docs/Container/\346\216\245\345\205\245\345\256\271\345\231\250.md" deleted file mode 100644 index 30f264f1f45f63e13414516b2052450bd8ae7701..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\346\216\245\345\205\245\345\256\271\345\231\250.md" +++ /dev/null @@ -1,61 +0,0 @@ -# 接入容器 - -## 描述 - -isula attach命令用于将当前终端的标准输入、标准输出和标准错误连接到正在运行的容器。仅支持runtime类型为lcr的容器。 - -## 用法 - -``` -isula attach [OPTIONS] CONTAINER -``` - -## 参数 - -attach命令支持参数参考下表。 - -**表 1** attach命令参数列表 - - - - - - - - - - - - - - - - - - -

命令

-

参数

-

说明

-

attach

-

--help

-

打印帮助信息

-

-H, --host

-

指定要连接的iSulad socket文件路径

-

-D, --debug

-

开启debug模式

-
- -## 约束限制 - -- 原生docker attach容器会直接进入容器,而isulad attach容器后需要敲一个回车才进入。 - -## 示例 - -接入一个运行状态的容器 - -``` -$ isula attach fd7376591a9c3d8ee9a14f5d2c2e5255b02cc44cddaabca82170efd4497510e1 -/ # -/ # -``` - diff --git "a/content/zh/docs/Container/\346\216\245\345\217\243-19.md" "b/content/zh/docs/Container/\346\216\245\345\217\243-19.md" deleted file mode 100644 index 59e3adb4acb2ea4a6d166baefd4c3fd276aeabb8..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\346\216\245\345\217\243-19.md" +++ /dev/null @@ -1,16 +0,0 @@ -# 接口 - -isulad和isula都提供了hook的接口,isulad提供了默认的hook配置,会作用于所有容器;而isula提供的hook接口,只会作用于当前创建的容器。 - -isulad提供的默认OCI hooks配置: - -- 通过/etc/isulad/daemon.json配置文件的hook-spec配置项设置hook配置的文件路径:"hook-spec": "/etc/default/isulad/hooks/default.json"。 -- 通过isulad --hook-spec参数设置hook配置的文件路径。 - -isula提供的OCI hooks配置: - -- isula create --hook-spec:指定hook配置的json文件的路径。 -- isula run --hook-spec:指定hook配置的json文件的路径。 - -run的配置其实也是在create阶段生效了。 - diff --git "a/content/zh/docs/Container/\346\216\245\345\217\243-2.md" "b/content/zh/docs/Container/\346\216\245\345\217\243-2.md" deleted file mode 100644 index 528b6278f6963e76dcc716e8167f5ab0c69ab6fa..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\346\216\245\345\217\243-2.md" +++ /dev/null @@ -1,1654 +0,0 @@ -# 接口 - -各接口中可能用到的参数清单如下,部分参数暂不支持配置,已在配置中标出。 - -## 接口参数列表 - -- **DNSConfig** - - 配置sandbox的DNS服务器和搜索域 - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

repeated string servers

-

集群的DNS服务器列表

-

repeated string searches

-

集群的DNS搜索域列表

-

repeated string options

-

DNS可选项列表,参考https://linux.die.net/man/5/resolv.conf

-
- -- **Protocol** - - 协议的enum值列表 - - - - - - - - - - - - - -

参数成员

-

描述

-

TCP = 0↵

-

TCP协议

-

UDP = 1

-

UDP协议

-
- -- **PortMapping** - - 指定sandbox的端口映射配置 - - - - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

Protocol protocol

-

端口映射使用的协议

-

int32 container_port

-

容器内的端口号

-

int32 host_port

-

主机上的端口号

-

string host_ip

-

主机IP地址

-
- -- **MountPropagation** - - 挂载传播属性的enum列表 - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

PROPAGATION_PRIVATE = 0

-

无挂载传播属性,即linux中的private

-

PROPAGATION_HOST_TO_CONTAINER = 1

-

挂载属性能从host传播到容器中,即linux中的rslave

-

PROPAGATION_BIDIRECTIONAL = 2

-

挂载属性能在host和容器中双向传播,即linux中的rshared

-
- -- **Mount** - - Mount指定host上的一个挂载卷挂载到容器中(只支持文件和文件夹\) - - - - - - - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

string container_path

-

容器中的路径

-

string host_path

-

主机上的路径

-

bool readonly

-

是否配置在容器中是只读的, 默认值: false

-

bool selinux_relabel

-

是否设置SELinux标签(不支持配置)

-

MountPropagation propagation

-

挂载传播属性配置(取值0/1/2,分别对应private/rslave/rshared传播属性) 默认值:0

-
- - -- **NamespaceOption** - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

bool host_network

-

是否使用host的网络命名空间

-

bool host_pid

-

是否使用host的PID命名空间

-

bool host_ipc

-

是否使用host的IPC命名空间

-
- -- **Capability** - - 包含待添加与待删除的权能信息 - - - - - - - - - - - - - -

参数成员

-

描述

-

repeated string add_capabilities

-

待新增的权能

-

repeated string drop_capabilities

-

待删除的权能

-
- - -- **Int64Value** - - int64类型的封装 - - - - - - - - - - -

参数成员

-

描述

-

int64 value

-

实际的int64值

-
- -- **UInt64Value** - - uint64类型的封装 - - - - - - - - - - -

参数成员

-

描述

-

uint64 value

-

实际的uint64值

-
- -- **LinuxSandboxSecurityContext** - - 配置sandbox的linux安全选项。 - - 注意,这些安全选项不会应用到sandbox中的容器中,也可能不适用于没有任何running进程的sandbox - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

NamespaceOption namespace_options

-

配置sandbox的命名空间选项

-

SELinuxOption selinux_options

-

配置SELinux选项(不支持)

-

Int64Value run_as_user

-

配置sandbox中进程的uid

-

bool readonly_rootfs

-

配置sandbox的根文件系统是否只读

-

repeated int64 supplemental_groups

-

配置除主GID之外的sandbox的1号进程用户组信息

-

bool privileged

-

配置sandbox是否为特权容器

-

string seccomp_profile_path

-

seccomp配置文件路径,有效值为:

-

// unconfined: 不配置seccomp

-

// localhost/<配置文件的全路径>: 安装在系统上的配置文件路径

-

// <配置文件的全路径>: 配置文件全路径

-

// 默认不配置,即unconfined。

-
- -- **LinuxPodSandboxConfig** - - 设定和Linux主机及容器相关的一些配置 - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

string cgroup_parent

-

sandbox的cgroup父路径,runtime可根据实际情况使用cgroupfs或systemd的语法。(不支持配置)

-

LinuxSandboxSecurityContext security_context

-

sandbox的安全属性

-

map<string, string> sysctls

-

sandbox的linux sysctls配置

-
- -- **PodSandboxMetadata** - - Sandbox元数据包含构建sandbox名称的所有信息,鼓励容器运行时在用户界面中公开这些元数据以获得更好的用户体验,例如,运行时可以根据元数据生成sandbox的唯一命名。 - - - - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

string name

-

sandbox的名称

-

string uid

-

sandbox的UID

-

string namespace

-

sandbox的命名空间

-

uint32 attempt

-

尝试创建sandbox的次数,默认为0

-
- -- **PodSandboxConfig** - - 包含创建sandbox的所有必选和可选配置信息 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

PodSandboxMetadata metadata

-

sandbox的元数据,这项信息唯一标识一个sandbox,runtime必须利用此信息确保操作正确,runtime也可以根据此信息来改善用户体验,例如构建可读的sandbox名称。

-

string hostname

-

sandbox的hostname

-

string log_directory

-

配置sandbox内的容器的日志文件所存储的文件夹

-

DNSConfig dns_config

-

sandbox的DNS配置

-

repeated PortMapping port_mappings

-

sandbox的端口映射

-

map<string, string> labels

-

可用于标识单个或一系列sandbox的键值对

-

map<string, string> annotations

-

存储任意信息的键值对,这些值是不可更改的,且能够利用PodSandboxStatus接口查询

-

LinuxPodSandboxConfig linux

-

与linux主机相关的可选项

-
- -- **PodSandboxNetworkStatus** - - 描述sandbox的网络状态 - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

string ip

-

sandbox的ip地址

-

string name

-

sandbox内的网络接口名

-

string network

-

附加网络的名称

-
- -- **Namespace** - - 命名空间选项 - - - - - - - - - - -

参数成员

-

描述

-

NamespaceOption options

-

Linux 命名空间选项

-
- -- **LinuxPodSandboxStatus** - - 描述Linux sandbox的状态 - - - - - - - - - - -

参数成员

-

描述

-

Namespace namespaces

-

sandbox命名空间

-
- -- **PodSandboxState** - - sandbox状态值的enum数据 - - - - - - - - - - - - - -

参数成员

-

描述

-

SANDBOX_READY = 0

-

sandbox处于ready状态

-

SANDBOX_NOTREADY = 1

-

sandbox处于非ready状态

-
- -- **PodSandboxStatus** - - 描述Podsandbox的状态信息 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

string id

-

sandbox的ID

-

PodSandboxMetadata metadata

-

sandbox的元数据

-

PodSandboxState state

-

sandbox的状态值

-

int64 created_at

-

sandbox的创建时间戳,单位纳秒

-

repeated PodSandboxNetworkStatus networks

-

sandbox的多平面网络状态

-

LinuxPodSandboxStatus linux

-

Linux规范的sandbox状态

-

map<string, string> labels

-

可用于标识单个或一系列sandbox的键值对

-

map<string, string> annotations

-

存储任意信息的键值对,这些值是不可被runtime更改的

-
- -- **PodSandboxStateValue** - - 对[PodSandboxState](#zh-cn_topic_0182207110_li1818214574195)的封装 - - - - - - - - - - -

参数成员

-

描述

-

PodSandboxState state

-

sandbox的状态值

-
- -- **PodSandboxFilter** - - 用于列出sandbox时添加过滤条件,多个条件取交集显示 - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

string id

-

sandbox的ID

-

PodSandboxStateValue state

-

sandbox的状态

-

map<string, string> label_selector

-

sandbox的labels,label只支持完全匹配,不支持正则匹配

-
- -- **PodSandbox** - - 包含最小化描述一个sandbox的数据 - - - - - - - - - - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

string id

-

sandbox的ID

-

PodSandboxMetadata metadata

-

sandbox的元数据

-

PodSandboxState state

-

sandbox的状态值

-

int64 created_at

-

sandbox的创建时间戳,单位纳秒

-

map<string, string> labels

-

可用于标识单个或一系列sandbox的键值对

-

map<string, string> annotations

-

存储任意信息的键值对,这些值是不可被runtime更改的

-
- -- **KeyValue** - - 键值对的封装 - - - - - - - - - - - - - -

参数成员

-

描述

-

string key

-

-

string value

-

-
- -- **SELinuxOption** - - 应用于容器的SELinux标签 - - - - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

string user

-

用户

-

string role

-

角色

-

string type

-

类型

-

string level

-

级别

-
- -- **ContainerMetadata** - - Container元数据包含构建container名称的所有信息,鼓励容器运行时在用户界面中公开这些元数据以获得更好的用户体验,例如,运行时可以根据元数据生成container的唯一命名。 - - - - - - - - - - - - - -

参数成员

-

描述

-

string name

-

container的名称

-

uint32 attempt

-

尝试创建container的次数,默认为0

-
- -- **ContainerState** - - 容器状态值的enum列表 - - - - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

CONTAINER_CREATED = 0

-

container创建完成

-

CONTAINER_RUNNING = 1

-

container处于运行状态

-

CONTAINER_EXITED = 2

-

container处于退出状态

-

CONTAINER_UNKNOWN = 3

-

未知的容器状态

-
- -- **ContainerStateValue** - - 封装[ContainerState](#zh-cn_topic_0182207110_li65182518309)的数据结构 - - - - - - - - - - -

参数成员

-

描述

-

ContainerState state

-

容器状态值

-
- -- **ContainerFilter** - - 用于列出container时添加过滤条件,多个条件取交集显示 - - - - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

string id

-

container的ID

-

PodSandboxStateValue state

-

container的状态

-

string pod_sandbox_id

-

sandbox的ID

-

map<string, string> label_selector

-

container的labels,label只支持完全匹配,不支持正则匹配

-
- -- **LinuxContainerSecurityContext** - - 指定应用于容器的安全配置 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

Capability capabilities

-

新增或去除的权能

-

bool privileged

-

指定容器是否未特权模式, 默认值:false

-

NamespaceOption namespace_options

-

指定容器的namespace选项

-

SELinuxOption selinux_options

-

SELinux context(可选配置项) 暂不支持

-

Int64Value run_as_user

-

运行容器进程的UID。 一次只能指定run_as_user与run_as_username其中之一,run_as_username优先生效

-

string run_as_username

-

运行容器进程的用户名。 如果指定,用户必须存在于容器映像中(即在映像内的/etc/passwd中),并由运行时在那里解析; 否则,运行时必须出错

-

bool readonly_rootfs

-

设置容器中根文件系统是否为只读 默认值由config.json配置

-

repeated int64 supplemental_groups

-

容器运行的除主GID外首进程组的列表

-

string apparmor_profile

-

容器的AppArmor配置文件 暂不支持

-

string seccomp_profile_path

-

容器的seccomp配置文件路径

-

bool no_new_privs

-

是否在容器上设置no_new_privs的标志

-
- -- **LinuxContainerResources** - - 指定Linux容器资源的特定配置 - - - - - - - - - - - - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

int64 cpu_period

-

CPU CFS(完全公平调度程序)周期。 默认值:0

-

int64 cpu_quota

-

CPU CFS(完全公平调度程序)配额。 默认值:0

-

int64 cpu_shares

-

所占CPU份额(相对于其他容器的相对权重)。 默认值:0

-

int64 memory_limit_in_bytes

-

内存限制(字节)。 默认值:0

-

int64 oom_score_adj

-

OOMScoreAdj用于调整oom-killer。 默认值:0

-

string cpuset_cpus

-

指定容器使用的CPU核心。 默认值:“”

-

string cpuset_mems

-

指定容器使用的内存节点。 默认值:“”

-
- -- **Image** - - Image信息描述一个镜像的基本数据。 - - - - - - - - - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

string id

-

镜像ID

-

repeated string repo_tags

-

镜像tag 名称 repo_tags

-

repeated string repo_digests

-

镜像digest信息

-

uint64 size

-

镜像大小

-

Int64Value uid

-

镜像默认用户UID

-

string username

-

镜像默认用户名称

-
- -- **ImageSpec** - - 表示镜像的内部数据结构,当前,ImageSpec只封装容器镜像名称 - - - - - - - - - - -

参数成员

-

描述

-

string image

-

容器镜像名

-
- -- **StorageIdentifier** - - 唯一定义storage的标识 - - - - - - - - - - -

参数成员

-

描述

-

string uuid

-

设备的UUID

-
- -- **FilesystemUsage** - - - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

int64 timestamp

-

收集文件系统信息时的时间戳

-

StorageIdentifier storage_id

-

存储镜像的文件系统UUID

-

UInt64Value used_bytes

-

存储镜像元数据的大小

-

UInt64Value inodes_used

-

存储镜像元数据的inodes个数

-
- -- **AuthConfig** - - - - - - - - - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

string username

-

下载镜像使用的用户名

-

string password

-

下载镜像使用的密码

-

string auth

-

下载镜像时使用的认证信息,base64编码

-

string server_address

-

下载镜像的服务器地址,暂不支持

-

string identity_token

-

用于与镜像仓库鉴权的令牌信息,暂不支持

-

string registry_token

-

用于与镜像仓库交互的令牌信息,暂不支持

-
- -- **Container** - - 用于描述容器信息,例如ID, 状态等。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

string id

-

container的ID

-

string pod_sandbox_id

-

该容器所属的sandbox的ID

-

ContainerMetadata metadata

-

container的元数据

-

ImageSpec image

-

镜像规格

-

string image_ref

-

代表容器使用的镜像,对大多数runtime来产,这是一个image ID值

-

ContainerState state

-

container的状态

-

int64 created_at

-

container的创建时间戳,单位为纳秒

-

map<string, string> labels

-

可用于标识单个或一系列container的键值对

-

map<string, string> annotations

-

存储任意信息的键值对,这些值是不可被runtime更改的

-
- -- **ContainerStatus** - - 用于描述容器状态信息 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

string id

-

container的ID

-

ContainerMetadata metadata

-

container的元数据

-

ContainerState state

-

container的状态

-

int64 created_at

-

container的创建时间戳,单位为纳秒

-

int64 started_at

-

container启动时的时间戳,单位为纳秒

-

int64 finished_at

-

container退出时的时间戳,单位为纳秒

-

int32 exit_code

-

容器退出码

-

ImageSpec image

-

镜像规格

-

string image_ref

-

代表容器使用的镜像,对大多数runtime来产,这是一个image ID值

-

string reason

-

简要描述为什么容器处于当前状态

-

string message

-

易于人工阅读的信息,用于表述容器处于当前状态的原因

-

map<string, string> labels

-

可用于标识单个或一系列container的键值对

-

map<string, string> annotations

-

存储任意信息的键值对,这些值是不可被runtime更改的

-

repeated Mount mounts

-

容器的挂载点信息

-

string log_path

-

容器日志文件路径,该文件位于PodSandboxConfig中配置的log_directory文件夹下

-
- -- **ContainerStatsFilter** - - 用于列出container stats时添加过滤条件,多个条件取交集显示 - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

string id

-

container的ID

-

string pod_sandbox_id

-

sandbox的ID

-

map<string, string> label_selector

-

container的labels,label只支持完全匹配,不支持正则匹配

-
- -- **ContainerStats** - - 用于列出container stats时添加过滤条件,多个条件取交集显示 - - - - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

ContainerAttributes attributes

-

容器的信息

-

CpuUsage cpu

-

CPU使用情况

-

MemoryUsage memory

-

内存使用情况

-

FilesystemUsage writable_layer

-

可写层使用情况

-
- -- **ContainerAttributes** - - 列出container的基本信息 - - - - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

string id

-

容器的ID

-

ContainerMetadata metadata

-

容器的metadata

-

map<string,string> labels

-

可用于标识单个或一系列container的键值对

-

map<string,string> annotations

-

存储任意信息的键值对,这些值是不可被runtime更改的

-
- -- **CpuUsage** - - 列出container的CPU使用信息 - - - - - - - - - - - - - -

参数成员

-

描述

-

int64 timestamp

-

时间戳

-

UInt64Value usage_core_nano_seconds

-

CPU的使用值,单位/纳秒

-
- -- **MemoryUsage** - - 列出container的内存使用信息 - - - - - - - - - - - - - -

参数成员

-

描述

-

int64 timestamp

-

时间戳

-

UInt64Value working_set_bytes

-

内存的使用值

-
- -- **FilesystemUsage** - - 列出container的读写层信息 - - - - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

int64 timestamp

-

时间戳

-

StorageIdentifier storage_id

-

可写层目录

-

UInt64Value used_bytes

-

镜像在可写层的占用字节

-

UInt64Value inodes_used

-

镜像在可写层的占用inode数

-
- -- **Device** - - 指定待挂载至容器的主机卷 - - - - - - - - - - - - - - - -

参数成员

-

描述

-

string container_path

-

容器内的挂载路径

-

string host_path

-

主机上的挂载路径

-

string permissions

-

设备的Cgroup权限,(r允许容器从指定的设备读取; w允许容器从指定的设备写入; m允许容器创建尚不存在的设备文件)

-
- -- **LinuxContainerConfig** - - 包含特定于Linux平台的配置 - - - - - - - - - - - - -

参数成员

-

描述

-

LinuxContainerResources resources

-

容器的资源规范

-

LinuxContainerSecurityContext security_context

-

容器的Linux容器安全配置

-
- -- **ContainerConfig** - - 包含用于创建容器的所有必需和可选字段 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

ContainerMetadata metadata

-

容器的元数据。 此信息将唯一标识容器,运行时应利用此信息来确保正确操作。 运行时也可以使用此信息来提升UX(用户体检设计),例如通过构造可读名称。(必选)

-

ImageSpec image

-

容器使用的镜像 (必选)

-

repeated string command

-

待执行的命令 默认值: "/bin/sh"

-

repeated string args

-

待执行命令的参数

-

string working_dir

-

命令执行的当前工作路径

-

repeated KeyValue envs

-

在容器中配置的环境变量

-

repeated Mount mounts

-

待在容器中挂载的挂载点信息

-

repeated Device devices

-

待在容器中映射的设备信息

-

map<string, string> labels

-

可用于索引和选择单个资源的键值对。

-

map<string, string> annotations

-

可用于存储和检索任意元数据的非结构化键值映射。

-

string log_path

-

相对于PodSandboxConfig.LogDirectory的路径,用于存储容器主机上的日志(STDOUT和STDERR)。

-

bool stdin

-

是否打开容器的stdin

-

bool stdin_once

-

当某次连接stdin的数据流断开时,是否立即断开其他与stdin连接的数据流(暂不支持

-

bool tty

-

是否使用伪终端连接容器的stdio

-

LinuxContainerConfig linux

-

linux系统上容器的特定配置信息

-
- -- **NetworkConfig** - - Runtime的网络配置 - - - - - - - - - -

参数成员

-

描述

-

string pod_cidr

-

Pod IP 地址使用的CIDR

-
- -- **RuntimeConfig** - - Runtime的网络配置 - - - - - - - - - -

参数成员

-

描述

-

NetworkConfig network_config

-

Runtime的网络配置

-
- -- **RuntimeCondition** - - 描述runtime的状态信息 - - - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

string type

-

Runtime状态的类型

-

bool status

-

Runtime状态

-

string reason

-

简要描述runtime状态变化的原因

-

string message

-

具备可阅读性的信息表明runtime状态变化的原因

-
- -- **RuntimeStatus** - - Runtime的状态 - - - - - - - - - -

参数成员

-

描述

-

repeated RuntimeCondition conditions

-

描述当前runtime状态的列表

-
- - - diff --git "a/content/zh/docs/Container/\346\216\245\345\217\243.md" "b/content/zh/docs/Container/\346\216\245\345\217\243.md" deleted file mode 100644 index 8a875b48496f3b55759dffa7ecdac06bbd545178..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\346\216\245\345\217\243.md" +++ /dev/null @@ -1,72 +0,0 @@ -# 接口 - -CNI对用户可见的接口,主要涉及CNI网络配置和Pod配置中CNI网络相关的项。 - -- CNI网络配置相关的接口,主要是isulad指定CNI网络配置文件所在路径、CNI网络插件二进制文件所在的路径以及使用的网络模式。详情请参见[表1 CNI网络配置接口](#zh-cn_topic_0183259146_table18221919589)。 -- Pod配置中CNI网络相关的项,主要是设置Pod加入的附加CNI网络列表,默认情况Pod只会加入到default CNI网络平面中,可以通过该配置把Pod加入到多个CNI网络平面中。 - -**表 1** CNI网络配置接口 - - - - - - - - - - - - - - - - - - - - - - - - -

  

-

命令行

-

配置文件

-

说明

-

设置CNI网络插件二进制文件所在路径

-

--cni-bin-dir

-

"cni-bin-dir": "",

-

默认为/opt/cni/bin

-

设置CNI网络配置文件所在路径

-

--cni-conf-dir

-

"cni-conf-dir": "",

-

系统会遍历目录下面所有后缀名为".conf"、".conflist"和 ".json"的文件。默认为/etc/cni/net.d

-

指定网络模式

-

--network-plugin

-

"network-plugin": "",

-

指定网络插件,默认为空字符,表示无网络配置,创建的sandbox只有loop网卡。支持cni和空字符,其他非法值会导致isulad启动失败。

-
- -附加CNI网络配置方式: - -在Pod的配置文件的"annotations"中,增加一项"network.alpha.kubernetes.io/network": "网络平面配置"; - -网络平面配置为json格式,包含两项: - -- name:指定CNI网络平面的名字 -- interface:指定网络接口的名字 - -附件CNI网络配置方式示例如下: - -``` -"annotations" : { - "network.alpha.kubernetes.io/network": "{\"name\": \"mynet\", \"interface\": \"eth1\"}" - } -``` - -   - - - - diff --git "a/content/zh/docs/Container/\346\217\217\350\277\260-1.md" "b/content/zh/docs/Container/\346\217\217\350\277\260-1.md" deleted file mode 100644 index d4046d5d487623f8a89f6d63cc24b49603a8ee53..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\346\217\217\350\277\260-1.md" +++ /dev/null @@ -1,15 +0,0 @@ -# 描述 - -CRI API 接口是由kubernetes 推出的容器运行时接口,CRI定义了容器和镜像的服务接口。ISulad使用CRI接口,实现和kubernetes 的对接。 - -因为容器运行时与镜像的生命周期是彼此隔离的,因此需要定义两个服务。该接口使用[Protocol Buffer](https://developers.google.com/protocol-buffers/)定义,基于[gRPC](https://grpc.io/)。 - -当前实现CRI版本为v1alpha1版本,官方API描述文件如下: - -[https://github.com/kubernetes/kubernetes/blob/release-1.14/pkg/kubelet/apis/cri/runtime/v1alpha2/api.proto](https://github.com/kubernetes/kubernetes/blob/release-1.14/pkg/kubelet/apis/cri/runtime/v1alpha2/api.proto), - -ISulad使用的为pass使用的1.14版本API描述文件,与官方API略有出入,以本文档描述的接口为准。 - ->![](public_sys-resources/icon-note.gif) **说明:** ->CRI接口websocket流式服务,服务端侦听地址为127.0.0.1,端口为10350,端口可通过命令行--websocket-server-listening-port参数接口或者daemon.json配置文件进行配置。 - diff --git "a/content/zh/docs/Container/\346\217\217\350\277\260-18.md" "b/content/zh/docs/Container/\346\217\217\350\277\260-18.md" deleted file mode 100644 index 7031017c6efb87225e7d71ee2d722313cc476a92..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\346\217\217\350\277\260-18.md" +++ /dev/null @@ -1,47 +0,0 @@ -# 描述 - -支持在容器的生命周期中,运行OCI标准hooks。包括三种类型的hooks: - -- prestart hook:在执行isula start命令之后,而在容器的1号进程启动之前,被执行。 -- poststart hook:在容器1号进程启动之后,而在isula start命令返回之前,被执行。 -- poststop hook:在容器被停止之后,但是在停止命令返回之前,被执行。 - -OCI hooks的配置格式规范如下: - -- path:格式是字符串,必须项,必须为绝对路径,指定的文件必须有可执行权限。 -- args:格式是字符串数组,可选项,语义和execv的args一致。 -- env:格式是字符串数组,可选项,语义和环境变量一致,内容为键值对,如:"PATH=/usr/bin"。 -- timeout:格式是整数,可选项,必须大于0,表示钩子执行的超时时间。如果钩子进程运行时间超过配置的时间,那么钩子进程会被杀死。 - -hook的配置为json格式,一般存放在json结尾的文件中,示例如下: - -``` -{ - "prestart": [ - { - "path": "/usr/bin/echo", - "args": ["arg1", "arg2"], - "env": [ "key1=value1"], - "timeout": 30 - }, - { - "path": "/usr/bin/ls", - "args": ["/tmp"] - } - ], - "poststart": [ - { - "path": "/usr/bin/ls", - "args": ["/tmp"], - "timeout": 5 - } - ], - "poststop": [ - { - "path": "/tmp/cleanup.sh", - "args": ["cleanup.sh", "-f"] - } - ] -} -``` - diff --git "a/content/zh/docs/Container/\346\217\217\350\277\260.md" "b/content/zh/docs/Container/\346\217\217\350\277\260.md" deleted file mode 100644 index 41399b2ff659bd898e2df3590bc449ef3c6f11e5..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\346\217\217\350\277\260.md" +++ /dev/null @@ -1,4 +0,0 @@ -# 描述 - -实现CRI接口对接CNI网络的能力,包括CNI网络配置文件的解析、CNI网络的加入和退出。Pod需要支持网络时,例如通过canal等容器网络插件提供网络能力,那么需要CRI接口能够和canal实现对接,并且调用canal的接口,为Pod提供网络能力。 - diff --git "a/content/zh/docs/Container/\346\224\257\346\214\201CNI\347\275\221\347\273\234.md" "b/content/zh/docs/Container/\346\224\257\346\214\201CNI\347\275\221\347\273\234.md" index a7fe955cda7a7d9019b84cd36fb2f986e6b31a7f..81b474ba605da46c5599207ce8410071e86b6217 100644 --- "a/content/zh/docs/Container/\346\224\257\346\214\201CNI\347\275\221\347\273\234.md" +++ "b/content/zh/docs/Container/\346\224\257\346\214\201CNI\347\275\221\347\273\234.md" @@ -1,2 +1,130 @@ -# 支持CNI网络 - +# 支持CNI网络 + + +- [支持CNI网络](#支持CNI网络) + - [描述](#描述) + - [接口](#接口) + - [CNI网络配置说明](#CNI网络配置说明) + - [加入CNI网络列表](#加入CNI网络列表) + - [退出CNI网络列表](#退出CNI网络列表) + - [使用限制](#使用限制) + + +## 描述 + +实现CRI接口对接CNI网络的能力,包括CNI网络配置文件的解析、CNI网络的加入和退出。Pod需要支持网络时,例如通过canal等容器网络插件提供网络能力,那么需要CRI接口能够和canal实现对接,并且调用canal的接口,为Pod提供网络能力。 + +## 接口 + +CNI对用户可见的接口,主要涉及CNI网络配置和Pod配置中CNI网络相关的项。 + +- CNI网络配置相关的接口,主要是isulad指定CNI网络配置文件所在路径、CNI网络插件二进制文件所在的路径以及使用的网络模式。详情请参见[表1 CNI网络配置接口](#zh-cn_topic_0183259146_table18221919589)。 +- Pod配置中CNI网络相关的项,主要是设置Pod加入的附加CNI网络列表,默认情况Pod只会加入到default CNI网络平面中,可以通过该配置把Pod加入到多个CNI网络平面中。 + +**表 1** CNI网络配置接口 + + + + + + + + + + + + + + + + + + + + + + + + +

  

+

命令行

+

配置文件

+

说明

+

设置CNI网络插件二进制文件所在路径

+

--cni-bin-dir

+

"cni-bin-dir": "",

+

默认为/opt/cni/bin

+

设置CNI网络配置文件所在路径

+

--cni-conf-dir

+

"cni-conf-dir": "",

+

系统会遍历目录下面所有后缀名为".conf"、".conflist"和 ".json"的文件。默认为/etc/cni/net.d

+

指定网络模式

+

--network-plugin

+

"network-plugin": "",

+

指定网络插件,默认为空字符,表示无网络配置,创建的sandbox只有loop网卡。支持cni和空字符,其他非法值会导致isulad启动失败。

+
+ +附加CNI网络配置方式: + +在Pod的配置文件的"annotations"中,增加一项"network.alpha.kubernetes.io/network": "网络平面配置"; + +网络平面配置为json格式,包含两项: + +- name:指定CNI网络平面的名字 +- interface:指定网络接口的名字 + +附件CNI网络配置方式示例如下: + +``` +"annotations" : { + "network.alpha.kubernetes.io/network": "{\"name\": \"mynet\", \"interface\": \"eth1\"}" + } +``` + +   + + + + +### CNI网络配置说明 + +CNI网络配置包含两种类型,文件格式都为json: + +- 单网络平面配置,以.conf和.json为后缀的文件:具体的配置项请参见"附录 > CNI配置参数" 章节的 "表 CNI单网络配置参数"。 +- 多网络平面配置,以.conflist为后缀的文件:具体的配置项请参见"附录 > CNI配置参数" 章节的 "表3 CNI多网络配置参数"。 + +### 加入CNI网络列表 + +如果iSulad配置了--network-plugin=cni,而且设置了default网络平面配置,那么在启动Pod的时候,会自动把Pod加入到default网络平面。如果在Pod的配置中配置了附加网络配置,那么启动Pod的时候也会把Pod加入到这些附加网络平面中。 + +Pod配置中和网络相关的还有port\_mappings项,用于设置Pod的端口映射关系。配置方式如下: + +``` +"port_mappings":[ + { + "protocol": 1, + "container_port": 80, + "host_port": 8080 + } +] +``` + +- protocal:表示映射使用的协议,支持tcp(用0标识)、udp(用1标识); +- container\_port:表示容器映射出去的port; +- host\_port:表示映射到主机的port。 + +### 退出CNI网络列表 + +StopPodSandbox的时候,会调用退出CNI网络的接口,清理网络相关的资源。 + +>![](public_sys-resources/icon-note.gif) **说明:** +>1. 在调用RemovePodSandbox接口之前,至少要调用一次StopPodSandbox接口 +>2. StopPodSandbox调用CNI接口失败,可能导致的网络资源残留。 + +## 使用限制 + +- cniVersion的版本,当前只支持0.3.0和0.3.1。由于后期可能需要支持0.1.0和0.2.0,错误日志打印时,保留了0.1.0和0.2.0的提示信息。 +- name:必须是小写字符、数字、'-'以及'.'组成; '.'和'-'不能作为首字符和尾字符; 而且长度不超过200个字符。 +- 配置文件个数不超过200个,单个配置文件大小不超过1MB。 +- 扩展之后的参数,需要根据实际网络需求来配置,不需要使用的可选参数可以不写入到netconf.json文件中。 + diff --git "a/content/zh/docs/Container/\346\224\257\346\214\201OCI-hooks.md" "b/content/zh/docs/Container/\346\224\257\346\214\201OCI-hooks.md" index a75f1789f7cfaf5552807c89b7a672442cfd330d..2cbaaf6a36ca2bdf5cb94bc8c17a08c3cd494c71 100644 --- "a/content/zh/docs/Container/\346\224\257\346\214\201OCI-hooks.md" +++ "b/content/zh/docs/Container/\346\224\257\346\214\201OCI-hooks.md" @@ -1,2 +1,81 @@ -# 支持OCI hooks - +# 支持OCI hooks + +## 描述 + +支持在容器的生命周期中,运行OCI标准hooks。包括三种类型的hooks: + +- prestart hook:在执行isula start命令之后,而在容器的1号进程启动之前,被执行。 +- poststart hook:在容器1号进程启动之后,而在isula start命令返回之前,被执行。 +- poststop hook:在容器被停止之后,但是在停止命令返回之前,被执行。 + +OCI hooks的配置格式规范如下: + +- path:格式是字符串,必须项,必须为绝对路径,指定的文件必须有可执行权限。 +- args:格式是字符串数组,可选项,语义和execv的args一致。 +- env:格式是字符串数组,可选项,语义和环境变量一致,内容为键值对,如:"PATH=/usr/bin"。 +- timeout:格式是整数,可选项,必须大于0,表示钩子执行的超时时间。如果钩子进程运行时间超过配置的时间,那么钩子进程会被杀死。 + +hook的配置为json格式,一般存放在json结尾的文件中,示例如下: + +``` +{ + "prestart": [ + { + "path": "/usr/bin/echo", + "args": ["arg1", "arg2"], + "env": [ "key1=value1"], + "timeout": 30 + }, + { + "path": "/usr/bin/ls", + "args": ["/tmp"] + } + ], + "poststart": [ + { + "path": "/usr/bin/ls", + "args": ["/tmp"], + "timeout": 5 + } + ], + "poststop": [ + { + "path": "/tmp/cleanup.sh", + "args": ["cleanup.sh", "-f"] + } + ] +} +``` + +## 接口 + +isulad和isula都提供了hook的接口,isulad提供了默认的hook配置,会作用于所有容器;而isula提供的hook接口,只会作用于当前创建的容器。 + +isulad提供的默认OCI hooks配置: + +- 通过/etc/isulad/daemon.json配置文件的hook-spec配置项设置hook配置的文件路径:"hook-spec": "/etc/default/isulad/hooks/default.json"。 +- 通过isulad --hook-spec参数设置hook配置的文件路径。 + +isula提供的OCI hooks配置: + +- isula create --hook-spec:指定hook配置的json文件的路径。 +- isula run --hook-spec:指定hook配置的json文件的路径。 + +run的配置其实也是在create阶段生效了。 + +## 使用限制 + +- hook-spec指定的路径必须是绝对路径。 +- hook-spec指定的文件必须存在。 +- hook-spec指定的路径对应的必须是普通文本文件,格式为json。 +- hook-spec指定的文件大小不能超过10MB。 +- hooks配置的path字段必须为绝对路径。 +- hooks配置的path字段指定文件必须存在。 +- hooks配置的path字段指定文件必须有可执行权限。 +- hooks配置的path字段指定文件的owner必须是root。 +- hooks配置的path字段指定文件必须只有root有写权限。 +- hooks配置的timeout必须大于0。 + +    + + diff --git "a/content/zh/docs/Container/\346\231\256\351\200\232\347\224\250\346\210\267\345\244\247\351\207\217\351\203\250\347\275\262\345\256\271\345\231\250\345\234\272\346\231\257\344\270\213\347\232\204\351\205\215\347\275\256\346\263\250\346\204\217\344\272\213\351\241\271.md" "b/content/zh/docs/Container/\346\231\256\351\200\232\347\224\250\346\210\267\345\244\247\351\207\217\351\203\250\347\275\262\345\256\271\345\231\250\345\234\272\346\231\257\344\270\213\347\232\204\351\205\215\347\275\256\346\263\250\346\204\217\344\272\213\351\241\271.md" deleted file mode 100644 index 8629bd77465ff67947a172c18621739a733b0571..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\346\231\256\351\200\232\347\224\250\346\210\267\345\244\247\351\207\217\351\203\250\347\275\262\345\256\271\345\231\250\345\234\272\346\231\257\344\270\213\347\232\204\351\205\215\347\275\256\346\263\250\346\204\217\344\272\213\351\241\271.md" +++ /dev/null @@ -1,18 +0,0 @@ -# 普通用户大量部署容器场景下的配置注意事项 - -普通用户在OS主机上能创建的进程数的上限,例如:可以在系统中创建配置文件“/etc/security/limits.d/20-nproc.conf”限制;类似的,普通用户在容器里也能创建的进程数的上限,由容器镜像中“/etc/security/limits.d/20-nproc.conf”文件对应的值决定,如下所示: - -``` -cat /etc/security/limits.conf -* soft nproc 4096 -``` - -当普通用户大量部署容器,导致容器内进程过多资源不够出现报错时,需要把容器镜像“/etc/security/limits.d/20-nproc.conf”文件中如上所示的4096配置值加大。 - -可配置的最大值请参考内核的最大能力,如下: - -``` -[root@localhost ~]# sysctl -a | grep pid_max -kernel.pid_max = 32768 -``` - diff --git "a/content/zh/docs/Container/\346\232\202\345\201\234\345\256\271\345\231\250.md" "b/content/zh/docs/Container/\346\232\202\345\201\234\345\256\271\345\231\250.md" deleted file mode 100644 index 7f781d7c1ac6adae3755520b8491f386af3abe46..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\346\232\202\345\201\234\345\256\271\345\231\250.md" +++ /dev/null @@ -1,47 +0,0 @@ -# 暂停容器 - -## 描述 - -isula pause用于暂停容器中所有的进程,仅支持runtime类型为lcr的容器。 - -## 用法 - -``` -isula pause CONTAINER [CONTAINER...] -``` - -## 参数 - - - - - - - - - - - -

命令

-

参数

-

说明

-

pause

-

-H, --host

-

指定要连接的iSulad socket文件路径

-
- -## 约束限制 - -- 只有状态为running的容器可以被执行pause操作 -- 当容器被pause后,无法执行其他生命周期管理操作(如restart/exec/attach/kill/stop/rm等) -- 当带有健康检查配置的容器被pause后,容器状态最终变为unhealthy状态 - -## 示例 - -暂停一个正在运行的容器,命令示例如下: - -``` -$ isula pause 8fe25506fb5883b74c2457f453a960d1ae27a24ee45cdd78fb7426d2022a8bac - 8fe25506fb5883b74c2457f453a960d1ae27a24ee45cdd78fb7426d2022a8bac -``` - diff --git "a/content/zh/docs/Container/\346\234\200\345\244\247\345\217\245\346\237\204\346\225\260\351\231\220\345\210\266.md" "b/content/zh/docs/Container/\346\234\200\345\244\247\345\217\245\346\237\204\346\225\260\351\231\220\345\210\266.md" index cc4d73633339fd290d50094c2ea6ba264ef300c3..d17c211009369ef71b3d8c4482bcc054f065428a 100644 --- "a/content/zh/docs/Container/\346\234\200\345\244\247\345\217\245\346\237\204\346\225\260\351\231\220\345\210\266.md" +++ "b/content/zh/docs/Container/\346\234\200\345\244\247\345\217\245\346\237\204\346\225\260\351\231\220\345\210\266.md" @@ -1,10 +1,10 @@ -# 最大句柄数限制 +# 最大句柄数限制 -## 功能描述 +## 功能描述 系统容器支持对容器内使用文件句柄数进行限制,文件句柄包括普通文件句柄和网络套接字,启动容器时,可以通过指定--files-limit参数限制容器内打开的最大句柄数。 -## 参数说明 +## 参数说明

命令

@@ -26,14 +26,14 @@
-## 约束限制 +## 约束限制 -- 如果--files-limit指定的值太小,可能会导致系统容器无法通过exec执行命令,报"open too many files"错误,所以files limit的值应该设置大一些。 +- 如果\--files-limit指定的值太小,可能会导致系统容器无法通过exec执行命令,报"open too many files"错误,所以files limit的值应该设置大一些。 - 文件句柄包括普通文件句柄和网络套接字。 -## 使用示例 +## 使用示例 -使用--files-limit限制容器内打开文件句柄数需要内核支持files cgroup,可以执行以下命令查看: +使用\--files-limit限制容器内打开文件句柄数需要内核支持files cgroup,可以执行以下命令查看: ``` [root@localhost ~]# cat /proc/1/cgroup | grep files diff --git "a/content/zh/docs/Container/\346\234\215\345\212\241\346\227\240\346\263\225\346\255\243\345\270\270\351\207\215\345\220\257.md" "b/content/zh/docs/Container/\346\234\215\345\212\241\346\227\240\346\263\225\346\255\243\345\270\270\351\207\215\345\220\257.md" deleted file mode 100644 index ffc616123d40e93e5164fba5c2433123630b0274..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\346\234\215\345\212\241\346\227\240\346\263\225\346\255\243\345\270\270\351\207\215\345\220\257.md" +++ /dev/null @@ -1,4 +0,0 @@ -# 服务无法正常重启 - -短时间内频繁重启docker服务导致该服务无法正常重启。docker系统服务由systemd负责监控,如果docker服务在10s内重启次数超过5次,systemd服务就会监控到该异常行为,因此会禁止docker服务启动。只有等到下一个10s周期开始后,docker服务才能响应重启命令正常重启。 - diff --git "a/content/zh/docs/Container/\346\237\245\347\234\213\345\256\271\345\231\250\344\270\255\350\277\233\347\250\213\344\277\241\346\201\257.md" "b/content/zh/docs/Container/\346\237\245\347\234\213\345\256\271\345\231\250\344\270\255\350\277\233\347\250\213\344\277\241\346\201\257.md" deleted file mode 100644 index e314b0a8319ac209a57d1e29b057c1e8b2ebfaa3..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\346\237\245\347\234\213\345\256\271\345\231\250\344\270\255\350\277\233\347\250\213\344\277\241\346\201\257.md" +++ /dev/null @@ -1,52 +0,0 @@ -# 查看容器中进程信息 - -## 描述 - -isula top用于查看容器中的进程信息。仅支持runtime类型为lcr的容器。 - -## 用法 - -``` -isula top [OPTIONS] container [ps options] -``` - -## 参数 - -top命令支持参数参考下表。 - -**表 1** top命令参数列表 - - - - - - - - - - - - - - -

命令

-

参数

-

说明

-

top

-

  

-

-H, --host

-

指定要连接的iSulad socket文件路径

-

/

-

查询运行容器的进程信息

-
- -## 示例 - -查询容器中进程信息 - -``` -$ isula top 21fac8bb9ea8e0be4313c8acea765c8b4798b7d06e043bbab99fc20efa72629c -UID PID PPID C STIME TTY TIME CMD -root 22166 22163 0 23:04 pts/1 00:00:00 sh -``` - diff --git "a/content/zh/docs/Container/\346\237\245\347\234\213\345\256\271\345\231\250\344\275\277\347\224\250\347\232\204\350\265\204\346\272\220.md" "b/content/zh/docs/Container/\346\237\245\347\234\213\345\256\271\345\231\250\344\275\277\347\224\250\347\232\204\350\265\204\346\272\220.md" deleted file mode 100644 index 92a0d53be5476256ca6ace92a44897171a977506..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\346\237\245\347\234\213\345\256\271\345\231\250\344\275\277\347\224\250\347\232\204\350\265\204\346\272\220.md" +++ /dev/null @@ -1,57 +0,0 @@ -# 查看容器使用的资源 - -## 描述 - -isula stats用于实时显示资源使用的统计信息。仅支持runtime类型为lcr的容器。 - -## 用法 - -``` -isula stats [OPTIONS] [CONTAINER...] -``` - -## 参数 - -stats命令支持参数参考下表。 - -**表 1** stats命令参数列表 - - - - - - - - - - - - - - - - - -

命令

-

参数

-

说明

-

stats

-

  

-

  

-

-H, --host

-

指定要连接的iSulad socket文件路径

-

-a, --all

-

显示所有容器(默认只显示运行中的容器)

-

--no-stream

-

非流式方式的stats,只打印第一次结果

-
- -## 示例 - -显示资源使用的统计信息 - -``` -$ isula stats --no-stream 21fac8bb9ea8e0be4313c8acea765c8b4798b7d06e043bbab99fc20efa72629c CONTAINER CPU % MEM USAGE / LIMIT MEM % BLOCK I / O PIDS -21fac8bb9ea8 0.00 56.00 KiB / 7.45 GiB 0.00 0.00 B / 0.00 B 1 -``` - diff --git "a/content/zh/docs/Container/\346\237\245\347\234\213\351\225\234\345\203\217.md" "b/content/zh/docs/Container/\346\237\245\347\234\213\351\225\234\345\203\217.md" deleted file mode 100644 index 4351b00d19f10ed53b2c750ba791b51009a0c199..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\346\237\245\347\234\213\351\225\234\345\203\217.md" +++ /dev/null @@ -1,8 +0,0 @@ -# 查看镜像 - -查看本地镜像列表: - -``` -docker images -``` - diff --git "a/content/zh/docs/Container/\346\237\245\350\257\242\344\277\241\346\201\257.md" "b/content/zh/docs/Container/\346\237\245\350\257\242\344\277\241\346\201\257.md" index 0fc9ede75d33d3240c195f27754322fd697e6cad..fddae0709411837346affd94183049ac842a17a0 100644 --- "a/content/zh/docs/Container/\346\237\245\350\257\242\344\277\241\346\201\257.md" +++ "b/content/zh/docs/Container/\346\237\245\350\257\242\344\277\241\346\201\257.md" @@ -1,2 +1,96 @@ -# 查询信息 - +# 查询信息 + +- [查询信息](#查询信息) + - [查询服务版本信息](#查询服务版本信息) + - [查询系统级信息](#查询系统级信息) + +## 查询信息 + +## 查询服务版本信息 + +### 描述 + +isula version 命令用于查询iSulad服务的版本信息。 + +### 用法 + +``` +isula version +``` + +### 实例 + +查询版本信息 + +``` +isula version +``` + +如果isulad服务正常运行,则可以查看到客户端、服务端以及OCI config的版本等信息。 + +``` +Client: + Version: 1.0.31 + Git commit: fa7f9902738e8b3d7f2eb22768b9a1372ddd1199 + Built: 2019-07-30T04:21:48.521198248-04:00 + +Server: + Version: 1.0.31 + Git commit: fa7f9902738e8b3d7f2eb22768b9a1372ddd1199 + Built: 2019-07-30T04:21:48.521198248-04:00 + +OCI config: + Version: 1.0.0-rc5-dev + Default file: /etc/default/isulad/config.json +``` + +若isulad服务未运行,则仅仅查询到客户端的信息,并提示无法连接到服务端。 + +``` +Client: + Version: 1.0.31 + Git commit: fa7f9902738e8b3d7f2eb22768b9a1372ddd1199 + Built: 2019-07-30T04:21:48.521198248-04:00 + +Can not connect with server.Is the iSulad daemon running on the host? +``` + +因此,isula version命令也常常用来检验isulad是否正常运行。 + +## 查询系统级信息 + +### 描述 + +isula info命令用于对系统级信息,以及容器和镜像数目等信息的查询。 + +### 用法 + +``` +isula info +``` + +### 示例 + +查询系统级信息,可以展示容器数目,镜像数目,内核版本、操作系统等信息 + +``` +# isula info +Containers: 2 + Running: 0 + Paused: 0 + Stopped: 2 +Images: 8 +Server Version: 1.0.31 +Logging Driver: json-file +Cgroup Driverr: cgroupfs +Hugetlb Pagesize: 2MB +Kernel Version: 4.19 +Operating System: Fedora 29 (Twenty Nine) +OSType: Linux +Architecture: x86_64 +CPUs: 8 +Total Memory: 7 GB +Name: localhost.localdomain +iSulad Root Dir: /var/lib/isulad +``` + diff --git "a/content/zh/docs/Container/\346\237\245\350\257\242\345\215\225\344\270\252\345\256\271\345\231\250\344\277\241\346\201\257.md" "b/content/zh/docs/Container/\346\237\245\350\257\242\345\215\225\344\270\252\345\256\271\345\231\250\344\277\241\346\201\257.md" deleted file mode 100644 index 6fbef625630a8e9e99a8c0bdacd1007ed9120ba0..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\346\237\245\350\257\242\345\215\225\344\270\252\345\256\271\345\231\250\344\277\241\346\201\257.md" +++ /dev/null @@ -1,183 +0,0 @@ -# 查询单个容器信息 - -## 描述 - -isula inspect提供了容器的详细信息。 - -## 用法 - -``` -isula inspect [OPTIONS] CONTAINER|IMAGE [CONTAINER|IMAGE...] -``` - -## 参数 - -inspect命令支持参数参考下表。 - -**表 1** inspect命令参数列表 - - - - - - - - - - - - - - - - - -

命令

-

参数

-

说明

-

inspect

-

  

-

-H, --host

-

指定要连接的iSulad socket文件路径

-

-f, --format

-

使用模板格式化输出

-

-t, --time

-

超时时间的秒数,若在该时间内inspect查询容器信息未执行成功,则停止等待并立即报错,默认为120秒,当配置小于等于0的值,表示不启用timeout机制inspect查询容器信息会一直等待,直到获取容器信息成功后返回。

-
- -## 约束限制 - -- 轻量级容器不支持format为“\{\{.State\}\}”的格式化输出,支持“\{\{json .State\}\}”的json格式化输出。当inspect镜像时,不支持-f参数。 - -## 示例 - -查询容器信息 - -``` -$ isula inspect c75284634bee -[ - { - "Id": "c75284634beeede3ab86c828790b439d16b6ed8a537550456b1f94eb852c1c0a", - "Created": "2019-08-01T22:48:13.993304927-04:00", - "Path": "sh", - "Args": [], - "State": { - "Status": "running", - "Running": true, - "Paused": false, - "Restarting": false, - "Pid": 21164, - "ExitCode": 0, - "Error": "", - "StartedAt": "2019-08-02T06:09:25.535049168-04:00", - "FinishedAt": "2019-08-02T04:28:09.479766839-04:00", - "Health": { - "Status": "", - "FailingStreak": 0, - "Log": [] - } - }, - "Image": "busybox", - "ResolvConfPath": "", - "HostnamePath": "", - "HostsPath": "", - "LogPath": "none", - "Name": "c75284634beeede3ab86c828790b439d16b6ed8a537550456b1f94eb852c1c0a", - "RestartCount": 0, - "HostConfig": { - "Binds": [], - "NetworkMode": "", - "GroupAdd": [], - "IpcMode": "", - "PidMode": "", - "Privileged": false, - "SystemContainer": false, - "NsChangeFiles": [], - "UserRemap": "", - "ShmSize": 67108864, - "AutoRemove": false, - "AutoRemoveBak": false, - "ReadonlyRootfs": false, - "UTSMode": "", - "UsernsMode": "", - "Sysctls": {}, - "Runtime": "lcr", - "RestartPolicy": { - "Name": "no", - "MaximumRetryCount": 0 - }, - "CapAdd": [], - "CapDrop": [], - "Dns": [], - "DnsOptions": [], - "DnsSearch": [], - "ExtraHosts": [], - "HookSpec": "", - "CPUShares": 0, - "Memory": 0, - "OomScoreAdj": 0, - "BlkioWeight": 0, - "BlkioWeightDevice": [], - "CPUPeriod": 0, - "CPUQuota": 0, - "CPURealtimePeriod": 0, - "CPURealtimeRuntime": 0, - "CpusetCpus": "", - "CpusetMems": "", - "SecurityOpt": [], - "StorageOpt": {}, - "KernelMemory": 0, - "MemoryReservation": 0, - "MemorySwap": 0, - "OomKillDisable": false, - "PidsLimit": 0, - "FilesLimit": 0, - "Ulimits": [], - "Hugetlbs": [], - "HostChannel": { - "PathOnHost": "", - "PathInContainer": "", - "Permissions": "", - "Size": 0 - }, - "EnvTargetFile": "", - "ExternalRootfs": "" - }, - "Mounts": [], - "Config": { - "Hostname": "localhost", - "User": "", - "Env": [ - "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", - "TERM=xterm", - "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" - ], - "Tty": true, - "Cmd": [ - "sh" - ], - "Entrypoint": [], - "Labels": {}, - "Annotations": { - "log.console.file": "none", - "log.console.filerotate": "7", - "log.console.filesize": "1MB", - "rootfs.mount": "/var/lib/isulad/mnt/rootfs", - "native.umask": "secure" - }, - "HealthCheck": { - "Test": [], - "Interval": 0, - "Timeout": 0, - "StartPeriod": 0, - "Retries": 0, - "ExitOnUnhealthy": false - } - }, - "NetworkSettings": { - "IPAddress": "" - } - } -] -``` - diff --git "a/content/zh/docs/Container/\346\237\245\350\257\242\346\211\200\346\234\211\345\256\271\345\231\250\344\277\241\346\201\257.md" "b/content/zh/docs/Container/\346\237\245\350\257\242\346\211\200\346\234\211\345\256\271\345\231\250\344\277\241\346\201\257.md" deleted file mode 100644 index 2c27b99bc5bd31ddf5bc1c41a3c4341b871d3899..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\346\237\245\350\257\242\346\211\200\346\234\211\345\256\271\345\231\250\344\277\241\346\201\257.md" +++ /dev/null @@ -1,80 +0,0 @@ -# 查询所有容器信息 - -## 描述 - -isula ps 用于查询所有容器的信息。 - -## 用法 - -``` -isula ps [OPTIONS] -``` - -## 参数 - -ps命令支持参数参考下表。 - -**表 1** ps命令参数列表 - - - - - - - - - - - - - - - - - - - - - - - - - - -

命令

-

参数

-

说明

-

ps

-

  

-

  

-

  

-

  

-

-a, --all

-

显示所有的容器

-

-H, --host

-

指定要连接的iSulad socket文件路径

-

-q, --quiet

-

只显示容器名字

-

-f, --filter

-

增加筛选过滤条件

-

--format

-

按照模板声明的方式输出数据

-

--no-trunc

-

不对容器ID进行截断打印

-
- -## 示例 - -查询所有容器信息 - -``` -$ isula ps -a - -ID IMAGE STATUS PID COMMAND EXIT_CODE RESTART_COUNT STARTAT FINISHAT RUNTIME NAMES -e84660aa059c rnd-dockerhub.huawei.com/official/busybox running 304765 "sh" 0 0 13 minutes ago - lcr e84660aa059cafb0a77a4002e65cc9186949132b8e57b7f4d76aa22f28fde016 -$ isula ps -a --format "table {{.ID}} {{.Image}}" --no-trunc -ID IMAGE -e84660aa059cafb0a77a4002e65cc9186949132b8e57b7f4d76aa22f28fde016 rnd-dockerhub.huawei.com/official/busybox - -``` - diff --git "a/content/zh/docs/Container/\346\237\245\350\257\242\346\234\215\345\212\241\347\211\210\346\234\254\344\277\241\346\201\257.md" "b/content/zh/docs/Container/\346\237\245\350\257\242\346\234\215\345\212\241\347\211\210\346\234\254\344\277\241\346\201\257.md" deleted file mode 100644 index a66ee4b27bf5bc74d3d5381a7436f5ea75944bfd..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\346\237\245\350\257\242\346\234\215\345\212\241\347\211\210\346\234\254\344\277\241\346\201\257.md" +++ /dev/null @@ -1,51 +0,0 @@ -# 查询服务版本信息 - -## 描述 - -isula version 命令用于查询iSulad服务的版本信息。 - -## 用法 - -``` -isula version -``` - -## 实例 - -查询版本信息 - -``` -isula version -``` - -如果isulad服务正常运行,则可以查看到客户端、服务端以及OCI config的版本等信息。 - -``` -Client: - Version: 1.0.31 - Git commit: fa7f9902738e8b3d7f2eb22768b9a1372ddd1199 - Built: 2019-07-30T04:21:48.521198248-04:00 - -Server: - Version: 1.0.31 - Git commit: fa7f9902738e8b3d7f2eb22768b9a1372ddd1199 - Built: 2019-07-30T04:21:48.521198248-04:00 - -OCI config: - Version: 1.0.0-rc5-dev - Default file: /etc/default/isulad/config.json -``` - -若isulad服务未运行,则仅仅查询到客户端的信息,并提示无法连接到服务端。 - -``` -Client: - Version: 1.0.31 - Git commit: fa7f9902738e8b3d7f2eb22768b9a1372ddd1199 - Built: 2019-07-30T04:21:48.521198248-04:00 - -Can not connect with server.Is the iSulad daemon running on the host? -``` - -因此,isula version命令也常常用来检验isulad是否正常运行。 - diff --git "a/content/zh/docs/Container/\346\237\245\350\257\242\347\263\273\347\273\237\347\272\247\344\277\241\346\201\257.md" "b/content/zh/docs/Container/\346\237\245\350\257\242\347\263\273\347\273\237\347\272\247\344\277\241\346\201\257.md" deleted file mode 100644 index dbb7e13da232b8917b8e0123968090bd1563142c..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\346\237\245\350\257\242\347\263\273\347\273\237\347\272\247\344\277\241\346\201\257.md" +++ /dev/null @@ -1,37 +0,0 @@ -# 查询系统级信息 - -## 描述 - -isula info命令用于对系统级信息,以及容器和镜像数目等信息的查询。 - -## 用法 - -``` -isula info -``` - -## 示例 - -查询系统级信息,可以展示容器数目,镜像数目,内核版本、操作系统等信息 - -``` -$ isula info -Containers: 2 - Running: 0 - Paused: 0 - Stopped: 2 -Images: 8 -Server Version: 1.0.31 -Logging Driver: json-file -Cgroup Driverr: cgroupfs -Hugetlb Pagesize: 2MB -Kernel Version: 4.19 -Operating System: Fedora 29 (Twenty Nine) -OSType: Linux -Architecture: x86_64 -CPUs: 8 -Total Memory: 7 GB -Name: localhost.localdomain -iSulad Root Dir: /var/lib/isulad -``` - diff --git "a/content/zh/docs/Container/\346\243\200\346\237\245\350\247\204\345\210\231.md" "b/content/zh/docs/Container/\346\243\200\346\237\245\350\247\204\345\210\231.md" deleted file mode 100644 index 951bd6a1e3a7544b01df3fec94a83b2e1b23569a..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\346\243\200\346\237\245\350\247\204\345\210\231.md" +++ /dev/null @@ -1,32 +0,0 @@ -# 检查规则 - -1. 容器启动后,容器状态中显示health:starting。 -2. 经过start-period时间后开始,以interval为间隔周期性在容器中执行CMD。即:当一次命令执行完毕后,经过interval时间,执行下一次命令。 -3. 若CMD命令在timeout限制的时间内执行完毕,并且返回值为0,则视为一次检查成功。否则视为一次检查失败。检查成功后,容器状态变为health:healthy。 -4. 若CMD命令连续retries次检查失败,则容器状态变为health:unhealthy。失败后容器也会继续进行健康检查。 -5. 容器状态为health:unhealthy时,任意一次检查成功会使得容器状态变为health:healthy。 -6. 设置--exit-on-unhealthy的情况下,如果容器因为非被杀死退出(退出返回值137)后,健康检查只有容器在重新启动后才会继续生效。 -7. CMD执行完毕或超时时,docker daemon会将这次检查的起始时间、返回值和标准输出记录到容器的配置文件中。最多记录5条。此外,容器的配置文件中还存储着健康检查的相关参数。 -8. 运行中的容器的健康检查状态也会被写入容器配置中。通过isula inspect可以看到。 - -``` -"Health": { - "Status": "healthy", - "FailingStreak": 0, - "Log": [ - { - "Start": "2018-03-07T07:44:15.481414707-05:00", - "End": "2018-03-07T07:44:15.556908311-05:00", - "ExitCode": 0, - "Output": "" - }, - { - "Start": "2018-03-07T07:44:18.557297462-05:00", - "End": "2018-03-07T07:44:18.63035891-05:00", - "ExitCode": 0, - "Output": "" - }, - ...... -} -``` - diff --git "a/content/zh/docs/Container/\346\243\200\350\247\206\351\225\234\345\203\217-5.md" "b/content/zh/docs/Container/\346\243\200\350\247\206\351\225\234\345\203\217-5.md" deleted file mode 100644 index 501fbcce73a5dfeaaab77756f432cecc5c75cb57..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\346\243\200\350\247\206\351\225\234\345\203\217-5.md" +++ /dev/null @@ -1,23 +0,0 @@ -# 检视镜像 - -## 描述 - -返回该镜像的配置信息。可以使用-f参数过滤出需要的信息。 - -## 用法 - -``` -isula inspect [options] CONTAINER|IMAGE [CONTAINER|IMAGE...] -``` - -## 参数 - -inspect命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表7 inspect命令参数列表"。 - -## 示例 - -``` -$ isula inspect -f "{{json .created}}" test:v1 -"2018-03-01T15:55:44.322987811Z" -``` - diff --git "a/content/zh/docs/Container/\346\243\200\350\247\206\351\225\234\345\203\217.md" "b/content/zh/docs/Container/\346\243\200\350\247\206\351\225\234\345\203\217.md" deleted file mode 100644 index 1168d4b715082f7a009afc18c6825eba35b1f496..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\346\243\200\350\247\206\351\225\234\345\203\217.md" +++ /dev/null @@ -1,23 +0,0 @@ -# 检视镜像 - -## 描述 - -返回该镜像的配置信息。可以使用-f参数过滤出需要的信息。 - -## 用法 - -``` -isula inspect [options] CONTAINER|IMAGE [CONTAINER|IMAGE...] -``` - -## 参数 - -inspect命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表7 inspect命令参数列表"。 - -## 示例 - -``` -$ isula inspect -f "{{json .image.id}}" rnd-dockerhub.huawei.com/official/busybox -"e4db68de4ff27c2adfea0c54bbb73a61a42f5b667c326de4d7d5b19ab71c6a3b" -``` - diff --git "a/content/zh/docs/Container/\346\246\202\350\277\260-21.md" "b/content/zh/docs/Container/\346\246\202\350\277\260-21.md" deleted file mode 100644 index ea35a7f7105b31208cccdd18482357ee1de3909a..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\346\246\202\350\277\260-21.md" +++ /dev/null @@ -1,4 +0,0 @@ -# 概述 - -系统容器主要应对在重计算、高性能、大并发的场景下,重型应用和业务云化的问题。相比较虚拟机技术,系统容器可直接继承物理机特性,同时具备性能更优良,较少overhead的优点。从系统资源分配来看,系统容器在有限资源上相比虚拟机可分配更多计算单元,降低成本,通过系统容器可以构建产品的差异化竞争力,提供计算密度更高,价格更便宜,性能更优良的的计算单元实例。 - diff --git "a/content/zh/docs/Container/\346\246\202\350\277\260-23.md" "b/content/zh/docs/Container/\346\246\202\350\277\260-23.md" deleted file mode 100644 index 951853729547d971e7d37f2077a374777ab152b5..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\346\246\202\350\277\260-23.md" +++ /dev/null @@ -1,26 +0,0 @@ -# 概述 - -安全容器是虚拟化技术和容器技术的有机结合,相比普通linux容器,安全容器具有更好的隔离性。 - -普通linux容器利用namespace进行进程间运行环境的隔离,并使用cgroup进行资源限制;因此普通linux容器本质上还是共用同一个内核,单个容器有意或无意影响到内核都会影响到整台宿主机上的容器。 - -安全容器是使用虚拟化层进行容器间的隔离,同一个主机上不同的容器间运行互相不受影响。 - -**图 1** 安全容器架构 - - -![](figures/kata-arch.png) - -安全容器与Kubernetes中的Pod概念紧密联系,Kubernetes为容器调度管理平台的开源生态标准,它定义了一组容器操作相关接口(Container Runtime Interface 简称CRI)。 - -在CRI标准中,Pod为完成一组服务需要的一组容器集合,是编排调度的最小单元,通常共享IPC和网络namespace;一个Pod必然包含一个占位容器(pause容器)以及一个或多个业务容器,其中pause容器与的生命周期相同。 - -其中安全容器中的一个轻量级虚拟机对应为一个Pod,在此虚拟机中启动的第一个容器为pause容器,以后依次启动的容器为业务容器。 - -安全容器同时提供启动单个容器与启动Pod的功能。 - -安全容器与周边组件的关系如[图2](#fig17734185518269)所示。 - -**图 2** 安全容器与周边组件的关系 -![](figures/安全容器与周边组件的关系.png "安全容器与周边组件的关系") - diff --git "a/content/zh/docs/Container/\346\246\202\350\277\260-29.md" "b/content/zh/docs/Container/\346\246\202\350\277\260-29.md" deleted file mode 100644 index 9044f0b7f0ecb1d2c57d120b420384135c88ac2b..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\346\246\202\350\277\260-29.md" +++ /dev/null @@ -1,4 +0,0 @@ -# 概述 - -Docker是一个开源的Linux容器引擎项目, 用以实现应用的快速打包、部署和交付。Docker的英文本意是码头工人,码头工人的工作就是将商品打包到container\(集装箱\)并且搬运container、装载container。 对应到Linux中,Docker就是将app打包到container,通过container实现app在各种平台上的部署、运行。Docker通过Linux Container技术将app变成一个标准化的、可移植的、自管理的组件,从而实现应用的“一次构建,到处运行”。Docker技术特点就是:应用快速发布、部署简单、管理方便,应用密度更高。 - diff --git "a/content/zh/docs/Container/\346\246\202\350\277\260.md" "b/content/zh/docs/Container/\346\246\202\350\277\260.md" deleted file mode 100644 index a0684e6c898a438583cf28cbd14aa7dde20b8a25..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\346\246\202\350\277\260.md" +++ /dev/null @@ -1,11 +0,0 @@ -# 概述 - -iSula通用容器引擎相比docker,是一种新的容器解决方案,提供统一的架构设计来满足CT和IT领域的不同需求。相比Golang编写的Docker,轻量级容器使用C/C++实现,具有轻、灵、巧、快的特点,不受硬件规格和架构的限制,底噪开销更小,可应用领域更为广泛。 - -容器统一架构如[图1](#zh-cn_topic_0182207099_fig10763114141217)所示。 - -**图 1** 容器统一架构 - - -![](figures/zh-cn_image_0183048952.png) - diff --git "a/content/zh/docs/Container/\346\263\225\345\276\213\345\243\260\346\230\216.md" "b/content/zh/docs/Container/\346\263\225\345\276\213\345\243\260\346\230\216.md" deleted file mode 100644 index 62308e77fb636ad1e46576a4874679793a47b1e3..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\346\263\225\345\276\213\345\243\260\346\230\216.md" +++ /dev/null @@ -1,18 +0,0 @@ -# 法律声明 - -**版权所有 © 2020 华为技术有限公司。** - -您对“本文档”的复制、使用、修改及分发受知识共享\(Creative Commons\)署名—相同方式共享4.0国际公共许可协议\(以下简称“CC BY-SA 4.0”\)的约束。为了方便用户理解,您可以通过访问[https://creativecommons.org/licenses/by-sa/4.0/](https://creativecommons.org/licenses/by-sa/4.0/) 了解CC BY-SA 4.0的概要 \(但不是替代\)。CC BY-SA 4.0的完整协议内容您可以访问如下网址获取:[https://creativecommons.org/licenses/by-sa/4.0/legalcode](https://creativecommons.org/licenses/by-sa/4.0/legalcode)。 - -   - -**商标声明** - -openEuler为华为技术有限公司的商标。本文档提及的其他所有商标或注册商标,由各自的所有人拥有。 - -   - -**免责声明** - -本文档仅作为使用指导,除非适用法强制规定或者双方有明确书面约定, 华为技术有限公司对本文档中的所有陈述、信息和建议不做任何明示或默示的声明或保证,包括但不限于不侵权,时效性或满足特定目的的担保。 - diff --git "a/content/zh/docs/Container/\346\263\250\346\204\217\344\272\213\351\241\271.md" "b/content/zh/docs/Container/\346\263\250\346\204\217\344\272\213\351\241\271.md" deleted file mode 100644 index 5279dc5ccf538841fba1f1b5ec739b72a6c08912..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\346\263\250\346\204\217\344\272\213\351\241\271.md" +++ /dev/null @@ -1,4 +0,0 @@ -# 注意事项 - -- docker-engine rpm包与containerd rpm包、runc rpm包、podman rpm包不能同时安装。因为docker-engine rpm包中已经包含Docker运行所需的所有组件,其中包括containerd、runc、docker二进制,且containerd、runc和podman rpm包也分别提供了对应的二进制,所以重复安装时会出现软件包冲突。 - diff --git "a/content/zh/docs/Container/\347\211\271\346\235\203\345\256\271\345\231\250.md" "b/content/zh/docs/Container/\347\211\271\346\235\203\345\256\271\345\231\250.md" index daa8df99207eae022a571dcad0dbd3e5106ed2b4..77fb58e4a96d0c79968ff4b10505cf729e07e195 100644 --- "a/content/zh/docs/Container/\347\211\271\346\235\203\345\256\271\345\231\250.md" +++ "b/content/zh/docs/Container/\347\211\271\346\235\203\345\256\271\345\231\250.md" @@ -1 +1,241 @@ -# 特权容器 +# 特权容器 + + +- [特权容器](#特权容器) + - [场景说明](#场景说明) + - [使用限制](#使用限制) + - [使用指导](#使用指导) + + + +## 场景说明 + +iSulad默认启动的是普通容器,普通容器适合启动普通进程,其权限非常受限,仅具备/etc/default/isulad/config.json中capabilities所定义的默认权限。当需要特权操作时(比如操作/sys下的设备),需要特权容器完成这些操作,使用该特性,容器内的root将拥有宿主机的root权限, 否则,容器内的root在只是宿主机的普通用户权限。 + +## 使用限制 + +特权容器为容器提供了所有功能,还解除了设备cgroup控制器强制执行的所有限制,具备以下特性: + +- Secomp不block任何系统调用 +- /sys、/proc路径可写 +- 容器内能访问主机上所有设备 + +- 系统的权能将全部打开 + +普通容器默认权能为: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Capability Key

+

Capability Description

+

SETPCAP

+

修改进程权能

+

MKNOD

+

允许使用mknod()系统调用创建特殊文件

+

AUDIT_WRITE

+

向内核审计日志写记录

+

CHOWN

+

对文件的 UIDs 和 GIDs 做任意的修改(参考 chown(2))

+

NET_RAW

+

使用 RAW 和 PACKET sockets;为透明代理绑定任何地址

+

DAC_OVERRIDE

+

忽略文件的DAC访问限制

+

FOWNER

+

忽略文件属主ID必须和进程用户ID相匹配的限制

+

FSETID

+

允许设置文件的setuid位

+

KILL

+

允许对不属于自己的进程发送信号

+

SETGID

+

允许改变进程的组ID

+

SETUID

+

允许改变进程的用户ID

+

NET_BIND_SERVICE

+

允许绑定到小于1024的端口

+

SYS_CHROOT

+

允许使用chroot()系统调用

+

SETFCAP

+

允许向其他进程转移能力以及删除其他进程的能力

+
+ +当容器为特权模式时,将添加以下权能 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Capability Key

+

Capability Description

+

SYS_MODULE

+

加载和卸载内核模块

+

SYS_RAWIO

+

允许直接访问/devport,/dev/mem,/dev/kmem及原始块设备

+

SYS_PACCT

+

允许执行进程的BSD式审计

+

SYS_ADMIN

+

允许执行系统管理任务,如加载或卸载文件系统、设置磁盘配额等

+

SYS_NICE

+

允许提升优先级及设置其他进程的优先级

+

SYS_RESOURCE

+

忽略资源限制

+

SYS_TIME

+

允许改变系统时钟

+

SYS_TTY_CONFIG

+

允许配置TTY设备

+

AUDIT_CONTROL

+

启用和禁用内核审计;修改审计过滤器规则;提取审计状态和过滤规则

+

MAC_ADMIN

+

覆盖强制访问控制 (Mandatory Access Control (MAC)),为Smack Linux安全模块(Linux Security Module (LSM)) 而实现

+

MAC_OVERRIDE

+

允许 MAC 配置或状态改变。为 Smack LSM 而实现

+

NET_ADMIN

+

允许执行网络管理任务

+

SYSLOG

+

执行特权 syslog(2) 操作

+

DAC_READ_SEARCH

+

忽略文件读及目录搜索的DAC访问限制

+

LINUX_IMMUTABLE

+

允许修改文件的IMMUTABLE和APPEND属性标志

+

NET_BROADCAST

+

允许网络广播和多播访问

+

IPC_LOCK

+

允许锁定共享内存片段

+

IPC_OWNER

+

忽略IPC所有权检查

+

SYS_PTRACE

+

允许跟踪任何进程

+

SYS_BOOT

+

允许重新启动系统

+

LEASE

+

允许修改文件锁的FL_LEASE标志

+

WAKE_ALARM

+

触发将唤醒系统的功能,如设置 CLOCK_REALTIME_ALARM 和 CLOCK_BOOTTIME_ALARM 定时器

+

BLOCK_SUSPEND

+

可以阻塞系统挂起的特性

+
+ +## 使用指导 + +iSulad使用--privileged给容器添加特权模式,在非必要情况下,不要给容器添加特权,遵循最小特权原则,减少存在的安全风险。 + +``` +isula run --rm -it --privileged busybox +``` + diff --git "a/content/zh/docs/Container/\347\216\257\345\242\203\345\217\230\351\207\217\346\214\201\344\271\205\345\214\226.md" "b/content/zh/docs/Container/\347\216\257\345\242\203\345\217\230\351\207\217\346\214\201\344\271\205\345\214\226.md" index 368a9cdc542135f0bccd0b42b363d7f64f6d27d2..22d36c8ab32d16d7812596ba14d792c34379f0c0 100644 --- "a/content/zh/docs/Container/\347\216\257\345\242\203\345\217\230\351\207\217\346\214\201\344\271\205\345\214\226.md" +++ "b/content/zh/docs/Container/\347\216\257\345\242\203\345\217\230\351\207\217\346\214\201\344\271\205\345\214\226.md" @@ -1,10 +1,10 @@ -# 环境变量持久化 +# 环境变量持久化 -## 功能描述 +## 功能描述 系统容器支持通过指定--env-target-file接口参数将env变量持久化到容器rootfs目录下的配置文件中。 -## 参数说明 +## 参数说明

命令

@@ -25,13 +25,13 @@
-## 约束限制 +## 约束限制 - --env-target-file指定的目标文件如果存在的话,大小不能超过10MB。 - --env-target-file指定的参数为rootfs目录下的绝对路径。 - 如果--env和目标文件里面的env出现冲突,以--env指定值的参数为准。 -## 使用示例 +## 使用示例 启动系统容器,指定env环境变量和--env-target-file参数: diff --git "a/content/zh/docs/Container/\347\224\250\346\210\267\346\235\203\351\231\220\346\216\247\345\210\266.md" "b/content/zh/docs/Container/\347\224\250\346\210\267\346\235\203\351\231\220\346\216\247\345\210\266.md" deleted file mode 100644 index 789ffd83d10059f75e56d2f1c91f54b2a065e98f..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\347\224\250\346\210\267\346\235\203\351\231\220\346\216\247\345\210\266.md" +++ /dev/null @@ -1,122 +0,0 @@ -# 用户权限控制 - -## 功能描述 - -容器引擎支持通过TLS认证方式来认证用户的身份,并依此控制用户的权限,当前容器引擎可以对接authz插件实现权限控制。 - -## 接口说明 - -通过配置iSulad容器引擎启动参数来指定权限控制插件,daemon配置文件默认为/etc/isulad/daemon.json。 - - - - - - - - - - - - -

配置参数

-

示例

-

说明

-

--authorization-plugin

-

"authorization-plugin": "authz-broker"

-

用户权限认证插件,当前只支持authz-broker。

-
- -## 约束限制 - -- authz需要配置用户权限策略,策略文件默认为/var/lib/authz-broker/policy.json,该配置文件支持动态修改,修改完即时生效,不需要重启插件服务。 -- 由于容器引擎为root用户启动,放开一般用户使用的一些命令可能会导致该用户不当获得过大权限,需谨慎配置。目前container\_attach、container\_create和container\_exec\_create动作可能会有风险。 -- 对于某些复合操作,比如isula exec、isula attach等命令依赖isula inspect是否有权限,如果用户没有inspect权限会直接报错。 -- 采用SSL/TLS 加密通道在增加安全性的同时也会带来性能损耗,如增加延时,消耗较多的CPU资源,除了数据传输外,加解密需要更大吞吐量,因此在并发场景下,相比非TLS通信,其并发量有一定程度上的下降。经实测,在ARM服务器(Cortex-A72 64核)接近空载情况下,采用TLS并发起容器,其最大并发量在200\~250范围内。 -- 服务端指定--tlsverify时,认证文件默认配置路径为/etc/isulad。且默认文件名分别为ca.pem、cert.pem、key.pem。 - -## 使用示例 - -1. 确认宿主机安装了authz插件,如果需要安装,安装并启动authz插件服务命令如下: - - ``` - [root@localhost ~]# yum install authz - [root@localhost ~]# systemctl start authz - ``` - -2. 要启动该功能,首先需要配置容器引擎和用户的TLS证书。可以使用OPENSSL来生成需要的证书,具体步骤如下: - - ``` - #SERVERSIDE - - # Generate CA key - openssl genrsa -aes256 -passout "pass:$PASSWORD" -out "ca-key.pem" 4096 - # Generate CA - openssl req -new -x509 -days $VALIDITY -key "ca-key.pem" -sha256 -out "ca.pem" -passin "pass:$PASSWORD" -subj "/C=$COUNTRY/ST=$STATE/L=$CITY/O=$ORGANIZATION/OU=$ORGANIZATIONAL_UNIT/CN=$COMMON_NAME/emailAddress=$EMAIL" - # Generate Server key - openssl genrsa -out "server-key.pem" 4096 - - # Generate Server Certs. - openssl req -subj "/CN=$COMMON_NAME" -sha256 -new -key "server-key.pem" -out server.csr - - echo "subjectAltName = DNS:localhost,IP:127.0.0.1" > extfile.cnf - echo "extendedKeyUsage = serverAuth" >> extfile.cnf - - openssl x509 -req -days $VALIDITY -sha256 -in server.csr -passin "pass:$PASSWORD" -CA "ca.pem" -CAkey "ca-key.pem" -CAcreateserial -out "server-cert.pem" -extfile extfile.cnf - - #CLIENTSIDE - - openssl genrsa -out "key.pem" 4096 - openssl req -subj "/CN=$CLIENT_NAME" -new -key "key.pem" -out client.csr - echo "extendedKeyUsage = clientAuth" > extfile.cnf - openssl x509 -req -days $VALIDITY -sha256 -in client.csr -passin "pass:$PASSWORD" -CA "ca.pem" -CAkey "ca-key.pem" -CAcreateserial -out "cert.pem" -extfile extfile.cnf - ``` - - 若要直接使用以上过程作为脚本,需替换各变量为配置数值。生成CA时使用的参数若为空则写为“''”。PASSWORD、COMMON\_NAME、CLIENT\_NAME、VALIDITY为必选项。 - -3. 容器引擎启动时添加TLS相关参数和认证插件相关参数,并保证认证插件的运行。此外,为了使用TLS认证,容器引擎必须使用TCP侦听的方式启动,不能使用传统的unix socket的方式启动。容器demon端配置如下: - - ``` - { - "tls": true, - "tls-verify": true, - "tls-config": { - "CAFile": "/root/.iSulad/ca.pem", - "CertFile": "/root/.iSulad/server-cert.pem", - "KeyFile":"/root/.iSulad/server-key.pem" - }, - "authorization-plugin": "authz-broker" - } - ``` - -4. 然后需要配置策略,对于基本授权流程,所有策略都位于一个配置文件下/var/lib/authz-broker/policy.json。该配置文件支持动态修改,更改时不需要重新启动插件,只需要向authz进程发送SIGHUP信号。文件格式是每行一个策略JSON对象。每行只有一个匹配。具体的策略配置示例如下: - - - 所有用户都可以运行所有iSulad命令:\{"name":"policy\_0","users":\[""\],"actions":\[""\]\}。 - - Alice可以运行所有iSulad命令:\{"name":"policy\_1","users":\["alice"\],"actions":\[""\]\}。 - - 空用户都可以运行所有iSulad命令: \{"name":"policy\_2","users":\[""\],"actions":\[""\]\}。 - - Alice和Bob可以创建新的容器:\{"name":"policy\_3","users":\["alice","bob"\],"actions":\["container\_create"\]\}。 - - service\_account可以读取日志并运行docker top:\{"name":"policy\_4","users":\["service\_account"\],"actions":\["container\_logs","container\_top"\]\}。 - - Alice可以执行任何container操作:\{"name":"policy\_5","users":\["alice"\],"actions":\["container"\]\}。 - - Alice可以执行任何container操作,但请求的种类只能是get:\{"name":"policy\_5","users":\["alice"\],"actions":\["container"\], "readonly":true \}。 - - >![](public_sys-resources/icon-note.gif) **说明:** - >- 配置中匹配action支持正则表达式。 - >- users不支持正则表达式。 - >- users不能有重复用户,即同一用户不能被多条规则匹配。 - -5. 配置并更新完之后,客户端配置TLS参数连接容器引擎,即是以受限的权限访问。 - - ``` - [root@localhost ~]# isula version --tlsverify --tlscacert=/root/.iSulad/ca.pem --tlscert=/root/.iSulad/cert.pem --tlskey=/root/.iSulad/key.pem -H=tcp://127.0.0.1:2375 - ``` - - 如果想默认配置TLS认证进行客户端连接,可以将文件移动到\~/.iSulad,并设置 ISULAD\_HOST和ISULAD\_TLS\_VERIFY变量(而不是每次调用时传递 -H=tcp://$HOST:2375和--tlsverify)。 - - ``` - [root@localhost ~]# mkdir -pv ~/.iSulad - [root@localhost ~]# cp -v {ca,cert,key}.pem ~/.iSulad - [root@localhost ~]# export ISULAD_HOST=localhost:2375 ISULAD_TLS_VERIFY=1 - [root@localhost ~]# isula version - ``` - - diff --git "a/content/zh/docs/Container/\347\231\273\345\275\225\345\210\260\351\225\234\345\203\217\344\273\223\345\272\223.md" "b/content/zh/docs/Container/\347\231\273\345\275\225\345\210\260\351\225\234\345\203\217\344\273\223\345\272\223.md" deleted file mode 100644 index c696b3629ee2bb5f6914585ab93ecd857ad4723a..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\347\231\273\345\275\225\345\210\260\351\225\234\345\203\217\344\273\223\345\272\223.md" +++ /dev/null @@ -1,24 +0,0 @@ -# 登录到镜像仓库 - -## 描述 - -isula login命令用于登录到镜像仓库。登录成功后可以使用isula pull命令从该镜像仓库拉取镜像。如果镜像仓库不需要密码,则拉取镜像前不需要执行该命令。 - -## 用法 - -``` -isula login [OPTIONS] SERVER -``` - -## 参数 - -login命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表1 表1-20 login命令参数列表" 。 - -## 示例 - -``` -$ isula login -u abc my.csp-edge.com:5000 - -Login Succeeded -``` - diff --git "a/content/zh/docs/Container/\347\233\221\346\216\247\345\256\211\345\205\250\345\256\271\345\231\250.md" "b/content/zh/docs/Container/\347\233\221\346\216\247\345\256\211\345\205\250\345\256\271\345\231\250.md" index fc1ebc9d134730a64c69f3140296aaf62a5822c1..35acb6ad27a8156a9c537f7dd2bb6453cd0084f7 100644 --- "a/content/zh/docs/Container/\347\233\221\346\216\247\345\256\211\345\205\250\345\256\271\345\231\250.md" +++ "b/content/zh/docs/Container/\347\233\221\346\216\247\345\256\211\345\205\250\345\256\271\345\231\250.md" @@ -1,27 +1,27 @@ -# 监控安全容器 +# 监控安全容器 -## 描述 +## 描述 kata events命令用于显示指定容器状态。包括但不限于容器内存、CPU、Pid、 Blkio、大页内存、网络等信息。 -## 用法 +## 用法 ``` kata-runtime events [command options] ``` -## 参数 +## 参数 -- -- interval value:设置查询周期。如果不使用该参数,默认查询周期为5秒。 -- --stats: 显示容器信息并退出查询。 +- \-- interval value:设置查询周期。如果不使用该参数,默认查询周期为5秒。 +- \--stats: 显示容器信息并退出查询。 -## 前置条件 +## 前置条件 要查询的容器状态必须为running,否则报错:Container ID \(\) does not exist。 该命令只支持查询监控一个容器的状态 -## 示例 +## 示例 - 每隔三秒显示容器状态。 diff --git "a/content/zh/docs/Container/\347\246\201\346\255\242\344\277\256\346\224\271docker-daemon\347\232\204\347\247\201\346\234\211\347\233\256\345\275\225.md" "b/content/zh/docs/Container/\347\246\201\346\255\242\344\277\256\346\224\271docker-daemon\347\232\204\347\247\201\346\234\211\347\233\256\345\275\225.md" deleted file mode 100644 index 3b27295d345de1cd8a9c43999fa71081fc75303e..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\347\246\201\346\255\242\344\277\256\346\224\271docker-daemon\347\232\204\347\247\201\346\234\211\347\233\256\345\275\225.md" +++ /dev/null @@ -1,4 +0,0 @@ -# 禁止修改docker daemon的私有目录 - -不允许对Docker用的根目录(默认/var/lib/docker)和运行时目录(默认/run/docker)以及其文件作任何修改,包括在该目录下删除文件,添加文件,对目录或者文件做软/硬链接,修改文件的属性/权限,修改文件的内容等,如果确实需要做修改,后果自负。 - diff --git "a/content/zh/docs/Container/\347\255\211\345\276\205\345\256\271\345\231\250\351\200\200\345\207\272.md" "b/content/zh/docs/Container/\347\255\211\345\276\205\345\256\271\345\231\250\351\200\200\345\207\272.md" deleted file mode 100644 index cd8996ce4e7b03049507f34d9f823f43a85c7828..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\347\255\211\345\276\205\345\256\271\345\231\250\351\200\200\345\207\272.md" +++ /dev/null @@ -1,50 +0,0 @@ -# 等待容器退出 - -## 描述 - -isula wait用于等待一个或者多个容器退出。仅支持runtime类型为lcr的容器。 - -## 用法 - -``` -isula wait [OPTIONS] CONTAINER [CONTAINER...] -``` - -## 参数 - -wait命令支持参数参考下表。 - -**表 1** wait命令参数列表 - - - - - - - - - - - - - - -

命令

-

参数

-

说明

-

wait

-

-H, --host

-

指定要连接的iSulad socket文件路径

-

/

-

阻塞,直到容器停止,然后打印退出代码

-
- -## 示例 - -等待单个容器退出 - -``` -$ isula wait c75284634beeede3ab86c828790b439d16b6ed8a537550456b1f94eb852c1c0a - 137 -``` - diff --git "a/content/zh/docs/Container/\347\256\241\347\220\206\345\256\211\345\205\250\345\256\271\345\231\250\347\232\204\347\224\237\345\221\275\345\221\250\346\234\237.md" "b/content/zh/docs/Container/\347\256\241\347\220\206\345\256\211\345\205\250\345\256\271\345\231\250\347\232\204\347\224\237\345\221\275\345\221\250\346\234\237.md" index 47ecc885a2500bb07e1cc7879dba16c6408cfaaa..17648bbfddb7319853dd551af9a320e892548515 100644 --- "a/content/zh/docs/Container/\347\256\241\347\220\206\345\256\211\345\205\250\345\256\271\345\231\250\347\232\204\347\224\237\345\221\275\345\221\250\346\234\237.md" +++ "b/content/zh/docs/Container/\347\256\241\347\220\206\345\256\211\345\205\250\345\256\271\345\231\250\347\232\204\347\224\237\345\221\275\345\221\250\346\234\237.md" @@ -1,2 +1,105 @@ -# 管理安全容器的生命周期 - +# 管理安全容器的生命周期 + +- [管理安全容器的生命周期](#管理安全容器的生命周期) + - [启动安全容器](#启动安全容器) + - [停止安全容器](#停止安全容器) + - [删除安全容器](#删除安全容器) + - [在容器中执行一条新的命令](#在容器中执行一条新的命令) + + +## 启动安全容器 + +用户可以使用docker-engine或者iSulad作为安全容器的容器引擎,两者的调用方式类似,请用户自行选择一种方式启动安全容器。 + +启动安全容器的操作步骤如下: + +1. 确保安全容器组件已经正确安装部署。 +2. 准备容器镜像。假设容器镜像为busybox,使用docker-engine和iSula容器引擎下载容器镜像的命令分别如下: + + ``` + docker pull busybox + ``` + + ``` + isula pull busybox + ``` + +3. 启动一个安全容器。使用docker-engine和iSula容器引擎启动安全容器的命令分别如下: + + ``` + docker run -tid --runtime kata-runtime --network none busybox + ``` + + ``` + isula run -tid --runtime kata-runtime --network none busybox + ``` + + >![](public_sys-resources/icon-note.gif) **说明:** + >安全容器网络使用仅支持CNI网络,不支持CNM网络,不支持使用-p和--expose暴露容器端口,使用安全容器时需指定参数--net=none。 + +4. 启动一个Pod + 1. 启动pause容器并根据回显获取pod的sandbox-id。使用docker-engine和iSula容器引擎启动的命令分别如下: + + ``` + docker run -tid --runtime kata-runtime --network none --annotation io.kubernetes.docker.type=podsandbox + ``` + + ``` + isula run -tid --runtime kata-runtime --network none --annotation io.kubernetes.cri.container-type=sandbox + ``` + +    + + 1. 创建业务容器并加入到这个pod中。使用docker-engine和iSula容器引擎创建的命令分别如下: + + ``` + docker run -tid --runtime kata-runtime --network none --annotation io.kubernetes.docker.type=container --annotation io.kubernetes.sandbox.id= busybox + ``` + + ``` + isula run -tid --runtime kata-runtime --network none --annotation io.kubernetes.cri.container-type=container --annotation io.kubernetes.cri.sandbox-id= busybox + ``` + + --annotation用于容器类型的标注,这里的docker-engine和isula提供该字段,上游社区的开源docker引擎则不提供。 + + + +## 停止安全容器 + +- 停止一个安全容器。 + + ``` + docker stop + ``` + +- 停止一个Pod。 + + Pod停止需要注意顺序,pause容器与Pod生命周期相同,因此先停止业务容器后再停止pause容器。 + + +## 删除安全容器 + +删除前请确保容器已经停止: + +``` +docker rm +``` + +如果需要强制删除一个正在运行的容器,可以使用**-f**强制删除: + +``` +docker rm -f +``` + +## 在容器中执行一条新的命令 + +由于pause容器仅作为占位容器,如果启动一个Pod时,请在业务容器内执行新的命令,pause容器并没有相应的指令;如果只启动一个容器时,则可以直接执行新增命令: + +``` +docker exec -ti +``` + +>![](public_sys-resources/icon-note.gif) **说明:** +>1. 如遇到docker exec -ti进入容器的同时,另一终端执行docker restart或者docker stop命令造成exec界面卡住的情况,可使用Ctrl+P+Q退出docker exec操作界面。 +>2. 如果使用-d参数则命令在后台执行,不会打印错误信息,其退出码也不能作为命令执行是否正确的判断依据。 + diff --git "a/content/zh/docs/Container/\347\263\273\347\273\237\345\256\271\345\231\250.md" "b/content/zh/docs/Container/\347\263\273\347\273\237\345\256\271\345\231\250.md" index 7d26863612ec6fafbcafb817890f31e491989384..f9432195d79c18e57e4f49fe5094a2be80aea1c4 100644 --- "a/content/zh/docs/Container/\347\263\273\347\273\237\345\256\271\345\231\250.md" +++ "b/content/zh/docs/Container/\347\263\273\347\273\237\345\256\271\345\231\250.md" @@ -1 +1,2 @@ -# 系统容器 +# 系统容器 +系统容器主要应对在重计算、高性能、大并发的场景下,重型应用和业务云化的问题。相比较虚拟机技术,系统容器可直接继承物理机特性,同时具备性能更优良,较少overhead的优点。从系统资源分配来看,系统容器在有限资源上相比虚拟机可分配更多计算单元,降低成本,通过系统容器可以构建产品的差异化竞争力,提供计算密度更高,价格更便宜,性能更优良的的计算单元实例。 \ No newline at end of file diff --git "a/content/zh/docs/Container/\347\263\273\347\273\237\346\216\211\347\224\265\345\275\261\345\223\215.md" "b/content/zh/docs/Container/\347\263\273\347\273\237\346\216\211\347\224\265\345\275\261\345\223\215.md" deleted file mode 100644 index 5c896b65f6b0af6d3645dde47f3fd9f236899889..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\347\263\273\347\273\237\346\216\211\347\224\265\345\275\261\345\223\215.md" +++ /dev/null @@ -1,17 +0,0 @@ -# 系统掉电影响 - -主机意外掉电或系统panic等场景下,由于docker daemon的状态无法及时刷新到磁盘,导致重启后docker daemon状态不正常,可能出现的问题有(包括但不限于): - -- 掉电前创建的容器,重启后docker ps -a看不到,该问题是因为该容器的状态文件没有刷新到磁盘,从而导致重启后daemon无法获取到该容器的状态(镜像、卷、网络等也可能会有类似问题)。 -- 掉电前某个文件正处于写入状态,尚未完全写入,重启后daemon重新加载该文件发现文件格式不正常或内容不完整,导致重启加载出错。 -- 针对掉电时会破坏docker DB的情况,在重启节点时会清理data-root下面的db文件。因此重启前创建的如下信息在重启后会被删除: - - network,用docker network创建的资源会在重启后清除。 - - volume,用 docker volume创建的资源会在重启后删除。 - - 构建缓存,构建缓存信息会在重启后删除。 - - containerd保存的元数据,由于启动容器会重建containerd元数据,重启节点会清理containerd中保存的元数据。 - - >![](public_sys-resources/icon-note.gif) **说明:** - >用户若选择采用手动清理恢复环境的方式,可通过配置环境变量“DISABLE\_CRASH\_FILES\_DELETE=true”屏蔽daemon掉电重启时db文件清理功能。 - - - diff --git "a/content/zh/docs/Container/\347\272\246\346\235\237.md" "b/content/zh/docs/Container/\347\272\246\346\235\237.md" deleted file mode 100644 index f693b233bcacb7e235764413fe1d488dd808adf1..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\347\272\246\346\235\237.md" +++ /dev/null @@ -1,42 +0,0 @@ -# 约束 - -1. 如果创建sandbox时,PodSandboxConfig参数中配置了log\_directory,则所有属于该sandbox的container在创建时必须在ContainerConfig中指定log\_path,否则可能导致容器无法使用CRI接口启动,甚至无法使用CRI接口删除。 - - 容器的真实LOGPATH=log\_directory/log\_path,如果log\_path不配置,那么最终的LOGPATH会变为LOGPATH=log\_directory。 - - - 如果该路径不存在,isulad在启动容器时会创建一个软链接,指向最终的容器日志真实路径,此时log\_directory变成一个软链接,此时有两种情况: - 1. 第一种情况,如果该sandbox里其它容器也没配置log\_path,在启动其它容器时,log\_directory会被删除,然后重新指向新启动容器的log\_path,导致之前启动的容器日志指向后面启动容器的日志。 - 2. 第二种情况,如果该sandbox里其它容器配置了log\_path,则该容器的LOGPATH=log\_directory/log\_path,由于log\_directory实际是个软链接,使用log\_directory/log\_path为软链接指向容器真实日志路径时,创建会失败。 - - - 如果该路径存在,isulad在启动容器时首先会尝试删除该路径(非递归),如果该路径是个文件夹,且里面有内容,删除会失败,从而导致创建软链接失败,容器启动失败,删除该容器时,也会出现同样的现象,导致删除失败。 - -2. 如果创建sandbox时,PodSandboxConfig参数中配置了log\_directory,且container创建时在ContainerConfig中指定log\_path,那么最终的LOGPATH=log\_directory/log\_path,isulad不会递归的创建LOGPATH,因而用户必须保证dirname\(LOGPATH\)存在,即最终的日志文件的上一级路径存在。 -3. 如果创建sandbox时,PodSandboxConfig参数中配置了log\_directory,如果有两个或多个container创建时在ContainerConfig中指定了同一个log\_path,或者不同的sandbox内的容器最终指向的LOGPATH是同一路径,若容器启动成功,则后启动的容器日志路径会覆盖掉之前启动的容器日志路径。 -4. 如果远程镜像仓库中镜像内容发生变化,调用CRI Pull image接口重新下载该镜像时,若本地原来存储有原镜像,则原镜像的镜像名称、TAG会变更为“none” - - 举例如下: - - 本地已存储镜像: - - ``` - IMAGE TAG IMAGE ID SIZE - rnd-dockerhub.huawei.com/pproxyisulad/test latest 99e59f495ffaa 753kB - ``` - - 远程仓库中rnd-dockerhub.huawei.com/pproxyisulad/test:latest 镜像更新后,重新下载后: - - ``` - IMAGE TAG IMAGE ID SIZE - 99e59f495ffaa 753kB - rnd-dockerhub.huawei.com/pproxyisulad/test latest d8233ab899d41 1.42MB - ``` - - 使用isula images 命令行查询,REF显示为"-": - - ``` - REF IMAGE ID CREATED SIZE - rnd-dockerhub.huawei.com/pproxyisulad/test:latest d8233ab899d41 2019-02-14 19:19:37 1.42MB - - 99e59f495ffaa 2016-05-04 02:26:41 753kB - ``` - - diff --git "a/content/zh/docs/Container/\347\272\246\346\235\237\351\231\220\345\210\266.md" "b/content/zh/docs/Container/\347\272\246\346\235\237\351\231\220\345\210\266.md" deleted file mode 100644 index 81b9ba85263f6c859c6e63619d72456af170f100..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\347\272\246\346\235\237\351\231\220\345\210\266.md" +++ /dev/null @@ -1,47 +0,0 @@ -# 约束限制 - -- 高并发场景(并发启动200容器)下,glibc的内存管理机制会导致内存空洞以及虚拟内存较大(例如10GB)的问题。该问题是高并发场景下glibc内存管理机制的限制,而不是内存泄露,不会导致内存消耗无限增大。可以通过设置MALLOC\_ARENA\_MAX环境变量来减少虚拟内存的问题,而且可以增大减少物理内存的概率。但是这个环境变量会导致iSulad的并发性能下降,需要用户根据实际情况做配置。 - - ``` - 参考实践情况,平衡性能和内存,可以设置MALLOC_ARENA_MAX为4。(在arm64服务器上面对iSulad的性能影响在10%以内) - - 配置方法: - 1. 手动启动iSulad的场景,可以直接export MALLOC_ARENA_MAX=4,然后再启动iSulad即可。 - 2. systemd管理iSulad的场景,可以修改/etc/sysconfig/iSulad,增加一条MALLOC_ARENA_MAX=4即可。 - ``` - -- 为daemon指定各种运行目录时的注意事项 - - 以--root为例,当使用/new/path/作为daemon新的Root Dir时,如果/new/path/下已经存在文件,且目录或文件名与isulad需要使用的目录或文件名冲突(例如:engines、mnt等目录)时,isulad可能会更新原有目录或文件的属性,包括属主、权限等为自己的属主和权限。 - - 所以,用户需要明白重新指定各种运行目录和文件,会对冲突目录、文件属性的影响。建议用户指定的新目录或文件为isulad专用,避免冲突导致的文件属性变化以及带来的安全问题。 - -- 日志文件管理: - - >![](public_sys-resources/icon-notice.gif) **须知:** - >日志功能对接: iSulad由systemd管理,日志也由systemd管理,然后传输给rsyslogd。rsyslog默认会对写日志速度有限制,可以通过修改/etc/rsyslog.conf文件,增加"$imjournalRatelimitInterval 0"配置项,然后重启rsyslogd的服务即可。 - -- 命令行参数解析限制 - - 使用iSulad命令行接口时,其参数解析方式与docker略有不同,对于命令行中带参数的flag,不管使用长flag还是短flag,只会将该flag后第一个空格或与flag直接相连接的'='后的字符串作为flag的参数,具体如下: - - 1. 使用短flag时,与“-”连接的字符串中的每个字符都被当作短flag(当有=号时,=号后的字符串当成=号前的短flag的参数)。 - - isula run -du=root busybox 等价于 isula run -du root busybox 或 isula run -d -u=root busybox 或 isula run -d -u root busybox ,当使用isula run -du:root时,由于-:不是有效的短flag,因此会报错。前述的命令行也等价于isula run -ud root busybox,但不推荐这种使用方式,可能带来语义困扰。 - - 1. 使用长flag时,与“--”连接的字符串作为一个整体当成长flag,若包含=号,则=号前的字符串为长flag,=号后的为参数。 - - ``` - isula run --user=root busybox - ``` - - 等价于 - - ``` - isula run --user root busybox - ``` - - -- 启动一个isulad容器,不能够以非root用户进行isula run -i/-t/-ti以及isula attach/exec操作。 -- iSulad对接OCI容器时,仅支持kata-runtime启动OCI容器。 - diff --git a/content/zh/docs/Container/events.md "b/content/zh/docs/Container/\347\273\237\350\256\241\344\277\241\346\201\257-4.md" similarity index 38% rename from content/zh/docs/Container/events.md rename to "content/zh/docs/Container/\347\273\237\350\256\241\344\277\241\346\201\257-4.md" index 684ddeb4a10eef354664f7d2c89c6b4244d5abd2..b0657e392f6f20ee2db857f4d89893662ea0ff56 100644 --- a/content/zh/docs/Container/events.md +++ "b/content/zh/docs/Container/\347\273\237\350\256\241\344\277\241\346\201\257-4.md" @@ -1,27 +1,110 @@ -# events - -用法:**docker events \[OPTIONS\]** - -功能:从docker daemon中获取实时事件 - -选项: - ---since="" 显示指定时间戳之后的事件 - ---until="" 显示直到指定之间戳的事件 - -示例: - -该示例中,执行docker events后,用docker run创建并启动一个容器,docker events将输出create事件和start事件。 - -``` -$ sudo docker events -2019-08-28T16:23:09.338838795+08:00 container create 53450588a20800d8231aa1dc4439a734e16955387efb5f259c47737dba9e2b5e (image=busybox:latest, name=eager_wu) -2019-08-28T16:23:09.339909205+08:00 container attach 53450588a20800d8231aa1dc4439a734e16955387efb5f259c47737dba9e2b5e (image=busybox:latest, name=eager_wu) -2019-08-28T16:23:09.397717518+08:00 network connect e2e20f52662f1ee2b01545da3b02e5ec7ff9c85adf688dce89a9eb73661dedaa (container=53450588a20800d8231aa1dc4439a734e16955387efb5f259c47737dba9e2b5e, name=bridge, type=bridge) -2019-08-28T16:23:09.922224724+08:00 container start 53450588a20800d8231aa1dc4439a734e16955387efb5f259c47737dba9e2b5e (image=busybox:latest, name=eager_wu) -2019-08-28T16:23:09.924121158+08:00 container resize 53450588a20800d8231aa1dc4439a734e16955387efb5f259c47737dba9e2b5e (height=48, image=busybox:latest, name=eager_wu, width=210) -``` - -   - +# 统计信息 + +- [统计信息](#统计信息) + - [events](#events) + - [info](#info) + - [version](#version) + + +## events + +用法:**docker events \[OPTIONS\]** + +功能:从docker daemon中获取实时事件 + +选项: + +\--since="" 显示指定时间戳之后的事件 + +\--until="" 显示直到指定之间戳的事件 + +示例: + +该示例中,执行docker events后,用docker run创建并启动一个容器,docker events将输出create事件和start事件。 + +``` +$ sudo docker events +2019-08-28T16:23:09.338838795+08:00 container create 53450588a20800d8231aa1dc4439a734e16955387efb5f259c47737dba9e2b5e (image=busybox:latest, name=eager_wu) +2019-08-28T16:23:09.339909205+08:00 container attach 53450588a20800d8231aa1dc4439a734e16955387efb5f259c47737dba9e2b5e (image=busybox:latest, name=eager_wu) +2019-08-28T16:23:09.397717518+08:00 network connect e2e20f52662f1ee2b01545da3b02e5ec7ff9c85adf688dce89a9eb73661dedaa (container=53450588a20800d8231aa1dc4439a734e16955387efb5f259c47737dba9e2b5e, name=bridge, type=bridge) +2019-08-28T16:23:09.922224724+08:00 container start 53450588a20800d8231aa1dc4439a734e16955387efb5f259c47737dba9e2b5e (image=busybox:latest, name=eager_wu) +2019-08-28T16:23:09.924121158+08:00 container resize 53450588a20800d8231aa1dc4439a734e16955387efb5f259c47737dba9e2b5e (height=48, image=busybox:latest, name=eager_wu, width=210) +``` + +   + +## info + +用法:**docker info** + +功能:显示docker系统级的相关信息,包括系统中的Container数量、Image数量、Image的存储驱动、容器的执行驱动、内核版本、主机操作系统版本等信息。 + +选项:无 + +示例: + +``` +$ sudo docker info +Containers: 4 + Running: 3 + Paused: 0 + Stopped: 1 +Images: 45 +Server Version: 18.09.0 +Storage Driver: devicemapper + Pool Name: docker-thinpool + Pool Blocksize: 524.3kB + Base Device Size: 10.74GB + Backing Filesystem: ext4 + Udev Sync Supported: true + Data Space Used: 11GB + Data Space Total: 51GB + Data Space Available: 39.99GB + Metadata Space Used: 5.083MB + Metadata Space Total: 532.7MB + Metadata Space Available: 527.6MB + Thin Pool Minimum Free Space: 5.1GB + Deferred Removal Enabled: true + Deferred Deletion Enabled: true + Deferred Deleted Device Count: 0 +...... +``` + +   + +## version + +用法:**docker version** + +功能:显示docker的版本信息,包括Client版本、Server版本、Go版本、OS/Arch等信息 + +选项:无 + +示例: + +``` +$ sudo docker version +Client: + Version: 18.09.0 + EulerVersion: 18.09.0.48 + API version: 1.39 + Go version: go1.11 + Git commit: cbf6283 + Built: Mon Apr 1 00:00:00 2019 + OS/Arch: linux/arm64 + Experimental: false + +Server: + Engine: + Version: 18.09.0 + EulerVersion: 18.09.0.48 + API version: 1.39 (minimum version 1.12) + Go version: go1.11 + Git commit: cbf6283 + Built: Mon Apr 1 00:00:00 2019 + OS/Arch: linux/arm64 + Experimental: false +``` + +   + diff --git "a/content/zh/docs/Container/\347\273\237\350\256\241\344\277\241\346\201\257.md" "b/content/zh/docs/Container/\347\273\237\350\256\241\344\277\241\346\201\257.md" deleted file mode 100644 index d6e96f1e495b4a2651e248d924daf347f02194db..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\347\273\237\350\256\241\344\277\241\346\201\257.md" +++ /dev/null @@ -1,2 +0,0 @@ -# 统计信息 - diff --git "a/content/zh/docs/Container/\347\275\221\345\215\241\346\256\213\347\225\231.md" "b/content/zh/docs/Container/\347\275\221\345\215\241\346\256\213\347\225\231.md" deleted file mode 100644 index b3ec1058b1583b11b5eaad014683b7cdd5fd7ab1..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\347\275\221\345\215\241\346\256\213\347\225\231.md" +++ /dev/null @@ -1,4 +0,0 @@ -# 网卡残留 - -使用bridge模式启动容器的过程中,强制退出daemon可能导致网卡残留。使用bridge网络模式,当docker创建容器时,会先在host上创建一对veth,然后再把该网卡信息存到数据库中,如果在创建完成,存到docker的数据库之前,daemon被强制退出,那么该网卡无法被docker关联,下次启动也无法删除(docker本身会清理自己数据库中不用的网卡),从而造成网卡残留。 - diff --git "a/content/zh/docs/Container/\347\275\221\345\215\241\347\256\241\347\220\206.md" "b/content/zh/docs/Container/\347\275\221\345\215\241\347\256\241\347\220\206.md" deleted file mode 100644 index a33f647917d5e8bde2dedc24f436f7e92368f3f9..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\347\275\221\345\215\241\347\256\241\347\220\206.md" +++ /dev/null @@ -1,105 +0,0 @@ -# 网卡管理 - -## 功能描述 - -isulad-tools支持将宿主机上的物理网卡或虚拟网卡插入到容器,在不使用网卡的时候从容器中删除归还给宿主机,并且可以动态修改网卡配置。插入物理网卡即把宿主机上一块网卡直接添加到容器中,插入虚拟网卡则需要先创建一对veth pair,之后将一端插入到容器中。 - -## 命令格式 - -``` -isulad-tools [COMMADN][OPTIONS] -``` - -其中: - -COMMAND:网卡管理相关的命令。 - -OPTIONS:网卡管理命令支持的选项。 - -container\_id:容器id。 - -## 参数说明 - - - - - - - - - - - - - - - - - - - - - - - - -

命令

-

功能说明

-

选项说明

-

add-nic

-

给容器创建一个网卡。

-

支持的选项如下:

-
  • --type:设置网卡类型,当前只支持eth/veth。
  • --name:设置网卡名称,格式为[host:]<container>,host不写是随机名字。
  • --ip:设置网卡IP地址。
  • --mac:设置网卡mac地址。
  • --bridge:设置网卡绑定的网桥。
  • --mtu:设置网卡的mtu值,默认1500。
  • --update-config-only:如果此flag设置了,只更新配置文件,不会实际做添加网卡的动作。
  • --qlen:配置qlen值,默认为1000。
-

remove-nic

-

从容器中将网卡删除,还原至宿主机。

-

支持的选项如下:

-
  • --type:设置网卡的类型。
  • --name:设置网卡的名称,格式为[host:]<container>。
-

list-nic

-

列出容器中所有的网卡。

-

支持的选项如下:

-
  • --pretty:按照json格式输出。
  • --filter:按照过滤格式输出,比如--filter '{"ip":"192.168.3.4/24", "Mtu":1500}'。
-

update-nic

-

更改容器内指定网卡的配置参数。

-

支持的选项如下:

-
  • --name:容器内网卡名(必须项)。
  • --ip:设置网卡IP地址。
  • --mac:设置网卡mac地址。
  • --bridge:设置网卡绑定的网桥。
  • --mtu:设置网卡的mtu值。
  • --update-config-only:如果此flag设置了,只更新配置文件,不会实际做更新网卡的动作。
  • --qlen:配置qlen值。
-
- -## 约束限制 - -- 支持添加物理网卡(eth)和虚拟网卡(veth)两种类型。 -- 在添加网卡时可以同时对网卡进行配置,参数包括--ip/--mac/--bridge/--mtu/--qlen。 -- 支持最多添加8个物理网卡到容器。 -- 使用isulad-tools add-nic向容器添加eth网卡后,如果不加hook,在容器退出前必须手工将nic删除,否则在host上的eth网卡的名字会被更改成容器内的名字。 -- 对于物理网卡(1822 vf网卡除外),add-nic必须使用原mac地址,update-nic禁止修改mac地址,容器内也不允许修改mac地址。 -- 使用isulad-tools add-nic时,设置mtu值,设置范围跟具体的网卡型号有关。 -- 使用isulad-tools向容器添加网卡和路由时,建议先执行add-nic添加网卡,然后执行add-route添加路由;使用isulad-tools从容器删除网卡和路由时,建议先执行remove-route删除路由,然后执行remove-nic删除网卡。 -- 使用isulad-tools添加网卡时,一块网卡只能添加到一个容器中。 - -## 使用示例 - -- 启动一个系统容器,指定hook spec为isulad hook执行配置脚本: - - ``` - [root@localhost ~]# isula run -tid --hook-spec /etc/isulad-tools/hookspec.json --system-container --external-rootfs /root/root-fs none init - 2aaca5c1af7c872798dac1a468528a2ccbaf20b39b73fc0201636936a3c32aa8 - ``` - - -- 添加一个虚拟网卡到容器 - - ``` - [root@localhost ~]# isulad-tools add-nic --type "veth" --name abc2:bcd2 --ip 172.17.28.5/24 --mac 00:ff:48:13:xx:xx --bridge docker0 2aaca5c1af7c - Add network interface to container 2aaca5c1af7c (bcd2,abc2) done - ``` - -- 添加一个物理网卡到容器 - - ``` - [root@localhost ~]# isulad-tools add-nic --type "eth" --name eth3:eth1 --ip 172.17.28.6/24 --mtu 1300 --qlen 2100 2aaca5c1af7c - Add network interface to container 2aaca5c1af7c (eth3,eth1) done - ``` - - >![](public_sys-resources/icon-note.gif) **说明:** - >添加虚拟网卡或物理网卡时,请确保网卡处于空闲状态,添加正在使用的网卡会导致系统网络断开。 - - diff --git "a/content/zh/docs/Container/\350\216\267\345\217\226\345\256\271\345\231\250\346\227\245\345\277\227.md" "b/content/zh/docs/Container/\350\216\267\345\217\226\345\256\271\345\231\250\346\227\245\345\277\227.md" deleted file mode 100644 index f9bd0a54a57291e89f8543a358b6455618bd23c0..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\350\216\267\345\217\226\345\256\271\345\231\250\346\227\245\345\277\227.md" +++ /dev/null @@ -1,62 +0,0 @@ -# 获取容器日志 - -## 描述 - -isula logs用于获取容器的日志。仅支持runtime类型为lcr的容器。 - -## 用法 - -``` -isula logs [OPTIONS] [CONTAINER...] -``` - -## 参数 - -logs命令支持参数参考下表。 - -**表 1** logs命令参数列表 - - - - - - - - - - - - - - - - - -

命令

-

参数

-

说明

-

logs

-

  

-

-H, --host

-

指定要连接的iSulad socket文件路径

-

-f, --follow

-

跟踪日志输出

-

--tail

-

显示日志行数

-
- -## 约束限制 - -- 容器串口logs日志记录功能,默认为开启状态,需要关闭可以通过 isula create --log-opt disable-log=true 或 isula run --log-opt disable-log=true 关闭。 - -## 示例 - -获取容器日志 - -``` -$ isula logs 6a144695f5dae81e22700a8a78fac28b19f8bf40e8827568b3329c7d4f742406 -hello, world -hello, world -hello, world -``` - diff --git "a/content/zh/docs/Container/\350\265\204\346\272\220\347\232\204\345\205\261\344\272\253-27.md" "b/content/zh/docs/Container/\350\265\204\346\272\220\347\232\204\345\205\261\344\272\253-27.md" deleted file mode 100644 index d692fe32beb66e43e6fd5fc6a3c0acd2126eca0b..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\350\265\204\346\272\220\347\232\204\345\205\261\344\272\253-27.md" +++ /dev/null @@ -1,6 +0,0 @@ -# 资源的共享 - -由于安全容器运行于虚拟化隔离的轻量虚拟机内,故无法访问Host上某些namespace下的资源,因此启动时不支持--net host,--ipc host,--pid host,--uts host。 - -当启动一个Pod时,同一个Pod中的所有容器默认共享同一个net namespace和ipc namespace。如果同一个Pod中的容器需要共享pid namespace,则可以通过Kubernetes进行配置,Kubernetes 1.11版本该值为默认关闭。 - diff --git "a/content/zh/docs/Container/\350\265\204\346\272\220\347\232\204\345\205\261\344\272\253.md" "b/content/zh/docs/Container/\350\265\204\346\272\220\347\232\204\345\205\261\344\272\253.md" deleted file mode 100644 index cfab1afff80cc0f8fd8405767362ef70fbfb84c9..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\350\265\204\346\272\220\347\232\204\345\205\261\344\272\253.md" +++ /dev/null @@ -1,73 +0,0 @@ -# 资源的共享 - -## 描述 - -容器间或者容器与host之间可以共享namespace信息,包括pid, net, ipc, uts。 - -## 用法 - -isula create/run时使用namespace相关的参数共享资源,具体参数见下方参数列表。 - -## 参数 - -create/run时可以指定下列参数。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

参数项

-

参数说明

-

取值范围

-

是否必选

-

--pid

-

指定要共享的pid namespace

-

[none, host, container:<containerID>],none表示不共享,host表示与host共用namespace,container:<containerID>表示与容器containerID共享同一个namespace

-

-

--net

-

指定要共享的net namespace

-

[none, host, container:<containerID>],none表示不共享,host表示与host共用namespace,container:<containerID>表示与容器containerID共享同一个namespace

-

-

--ipc

-

指定要共享的ipc namespace

-

[none, host, container:<containerID>],none表示不共享,host表示与host共用namespace,container:<containerID>表示与容器containerID共享同一个namespace

-

-

--uts

-

指定要共享的uts namespace

-

[none, host, container:<containerID>],none表示不共享,host表示与host共用namespace,container:<containerID>表示与容器containerID共享同一个namespace

-

-
- -## 示例 - -如果两个容器需要共享同一个pid namespace,在运行容器时,直接加上--pid container: 即可,如: - -``` -isula run -tid --name test_pid busybox sh -isula run -tid --name test --pid container:test_pid busybox sh -``` - diff --git "a/content/zh/docs/Container/\350\267\257\347\224\261\347\256\241\347\220\206.md" "b/content/zh/docs/Container/\350\267\257\347\224\261\347\256\241\347\220\206.md" deleted file mode 100644 index 49e3a7ee5c70cec47db0fa7b724493cd55d5845a..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\350\267\257\347\224\261\347\256\241\347\220\206.md" +++ /dev/null @@ -1,115 +0,0 @@ -# 路由管理 - -## 功能描述 - -isulad-tools工具可以对系统容器进行动态添加/删除路由表。 - -## 命令格式 - -``` -isulad-tools [COMMADN][OPTIONS] [ARG...] -``` - -其中: - -COMMAND:路由管理相关的命令。 - -OPTIONS:路由管理命令支持的选项。 - -container\_id:容器id。 - -ARG:命令对应的参数。 - -## 接口说明 - - - - - - - - - - - - - - - - - - - - - - - - -

命令

-

功能说明

-

选项说明

-

参数说明

-

add-route

-

将网络路由规则添加到容器中。

-

支持的选项如下:

-

--update-config-only:添加此参数,只更新配置文件,不做实际的更新路由表的动作。

-

参数格式:[{rule1},{rule2}]

-

rule样例:

-

'[{"dest":"default", "gw":"192.168.10.1"},{"dest":"192.168.0.0/16","dev":"eth0","src":"192.168.1.2"}]'

-
  • dest:目标网络,如果为空则是默认网关。
  • src:路由源IP。
  • gw:路由网关。
  • dev:网络设备。
-

remove-route

-

从容器中删除路由。

-

支持的选项如下:

-

--update-config-only:设置此参数,只更新配置文件,不做实际从容器中删除路由的动作。

-

参数格式:[{rule1},{rule2}]

-

rule样例:

-

'[{"dest":"default", "gw":"192.168.10.1"},{"dest":"192.168.0.0/16","dev":"eth0","src":"192.168.1.2"}]'

-
  • dest:目标网络,如果为空则是默认网关。
  • src:路由源IP。
  • gw:路由网关。
  • dev:网络设备。
-

list-route

-

列出容器中所有的路由规则。

-

支持的选项如下:

-
  • --pretty:按照json格式输出。
  • --filter:按照过滤格式输出,比如--filter '{"ip":"192.168.3.4/24", "Mtu":1500}'。
-

-
- -## 约束限制 - -- 使用isulad-tools向容器添加网卡和路由时,建议先执行add-nic添加网卡,然后执行add-route添加路由;使用isulad-tools从容器删除网卡和路由时,建议先执行remove-route删除路由,然后执行remove-nic删除网卡。 -- 向容器内添加路由规则时,需确保所添加的路由规则与容器内现有的路由规则不会产生冲突。 - -## 使用示例 - -- 启动一个系统容器,指定hook spec为isulad hook执行配置脚本: - - ``` - [root@localhost ~]# isula run -tid --hook-spec /etc/isulad-tools/hookspec.json --system-container --external-rootfs /root/root-fs none init - 0d2d68b45aa0c1b8eaf890c06ab2d008eb8c5d91e78b1f8fe4d37b86fd2c190b - ``` - - -- isulad-tools向系统容器添加一块物理网卡: - - ``` - [root@localhost ~]# isulad-tools add-nic --type "eth" --name enp4s0:eth123 --ip 172.17.28.6/24 --mtu 1300 --qlen 2100 0d2d68b45aa0 - Add network interface (enp4s0) to container (0d2d68b45aa0,eth123) done - ``` - - -- isulad-tools添加一条路由规则到系统容器,注意格式需按照'\[\{"dest":"default", "gw":"192.168.10.1"\},\{"dest":"192.168.0.0/16","dev":"eth0","src":"192.168.1.2"\}\]'来配置。如果dest为空会自动填成default。 - - ``` - [root@localhost ~]# isulad-tools add-route 0d2d68b45aa0 '[{"dest":"172.17.28.0/32", "gw":"172.17.28.5","dev":"eth123"}]' - Add route to container 0d2d68b45aa0, route: {dest:172.17.28.0/32,src:,gw:172.17.28.5,dev:eth123} done - ``` - -- 查看容器内是否新增一条路由规则: - - ``` - [root@localhost ~]# isula exec -it 0d2d68b45aa0 route - Kernel IP routing table - Destination Gateway Genmask Flags Metric Ref Use Iface - 172.17.28.0 172.17.28.5 255.255.255.255 UGH 0 0 0 eth123 - 172.17.28.0 0.0.0.0 255.255.255.0 U 0 0 0 eth123 - ``` - - diff --git "a/content/zh/docs/Container/\350\277\220\350\241\214\345\256\271\345\231\250.md" "b/content/zh/docs/Container/\350\277\220\350\241\214\345\256\271\345\231\250.md" deleted file mode 100644 index b8b472150316df48cd1a3ccf081f0a95489ddd5a..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\350\277\220\350\241\214\345\256\271\345\231\250.md" +++ /dev/null @@ -1,382 +0,0 @@ -# 运行容器 - -## 描述 - -isula run命令命令用于创建一个新的容器。会使用指定的容器镜像创建容器读写层,并且为运行指定的命令做好准备。创建完成后,使用指定的命令启动该容器。run命令相当于create然后start容器。 - -## 用法 - -``` -isula run [OPTIONS] ROOTFS|IMAGE [COMMAND] [ARG...] -``` - -## 参数 - -run命令支持参数参考下表。 - -**表 1** run命令参数列表 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

命令

-

参数

-

说明

-

run

-

--annotation

-

设置容器的annotations。例如支持native.umask选项:

-
--annotation native.umask=normal # 启动的容器umask值为0022
---annotation native.umask=secure # 启动的容器umask值为0027
-

注意如果没有配置该参数,则使用isulad中的umask配置。

-

--cap-add

-

添加Linux功能

-

--cap-drop

-

删除Linux功能

-

--cgroup-parent

-

指定容器cgroup父路径

-

--cpuset-cpus

-

允许执行的CPU(e.g. 0-3,0,1)

-

--cpu-shares

-

CPU份额(相对权重)

-

--cpu-quota

-

限制CPU CFS(完全公平调度器)的配额

-

-d, --detach

-

后台运行容器并打印容器ID

-

--device=[]

-

为容器添加一个主机设备

-

--dns

-

添加DNS服务器

-

--dns-opt

-

添加DNS选项

-

--dns-search

-

设定容器的搜索域

-

-e, --env

-

设置环境变量

-

--env-file

-

通过文件配置环境变量

-

--entrypoint

-

启动容器时要运行的入口点

-

--external-rootfs=PATH

-

指定一个不由iSulad管理的rootfs(可以为文件夹或块设备)给容器

-

--files-limit

-

调整容器内能够打开的文件句柄数(-1表示不限制)

-

--group-add=[]

-

指定额外的用户组添加到容器

-

--help

-

打印帮助信息

-

--health-cmd

-

在容器内执行的命令

-

--health-exit-on-unhealthy

-

检测到容器非健康时是否杀死容器

-

--health-interval

-

相邻两次命令执行的间隔时间

-

--health-retries

-

健康检查失败最大的重试次数

-

--health-start-period

-

容器初始化时间

-

--health-timeout

-

单次检查命令执行的时间上限

-

--hook-spec

-

钩子配置文件

-

-H, --host

-

指定要连接的iSulad socket文件路径

-

-h, --hostname

-

容器主机名称

-

--hugetlb-limit=[]

-

大页文件限制,例如:--hugetlb-limit 2MB:32MB

-

-i, --interactive

-

即使没有连接到容器的标准输入,也要保持容器的标准输入打开

-

--log-opt=[]

-

日志驱动程序选项,默认禁用记录容器串口日志功能,可以通过"--log-opt disable-log=false"来开启。

-

-m, --memory

-

内存限制

-

--memory-reservation

-

设置容器内存限制,默认与--memory一致。可认为--memory是硬限制,--memory-reservation是软限制;当使用内存超过预设值时,会动态调整(系统回收内存时尝试将使用内存降低到预设值以下),但不确保一定不超过预设值。一般可以和--memory一起使用,数值小于--memory的预设值,最小设置为4MB。

-

--memory-swap

-

正整数,内存 + 交换空间,-1 表示不限制

-

--memory-swappiness

-

正整数,swappiness参数值可设置范围在0到100之间。 此参数值越低,就会让Linux系统尽量少用swap分区,多用内存;参数值越高就是反过来,使内核更多的去使用swap空间,默认值为-1,表示使用系统默认值。

-

--mount

-

挂载主机目录到容器中

-

--no-healthcheck

-

禁用健康检查配置

-

--name=NAME

-

容器名

-

--net=none

-

容器连接到网络

-

--pids-limit

-

调整容器内能够执行的进程数(-1表示不限制)

-

--privileged

-

给予容器扩展的特权

-

-R, --runtime

-

容器运行时,参数支持"lcr",忽略大小写,因此"LCR"和"lcr"是等价的

-

--read-only

-

设置容器的根文件系统为只读

-

--restart

-

当容器退出时重启策略

-

系统容器支持--restart on-reboot

-

--rm

-

当容器退出时自动清理容器

-

--storage-opt

-

配置容器的存储驱动选项

-

-t, --tty

-

分配伪终端

-

--ulimit

-

为容器设置ulimit限制

-

-u, --user

-

用户名或UID,格式[<name|uid>][:<group|gid>]

-

-v, --volume=[]

-

挂载一个卷

-
- -## 约束限制 - -- 容器父进程进程退出时,则对应的容器也自动退出。 -- 创建普通容器时父进程不能为init,因为普通容器的权限不够,导致容器可以创建成功,但是attach进去的时候会卡住。 -- 运行容器时,不指定--net,默认hostname为**localhost**。 -- 使用--files-limit参数传入一个很小的值,如1时,启动容器时,iSulad创建cgroup子组后先设置files.limit值,再将容器进程的PID写入该子组的cgroup.procs文件,此时容器进程已经打开超过1个句柄,因而写入报错导致启动失败启动容器会失败。 -- --mount参数和--volume参数同时存在时,如果目的路径有冲突,则--mount会在--volume之后挂载\(即将--volume中的挂载点覆盖掉\)。 - - 备注:轻量级容器的参数中type支持bind或squashfs,当type=squashfs时,src是镜像的路径;原生docker的参数type支持bind、volume、tmpfs。 - -- restart重启策略不支持unless-stopped。 -- 以下三种情况与docker 返回值不一致,docker返回127,轻量级容器返回125 - - --device参数指定主机设备为不存在的设备 - - --hook-spec参数指定不存在的hook json文件 - - --entrypoint 参数指定不存在的入口参数 - -- 使用--volume参数时,由于容器启动时会对/dev/ptmx设备进行删除重建,因此请勿将/dev目录挂载至容器/dev目录,应使用--device对/dev下的设备在容器中进行挂载 -- 禁止使用echo的方式向run命令的stdin输入数据,会导致客户端卡死。应该直接将echo的值作为命令行参数传给容器 - - ``` - [root@localhost ~]# echo ls | isula run -i busybox /bin/sh - - - ^C - [root@localhost ~]# - ``` - - 上述命令出现客户端卡死现象,这是由于上述命令相当于往stdin输入ls,随后EOF被读取,客户端不再发送数据,等待服务端退出,但是服务端无法区分客户端是否需要继续发送数据,因而服务端卡在read数据上,最终导致双方均卡死。 - - 正确的执行方式为: - - ``` - [root@localhost ~]# isula run -i busybox ls - bin - dev - etc - home - proc - root - sys - tmp - usr - var - [root@localhost ~]# - ``` - -- 使用host的根目录(/)作为容器的文件系统,那么在挂载路径时,如果有如下情况 - - **表 2** 挂载情况 - - - - - - - - - - - - - -

Host 路径(source)

-

容器路径(dest

-

/home/test1

-

/mnt/

-

/home/test2

-

/mnt/abc

-
- - >![](public_sys-resources/icon-notice.gif) **须知:** - >第一种情况,先挂载/home/test1,然后挂载/home/test2,这种情况会导致/home/test1的内容覆盖掉原来/mnt下面的内容,这样可能导致/mnt下面不存在abc目录,这样会导致挂载/home/test2到/mnt/abc失败。 - >第二种情况,先挂载/home/test2,然后挂载/home/test1。这种情况,第二次的挂载会把/mnt的内容替换为/home/test1的内容,这样第一次挂载的/home/test2到/mnt/abc的内容就看不到了。 - >因此,不支持第一种使用方式;第二种使用用户需要了解这种数据无法访问的风险 - - >![](public_sys-resources/icon-notice.gif) **须知:** - >- 高并发场景(并发启动200容器)下,glibc的内存管理机制会导致内存空洞以及虚拟内存较大(例如10GB)的问题。该问题是高并发场景下glibc内存管理机制的限制,而不是内存泄露,不会导致内存消耗无限增大。可以通过设置MALLOC\_ARENA\_MAX环境变量来减少虚拟内存的问题,而且可以增大减少物理内存的概率。但是这个环境变量会导致iSulad的并发性能下降,需要用户根据实际情况做配置。 - > ``` - > 参考实践情况,平衡性能和内存,可以设置MALLOC_ARENA_MAX为4。(在arm64服务器上面对iSulad的性能影响在10%以内) - > 配置方法: - > 1. 手动启动iSulad的场景,可以直接export MALLOC_ARENA_MAX=4,然后再启动iSulad即可。 - > 2. systemd管理iSulad的场景,可以修改/etc/sysconfig/iSulad,增加一条MALLOC_ARENA_MAX=4即可。 - > ``` - - -## 示例 - -运行一个新容器 - -``` -$ isula run -itd busybox -9c2c13b6c35f132f49fb7ffad24f9e673a07b7fe9918f97c0591f0d7014c713b -``` - diff --git "a/content/zh/docs/Container/\351\200\200\345\207\272CNI\347\275\221\347\273\234\345\210\227\350\241\250.md" "b/content/zh/docs/Container/\351\200\200\345\207\272CNI\347\275\221\347\273\234\345\210\227\350\241\250.md" deleted file mode 100644 index 24bd3e54c5196022dc4cd5f95fcb651df89b2066..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\351\200\200\345\207\272CNI\347\275\221\347\273\234\345\210\227\350\241\250.md" +++ /dev/null @@ -1,8 +0,0 @@ -# 退出CNI网络列表 - -StopPodSandbox的时候,会调用退出CNI网络的接口,清理网络相关的资源。 - ->![](public_sys-resources/icon-note.gif) **说明:** ->1. 在调用RemovePodSandbox接口之前,至少要调用一次StopPodSandbox接口 ->2. StopPodSandbox调用CNI接口失败,可能导致的网络资源残留。 - diff --git "a/content/zh/docs/Container/\351\200\232\350\277\207systemd\345\220\257\345\212\250\345\256\271\345\231\250.md" "b/content/zh/docs/Container/\351\200\232\350\277\207systemd\345\220\257\345\212\250\345\256\271\345\231\250.md" index 43f33b3ca6b54c01b85ad7f0594e407fdeeeeb3f..401fe4720d49081620d8808d069728b6c042be46 100644 --- "a/content/zh/docs/Container/\351\200\232\350\277\207systemd\345\220\257\345\212\250\345\256\271\345\231\250.md" +++ "b/content/zh/docs/Container/\351\200\232\350\277\207systemd\345\220\257\345\212\250\345\256\271\345\231\250.md" @@ -1,10 +1,10 @@ -# 通过systemd启动容器 +# 通过systemd启动容器 -## 功能描述 +## 功能描述 -系统容器与普通容器最大的差异就在于容器启动的init进程,普通容器无法通过systemd启动系统服务,而系统容器具备这个能力,通过在启动容器时指定 --system-contianer参数可以使能systemd服务。 +系统容器与普通容器最大的差异就在于容器启动的init进程,普通容器无法通过systemd启动系统服务,而系统容器具备这个能力,通过在启动容器时指定\--system-contianer参数可以使能systemd服务。 -## 参数说明 +## 参数说明

命令

@@ -25,19 +25,19 @@
-## 约束限制 +## 约束限制 - systemd服务需要调用一些特殊系统调用,包括mount、umount2、unshare、reboot以及name\_to\_handle\_at,所以在不开启特权容器标签的情况下,系统容器打开了调用上述接口的权限。 - 系统容器都是init启动,init进程不响应表示正常退出的SIGTERM信号,stop默认在10s之后才会强制杀死容器。如果需要快速结束,可以手动指定stop的超时时间。 -- --system-container必须配合--external-rootfs参数一起使用。 +- \--system-container必须配合\--external-rootfs参数一起使用。 - 系统容器内支持运行各类服务,服务的启停通过systemctl来管理,服务之间可能会出现相互依赖关系导致异常情况下某些服务进程出现D/Z状态,使得容器无法正常退出。 - 系统容器内的某些服务进程可能会影响其它操作结果,例如容器内若运行了NetworkManager服务,可能会影响向容器添加网卡的行为(网卡添加成功然后被NetworkManger停掉),导致不可预期的结果。 - 系统容器和主机暂时无法实现udev事件隔离,所以fstab配置也暂不支持。 - systemd服务可能和libcgroup提供的cgconfig服务在功能上出现冲突,建议在容器内去掉libcgroup相关的包或者配置cgconfig服务的Delegate值为no。 -## 使用示例 +## 使用示例 -- 指定--system-container和--external-rootfs参数启动系统容器。 +- 指定\--system-container和\--external-rootfs参数启动系统容器。 ``` [root@localhost ~]# isula run -tid -n systest01 --system-container --external-rootfs /root/myrootfs none init diff --git "a/content/zh/docs/Container/\351\203\250\347\275\262\351\205\215\347\275\256-25.md" "b/content/zh/docs/Container/\351\203\250\347\275\262\351\205\215\347\275\256-25.md" deleted file mode 100644 index a88861d01c3b4617d5ae6ab5400af5e17d7cb8ef..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\351\203\250\347\275\262\351\205\215\347\275\256-25.md" +++ /dev/null @@ -1 +0,0 @@ -# 部署配置 diff --git "a/content/zh/docs/Container/\351\203\250\347\275\262\351\205\215\347\275\256.md" "b/content/zh/docs/Container/\351\203\250\347\275\262\351\205\215\347\275\256.md" deleted file mode 100644 index b3eb2ce9b8ea9aeed6458864d1926f410a4fc749..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\351\203\250\347\275\262\351\205\215\347\275\256.md" +++ /dev/null @@ -1,2 +0,0 @@ -# 部署配置 - diff --git "a/content/zh/docs/Container/\351\205\215\347\275\256TLS\350\256\244\350\257\201\344\270\216\345\274\200\345\220\257\350\277\234\347\250\213\350\256\277\351\227\256.md" "b/content/zh/docs/Container/\351\205\215\347\275\256TLS\350\256\244\350\257\201\344\270\216\345\274\200\345\220\257\350\277\234\347\250\213\350\256\277\351\227\256.md" deleted file mode 100644 index 85d788847cc82e82bd1f7c3b9a13cac01eb71e88..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\351\205\215\347\275\256TLS\350\256\244\350\257\201\344\270\216\345\274\200\345\220\257\350\277\234\347\250\213\350\256\277\351\227\256.md" +++ /dev/null @@ -1,147 +0,0 @@ -# 配置TLS认证与开启远程访问 - -## 描述 - -iSulad采用C/S模式进行设计,在默认情况,iSulad守护进程isulad只侦听本地/var/run/isulad.sock,因此只能在本地通过客户端isula执行相关命令操作容器。为了能使isula可以远程访问容器,isulad守护进程需要通过tcp:ip的方式侦听远程访问的端口。然而,仅通过简单配置tcp ip:port进行侦听,这样会导致所有的ip都可以通过调用isula -H tcp://:port与isulad通信,容易导致安全问题,因此推荐使用较安全版本的TLS\(**Transport Layer Security - 安全传输层协议**)方式进行远程访问。 - -## 生成TLS证书 - -- 明文私钥和证书生成方法示例 - - ``` - #!/bin/bash - set -e - echo -n "Enter pass phrase:" - read password - echo -n "Enter public network ip:" - read publicip - echo -n "Enter host:" - read HOST - - echo " => Using hostname: $publicip, You MUST connect to iSulad using this host!" - - mkdir -p $HOME/.iSulad - cd $HOME/.iSulad - rm -rf $HOME/.iSulad/* - - echo " => Generating CA key" - openssl genrsa -passout pass:$password -aes256 -out ca-key.pem 4096 - echo " => Generating CA certificate" - openssl req -passin pass:$password -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem -subj "/C=CN/ST=zhejiang/L=hangzhou/O=Huawei/OU=iSulad/CN=iSulad@huawei.com" - echo " => Generating server key" - openssl genrsa -passout pass:$password -out server-key.pem 4096 - echo " => Generating server CSR" - openssl req -passin pass:$password -subj /CN=$HOST -sha256 -new -key server-key.pem -out server.csr - echo subjectAltName = DNS:$HOST,IP:$publicip,IP:127.0.0.1 >> extfile.cnf - echo extendedKeyUsage = serverAuth >> extfile.cnf - echo " => Signing server CSR with CA" - openssl x509 -req -passin pass:$password -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf - echo " => Generating client key" - openssl genrsa -passout pass:$password -out key.pem 4096 - echo " => Generating client CSR" - openssl req -passin pass:$password -subj '/CN=client' -new -key key.pem -out client.csr - echo " => Creating extended key usage" - echo extendedKeyUsage = clientAuth > extfile-client.cnf - echo " => Signing client CSR with CA" - openssl x509 -req -passin pass:$password -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile-client.cnf - rm -v client.csr server.csr extfile.cnf extfile-client.cnf - chmod -v 0400 ca-key.pem key.pem server-key.pem - chmod -v 0444 ca.pem server-cert.pem cert.pem - ``` - - -- 加密私钥和证书请求文件生成方法示例 - - ``` - #!/bin/bash - - echo -n "Enter public network ip:" - read publicip - echo -n "Enter pass phrase:" - read password - - # remove certificates from previous execution. - rm -f *.pem *.srl *.csr *.cnf - - - # generate CA private and public keys - echo 01 > ca.srl - openssl genrsa -aes256 -out ca-key.pem -passout pass:$password 2048 - openssl req -subj '/C=CN/ST=zhejiang/L=hangzhou/O=Huawei/OU=iSulad/CN=iSulad@huawei.com' -new -x509 -days $DAYS -passin pass:$password -key ca-key.pem -out ca.pem - - # create a server key and certificate signing request (CSR) - openssl genrsa -aes256 -out server-key.pem -passout pass:$PASS 2048 - openssl req -new -key server-key.pem -out server.csr -passin pass:$password -subj '/CN=iSulad' - - echo subjectAltName = DNS:iSulad,IP:${publicip},IP:127.0.0.1 > extfile.cnf - echo extendedKeyUsage = serverAuth >> extfile.cnf - # sign the server key with our CA - openssl x509 -req -days $DAYS -passin pass:$password -in server.csr -CA ca.pem -CAkey ca-key.pem -out server-cert.pem -extfile extfile.cnf - - # create a client key and certificate signing request (CSR) - openssl genrsa -aes256 -out key.pem -passout pass:$password 2048 - openssl req -subj '/CN=client' -new -key key.pem -out client.csr -passin pass:$password - - # create an extensions config file and sign - echo extendedKeyUsage = clientAuth > extfile.cnf - openssl x509 -req -days 365 -passin pass:$password -in client.csr -CA ca.pem -CAkey ca-key.pem -out cert.pem -extfile extfile.cnf - - # remove the passphrase from the client and server key - openssl rsa -in server-key.pem -out server-key.pem -passin pass:$password - openssl rsa -in key.pem -out key.pem -passin pass:$password - - # remove generated files that are no longer required - rm -f ca-key.pem ca.srl client.csr extfile.cnf server.csr - ``` - - -## 接口 - -``` -{ - "tls": true, - "tls-verify": true, - "tls-config": { - "CAFile": "/root/.iSulad/ca.pem", - "CertFile": "/root/.iSulad/server-cert.pem", - "KeyFile":"/root/.iSulad/server-key.pem" - } -} -``` - -## 限制 - -服务端支持的模式如下: - -- 模式1(验证客户端):tlsverify, tlscacert, tlscert, tlskey。 -- 模式2(不验证客户端):tls, tlscert, tlskey。 - -客户端支持的模式如下: - -- 模式1\(使用客户端证书进行身份验证,并根据给定的CA验证服务器\):tlsverify, tlscacert, tlscert, tlskey。 -- 模式2\(验证服务器\):tlsverify, tlscacert。 - -如果需要采用双向认证方式进行通讯,则服务端采用模式1,客户端采用模式1; - -如果需要采用单向认证方式进行通讯,则服务端采用模式2,客户端采用模式2。 - ->![](public_sys-resources/icon-notice.gif) **须知:** ->- 采用RPM安装方式时,服务端配置可通过/etc/isulad/daemon.json以及/etc/sysconfig/iSulad配置修改 ->- 相比非认证或者单向认证方式,双向认证具备更高的安全性,推荐使用双向认证的方式进行通讯 ->- GRPC开源组件日志不由iSulad进行接管,如果需要查看GRPC相关日志,请按需设置GRPC\_VERBOSITY和GRPC\_TRACE环境变量 ->   - -## 示例 - -服务端: - -``` - isulad -H=tcp://0.0.0.0:2376 --tlsverify --tlscacert ~/.iSulad/ca.pem --tlscert ~/.iSulad/server-cert.pem --tlskey ~/.iSulad/server-key.pem -``` - -客户端: - -``` - isula version -H=tcp://$HOSTIP:2376 --tlsverify --tlscacert ~/.iSulad/ca.pem --tlscert ~/.iSulad/cert.pem --tlskey ~/.iSulad/key.pem -``` - diff --git "a/content/zh/docs/Container/\351\205\215\347\275\256daemon\345\217\202\346\225\260.md" "b/content/zh/docs/Container/\351\205\215\347\275\256daemon\345\217\202\346\225\260.md" deleted file mode 100644 index 275743ee94a0e213919efadc7bb674d817fe25d1..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\351\205\215\347\275\256daemon\345\217\202\346\225\260.md" +++ /dev/null @@ -1,13 +0,0 @@ -# 配置daemon参数 - -可以通过在/etc/docker/daemon.json文件中添加配置项自定义配置参数,相关配置项以及如何使用可以通过dockerd --help查看。配置示例如下: - -``` -cat /etc/docker/daemon.json -{ - "debug": true, - "storage-driver": "overlay2", - "storage-opts": ["overlay2.override_kernel_check=true"] -} -``` - diff --git "a/content/zh/docs/Container/\351\205\215\347\275\256devicemapper\345\255\230\345\202\250\351\251\261\345\212\250-31.md" "b/content/zh/docs/Container/\351\205\215\347\275\256devicemapper\345\255\230\345\202\250\351\251\261\345\212\250-31.md" deleted file mode 100644 index f4da608b86587add05e1770b8ac829e6cd8e2fe6..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\351\205\215\347\275\256devicemapper\345\255\230\345\202\250\351\251\261\345\212\250-31.md" +++ /dev/null @@ -1,46 +0,0 @@ -# 配置devicemapper存储驱动 - -用户如果需要使用devicemapper存储驱动,可以通过如下两种方式显示指定。 - -- 编辑/etc/docker/daemon.json,通过storage-driver字段显示指定。 - - ``` - cat /etc/docker/daemon.json - { - "storage-driver": "devicemapper" - } - ``` - - -- 编辑/etc/sysconfig/docker-storage,通过docker deamon启动参数显示指定。 - - ``` - cat /etc/sysconfig/docker-storage - DOCKER_STORAGE_OPTIONS="--storage-driver=devicemapper" - ``` - - -## 注意事项 - -- 使用devicemapper必须使用devicemapper+direct-lvm的方式,配置的方法可以参考 [https://docs.docker.com/engine/userguide/storagedriver/device-mapper-driver/\#configure-direct-lvm-mode-for-production](https://docs.docker.com/engine/userguide/storagedriver/device-mapper-driver/#configure-direct-lvm-mode-for-production) 。 -- 配置devicemapper时,如果系统上没有足够的空间给thinpool做自动扩容,请禁止自动扩容功能。 -- 禁止把/etc/lvm/profile/docker-thinpool.profile中如下两个值都改成100。 - - ``` - activation { - thin_pool_autoextend_threshold=80 - thin_pool_autoextend_percent=20 - } - ``` - -- 使用devicemapper时推荐加上--storage-opt dm.use\_deferred\_deletion=true --storage-opt dm.use\_deferred\_removal=true。 -- 使用devicemapper时,容器文件系统推荐使用ext4,需要在docker daemon的配置参数中加 上--storage-opt dm.fs=ext4。 -- 当graphdriver为devicemapper时,如果metadata文件损坏且不可恢复,需要人工介入恢复。禁止直接操作或篡改daemon存储devicemapper的元数据。 -- 使用devicemapper lvm时,异常掉电导致的devicemapper thinpool损坏,无法保证thinpool损坏后可以修复,也不能保证数据的完整性,需重建thinpool。 - -**docker daemon开启了user namespace特性,切换devicemapper存储池时的注意事项** - -- 一般启动容器时,deviceset-metadata文件为:/var/lib/docker/devicemapper/metadata/deviceset-metadata。 -- 使用了user namespace场景下,deviceset-metadata文件使用的是:/var/lib/docker/\{userNSUID.GID\}/devicemapper/metadata/deviceset-metadata。 -- 使用devicemapper存储驱动,容器在user namespace场景和普通场景之间切换时,需要将对应deviceset-metadata文件中的BaseDeviceUUID内容清空;针对thinpool扩容或者重建的场景下,也同样的需要将对应deviceset-metadata文件中的BaseDeviceUUID内容清空,否则docker服务会重启失败。 - diff --git "a/content/zh/docs/Container/\351\205\215\347\275\256devicemapper\345\255\230\345\202\250\351\251\261\345\212\250.md" "b/content/zh/docs/Container/\351\205\215\347\275\256devicemapper\345\255\230\345\202\250\351\251\261\345\212\250.md" deleted file mode 100644 index eff5f5b294a7b5b1d7f36dde3768250d46ea9bde..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\351\205\215\347\275\256devicemapper\345\255\230\345\202\250\351\251\261\345\212\250.md" +++ /dev/null @@ -1,173 +0,0 @@ -# 配置devicemapper存储驱动 - -使用devicemapper存储驱动需要先配置一个thinpool设备,而配置thinpool需要一个独立的块设备,且该设备需要有足够的空闲空间用于创建thinpool,请用户根据实际需求确定。这里假设独立块设备为/dev/xvdf,具体的配置方法如下: - -**一、配置thinpool** - -1. 停止isulad服务。 - - ``` - # systemctl stop isulad - ``` - -2. 基于块设备创建一个lvm卷。 - - ``` - # pvcreate /dev/xvdf - ``` - -3. 使用刚才创建的物理卷创建一个卷组。 - - ``` - # vgcreate isula /dev/xvdf - Volume group "isula" successfully created: - ``` - -4. 创建名为thinpool和thinpoolmeta的两个逻辑卷。 - - ``` - # lvcreate --wipesignatures y -n thinpool isula -l 95%VG - Logical volume "thinpool" created. - ``` - - ``` - # lvcreate --wipesignatures y -n thinpoolmeta isula -l 1%VG - Logical volume "thinpoolmeta" created. - ``` - -5. 将新创建的两个逻辑卷转换成thinpool以及thinpool所使用的metadata,这样就完成了thinpool配置。 - - ``` - # lvconvert -y --zero n -c 512K --thinpool isula/thinpool --poolmetadata isula/thinpoolmeta - - WARNING: Converting logical volume isula/thinpool and isula/thinpoolmeta to - thin pool's data and metadata volumes with metadata wiping. - THIS WILL DESTROY CONTENT OF LOGICAL VOLUME (filesystem etc.) - Converted isula/thinpool to thin pool. - ``` - - -   - -**二、修改isulad配置文件** - -1. 如果环境之前运行过isulad,请先备份之前的数据。 - - ``` - # mkdir /var/lib/isulad.bk - # mv /var/lib/isulad/* /var/lib/isulad.bk - ``` - -2. 修改配置文件 - - 这里提供了两种配置方式,用户可根据实际情况的选择合适的方式。 - - - 编辑/etc/isulad/daemon.json,配置storage-driver字段值为devicemapper,并配置storage-opts字段的相关参数,支持参数请参见[参数说明](#zh-cn_topic_0222861454_section1712923715282)。配置参考如下所示: - - ``` - { - "storage-driver": "devicemapper" - "storage-opts": [ - "dm.thinpooldev=/dev/mapper/isula-thinpool", - "dm.fs=ext4", - "dm.min_free_space=10%" - ] - } - ``` - - - 或者也可以通过编辑/etc/sysconfig/iSulad,在isulad启动参数里显式指定,支持参数请参见[参数说明](#zh-cn_topic_0222861454_section1712923715282)。配置参考如下所示: - - ``` - OPTIONS="--storage-driver=devicemapper --storage-opt dm.thinpooldev=/dev/mapper/isula-thinpool --storage-opt dm.fs=ext4 --storage-opt dm.min_free_space=10%" - ``` - -3. 启动isulad,使配置生效。 - - ``` - # systemctl start isulad - ``` - - -## 参数说明 - -storage-opts 支持的参数请参见[表1](#zh-cn_topic_0222861454_table3191161993812)。 - -**表 1** starage-opts字段参数说明 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

参数

-

是否必选

-

含义

-

dm.fs

-

-

用于指定容器使用的文件系统类型。当前必须配置为ext4,即dm.fs=ext4

-

dm.basesize

-

-

用于指定单个容器的最大存储空间大小,单位为k/m/g/t/p,也可以使用大写字母,例如dm.basesize=50G。该参数只在首次初始化时有效。

-

dm.mkfsarg

-

-

用于在创建基础设备时指定额外的mkfs参数。例如“dm.mkfsarg=-O ^has_journal”

-

dm.mountopt

-

-

用于在挂载容器时指定额外的mount参数。例如dm.mountopt=nodiscard

-

dm.thinpooldev

-

-

用于指定容器/镜像存储时使用的thinpool设备。

-

dm.min_free_space

-

-

用于指定最小的预留空间,用百分比表示。例如dm.min_free_space=10%,表示当剩余存储空间只剩10%左右时,创建容器等和存储相关操作就会失败。

-
- -## 注意事项 - -- 配置devicemapper时,如果系统上没有足够的空间给thinpool做自动扩容,请禁止自动扩容功能。 - - 禁止自动扩容的方法是把/etc/lvm/profile/isula-thinpool.profile中thin\_pool\_autoextend\_threshold和thin\_pool\_autoextend\_percent两个值都改成100,如下所示: - - ``` - activation { - thin_pool_autoextend_threshold=100 - thin_pool_autoextend_percent=100 - } - ``` - -- 使用devicemapper时,容器文件系统必须配置为ext4,需要在isulad的配置参数中加上--storage-opt dm.fs=ext4。 -- 当graphdriver为devicemapper时,如果metadata文件损坏且不可恢复,需要人工介入恢复。禁止直接操作或篡改daemon存储devicemapper的元数据。 -- 使用devicemapper lvm时,异常掉电导致的devicemapper thinpool损坏,无法保证thinpool损坏后可以修复,也不能保证数据的完整性,需重建thinpool。 - -**iSula开启了user namespace特性,切换devicemapper存储池时的注意事项** - -- 一般启动容器时,deviceset-metadata文件为:/var/lib/isulad/devicemapper/metadata/deviceset-metadata。 -- 使用了user namespace场景下,deviceset-metadata文件使用的是:/var/lib/isulad/\{userNSUID.GID\}/devicemapper/metadata/deviceset-metadata。 -- 使用devicemapper存储驱动,容器在user namespace场景和普通场景之间切换时,需要将对应deviceset-metadata文件中的BaseDeviceUUID内容清空;针对thinpool扩容或者重建的场景下,也同样的需要将对应deviceset-metadata文件中的BaseDeviceUUID内容清空,否则isulad服务会重启失败。 - diff --git "a/content/zh/docs/Container/\351\205\215\347\275\256overlay2\345\255\230\345\202\250\351\251\261\345\212\250.md" "b/content/zh/docs/Container/\351\205\215\347\275\256overlay2\345\255\230\345\202\250\351\251\261\345\212\250.md" deleted file mode 100644 index 81d8878ed9c5fab3226b56cb7a2b12ce39ec3a77..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\351\205\215\347\275\256overlay2\345\255\230\345\202\250\351\251\261\345\212\250.md" +++ /dev/null @@ -1,122 +0,0 @@ -# 配置overlay2存储驱动 - -## 配置方法 - -docker默认为使用overlay2存储驱动,也可以通过如下两种方式显示指定。 - -- 编辑/etc/docker/daemon.json,通过storage-driver字段显示指定。 - - ``` - cat /etc/docker/daemon.json - { - "storage-driver": "overlay2" - } - ``` - - -- 编辑/etc/sysconfig/docker-storage,通过docker deamon启动参数显示指定。 - - ``` - cat /etc/sysconfig/docker-storage - DOCKER_STORAGE_OPTIONS="--storage-driver=overlay2" - ``` - - -## 注意事项 - -- 部分容器生命周期管理的操作会报找不到相应的rootfs或者相关的可执行文件。 -- 如果容器的健康检查配置的是执行容器内的可执行文件,也会报错,导致容器的健康检查失败。 - -- 如果将overlay2作为graphdriver,在容器中第一次修改镜像中的文件时,若该文件的大小大于系统剩余的空间,修改将会失败。因为即使修改很小,也要把这个文件完整的拷贝到上层,剩余空间不足导致失败。 -- overlay2文件系统相比普通文件系统天然存在一些行为差异,归纳如下: - - 内核版本 - - overlay2只兼容原生4.0以上内核,建议配合使用ext4文件系统。 - - - Copy-UP性能问题 - - 修改lower层文件会触发文件复制到upper层,其中数据块复制和fsync比较耗时。 - - - rename目录问题 - - 只有源路径和目标路径都在merged层时,才允许rename系统调用,否则rename系统调用会报错-EXDEV。 - - 内核4.10引入了redirect dir特性来修复rename问题,对应内核选项为CONFIG\_OVERLAY\_FS\_REDIRECT\_DIR。 - - 在使用overlay2场景下,对文件系统目录进行重命名时,如果系统配置文件/sys/module/overlay/parameters/redirect\_dir中配置的特性开关为关闭状态,则会导致使用失败;如果用户要使用相关特性,需要用户手动设置/sys/module/overlay/parameters/redirect\_dir为“Y”。 - - - Hard link break问题 - - 当lower层目录中有多个硬链接,在merged层写入数据会触发Copy-UP,导致硬链接断开。 - - 内核4.13引入了index feature来修复这个问题,对应内核选项为 CONFIG\_OVERLAY\_FS\_INDEX。注意这个选项没有前向兼容性,不支持热升级。 - - - st\_dev和st\_ino变化 - - 触发Copy-UP之后,用户只能看到merged层中的新文件,inode会变化。虽然attr和xattr可以复制,但st\_dev和st\_ino具有唯一性,不可复制。这会导致stat和ls查看 到相应的变化。 - - - fd变化 - - Copy-UP之前,以只读模式打开文件得到描述符fd1,Copy-UP之后,打开同名文件得到文件描述符fd2, 二者实际指向不同的文件。向fd2写入的数据不会在fd1中体现。 - - - -## 异常场景 - -容器使用配置了overlay2存储驱动的过程中,可能出现挂载点被覆盖的异常情况。例如 - -   - -## 异常场景-挂载点被覆盖 - -挂载关系:在问题容器的挂载点的下面,存在一个/var/lib/docker/overlay2的挂载点: - -``` -[root@localhost ~]# mount -l | grep overlay -overlay on /var/lib/docker/overlay2/844fd3bca8e616572935808061f009d106a8748dfd29a0a4025645457fa21785/merged type overlay (rw,relatime,seclabel,lowerdir=/var/lib/docker/overlay2/l/JL5PZQLNDCIBU3ZOG3LPPDBHIJ:/var/lib/docker/overlay2/l/ELRPYU4JJG4FDPRLZJCZZE4UO6,upperdir=/var/lib/docker/overlay2/844fd3bca8e616572935808061f009d106a8748dfd29a0a4025645457fa21785/diff,workdir=/var/lib/docker/overlay2/844fd3bca8e616572935808061f009d106a8748dfd29a0a4025645457fa21785/work) -/dev/mapper/dm-root on /var/lib/docker/overlay2 type ext4 (rw,relatime,seclabel,data=ordered) -``` - -执行部分docker命令会遇到错误,比如: - -``` -[root@localhost ~]# docker rm 1348136d32 -docker rm: Error response from daemon: driver "overlay2" failed to remove root filesystem for 1348136d32: error while removing /var/lib/docker/overlay2/844fd3bca8e616572935808061f009d106a8748dfd29a0a4025645457fa21785: invalid argument -``` - -此时,在主机侧可以发现对应容器的rootfs找不到,但这并不意味着rootfs丢失,只是被/var/lib/docker/overlay2挂载点覆盖,业务仍然可以正常运行,不受影响。修复方案可以参考如下: - -- 修复方案一 - 1. 确定当前docker所使用graphdriver: - - ``` - docker info | grep "Storage Driver" - ``` - -    - - 2. 查询当前的挂载点: - - ``` - Devicemapper: mount -l | grep devicemapper - Overlay2: mount -l | grep overlay2 - ``` - - 输出格式为: A on B type C \(D\) - - - A:块设备名称或overlay - - B:挂载点 - - C:文件系统类型 - - D:挂载属性 - - 3. 从下往上逐一umount这些挂载点B。 - 4. 然后全部docker restart这些容器,或者删除所有容器。 - 5. 重启docker。 - - ``` - systemctl restart docker - ``` - - - -- 修复方案二 - 1. 业务迁移 - 2. 节点重启 - - diff --git "a/content/zh/docs/Container/\351\205\215\347\275\256\345\256\271\345\231\250\345\206\205\347\232\204ulimit\345\200\274.md" "b/content/zh/docs/Container/\351\205\215\347\275\256\345\256\271\345\231\250\345\206\205\347\232\204ulimit\345\200\274.md" deleted file mode 100644 index 4a6fd4b3bcd7db17024ff31a09ae789b0139af34..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\351\205\215\347\275\256\345\256\271\345\231\250\345\206\205\347\232\204ulimit\345\200\274.md" +++ /dev/null @@ -1,149 +0,0 @@ -# 配置容器内的ulimit值 - -## 描述 - -可以通过参数控制执行程序的资源。 - -## 用法 - -在容器create/run时配置--ulimit参数,或通过daemon端配置,控制容器中执行程序的资源。 - -## 参数 - -通过两种方法配置ulimit - -1. isula create/run时使用--ulimit =\[:\]来控制shell执行程序的资源。 - - - - - - - - - - - - - - -

参数项

-

参数说明

-

取值范围

-

是否必选

-

--ulimit

-

限制shell执行程序的资源

-

soft/hard是64位整数(int64)。soft取值 <= hard取值,如果仅仅指定了soft的取值,则hard=soft。对于某些类型的资源并不支持负数,详见下表

-

-
- -2. 通过daemon端参数或配置文件 - - 详见"(命令行参数说明"与"部署方式"的--default-ulimits相关选项。 - - --ulimit可以对以下类型的资源进行限制。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

类型

-

说明

-

取值范围

-

core

-

limits the core file size (KB)

-

64位整数(INT64),无单位。可以为0、负、其中-1表示UNLIMITED,即不做限制,其余的负数会被强制转换为一个大的正整数。

-

cpu

-

max CPU time (MIN)

-

data

-

max data size (KB)

-

fsize

-

maximum filesize (KB)

-

locks

-

max number of file locks the user can hold

-

memlock

-

max locked-in-memory address space (KB)

-

msgqueue

-

max memory used by POSIX message queues (bytes)

-

nice

-

nice priority

-

nproc

-

max number of processes

-

rss

-

max resident set size (KB)

-

rtprio

-

max realtime priority

-

rttime

-

realtime timeout

-

sigpending

-

max number of pending signals

-

stack

-

max stack size (KB)

-

nofile

-

max number of open file descriptors

-

64位整数(int64),无单位。不可以为负,负数被强转为大数,设置时会出现Operation not permitted

-
- - -## 示例 - -在容器的创建或者运行时,加上--ulimit =\[:\]即可,如: - -``` -isula create/run -tid --ulimit nofile=1024:2048 busybox sh -``` - -## 约束 - -不能在daemon.json和/etc/sysconfig/iSulad文件(或isulad命令行)中同时配置ulimit限制,否则isulad启动会报错。 - diff --git "a/content/zh/docs/Container/\351\205\215\347\275\256\346\226\271\346\263\225.md" "b/content/zh/docs/Container/\351\205\215\347\275\256\346\226\271\346\263\225.md" deleted file mode 100644 index 7914d708f2d612657620e56f770d5b1e10e522b9..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\351\205\215\347\275\256\346\226\271\346\263\225.md" +++ /dev/null @@ -1,17 +0,0 @@ -# 配置方法 - -在容器启动时的配置: - -``` -isula run -itd --health-cmd "echo iSulad >> /tmp/health_check_file || exit 1" --health-interval 5m --health-timeout 3s --health-exit-on-unhealthy busybox bash -``` - -可配置的选项: - -- --health-cmd,必选,在容器内执行的命令。返回值为0表示成功,非0表示失败。 -- --health-interval,默认 30s,最大为int64上限(纳秒),自定义配置最小值1s,相邻两次命令执行的间隔时间(注:入参0s时视为default)。 -- --health-timeout,默认 30s,最大为int64上限(纳秒),自定义配置最小值1s,单次检查命令执行的时间上限,超时则任务命令执行失败(注:入参0s时视为default),仅支持runtime类型为lcr的容器。 -- --health-start-period,默认 0s,最大为int64上限(纳秒),自定义配置最小值1s,容器初始化时间。 -- --health-retries,默认 3,最大为int32上限,健康检查失败最大的重试次数。 -- --health-exit-on-unhealthy,默认false,检测到容器非健康时是否杀死容器。 - diff --git "a/content/zh/docs/Container/\351\207\215\345\220\257\345\256\271\345\231\250.md" "b/content/zh/docs/Container/\351\207\215\345\220\257\345\256\271\345\231\250.md" deleted file mode 100644 index 7cdf6e1c17f2ffb6a7bd8fca6cd0add65d2d165e..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\351\207\215\345\220\257\345\256\271\345\231\250.md" +++ /dev/null @@ -1,67 +0,0 @@ -# 重启容器 - -## 描述 - -isula restart 用于重启一个或者多个容器。 - -## 用法 - -``` -isula restart [OPTIONS] CONTAINER [CONTAINER...] -``` - -## 参数 - -restart命令支持参数参考下表。 - -**表 1** restart 命令参数列表 - - - - - - - - - - - - - - -

命令

-

参数

-

说明

-

restart

-

-H, --host

-

指定要连接的iSulad socket文件路径

-

-t, --time

-

先优雅停止,超过这个时间,则强行终止

-
- -## 约束限制 - -- 指定t参数且t<0时,请确保自己容器的应用会处理stop信号。 - - restart会首先调用stop停止容器。stop会首先给容器发送stop信号(SIGTERM),然后等待一定的时间(这个时间就是用户输入的 t),过了一定时间如果容器仍处于运行状态,那么就发送kill信号(SIGKILL)使容器强制退出。 - -- 输入参数t的含义: - - t<0 : 表示一直等待,不管多久都等待程序优雅退出,既然用户这么输入了,表示对自己的应用比较放心,认为自己的程序有合理的stop信号的处理机制。 - - t=0 : 表示不等,立即发送kill -9 到容器。 - - t\>0 : 表示等一定的时间,如果容器还未退出,就发送kill -9 到容器。 - - 所以如果用户使用t<0(比如t=-1),请确保自己容器的应用会正确处理SIGTERM. 如果容器忽略了该信号,会导致isula restart一直卡住。 - - -## 示例 - -重启单个容器 - -``` -$ isula restart c75284634beeede3ab86c828790b439d16b6ed8a537550456b1f94eb852c1c0a - c75284634beeede3ab86c828790b439d16b6ed8a537550456b1f94eb852c1c0a -``` - diff --git "a/content/zh/docs/Container/\351\207\215\345\220\257\345\256\271\345\231\250\345\244\261\350\264\245.md" "b/content/zh/docs/Container/\351\207\215\345\220\257\345\256\271\345\231\250\345\244\261\350\264\245.md" deleted file mode 100644 index 9e361fbeccdfaa9336aa09e5893145812a30cd3e..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\351\207\215\345\220\257\345\256\271\345\231\250\345\244\261\350\264\245.md" +++ /dev/null @@ -1,17 +0,0 @@ -# 重启容器失败 - -容器hook耗时较长,且启动阶段遇到containerd被强制退出,再次执行容器start操作可能失败。容器启动阶段遇到containerd被强制退出,docker start操作直接返回错误;containerd被重新拉起后,上次启动可能仍处于runc create执行阶段(执行用户自定义hook,可能耗时较长),此时再次下发docker start命令启动该容器,可能提示以下错误: - -``` -Error response from daemon: oci runtime error: container with id exists: xxxxxx -``` - -该错误是由runc create一个已经存在(创建中)的容器导致,等第一次start对应的runc操作结束后再次执行docker start便可以成功。 - -由于hook的执行不受docker控制,这种场景下尝试回收该容器有可能导致containerd进程启动卡死(执行未知hook程序),且问题的风险可控(短期影响当前容器的创建): - -- 问题出现后等待第一次操作结束可以再次成功启动该容器。 -- 一般是在容器启动失败后创建新的容器,不复用已经失败的容器。 - -综上,该问题暂时作为场景约束。 - diff --git "a/content/zh/docs/Container/\351\207\215\345\221\275\345\220\215\345\256\271\345\231\250.md" "b/content/zh/docs/Container/\351\207\215\345\221\275\345\220\215\345\256\271\345\231\250.md" deleted file mode 100644 index 55397240ed6ec35cfdf5ca01baced4a070e58a33..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\351\207\215\345\221\275\345\220\215\345\256\271\345\231\250.md" +++ /dev/null @@ -1,44 +0,0 @@ -# 重命名容器 - -## 描述 - -isula rename命令用于重命名容器。 - -## 用法 - -``` -isula rename [OPTIONS] OLD_NAME NEW_NAME -``` - -## 参数 - -rename命令支持参数参考下表。 - -**表 1** rename 命令参数列表 - - - - - - - - - - - -

命令

-

参数

-

说明

-

rename

-

-H, --host

-

重命名容器

-
- -## 示例 - -重命名一个容器 - -``` -$ isula rename my_container my_new_container -``` - diff --git "a/content/zh/docs/Container/\345\210\233\345\273\272\351\225\234\345\203\217.md" "b/content/zh/docs/Container/\351\225\234\345\203\217\347\256\241\347\220\206-3.md" similarity index 76% rename from "content/zh/docs/Container/\345\210\233\345\273\272\351\225\234\345\203\217.md" rename to "content/zh/docs/Container/\351\225\234\345\203\217\347\256\241\347\220\206-3.md" index c11c562d6b495e920ebe1a46e9cd61e319b563b7..ac581acc75d8f385e66ff794a32662dca325b39b 100644 --- "a/content/zh/docs/Container/\345\210\233\345\273\272\351\225\234\345\203\217.md" +++ "b/content/zh/docs/Container/\351\225\234\345\203\217\347\256\241\347\220\206-3.md" @@ -1,37 +1,57 @@ -# 创建镜像 - -docker pull、docker build、docker commit、docker import、docker load都可以创建一个新的镜像,关于这些命令的使用详见命令行参考镜像管理。 - -## 注意事项 - -1. 避免并发docker load和docker rmi操作。 如果同时满足如下两个条件,可能导致并发性问题: - - - 某个镜像存在于系统中。 - - 同时对该镜像进行docker rmi和docker load操作。 - - 所以使用时应该避免这种场景(注:所有的镜像创建操作如tag,build,load和rmi并发都有可能会导致类似的错误,应该尽量避免这类操作与rmi的并发)。 - -2. 如果Docker操作镜像时系统掉电,可能导致镜像损坏,需要手动恢复。 - - 由于Docker在操作镜像(pull/load/rmi/build/combine/commit/import等)时,镜像数据的操作是异步的、镜像元数据是同步的。所以如果在镜像数据未全部刷到磁盘时掉电,可能导致镜像数据和元数据不一致。对用户的表现是镜像可以看到\(有可能是none 镜像\),但是无法启动容器,或者启动后的容器有异常。这种情况下应该先使用docker rmi删除该镜像,然后重新进行之前的操作,系统可以恢复。 - -3. 生产环境节点应避免存留超大数量镜像,请及时清理不使用的镜像。 - - 镜像数目过多会导致docker image等命令执行过慢,从而导致docker build/docker commit等相关命令执行失败,并可能导致内存堆积。在生产环境中,请及时清理不再使用的镜像和中间过程镜像。 - -4. 使用--no-parent参数build镜像时,如果有多个build操作同时进行,并且Dockerfile里 FROM的镜像相同,则可能会残留镜像,分为以下两种情况: - - FROM的镜像不是完整镜像,则有可能会残留FROM的镜像运行时生成的镜像。残留的镜像名类似base\_v1.0.0-app\_v2.0.0,或者残留镜像。 - - 如果Dockerfile里的前几条指令相同,则有可能会残留镜像。 - - -## 可能会产生none镜像场景 - -1. none镜像是指没有tag的最顶层镜像,比如ubuntu的imageID,只有一个tag是ubuntu,如果这个tag没了,但是imageID还在,那么这个imageID就变成了none镜像。 -2. Save镜像的过程中因为要把镜像的数据导出来,所以对image进行保护,但是如果这个时候来一个删除操作,可能会untag成功,删除镜像ID失败,造成该镜像变成none镜像。 -3. 执行docker pull时掉电,或者系统panic,可能出现none镜像,为保证镜像完整性,此时可通过docker rmi 删除镜像后重新拉取。 -4. 执行docker save保存镜像时,如果指定的名字为镜像ID,则load后的镜像也没有tag,其镜像名为none。 - -## build镜像的同时删除该镜像,有极低概率导致镜像build失败 - -目前的build镜像的过程是通过引用计数来保护的,当build完一个镜像后,紧接着就给该镜像的引用计数加1(holdon操作),一旦holdon操作成功,该镜像就不会被删除了,但是在holdon之前,有极低的概率,还是可以删除成功,导致build镜像失败。 - +# 镜像管理 +- [镜像管理](#镜像管理) + - [创建镜像](#创建镜像) + - [查看镜像](#查看镜像) + - [删除镜像](#删除镜像) + +## 创建镜像 + +docker pull、docker build、docker commit、docker import、docker load都可以创建一个新的镜像,关于这些命令的使用详见命令行参考镜像管理。 + +### 注意事项 + +1. 避免并发docker load和docker rmi操作。 如果同时满足如下两个条件,可能导致并发性问题: + + - 某个镜像存在于系统中。 + - 同时对该镜像进行docker rmi和docker load操作。 + + 所以使用时应该避免这种场景(注:所有的镜像创建操作如tag,build,load和rmi并发都有可能会导致类似的错误,应该尽量避免这类操作与rmi的并发)。 + +2. 如果Docker操作镜像时系统掉电,可能导致镜像损坏,需要手动恢复。 + + 由于Docker在操作镜像(pull/load/rmi/build/combine/commit/import等)时,镜像数据的操作是异步的、镜像元数据是同步的。所以如果在镜像数据未全部刷到磁盘时掉电,可能导致镜像数据和元数据不一致。对用户的表现是镜像可以看到\(有可能是none 镜像\),但是无法启动容器,或者启动后的容器有异常。这种情况下应该先使用docker rmi删除该镜像,然后重新进行之前的操作,系统可以恢复。 + +3. 生产环境节点应避免存留超大数量镜像,请及时清理不使用的镜像。 + + 镜像数目过多会导致docker image等命令执行过慢,从而导致docker build/docker commit等相关命令执行失败,并可能导致内存堆积。在生产环境中,请及时清理不再使用的镜像和中间过程镜像。 + +4. 使用\--no-parent参数build镜像时,如果有多个build操作同时进行,并且Dockerfile里 FROM的镜像相同,则可能会残留镜像,分为以下两种情况: + - FROM的镜像不是完整镜像,则有可能会残留FROM的镜像运行时生成的镜像。残留的镜像名类似base\_v1.0.0-app\_v2.0.0,或者残留镜像。 + - 如果Dockerfile里的前几条指令相同,则有可能会残留镜像。 + + +### 可能会产生none镜像场景 + +1. none镜像是指没有tag的最顶层镜像,比如ubuntu的imageID,只有一个tag是ubuntu,如果这个tag没了,但是imageID还在,那么这个imageID就变成了none镜像。 +2. Save镜像的过程中因为要把镜像的数据导出来,所以对image进行保护,但是如果这个时候来一个删除操作,可能会untag成功,删除镜像ID失败,造成该镜像变成none镜像。 +3. 执行docker pull时掉电,或者系统panic,可能出现none镜像,为保证镜像完整性,此时可通过docker rmi 删除镜像后重新拉取。 +4. 执行docker save保存镜像时,如果指定的名字为镜像ID,则load后的镜像也没有tag,其镜像名为none。 + +### build镜像的同时删除该镜像,有极低概率导致镜像build失败 + +目前的build镜像的过程是通过引用计数来保护的,当build完一个镜像后,紧接着就给该镜像的引用计数加1(holdon操作),一旦holdon操作成功,该镜像就不会被删除了,但是在holdon之前,有极低的概率,还是可以删除成功,导致build镜像失败。 + +## 查看镜像 + +查看本地镜像列表: + +``` +docker images +``` + +## 删除镜像 + +### 注意事项 + +禁止使用docker rmi –f XXX删除镜像。如果使用强制删除,docker rmi会忽略过程中的错误,可能导致容器或者镜像关元数据残留。如果使用普通删除,如果删除过程出错,则会删除失败,不会导致元数据残留。 + diff --git "a/content/zh/docs/Container/\351\225\234\345\203\217\347\256\241\347\220\206-34.md" "b/content/zh/docs/Container/\351\225\234\345\203\217\347\256\241\347\220\206-34.md" deleted file mode 100644 index b59d41dc3d8650dc15ec82df016d56c2dbcbea55..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\351\225\234\345\203\217\347\256\241\347\220\206-34.md" +++ /dev/null @@ -1,2 +0,0 @@ -# 镜像管理 - diff --git "a/content/zh/docs/Container/\351\225\234\345\203\217\347\256\241\347\220\206-37.md" "b/content/zh/docs/Container/\351\225\234\345\203\217\347\256\241\347\220\206-37.md" deleted file mode 100644 index f015f51d59a02d58fb9d28020ee5673d53eea5a8..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\351\225\234\345\203\217\347\256\241\347\220\206-37.md" +++ /dev/null @@ -1,5 +0,0 @@ -# 镜像管理 - - - - diff --git a/content/zh/docs/Container/build.md "b/content/zh/docs/Container/\351\225\234\345\203\217\347\256\241\347\220\206-4.md" similarity index 55% rename from content/zh/docs/Container/build.md rename to "content/zh/docs/Container/\351\225\234\345\203\217\347\256\241\347\220\206-4.md" index 033adb0c2ed7ddfe1bf2ae4aa926e6016e34358a..0e218beb988c6dd63baa599cf66e38e849f69c1d 100644 --- a/content/zh/docs/Container/build.md +++ "b/content/zh/docs/Container/\351\225\234\345\203\217\347\256\241\347\220\206-4.md" @@ -1,14 +1,32 @@ -# build - -用法:**docker build \[OPTIONS\] PATH | URL | -** - -功能:使用指定路径中的Dockerfile生成构建一个新的image - -选项:常用选项参数如下,更多选项可以查看docker help build - -**表 1** 参数说明 - - +# 镜像管理 + +- [镜像管理](#镜像管理) + - [build](#build) + - [history](#history) + - [images](#images) + - [import](#import) + - [load](#load) + - [login](#login) + - [logout](#logout) + - [pull](#pull) + - [push](#push) + - [rmi](#rmi) + - [save](#save) + - [search](#search) + - [tag](#tag) + + +## build + +用法:**docker build \[OPTIONS\] PATH | URL | -** + +功能:使用指定路径中的Dockerfile生成构建一个新的image + +选项:常用选项参数如下,更多选项可以查看docker help build + +**表 4** 参数说明 + + -

参数

参数含义

@@ -61,151 +79,427 @@
- -Dockerfile介绍: - -Dockerfile是一个镜像的表示,可以通过Dockerfile来描述构建镜像的步骤,并自动构建一个容器,所有的 Dockerfile 命令格式都是:**INSTRUCTION arguments** - -   - -**FROM命令** - -格式:FROM 或 FROM : - -功能:该命令指定基本镜像,是所有Dockerfile文件的第一个命令,如果没有指定基本镜像的tag,使用默认tag名latest。 - -   - -**RUN命令** - -格式:RUN \(the command is run in a shell - \`/bin/sh -c\`\) 或者 - -RUN \["executable", "param1", "param2" ... \] \(exec form\) - -功能:RUN命令会在上面FROM指定的镜像里执行指定的任何命令,然后提交\(commit\)结果,提交的镜像会在后面继续用到。RUN命令等价于: - -docker run image command - -docker commit container\_id - -   - -**注释** - -使用\#注释 - -   - -**MAINTAINER命令** - -格式:MAINTAINER - -功能:命令用来指定维护者的姓名和联系方式 - -   - -**ENTRYPOINT命令** - -格式:ENTRYPOINT cmd param1 param2 ... 或者ENTRYPOINT \["cmd", "param1", "param2"...\] - -功能:设置在容器启动时执行命令 - -   - -**USER命令** - -格式:USER name - -功能:指定 memcached 的运行用户 - -   - -**EXPOSE命令** - -格式:EXPOSE \[...\] - -功能:开放镜像的一个或多个端口 - -   - -**ENV命令** - -格式:ENV - -功能:设置环境变量,设置了后,后续的RUN命令都可以使用 - -   - -**ADD命令** - -格式:ADD - -功能:从src复制文件到container的dest路径, 是相对被构建的源目录的相对路径,可以是文件或目录的路径,也可以是一个远程的文件url, 是container中的绝对路径 - -   - -**VOLUME命令** - -格式:VOLUME \[""\] - -功能:创建一个挂载点用于共享目录 - -   - -**WORKDIR命令** - -格式:workdir - -功能:配置RUN, CMD, ENTRYPOINT 命令设置当前工作路径可以设置多次,如果是相对路径,则相对前一个 WORKDIR 命令 - -   - -**CMD命令** - -格式:CMD \["executable","param1","param2"\] \(like an exec, preferred form\) - -CMD \["param1","param2"\] \(as default parameters to ENTRYPOINT\) - -CMD command param1 param2 \(as a shell\) - -功能:一个Dockerfile里只能有一个CMD,如果有多个,只有最后一个生效 - -   - -**ONBUILD命令** - -格式:ONBUILD \[其它指令\] - -功能:后面跟其它指令,比如 RUN、COPY 等,这些指令,在当前镜像构建时并不会被执行,只有当以当前镜像为基础镜像,去构建下一级镜像的时候才会被执行 - -下面是Dockerfile的一个完整例子,该Dockerfile将构建一个安装了sshd服务的image - - -
FROM busybox
+
+ +Dockerfile介绍: + +Dockerfile是一个镜像的表示,可以通过Dockerfile来描述构建镜像的步骤,并自动构建一个容器,所有的 Dockerfile 命令格式都是:**INSTRUCTION arguments** + +   + +**FROM命令** + +格式:FROM 或 FROM : + +功能:该命令指定基本镜像,是所有Dockerfile文件的第一个命令,如果没有指定基本镜像的tag,使用默认tag名latest。 + +   + +**RUN命令** + +格式:RUN \(the command is run in a shell - \`/bin/sh -c\`\) 或者 + +RUN \["executable", "param1", "param2" ... \] \(exec form\) + +功能:RUN命令会在上面FROM指定的镜像里执行指定的任何命令,然后提交\(commit\)结果,提交的镜像会在后面继续用到。RUN命令等价于: + +docker run image command + +docker commit container\_id + +   + +**注释** + +使用\#注释 + +   + +**MAINTAINER命令** + +格式:MAINTAINER + +功能:命令用来指定维护者的姓名和联系方式 + +   + +**ENTRYPOINT命令** + +格式:ENTRYPOINT cmd param1 param2 ... 或者ENTRYPOINT \["cmd", "param1", "param2"...\] + +功能:设置在容器启动时执行命令 + +   + +**USER命令** + +格式:USER name + +功能:指定 memcached 的运行用户 + +   + +**EXPOSE命令** + +格式:EXPOSE \[...\] + +功能:开放镜像的一个或多个端口 + +   + +**ENV命令** + +格式:ENV + +功能:设置环境变量,设置了后,后续的RUN命令都可以使用 + +   + +**ADD命令** + +格式:ADD + +功能:从src复制文件到container的dest路径, 是相对被构建的源目录的相对路径,可以是文件或目录的路径,也可以是一个远程的文件url, 是container中的绝对路径 + +   + +**VOLUME命令** + +格式:VOLUME \[""\] + +功能:创建一个挂载点用于共享目录 + +   + +**WORKDIR命令** + +格式:workdir + +功能:配置RUN, CMD, ENTRYPOINT 命令设置当前工作路径可以设置多次,如果是相对路径,则相对前一个 WORKDIR 命令 + +   + +**CMD命令** + +格式:CMD \["executable","param1","param2"\] \(like an exec, preferred form\) + +CMD \["param1","param2"\] \(as default parameters to ENTRYPOINT\) + +CMD command param1 param2 \(as a shell\) + +功能:一个Dockerfile里只能有一个CMD,如果有多个,只有最后一个生效 + +   + +**ONBUILD命令** + +格式:ONBUILD \[其它指令\] + +功能:后面跟其它指令,比如 RUN、COPY 等,这些指令,在当前镜像构建时并不会被执行,只有当以当前镜像为基础镜像,去构建下一级镜像的时候才会被执行 + +下面是Dockerfile的一个完整例子,该Dockerfile将构建一个安装了sshd服务的image + +``` +FROM busybox ENV http_proxy http://192.168.0.226:3128 ENV https_proxy https://192.168.0.226:3128 -RUN apt-get update && apt-get install -y openssh-server +RUN apt-get update && apt-get install -y openssh-server RUN mkdir -p /var/run/sshd EXPOSE 22 -ENTRYPOINT /usr/sbin/sshd -D - - - - - -示例: - -1. 以上文的Dockerfile构建一个image - - ``` - $ sudo docker build -t busybox:latest - ``` - -2. 通过以下命令可以看到这个生成的image: - - ``` - docker images | grep busybox - ``` - - +ENTRYPOINT /usr/sbin/sshd -D +``` + + +示例: + +1. 以上文的Dockerfile构建一个image + + ``` + $ sudo docker build -t busybox:latest + ``` + +2. 通过以下命令可以看到这个生成的image: + + ``` + docker images | grep busybox + ``` + + +## history + +用法:**docker history \[OPTIONS\] IMAGE** + +功能:显示一个image的变化历史 + +选项: + +-H, \--human=true + +\--no-trunc=false 不对输出进行删减 + +-q, \--quiet=false 只显示ID + +示例: + +``` +$ sudo docker history busybox:test +IMAGE CREATED CREATED BY SIZE COMMENT +be4672959e8b 15 minutes ago bash 23B +21970dfada48 4 weeks ago 128MB Imported from - +``` + +   + +## images + +用法:**docker images \[OPTIONS\] \[NAME\]** + +功能:列出存在的image,不加选项时不显示中间的image + +选项: + +-a, \--all=false 显示所有的镜像, + +-f, \--filter=\[\] 指定一个过滤值\(i.e. 'dangling=true'\) + +\--no-trunc=false 不对输出进行删减 + +-q, \--quiet=false 只显示ID + +示例: + +``` +$ sudo docker images +REPOSITORY TAG IMAGE ID CREATED SIZE +busybox latest e02e811dd08f 2 years ago 1.09MB +``` + +   + +## import + +用法:**docker import URL|- \[REPOSITORY\[:TAG\]\]** + +功能:把包含了一个rootfs的tar包导入为镜像。与docker export相对应。 + +选项:无 + +示例: + +从上文介绍的docker export命令时导出的busybox.tar用docker import命令生成一个新的image + +``` +$ sudo docker import busybox.tar busybox:test +sha256:a79d8ae1240388fd3f6c49697733c8bac4d87283920defc51fb0fe4469e30a4f +$ sudo docker images +REPOSITORY TAG IMAGE ID CREATED SIZE +busybox test a79d8ae12403 2 seconds ago 1.3MB +``` + +   + +## load + +用法:**docker load \[OPTIONS\]** + +功能:把docker save出来的tar包重新加载一个镜像。与docker save相对应。 + +选项: + +-i, \--input="" + +示例: + +``` +$ sudo docker load -i busybox.tar +Loaded image ID: sha256:e02e811dd08fd49e7f6032625495118e63f597eb150403d02e3238af1df240ba +$ sudo docker images +REPOSITORY TAG IMAGE ID CREATED SIZE +busybox latest e02e811dd08f 2 years ago 1.09MB +``` + +## login + +用法:**docker login \[OPTIONS\] \[SERVER\]** + +功能:登录到一个镜像服务库,没有指定server时,默认登录到https://index.docker.io/v1/ + +选项: + +-e, \--email="" Email + +-p, \--password="" 密码 + +-u, \--username="" 用户名 + +示例: + +``` +$ sudo docker login +``` + +## logout + +用法:**docker logout \[SERVER\]** + +功能:从一个镜像服务器中登出,没有指定server时,默认登出https://index.docker.io/v1/ + +选项:无 + +示例: + +``` +$ sudo docker logout +``` + +## pull + +用法:**docker pull \[OPTIONS\] NAME\[:TAG\]** + +功能:从一个镜像库(官方的或私有的)中拉取一个镜像 + +选项: + +-a, \--all-tags=false 下载一个镜像仓库的所有镜像(一个镜像仓库可以被打多个标签,比如一个busybox镜像库,可能有多个标签如busybox:14.04,busybox:13.10,busybox:latest等,使用-a选项后,将所有标签的busybox镜像拉取下来) + +示例: + +1. 从官方镜像库中拉取nginx镜像 + + ``` + $ sudo docker pull nginx + Using default tag: latest + latest: Pulling from official/nginx + 94ed0c431eb5: Pull complete + 9406c100a1c3: Pull complete + aa74daafd50c: Pull complete + Digest: sha256:788fa27763db6d69ad3444e8ba72f947df9e7e163bad7c1f5614f8fd27a311c3 + Status: Downloaded newer image for nginx:latest + ``` + + 拉取镜像时会检测所依赖的层是否存在,如果存在就用本地的层。 + +2. 从私有镜像库中拉取镜像 + + 从私有镜像库中拉取Fedora镜像,比如所使用的私有镜像库的地址是192.168.1.110:5000: + + ``` + $ sudo docker pull 192.168.1.110:5000/fedora + ``` + + +## push + +用法:**docker push NAME\[:TAG\]** + +功能:将一个image推送到镜像库中 + +选项:无 + +示例: + +1. 将一个image推送到私有镜像库192.168.1.110:5000中 +2. 将要推送的镜像打标签(docker tag命令将在下文介绍),本例中要推送的镜像为busybox:sshd + + ``` + $ sudo docker tag ubuntu:sshd 192.168.1.110:5000/busybox:sshd + ``` + +3. 将打好标签的镜像推送到私有镜像库中 + + ``` + $ sudo docker push 192.168.1.110:5000/busybox:sshd + ``` + + 推送的时候会自动检测所依赖的层在镜像库中是否已存在,如果以存在,跳过该层。 + + +## rmi + +用法:**docker rmi \[OPTIONS\] IMAGE \[IMAGE...\]** + +功能:删除一个或多个镜像,如果一个镜像在镜像库中有多个标签,删除镜像的时候只是进行untag操作,当删除的是只有一个标签的镜像时,将依次删除所依赖的层。 + +选项: + +-f, \--force=false 强制删除image + +\--no-prune=false 不删除没有标签的父镜像 + +示例: + +``` +$ sudo docker rmi 192.168.1.110:5000/busybox:sshd +``` + +## save + +用法:**docker save \[OPTIONS\] IMAGE \[IMAGE...\]** + +功能:保存一个image到一个tar包,输出默认是到STDOUT + +选项: + +-o, \--output="" 输出到文件中而不是STDOUT + +示例: + +``` +$ sudo docker save -o nginx.tar nginx:latest +$ ls +nginx.tar +``` + +## search + +用法:**docker search \[OPTIONS\] TERM** + +功能:在镜像库中查找特定的镜像 + +选项: + +\--automated=false 显示自动构建的image + +\--no-trunc=false 不对输出进行删减 + +-s, \--stars=0 只显示特定星级以上的image + +示例: + +1. 在官方镜像库中搜寻nginx + + ``` + $ sudo docker search nginx + NAME DESCRIPTION STARS OFFICIAL AUTOMATED + nginx Official build of Nginx. 11873 [OK] + jwilder/nginx-proxy Automated Nginx reverse proxy for docker con… 1645 [OK] + richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of… 739 [OK] + linuxserver/nginx An Nginx container, brought to you by LinuxS… 74 + bitnami/nginx Bitnami nginx Docker Image 70 [OK] + tiangolo/nginx-rtmp Docker image with Nginx using the nginx-rtmp… 51 [OK] + ``` + +    + +2. 在私有镜像库中搜寻busybox,在私有镜像库中搜寻时要加上私有镜像库的地址 + + ``` + $ sudo docker search 192.168.1.110:5000/busybox + ``` + + +## tag + +用法:**docker tag \[OPTIONS\] IMAGE\[:TAG\] \[REGISTRYHOST/\]\[USERNAME/\]NAME\[:TAG\]** + +功能:将一个镜像打标签到一个库中 + +选项: + +-f, \--force=false 如果存在相同的tag名将强制替换原来的image + +示例: + +``` +$ sudo docker tag busybox:latest busybox:test +``` \ No newline at end of file diff --git "a/content/zh/docs/Container/\351\225\234\345\203\217\347\256\241\347\220\206.md" "b/content/zh/docs/Container/\351\225\234\345\203\217\347\256\241\347\220\206.md" index 79dca6812b61812f67ca3a0fe03aff84559eb952..386ef9bf53c523e77117c1c1054beb4236ff88d5 100644 --- "a/content/zh/docs/Container/\351\225\234\345\203\217\347\256\241\347\220\206.md" +++ "b/content/zh/docs/Container/\351\225\234\345\203\217\347\256\241\347\220\206.md" @@ -1,3 +1,377 @@ -# 镜像管理 - - +# 镜像管理 + + + +- [镜像管理](#镜像管理) + - [docker镜像管理](#docker镜像管理) + - [登录到镜像仓库](#登录到镜像仓库) + - [从镜像仓库退出登录](#从镜像仓库退出登录) + - [从镜像仓库拉取镜像](#从镜像仓库拉取镜像) + - [删除镜像](#删除镜像) + - [加载镜像](#加载镜像) + - [列出镜像](#列出镜像) + - [检视镜像](#检视镜像) + - [双向认证](#双向认证) + - [embedded镜像管理](#embedded镜像管理) + - [加载镜像](#加载镜像-1) + - [列出镜像](#列出镜像-1) + - [检视镜像](#检视镜像-1) + - [删除镜像](#删除镜像-1) + + + + +## docker镜像管理 + +### 登录到镜像仓库 + +#### 描述 + +isula login命令用于登录到镜像仓库。登录成功后可以使用isula pull命令从该镜像仓库拉取镜像。如果镜像仓库不需要密码,则拉取镜像前不需要执行该命令。 + +#### 用法 + +``` +isula login [OPTIONS] SERVER +``` + +#### 参数 + +login命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表1 表1-20 login命令参数列表" 。 + +#### 示例 + +``` +$ isula login -u abc my.csp-edge.com:5000 + +Login Succeeded +``` + +### 从镜像仓库退出登录 + +#### 描述 + +isula logout命令用于从镜像仓库退出登录。退出登录成功后再执行isula pull命令从该镜像仓库拉取镜像会因为未认证而拉取失败。 + +#### 用法 + +``` +isula logout SERVER +``` + +#### 参数 + +logout命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表2 logout命令参数列表"。 + +#### 示例 + +``` +$ isula logout my.csp-edge.com:5000 +Logout Succeeded +``` + +### 从镜像仓库拉取镜像 + +#### 描述 + +从镜像仓库拉取镜像到本地。 + +#### 用法 + +``` +isula pull [OPTIONS] NAME[:TAG|@DIGEST] +``` + +#### 参数 + +login命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表3 pull命令参数列表"。 + +#### 示例 + +``` +$ isula pull localhost:5000/official/busybox +Image "localhost:5000/official/busybox" pulling +Image "localhost:5000/official/busybox@sha256:bf510723d2cd2d4e3f5ce7e93bf1e52c8fd76831995ac3bd3f90ecc866643aff" pulled +``` + +### 删除镜像 + +#### 描述 + +删除一个或多个镜像。 + +#### 用法 + +``` +isula rmi [OPTIONS] IMAGE [IMAGE...] +``` + +#### 参数 + +rmi命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表4 rmi命令参数列表"。 + +#### 示例 + +``` +$ isula rmi rnd-dockerhub.huawei.com/official/busybox +Image "rnd-dockerhub.huawei.com/official/busybox" removed +``` + +### 加载镜像 + +#### 描述 + +从一个tar包加载镜像。该tar包必须是使用docker save命令导出的tar包或格式一致的tar包。 + +#### 用法 + +``` +isula load [OPTIONS] +``` + +#### 参数 + +load命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表5 load命令参数列表"。 + +#### 示例 + +``` +$ isula load -i busybox.tar +Load image from "/root/busybox.tar" success +``` + +### 列出镜像 + +#### 描述 + +列出当前环境中所有镜像。 + +#### 用法 + +``` +isula images +``` + +#### 参数 + +images命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表6 images命令参数列表"。 + +#### 示例 + +``` +$ isula images +REF IMAGE ID CREATED SIZE +rnd-dockerhub.huawei.com/official/busybox:latest e4db68de4ff2 2019-06-15 08:19:54 1.376 MB +``` + +### 检视镜像 + +#### 描述 + +返回该镜像的配置信息。可以使用-f参数过滤出需要的信息。 + +#### 用法 + +``` +isula inspect [options] CONTAINER|IMAGE [CONTAINER|IMAGE...] +``` + +#### 参数 + +inspect命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表7 inspect命令参数列表"。 + +#### 示例 + +``` +$ isula inspect -f "{{json .image.id}}" rnd-dockerhub.huawei.com/official/busybox +"e4db68de4ff27c2adfea0c54bbb73a61a42f5b667c326de4d7d5b19ab71c6a3b" +``` + +### 双向认证 + +#### 描述 + +开启该功能后isulad和镜像仓库之间的通信采用https通信,isulad和镜像仓库都会验证对方的合法性。 + +#### 用法 + +要支持该功能,需要镜像仓库支持该功能,同时isulad也需要做相应的配置: + +1. 修改isulad的配置\(默认路径/etc/isulad/daemon.json\),将配置里的use-decrypted-key项配置为false。 +2. 需要将相关的证书放置到/etc/isulad/certs.d目录下对应的镜像仓库命名的文件夹下,证书具体的生成方法见docker的官方链接: + - [https://docs.docker.com/engine/security/certificates/](https://docs.docker.com/engine/security/certificates/) + - [https://docs.docker.com/engine/security/https/](https://docs.docker.com/engine/security/https/) + + +1. 执行systemctl restart isulad重启isulad。 + +#### 参数 + +可以在/etc/isulad/daemon.json中配置参数,也可以在启动isulad时携带参数: + +``` +isulad --use-decrypted-key=false +``` + +#### 示例 + +配置use-decrypted-key参数为false + +``` +$ cat /etc/isulad/daemon.json +{ + "group": "isulad", + "graph": "/var/lib/isulad", + "state": "/var/run/isulad", + "engine": "lcr", + "log-level": "ERROR", + "pidfile": "/var/run/isulad.pid", + "log-opts": { + "log-file-mode": "0600", + "log-path": "/var/lib/isulad", + "max-file": "1", + "max-size": "30KB" + }, + "log-driver": "stdout", + "hook-spec": "/etc/default/isulad/hooks/default.json", + "start-timeout": "2m", + "storage-driver": "overlay2", + "storage-opts": [ + "overlay2.override_kernel_check=true" + ], + "registry-mirrors": [ + "docker.io" + ], + "insecure-registries": [ + "rnd-dockerhub.huawei.com" + ], + "pod-sandbox-image": "", + "image-opt-timeout": "5m", + "native.umask": "secure", + "network-plugin": "", + "cni-bin-dir": "", + "cni-conf-dir": "", + "image-layer-check": false, + "use-decrypted-key": false, + "insecure-skip-verify-enforce": false +} +``` + +将证书放到对应的目录下 + +``` +$ pwd +/etc/isulad/certs.d/my.csp-edge.com:5000 +$ ls +ca.crt tls.cert tls.key +``` + +重启isulad + +``` +$ systemctl restart isulad +``` + +执行pull命令从仓库下载镜像 + +``` +$ isula pull my.csp-edge.com:5000/busybox +Image "my.csp-edge.com:5000/busybox" pulling +Image "my.csp-edge.com:5000/busybox@sha256:f1bdc62115dbfe8f54e52e19795ee34b4473babdeb9bc4f83045d85c7b2ad5c0" pulled +``` + +## embedded镜像管理 + +### 加载镜像 + +#### 描述 + +根据embedded镜像的manifest加载镜像。注意--type的值必须填写embedded。 + +#### 用法 + +``` +isula load [OPTIONS] --input=FILE --type=TYPE +``` + +#### 参数 + +load命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表5 load命令参数列表"。 + +#### 示例 + +``` +$ isula load -i test.manifest --type embedded +Load image from "/root/work/bugfix/tmp/ci_testcase_data/embedded/img/test.manifest" success +``` + +### 列出镜像 + +#### 描述 + +列出当前环境中所有镜像。 + +#### 用法 + +``` +isula images [OPTIONS] +``` + +#### 参数 + +images命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表6 images命令参数列表"。 + +#### 示例 + +``` +$ isula images +REF IMAGE ID CREATED SIZE +test:v1 9319da1f5233 2018-03-01 10:55:44 1.273 MB +``` + +### 检视镜像 + +#### 描述 + +返回该镜像的配置信息。可以使用-f参数过滤出需要的信息。 + +#### 用法 + +``` +isula inspect [options] CONTAINER|IMAGE [CONTAINER|IMAGE...] +``` + +#### 参数 + +inspect命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表7 inspect命令参数列表"。 + +#### 示例 + +``` +$ isula inspect -f "{{json .created}}" test:v1 +"2018-03-01T15:55:44.322987811Z" +``` + +### 删除镜像 + +#### 描述 + +删除一个或多个镜像。 + +#### 用法 + +``` +isula rmi [OPTIONS] IMAGE [IMAGE...] +``` + +#### 参数 + +rmi命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表4 rmi命令参数列表"。 + +#### 示例 + +``` +$ isula rmi test:v1 +Image "test:v1" removed +``` + diff --git "a/content/zh/docs/Container/\345\221\275\344\273\244\350\241\214\346\216\245\345\217\243\345\210\227\350\241\250.md" "b/content/zh/docs/Container/\351\231\204\345\275\225-2.md" similarity index 99% rename from "content/zh/docs/Container/\345\221\275\344\273\244\350\241\214\346\216\245\345\217\243\345\210\227\350\241\250.md" rename to "content/zh/docs/Container/\351\231\204\345\275\225-2.md" index da290fa26c9c38fe40576e0702047ba633e8c640..9c70407caf4c0112444970ce6063fb22f075cc0a 100644 --- "a/content/zh/docs/Container/\345\221\275\344\273\244\350\241\214\346\216\245\345\217\243\345\210\227\350\241\250.md" +++ "b/content/zh/docs/Container/\351\231\204\345\275\225-2.md" @@ -1,8 +1,14 @@ -# 命令行接口列表 - -此处仅列出系统容器与普通容器的差异命令,其他命令用户可以查阅iSulad容器引擎相关章节,或者执行isula XXX --help进行查询。 - - +# 附录 + +- [附录](#附录) + - [命令行接口列表](#命令行接口列表) + + +## 命令行接口列表 + +此处仅列出系统容器与普通容器的差异命令,其他命令用户可以查阅iSulad容器引擎相关章节,或者执行isula XXX --help进行查询。 + + -

命令

参数

@@ -84,5 +90,5 @@
- + + diff --git "a/content/zh/docs/Container/\351\231\204\345\275\225-22.md" "b/content/zh/docs/Container/\351\231\204\345\275\225-22.md" deleted file mode 100644 index 1cc9321be939136766ae040b5e22f8cda1b62e5b..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\351\231\204\345\275\225-22.md" +++ /dev/null @@ -1 +0,0 @@ -# 附录 diff --git "a/content/zh/docs/Container/\351\231\204\345\275\225-28.md" "b/content/zh/docs/Container/\351\231\204\345\275\225-28.md" deleted file mode 100644 index 02ace2a31cc0ee40bf0fc3a5974211c017e0f7d8..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\351\231\204\345\275\225-28.md" +++ /dev/null @@ -1 +0,0 @@ -# 附录 diff --git "a/content/zh/docs/Container/\346\216\245\345\217\243\345\210\227\350\241\250.md" "b/content/zh/docs/Container/\351\231\204\345\275\225-3.md" similarity index 95% rename from "content/zh/docs/Container/\346\216\245\345\217\243\345\210\227\350\241\250.md" rename to "content/zh/docs/Container/\351\231\204\345\275\225-3.md" index 6573e17deeb9bc6290da8557973c9e4582a9be14..0e73dca0d1fbe538ba4ae637e6c434d9676cd229 100644 --- "a/content/zh/docs/Container/\346\216\245\345\217\243\345\210\227\350\241\250.md" +++ "b/content/zh/docs/Container/\351\231\204\345\275\225-3.md" @@ -1,8 +1,94 @@ -# 接口列表 - -**表 1** kata-runtime网络相关的命令行接口 - - +# 附录 +- [附录](#附录) + - [configuration.toml配置说明](#configuration-toml配置说明) + - [接口列表](#接口列表) + +## configuration-toml配置说明 + +>![](public_sys-resources/icon-note.gif) **说明:** +>configuration.toml配置文件中各个字段的取值以kata-containers-.rpm包中的configuration.toml文件为准,不支持用户对配置文件中的字段任意取值。 + +``` +[hypervisor.qemu] +path :指定虚拟化qemu执行路径 +kernel :指定guest kernel执行路径 +initrd :指定guest initrd执行路径 +image :指定guest image执行路径(不适用) +machine_type :指定模拟芯片类型,ARM架构为virt,x86架构为pc +kernel_params :指定guest内核运行参数 +firmware :指定固件路径,设空则使用默认固件 +machine_accelerators :指定加速器 +default_vcpus :指定每个SB/VM的默认vCPU数量 +default_maxvcpus :指定每个SB/VM的默认最大vCPU数量 +default_root_ports :指定每个SB/VM的默认Root Ports数量 +default_bridges :指定每个SB/VM的默认bridges数量 +default_memory :指定每个SB/VM的默认内存大小,默认为1024 MiB +memory_slots :指定每个SB/VM的内存插槽数量,默认为10 +memory_offset :指定内存偏移量,默认为0 +disable_block_device_use :禁止将块设备用于容器的rootfs +shared_fs :指定共享文件系统类型,默认为virtio-9p +virtio_fs_daemon :指定vhost-user-fs守护进程路径 +virtio_fs_cache_size :指定DAX缓存的默认大小 +virtio_fs_cache :指定缓存模式 +block_device_driver :指定块设备驱动 +block_device_cache_set :指定块设备是否设置缓存相关选项,默认false +block_device_cache_direct :指定是否使能O_DIRECT,默认false +block_device_cache_noflush :指定是否忽略设备刷新请求,默认false +enable_iothreads :使能iothreads +enable_mem_prealloc :使能VM RAM预分配,默认false +enable_hugepages :使能大页,默认false +enable_swap :使能swap,默认false +enable_debug :使能qemu debug,默认false +disable_nesting_checks :关闭嵌套检查 +msize_9p = 8192 :指定每个9p包传输的字节数 +use_vsock :使用vsocks与agent直接通信(前提支持vsocks),默认false +hotplug_vfio_on_root_bus :使能vfio设备在root bus热插拔,默认false +disable_vhost_net :关闭vhost_net,默认false +entropy_source :指定默认熵源 +guest_hook_path :指定guest hook二进制路径 + +[factory] +enable_template :使能VM模板,默认false +template_path :指定模板路径 +vm_cache_number :指定VMCache的缓存数量,默认0 +vm_cache_endpoint :指定VMCache使用的Unix socket的地址,默认/var/run/kata-containers/cache.sock + +[proxy.kata] +path :指定kata-proxy运行路径 +enable_debug :使能proxy debug,默认false + +[shim.kata] +path :指定kata-shim运行路径 +enable_debug :使能shim debug,默认false +enable_tracing :使能shim opentracing + +[agent.kata] +enable_debug :使能agent debug,默认false +enable_tracing :使能agent tracing +trace_mode :指定trace模式 +trace_type :指定trace类型 +enable_blk_mount :开启block设备guest挂载 + +[netmon] +enable_netmon :使能网络监控,默认false +path :指定kata-netmon运行路径 +enable_debug :使能netmon debug,默认false + +[runtime] +enable_debug :使能runtime debug,默认false +enable_cpu_memory_hotplug :使能cpu和内存热插拔,默认false +internetworking_model :指定VM和容器网络互联模式 +disable_guest_seccomp :关闭在guest应用seccemp安全机制,默认true +enable_tracing :使能runtime opentracing,默认false +disable_new_netns :不为shim和hypervisor进程创建网络命名空间,默认false +experimental :开启实验特性,不支持用户自定义配置 +``` + +## 接口列表 + +**表 1** kata-runtime网络相关的命令行接口 + + -

命令

子命令

@@ -167,11 +253,11 @@
- -**表 2** kata-ipvs命令行接口 - - + + +**表 2** kata-ipvs命令行接口 + + -

命令

子命令

@@ -397,5 +483,5 @@
- + + diff --git "a/content/zh/docs/Container/\351\231\204\345\275\225.md" "b/content/zh/docs/Container/\351\231\204\345\275\225.md" index cad6a4c02f43fa6cc670547595f5a4af0516858e..858096ce5f302f179f7831fae4b0cfc04fe604a4 100644 --- "a/content/zh/docs/Container/\351\231\204\345\275\225.md" +++ "b/content/zh/docs/Container/\351\231\204\345\275\225.md" @@ -1 +1,731 @@ -# 附录 +# 附录 + +- [附录](#附录.md) + - [命令行参数说明](#命令行参数说明) + - [CNI配置参数](#cni配置参数) + + +## 命令行参数说明 + +**表 1** login命令参数列表 + + + + + + + + + + + + + + + + + + + + +

命令

+

参数

+

说明

+

login

+

  

+

  

+

-H, --host

+

指定要连接的iSulad socket文件路径

+

-p, --password

+

登录镜像仓库的密码

+

--password-stdin

+

从标准输入获取仓库的密码

+

-u, --username

+

登录镜像仓库的用户名

+
+ +
+ +**表 2** logout命令参数列表 + + + + + + + + + + + +

命令

+

参数

+

说明

+

logout

+

-H, --host

+

指定要连接的iSulad socket文件路径

+
+ +
+ +**表 3** pull命令参数列表 + + + + + + + + + + + +

命令

+

参数

+

说明

+

pull

+

-H, --host

+

指定要连接的iSulad socket文件路径

+
+ +
+ +**表 4** rmi命令参数列表 + + + + + + + + + + + + + + +

命令

+

参数

+

说明

+

rmi

+

  

+

-H, --host

+

指定要连接的iSulad socket文件路径

+

-f, --force

+

强制移除镜像

+
+ +
+ +**表 5** load命令参数列表 + + + + + + + + + + + + + + + + + + + + +

命令

+

参数

+

说明

+

load

+

-H, --host (仅 isula支持)

+

指定要连接的iSulad socket文件路径

+

-i, --input

+

指定从哪里导入镜像。如果是docker类型,则为镜像压缩包路径,如果是embedded类型,则为镜像manifest路径。

+

--tag

+

不使用默认的镜像名称,而是使用TAG指定的名称,type为docker类型时支持该参数

+

-t, --type

+

镜像类型,取值为embedded或docker(默认值)

+
+ +
+ +**表 6** images命令参数列表 + + + + + + + + + + + + + + +

命令

+

参数

+

说明

+

images

+

  

+

-H, --host

+

指定要连接的iSulad socket文件路径

+

-q, --quit

+

只显示镜像名字

+
+ +
+ +**表 7** inspect命令参数列表 + + + + + + + + + + + + + + + + + + +

命令

+

参数

+

说明

+

inspect

+

-H, --host

+

指定要连接的iSulad socket文件路径

+

-f, --format

+

使用模板格式化输出

+

-t, --time

+

超时时间的秒数,若在该时间内inspect查询容器信息未执行成功,则停止等待并立即报错,默认为120秒,当配置小于等于0的值,表示不启用timeout机制inspect查询容器信息会一直等待,直到获取容器信息成功后返回。

+
+ +## CNI配置参数 + +**表 1** CNI单网络配置参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

是否可选

+

说明

+

cniVersion

+

string

+

必选

+

CNI版本号,当前只支持0.3.0,0.3.1。

+

name

+

string

+

必选

+

网络名称,由用户自定义,需保证唯一。

+

type

+

string

+

必选

+

网络类型。目前支持的网络类型:

+

underlay_ipvlan

+

overlay_l2

+

underlay_l2

+

vpc-router

+

dpdk-direct

+

phy-direct

+

ipmasp

+

bool

+

可选

+

设置IP masquerade

+

ipam

+

结构体

+

可选

+

详细定义参考IPAM参数定义

+

ipam.type

+

string

+

可选

+

IPAM类型,目前支持的类型:

+

(1)underlay_l2、overlay_l2、vpc-router组网默认值distributed_l2,且只支持distributed_l2。

+

(2)underlay_ipvlan组网,默认distributed_l2。CCN场景只支持null、fixed;CCE和FST 5G core场景只支持null、distributed_l2。

+

(3)phy-direct、dpdk-direct组网,默认l2,可选null、distributed_l2。FST 5G core场景只支持null、distributed_l2。

+

说明:

+

超出选择范围(比如host-local),Canal会自动设置为默认,不会返回错误。

+

null:不使用canal管理ip。

+

fixed:固定ip,CCN场景使用。

+

l2:目前没有场景使用。

+

distributed_l2:使用分布式小子网管理ip。

+

ipam.subnet

+

string

+

可选

+

子网信息。Canal支持的subnet mask范围为[8,29],并且要求IP地址不能为Multicast地址(如224.0.0.0/4),保留地址(240.0.0.0/4),本地link地址(169.254.0.0/16)以及本地loop地址(127.0.0.0/8)。

+

ipam.gateway

+

string

+

可选

+

网关IP

+

ipam.range-start

+

string

+

可选

+

可用的起始IP地址

+

ipam.range-end

+

string

+

可选

+

可用的结束IP地址

+

ipam.routes

+

结构体

+

可选

+

subnet列表,每个元素都是一个route字典。参考route定义.

+

ipam.routes.dst

+

string

+

可选

+

表示目的网络

+

ipam.routes.gw

+

string

+

可选

+

表示网关地址

+

dns

+

结构体

+

可选

+

包含一些DNS的特殊值。

+

dns.nameservers

+

[]string

+

可选

+

nameservers

+

dns.domain

+

string

+

可选

+

domain

+

dns.search

+

[]string

+

可选

+

search

+

dns.options

+

[]string

+

可选

+

选项

+

multi_entry

+

int

+

可选

+

表示一个vnic需要的ip数量,范围0~16。对于物理直通,单个网卡最多可申请128个IP。

+

backup_mode

+

bool

+

可选

+

表示主备模式,仅用于phy-direct和dpdk-direct组网。

+

vlanID

+

int

+

可选

+

0~4095,允许PaaS直接指定。

+

vlan_inside

+

bool

+

可选

+

true表示vlan功能由Node内部实现,false表示vlan在外部实现。

+

vxlanID

+

int

+

可选

+

0~16777215,允许PaaS直接指定。

+

vxlan_inside

+

bool

+

可选

+

true表示vlan功能由Node内部实现,false表示vlan在外部实现。

+

action

+

string

+

可选

+

该参数只能和特殊containerID “000000000000”一起使用。

+

Create表示创建网络。

+

Delete表示删除网络。

+

args

+

map[string]interface{}

+

可选

+

主要描述键值对类型。表2

+

runtimeConfig

+

结构体

+

可选

+

+

capabilities

+

结构体

+

可选

+

+
+ +
+ +**表 2** CNI args参数表 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

是否可选

+

说明

+

K8S_POD_NAME

+

string

+

可选

+

申请固定IP(runtimeConfig.ican_caps.fixed_ip为true)时需要设置K8S_POD_NAME

+

K8S_POD_NAMESPACE

+

string

+

可选

+

申请固定IP(runtimeConfig.ican_caps.fixed_ip为true)时需要设置K8S_POD_NAMESPACE

+

SECURE_CONTAINER

+

string

+

可选

+

安全容器标志

+

multi_port

+

int

+

可选

+

默认值为1,取值范围1-8。只支持phy-direct和dpdk-direct两种类型网络,指定直通网卡数量

+

phy-direct

+

string

+

可选

+

用于在创建硬直通容器网络时指定接入的网卡

+

dpdk-direct

+

string

+

可选

+

用于在创建dpdk直通容器网络时指定接入的网卡

+

tenant_id

+

string

+

可选

+

租户的ID。

+

只支持vpc-router类型网络。

+

vpc_id

+

string

+

可选

+

VPC的ID。

+

只支持vpc-router类型网络。

+

secret_name

+

string

+

可选

+

表示k8s apiserver中保存有ak sk的对象名。

+

只支持vpc-router类型网络

+

参考配置VPC-Router逻辑网络

+

IP

+

string

+

可选

+

用户指定ip地址,格式“192.168.0.10”

+

K8S_POD_NETWORK_ARGS

+

string

+

可选

+

指定ip地址,格式“192.168.0.10”。若args中IP和K8S_POD_NETWORK_ARGS都不为空,以K8S_POD_NETWORK_ARGS为准。

+

INSTANCE_NAME

+

string

+

可选

+

INSTANCE ID。

+

参考支持容器固定IP

+

dist_gateway_disable

+

bool

+

可选

+

true表示不创建gateway,false表示创建gateway。

+

phynet

+

string或[]string

+

可选

+

所需加入的的物理平面信息,为预先定义好的物理网络名称,与SNC体系中的呼应,输入两个平面名时,支持主备平面。例如:"phy_net1" 或 ["phy_net2","phy_net3"]

+

endpoint_policies

+

struct

+

可选

+

"endpoint_policies": [

+

{

+

"Type": "",

+

"ExceptionList": [

+

""

+

],

+

"NeedEncap": true,

+

"DestinationPrefix": ""

+

}

+

]

+

port_map

+

struct

+

可选

+

NAT类型网络中,支持容器端口发布至主机端口。

+

"port_map": [

+

{

+

"local_port": number,

+

"host_port": number,

+

"protocol": [string…]

+

}...

+

]

+
+ +
+ +**表 3** CNI多网络配置参数 + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

类型

+

是否可选

+

说明

+

cniVersion

+

string

+

必选

+

CNI版本号,当前只支持0.3.0,0.3.1。

+

name

+

string

+

必选

+

网络名称,由用户自定义,需保证唯一。

+

plugins

+

struct

+

必选

+

具体配置请参见表1 CNI单网络配置参数

+
+ diff --git "a/content/zh/docs/Container/\351\231\220\345\210\266Blkio\350\265\204\346\272\220.md" "b/content/zh/docs/Container/\351\231\220\345\210\266Blkio\350\265\204\346\272\220.md" deleted file mode 100644 index e9337eb50e81a925c046f6e0d49232d8c58fc8bb..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\351\231\220\345\210\266Blkio\350\265\204\346\272\220.md" +++ /dev/null @@ -1,65 +0,0 @@ -# 限制Blkio资源 - -1. 配置轻量级虚拟机Blkio运行资源 - - 对轻量级虚拟机的BlkIio资源配置,安全容器使用--annotation com.github.containers.virtcontainers.blkio\_cgroup配置轻量级虚拟机使用的块设备的blkio资源,该参数仅可配置在pause容器上: - - ``` - docker run -tid --runtime --network none --annotation io.kubernetes.docker.type=podsandbox --annotation com.github.containers.virtcontainers.blkio_cgroup= - ``` - - 其中--annotation com.github.containers.virtcontainers.blkio\_cgroup的取值要符合下面BlkioCgroup结构体的定义: - - ``` - // BlkioCgroup for Linux cgroup 'blkio' data exchange - type BlkioCgroup struct { - // Items specifies per cgroup values - Items []BlockIOCgroupItem `json:"blkiocgroup,omitempty"` - } - - type BlockIOCgroupItem struct { - // Path represent path of blkio device - Path string `json:"path,omitempty"` - // Limits specifies the blkio type and value - Limits []IOLimit `json:"limits,omitempty"` - } - - type IOLimit struct { - // Type specifies IO type - Type string `json:"type,omitempty"` - // Value specifies rate or weight value - Value uint64 `json:"value,omitempty"` - } - ``` - - IOLimit结构体中Type字段取值列表为: - - ``` - // BlkioThrottleReadBps is the key to fetch throttle_read_bps - BlkioThrottleReadBps = "throttle_read_bps" - - // BlkioThrottleWriteBps is the key to fetch throttle_write_bps - BlkioThrottleWriteBps = "throttle_write_bps" - - // BlkioThrottleReadIOPS is the key to fetch throttle_read_iops - BlkioThrottleReadIOPS = "throttle_read_iops" - - // BlkioThrottleWriteIOPS is the key to fetch throttle_write_iops - BlkioThrottleWriteIOPS = "throttle_write_iops" - - // BlkioWeight is the key to fetch blkio_weight - BlkioWeight = "blkio_weight" - - // BlkioLeafWeight is the key to fetch blkio_leaf_weight - BlkioLeafWeight = "blkio_leaf_weight" - ``` - - 举例: - - ``` - docker run -tid --runtime kata-runtime --network none --annotation com.github.containers.virtcontainers.blkio_cgroup='{"blkiocgroup":[{"path":"/dev/sda","limits":[{"type":"throttle_read_bps","value":400},{"type":"throttle_write_bps","value":400},{"type":"throttle_read_iops","value":700},{"type":"throttle_write_iops","value":699}]},{"limits":[{"type":"blkio_weight","value":78}]}]}' busybox sleep 999999 - ``` - - 上面命令表示对启动的安全容器所使用的/dev/sda磁盘进行blkio限流,分别将throttle\_read\_bps限速为400bps,throttle\_write\_bps限速为400bps,throttle\_read\_iops限速为700次/秒,throttle\_write\_iops限速为699次/秒,以及所在blkio cgroup组的权重值设置为78。 - - diff --git "a/content/zh/docs/Container/\351\231\220\345\210\266CPU\350\265\204\346\272\220.md" "b/content/zh/docs/Container/\351\231\220\345\210\266CPU\350\265\204\346\272\220.md" deleted file mode 100644 index 14418ca7002d334831c85ad265d0fafb54911787..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\351\231\220\345\210\266CPU\350\265\204\346\272\220.md" +++ /dev/null @@ -1,146 +0,0 @@ -# 限制CPU资源 - -1. 配置轻量级虚拟机CPU运行资源 - - 对轻量级虚拟机的CPU资源配置即虚拟机运行的vcpu配置,安全容器使用--annotation com.github.containers.virtcontainers.sandbox\_cpu配置轻量级虚拟机运行CPU资源,该参数仅可配置在pause容器上: - - ``` - docker run -tid --runtime kata-runtime --network none --annotation io.kubernetes.docker.type=podsandbox --annotation com.github.containers.virtcontainers.sandbox_cpu= - ``` - - 举例: - - ``` - # 启动一个pause容器 - docker run -tid --runtime kata-runtime --network none --annotation io.kubernetes.docker.type=podsandbox --annotation com.github.containers.virtcontainers.sandbox_cpu=4 busybox sleep 999999 - be3255a3f66a35508efe419bc52eccd3b000032b9d8c9c62df611d5bdc115954 - - # 进入容器查看CPU信息,查看CPU个数是否与com.github.containers.virtcontainers.sandbox_cpu配置的CPU个数相等 - docker exec be32 lscpu - Architecture: aarch64 - Byte Order: Little Endian - CPU(s): 4 - On-line CPU(s) list: 0-3 - Thread(s) per core: 1 - Core(s) per socket: 1 - Socket(s): 4 - ``` - - >![](public_sys-resources/icon-note.gif) **说明:** - >CPU个数可以设置的最大值为当前OS上可供运行的CPU值(除去隔离核),最小值为0.5个CPU。 - -2. 配置容器CPU运行资源 - - 配置容器CPU运行资源与开源docker容器配置CPU运行资源的方式相同,可以通过docker run命令中CPU资源限制相关的参数进行配置: - - - - - - - - - - - - - - - - - - - - - - - - - -

参数

-

含义

-

--cpu-shares

-

设置容器能使用的CPU时间比例。

-

--cpus

-

设置容器可以使用的 CPU 个数。

-

--cpu-period

-

设置容器进程的调度周期。

-

--cpu-quota

-

设置每个容器进程调度周期内能够使用的CPU时间。

-

--cpuset-cpus

-

设置容器进程可以使用的CPU列表。

-
说明:

安全容器使用 --cpuset-cpus 参数绑定CPU时,CPU的编号不能超过安全容器对应的轻量级虚机中CPU的个数减1(轻量级虚机中CPU的编号从0开始)。

-
-

--cpuset-mems

-

设定该容器进程可以访问的内存节点。

-
说明:

安全容器不支持多NUMA架构和配置,使用NUMA memory的--cpuset-mems参数只能配置为0。

-
-
- -3. 配置CPU热插拔功能 - - >![](public_sys-resources/icon-note.gif) **说明:** - >安全容器CPU热插拔功能需要虚拟化组件qemu支持CPU热插拔。 - - kata-runtime配置文件config.toml中**enable\_cpu\_memory\_hotplug**选项负责开启和禁用CPU和内存热插拔。默认取值为false,表示禁用CPU和内存热插拔功能;取值为true,表示开启CPU和内存热插拔功能。 - - kata-runtime中复用了**--cpus**选项实现了CPU热插拔的功能,通过统计Pod中所有容器的**--cpus**选项的和,然后确定需要热插多少个CPU到轻量级虚机中。 - - 举例: - - ``` - # 启动一个pause容器,轻量级虚机默认分配了1个vcpu - docker run -tid --runtime kata-runtime --network none --annotation io.kubernetes.docker.type=podsandbox busybox sleep 999999 - 77b40fb72f63b11dd3fcab2f6dabfc7768295fced042af8c7ad9c0286b17d24f - - # 查看启动完pause容器后轻量级虚机中CPU个数 - docker exec 77b40fb72f6 lscpu - Architecture: x86_64 - CPU op-mode(s): 32-bit, 64-bit - Byte Order: Little Endian - CPU(s): 1 - On-line CPU(s) list: 0 - Thread(s) per core: 1 - Core(s) per socket: 1 - Socket(s): 1 - - # 在同一个Pod中启动新的容器并通过--cpus设置容器需要的CPU数量为4 - docker run -tid --runtime kata-runtime --network none --cpus 4 --annotation io.kubernetes.docker.type=container --annotation io.kubernetes.sandbox.id=77b40fb72f63b11dd3fcab2f6dabfc7768295fced042af8c7ad9c0286b17d24f busybox sleep 999999 - 7234d666851d43cbdc41da356bf62488b89cd826361bb71d585a049b6cedafd3 - - # 查看当前轻量级虚机中CPU的个数 - docker exec 7234d6668 lscpu - Architecture: x86_64 - CPU op-mode(s): 32-bit, 64-bit - Byte Order: Little Endian - CPU(s): 4 - On-line CPU(s) list: 0-3 - Thread(s) per core: 1 - Core(s) per socket: 1 - Socket(s): 4 - - # 删除热插了CPU的容器后,查看轻量级虚机中CPU的个数 - docker rm -f 7234d666851d - 7234d666851d - - docker exec 77b40fb72f6 lscpu - Architecture: x86_64 - CPU op-mode(s): 32-bit, 64-bit - Byte Order: Little Endian - CPU(s): 1 - On-line CPU(s) list: 0 - Thread(s) per core: 1 - Core(s) per socket: 1 - Socket(s): 1 - ``` - -    - -    - - >![](public_sys-resources/icon-note.gif) **说明:** - >由于pause容器只是一个占位容器没有工作负载,所以轻量级虚机启动时默认分配的1个CPU可以被其它容器共享,因此上面例子中启动的新容器只需要再热插3个CPU到轻量级虚机中即可。 - - - 当停止热插了CPU的容器后,启动容器时热插进去的CPU也会被拔出。 - - diff --git "a/content/zh/docs/Container/\351\231\220\345\210\266\345\206\205\345\255\230\350\265\204\346\272\220.md" "b/content/zh/docs/Container/\351\231\220\345\210\266\345\206\205\345\255\230\350\265\204\346\272\220.md" deleted file mode 100644 index 7ba420485c0d5d1a14cedc2e1be632309c820995..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\351\231\220\345\210\266\345\206\205\345\255\230\350\265\204\346\272\220.md" +++ /dev/null @@ -1,96 +0,0 @@ -# 限制内存资源 - -1. 配置轻量级虚拟机MEM运行资源 - - 对轻量级虚拟机的MEM资源配置即虚拟机运行的内存进行配置,安全容器使用--annotation com.github.containers.virtcontainers.sandbox\_mem配置轻量级虚拟机运行MEM资源,该参数仅可配置在pause容器上: - - ``` - docker run -tid --runtime kata-runtime --network none --annotation io.kubernetes.docker.type=podsandbox --annotation com.github.containers.virtcontainers.sandbox_mem= - ``` - - 举例: - - ``` - # 启动一个pause容器,通过--annotation com.github.containers.virtcontainers.sandbox_mem=4G为轻量级虚机分配4G内存 - docker run -tid --runtime kata-runtime --network none --annotation io.kubernetes.docker.type=podsandbox --annotation com.github.containers.virtcontainers.sandbox_mem=4G busybox sleep 999999 - 1532c3e59e7a45cd6b419aa1db07dd0069b0cdd93097f8944177a25e457e4297 - - # 查看轻量级虚机中内存信息,查看内存大小是否与com.github.containers.virtcontainers.sandbox_mem配置的内存大小相等 - docker exec 1532c3e free -m - total used free shared buff/cache available - Mem: 3950 20 3874 41 55 3858 - Swap: 0 0 0 - ``` - - >![](public_sys-resources/icon-note.gif) **说明:** - >- 如果没有通过--annotation com.github.containers.virtcontainers.sandbox\_mem显示地设置轻量级虚机的内存大小,则轻量级虚机默认使用的内存大小为1GB。 - >- 安全容器一个Pod的最小内存规格是1GB,支持的最大内存规格是256GB。如果用户分配的内存规格超过256GB,可能会出现未定义的错误,安全容器暂不支持超过256GB的大内存场景。 - -2. 配置容器MEM运行资源 - - 配置容器MEM运行资源与开源docker容器配置MEM运行资源的方式相同,可以通过docker run命令中MEM资源限制相关的参数进行配置: - - - - - - - - - - -

参数

-

含义

-

-m/--memory

-

设置容器进程可以使用的内存大小。

-
说明:
  • 当内存热插拔开关关闭时,-m的取值要小于等于轻量级虚机启动时分配的内存大小。
-
-
- -3. 配置MEM热插功能 - - 同配置CPU热插拔功能一样,MEM的热插功能也是由kata-runtime配置文件config.toml中**enable\_cpu\_memory\_hotplug**选项配置,用法参见[3](限制CPU资源.md#zh-cn_topic_0183903699_li2167326144011)。 - - >![](public_sys-resources/icon-note.gif) **说明:** - >内存资源当前只支持热插,不支持内存热拔。 - - kata-runtime中复用了**-m**选项实现了MEM热插的功能,通过统计Pod中所有容器的**-m**选项的和,然后确定需要热插多少内存到轻量级虚机中,例如, - - 举例: - - ``` - # 启动一个pause容器,轻量级虚机默认分配了1GB内存 - docker run -tid --runtime kata-runtime --network none --annotation io.kubernetes.docker.type=podsandbox busybox sleep 999999 - 99b78508ada3fa7dcbac457bb0f6e3784e64e7f7131809344c5496957931119f - - # 查看启动完pause容器后轻量级虚机中的内存大小 - docker exec 99b78508ada free -m - total used free shared buff/cache available - Mem: 983 18 914 36 50 908 - Swap: 0 0 0 - - # 在同一个Pod中启动新的容器并通过-m设置容器需要的内存大小为4G - docker run -tid --runtime kata-runtime --network none -m 4G --annotation io.kubernetes.docker.type=container --annotation io.kubernetes.sandbox.id=99b78508ada3fa7dcbac457bb0f6e3784e64e7f7131809344c5496957931119f busybox sleep 999999 - c49461745a712b2ef3127fdf43b2cbb034b7614e6060b13db12b7a5ff3c830c8 - - # 查看当前轻量级虚机中内存的大小 - docker exec c49461745 free -m - total used free shared buff/cache available - Mem: 4055 69 3928 36 57 3891 - Swap: 0 0 0 - - # 删除热插了CPU的容器后,查看轻量级虚机中内存的大小 - docker rm -f c49461745 - c49461745 - - # 因为热插的内存暂不支持热拔功能,所以轻量级虚机中在删除热插内存容器之后还是拥有4GB的内存 - docker exec 99b78508ada free -m - total used free shared buff/cache available - Mem: 4055 69 3934 36 52 3894 - Swap: 0 0 0 - ``` - - >![](public_sys-resources/icon-note.gif) **说明:** - >由于pause容器只是一个占位容器没有工作负载,所以轻量级虚机启动时分配的内存可以被其它容器共享使用,因此上面例子中启动的新容器只需要再热插3GB的内存到轻量级虚机中即可。 - - diff --git "a/content/zh/docs/Container/\351\231\220\345\210\266\345\256\271\345\231\250rootfs\345\255\230\345\202\250\347\251\272\351\227\264.md" "b/content/zh/docs/Container/\351\231\220\345\210\266\345\256\271\345\231\250rootfs\345\255\230\345\202\250\347\251\272\351\227\264.md" deleted file mode 100644 index 726258934020c22f821df32de08fd1d21740afdf..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\351\231\220\345\210\266\345\256\271\345\231\250rootfs\345\255\230\345\202\250\347\251\272\351\227\264.md" +++ /dev/null @@ -1,169 +0,0 @@ -# 限制容器rootfs存储空间 - -## 描述 - -在ext4上使用overlay2时,可以设置单个容器的文件系统限额,比如设置A容器的限额为5G,B容器为10G。 - -该特性通过ext4文件系统的project quota功能来实现,在内核支持的前提下,通过系统调用SYS\_IOCTL设置某个目录的project ID,再通过系统调用SYS\_QUOTACTL设置相应的project ID的hard limit和solft limit值达到限额的目的。 - -## 用法 - -1. 环境准备 - - 文件系统支持Project ID和Project Quota属性,4.19版本内核已经支持,外围包e2fsprogs版本不低于1.43.4-2。 - -2. 在容器挂载overlayfs之前,需要对不同容器的upper目录和work目录设置不同的project id,同时设置继承选项,在容器挂载overlayfs之后不允许再修改project id和继承属性。 -3. 配额的设置需要在容器外以特权用户进行。 -4. daemon中增加如下配置 - - ``` - -s overlay2 --storage-opt overlay2.override_kernel_check=true - ``` - -5. daemon支持以下选项,用于为容器设置默认的限制, - - --storage-opt overlay2.basesize=128M 指定默认限制的大小,若isula run时也指定 了--storeage-opt size选项,则以run时指定来生效,若daemon跟isula run时都不指定大小,则表示不限制。 - -6. 需要开启文件系统Project ID和Project Quota属性。 - - 新格式化文件系统并mount - - ``` - # mkfs.ext4 -O quota,project /dev/sdb - # mount -o prjquota /dev/sdb /var/lib/isulad - ``` - - - -## 参数 - -create/run时指定--storage-opt参数。 - - - - - - - - - - - - - - -

参数项

-

参数说明

-

取值范围

-

是否必选

-

--storage-opt size=${rootfsSize}

-

限制容器rootfs存储空间。

-

rootfsSize解析出的大小为int64范围内以字节表示的正数,默认单位为B,也可指定为([kKmMgGtTpP])?[iI]?[bB]?$

-

-
- -## 示例 - -在isula run/create命令行上通过已有参数“--storage-opt size=”来设置限额。其中value是一个正数,单位可以是\[kKmMgGtTpP\]?\[iI\]?\[bB\]?,在不带单位的时候默认单位是字节。 - -``` -$ [root@localhost ~]# isula run -ti --storage-opt size=10M busybox -/ # df -h -Filesystem Size Used Available Use% Mounted on -overlay 10.0M 48.0K 10.0M 0% / -none 64.0M 0 64.0M 0% /dev -none 10.0M 0 10.0M 0% /sys/fs/cgroup -tmpfs 64.0M 0 64.0M 0% /dev -shm 64.0M 0 64.0M 0% /dev/shm -/dev/mapper/vg--data-ext41 - 9.8G 51.5M 9.2G 1% /etc/hostname -/dev/mapper/vg--data-ext41 - 9.8G 51.5M 9.2G 1% /etc/resolv.conf -/dev/mapper/vg--data-ext41 - 9.8G 51.5M 9.2G 1% /etc/hosts -tmpfs 3.9G 0 3.9G 0% /proc/acpi -tmpfs 64.0M 0 64.0M 0% /proc/kcore -tmpfs 64.0M 0 64.0M 0% /proc/keys -tmpfs 64.0M 0 64.0M 0% /proc/timer_list -tmpfs 64.0M 0 64.0M 0% /proc/sched_debug -tmpfs 3.9G 0 3.9G 0% /proc/scsi -tmpfs 64.0M 0 64.0M 0% /proc/fdthreshold -tmpfs 64.0M 0 64.0M 0% /proc/fdenable -tmpfs 3.9G 0 3.9G 0% /sys/firmware -/ # -/ # dd if=/dev/zero of=/home/img bs=1M count=12 && sync -dm-4: write failed, project block limit reached. -10+0 records in -9+0 records out -10432512 bytes (9.9MB) copied, 0.011782 seconds, 844.4MB/s -/ # df -h | grep overlay -overlay 10.0M 10.0M 0 100% / -/ # -``` - -## 约束 - -1. 限额只针对rw层。 - - overlay2的限额是针对容器的rw层的,镜像的大小不计算在内。 - -2. 内核支持并使能。 - - 内核必须支持ext4的project quota功能,并在mkfs的时候要加上-O quota,project,挂载的时候要加上-o prjquota。任何一个不满足,在使用--storage-opt size=时都将报错。 - - ``` - $ [root@localhost ~]# isula run -it --storage-opt size=10Mb busybox df -h - Error response from daemon: Failed to prepare rootfs with error: time="2019-04-09T05:13:52-04:00" level=fatal msg="error creating read- - write layer with ID "a4c0e55e82c55e4ee4b0f4ee07f80cc2261cf31b2c2dfd628fa1fb00db97270f": --storage-opt is supported only for overlay over - xfs or ext4 with 'pquota' mount option" - ``` - -3. 限制额度的说明。 - 1. 限制的额度大于isulad的root所在分区的size时,在容器内用df看到的文件系统的额度是isulad的root所在分区的size,而不是设置的限额。 - 2. --storage-opt size=0代表不限制,且设置值不能小于4096。size的精度为1个字节,如果指定精度含小数个字节,小数部分被忽略,如指定size=0.1实际等同于size=0不限制。(受计算机存储浮点数精度的限制,即0.999999999999999999999999999与1是等价的,具体的9的个数不同计算机可能存在差异,故设置4095.999999999999999999999999999与4096等价,其它情况类似),注意isula inspect显示原始命令行指定形式,如果含小数字节,需自行忽略小数部分。 - 3. 限制的额度过小时,比如--storage-opt size=4k,可能会导致容器无法启动,因为启动容器本身需要创建一些文件。 - 4. 上一次启动isulad时,isulad的root所在分区挂载时加了-o prjquota选项,这次启动时不加,那么上一次启动中创建的带quota的容器的设置值不生效。 - 5. daemon端配额--storage-opt overlay2.basesize,其取值范围与--storage-opt size相同。 - -4. 指定storage-opt为4k时,轻量级容器启动与docker有差异 - - 使用选项 storage-opt size=4k 和镜像 rnd-dockerhub.huawei.com/official/ubuntu-arm64:latest 运行容器。 - - docker启动失败。 - - ``` - [root@localhost ~]# docker run -itd --storage-opt size=4k rnd-dockerhub.huawei.com/official/ubuntu-arm64:latest - docker: Error response from daemon: symlink /proc/mounts /var/lib/docker/overlay2/e6e12701db1a488636c881b44109a807e187b8db51a50015db34a131294fcf70-init/merged/etc/mtab: disk quota exceeded. - See 'docker run --help'. - ``` - - 轻量级容器不报错,正常启动 - - ``` - [root@localhost ~]# isula run -itd --storage-opt size=4k rnd-dockerhub.huawei.com/official/ubuntu-arm64:latest - 636480b1fc2cf8ac895f46e77d86439fe2b359a1ff78486ae81c18d089bbd728 - [root@localhost ~]# isula ps - STATUS PID IMAGE COMMAND EXIT_CODE RESTART_COUNT STARTAT FINISHAT RUNTIME ID NAMES - running 17609 rnd-dockerhub.huawei.com/official/ubuntu-arm64:latest /bin/bash 0 0 2 seconds ago - lcr 636480b1fc2c 636480b1fc2cf8ac895f46e77d86439fe2b359a1ff78486ae81c18d089bbd728 - ``` - - 在启动容器的过程中,如果需要在容器的rootfs路径下创建文件,若镜像本身占用的大小超过4k,且此时的quota设置为4k,则创建文件必定失败。 - - docker在启动容器的过程中,会比isulad创建更多的挂载点,用于挂载host上的某些路径到容器中,如/proc/mounts, /dev/shm等,如果镜像内本身不存在这些文件,则会创建,根据上述原因该操作会导致文件创建失败,因而容器启动失败。 - - 轻量级容器在启动容器过程中,使用默认配置时,挂载点较少,如/proc,或/sys等路径不存在时,才会创建。用例中的镜像rnd-dockerhub.huawei.com/official/ubuntu-arm64:latest本身含有/proc, /sys等,因此整个启动容器的过程中,都不会有新文件或路径生成,故轻量级容器启动过程不会报错。为验证这一过程,当把镜像替换为rnd-dockerhub.huawei.com/official/busybox-aarch64:latest时,由于该镜像内无/proc存在,轻量级容器启动一样会报错。 - - ``` - [root@localhost ~]# isula run -itd --storage-opt size=4k rnd-dockerhub.huawei.com/official/busybox-aarch64:latest - 8e893ab483310350b8caa3b29eca7cd3c94eae55b48bfc82b350b30b17a0aaf4 - Error response from daemon: Start container error: runtime error: 8e893ab483310350b8caa3b29eca7cd3c94eae55b48bfc82b350b30b17a0aaf4:tools/lxc_start.c:main:404 starting container process caused "Failed to setup lxc, - please check the config file." - ``` - -5. 其他说明。 - - 使用限额功能的isulad切换数据盘时,需要保证被切换的数据盘使用\`prjquota\`选项挂载,且/var/lib/isulad/storage/overlay2目录的挂载方式与/var/lib/isulad相同。 - - >![](public_sys-resources/icon-note.gif) **说明:** - >切换数据盘时需要保证/var/lib/isulad/storage/overlay2的挂载点被卸载。 - - diff --git "a/content/zh/docs/Container/\351\231\220\345\210\266\345\256\271\345\231\250\345\206\205\345\217\257\344\273\245\345\210\233\345\273\272\347\232\204\350\277\233\347\250\213-\347\272\277\347\250\213\346\225\260.md" "b/content/zh/docs/Container/\351\231\220\345\210\266\345\256\271\345\231\250\345\206\205\345\217\257\344\273\245\345\210\233\345\273\272\347\232\204\350\277\233\347\250\213-\347\272\277\347\250\213\346\225\260.md" deleted file mode 100644 index 0a7362bea65d58463f1d39051c2e9cbdedafddce..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\351\231\220\345\210\266\345\256\271\345\231\250\345\206\205\345\217\257\344\273\245\345\210\233\345\273\272\347\232\204\350\277\233\347\250\213-\347\272\277\347\250\213\346\225\260.md" +++ /dev/null @@ -1,49 +0,0 @@ -# 限制容器内可以创建的进程/线程数 - -## 描述 - -可以通过参数限制容器中能够创建的进程/线程数。 - -## 用法 - -在容器create/run时,使用参数--pids-limit来限制容器中可以创建的进程/线程数。 - -## 参数 - -create/run时指定--pids-limit参数。 - - - - - - - - - - - - - - -

参数项

-

参数说明

-

取值范围

-

是否必选

-

--pids-limit

-

限制容器中可以打开的文件句柄数。

-

64位整数(int64)。可以为0、负,但不能超过2的63 次方减 1,0、负表示不做限制(max)。

-

-
- -## 示例 - -在运行容器时,直接加上--pids-limit n 即可,如: - -``` -isula run -ti --pids-limit 1024 busybox bash -``` - -## 约束 - -由于创建容器的过程中会临时创建一些进程,所以此值不能设置的太小,不然容器可能起不来,建议大于10。 - diff --git "a/content/zh/docs/Container/\351\231\220\345\210\266\345\256\271\345\231\250\345\206\205\346\226\207\344\273\266\345\217\245\346\237\204\346\225\260.md" "b/content/zh/docs/Container/\351\231\220\345\210\266\345\256\271\345\231\250\345\206\205\346\226\207\344\273\266\345\217\245\346\237\204\346\225\260.md" deleted file mode 100644 index 8fb13c81b9501d937bb3567d11b37057e55eaa4c..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\351\231\220\345\210\266\345\256\271\345\231\250\345\206\205\346\226\207\344\273\266\345\217\245\346\237\204\346\225\260.md" +++ /dev/null @@ -1,68 +0,0 @@ -# 限制容器内文件句柄数 - -## 描述 - -可以通过参数限制容器中可以打开的文件句柄数。 - -## 用法 - -isula create/run时使用--files-limit来限制容器中可以打开的文件句柄数。 - -## 参数 - -create/run时指定--files-limit参数。 - - - - - - - - - - - - - - -

参数项

-

参数说明

-

取值范围

-

是否必选

-

--files-limit

-

限制容器中可以打开的文件句柄数。

-

64位整数(int64)。可以为0、负,但不能超过2的63 次方减 1,0、负表示不做限制(max)。

-

由于创建容器的过程中会临时打开一些句柄,所以此值不能设置的太小,不然容器可能不受files limit的限制(如果设置的数小于当前已经打开的句柄数,会导致cgroup文件写不进去),建议大于30。

-

-
- -## 示例 - -在运行容器时,直接加上--files-limit n 即可,如: - -``` -isula run -ti --files-limit 1024 busybox bash -``` - -## 约束 - -1. 使用--files-limit参数传入一个很小的值,如1,可能导致容器启动失败。 - - ``` - [root@localhost ~]# isula run -itd --files-limit 1 rnd-dockerhub.huawei.com/official/busybox-aarch64 - 004858d9f9ef429b624f3d20f8ba12acfbc8a15bb121c4036de4e5745932eff4 - Error response from daemon: Start container error: Container is not running:004858d9f9ef429b624f3d20f8ba12acfbc8a15bb121c4036de4e5745932eff4 - ``` - - 而docker会启动成功,其files.limit cgroup值为max。 - - ``` - [root@localhost ~]# docker run -itd --files-limit 1 rnd-dockerhub.huawei.com/official/busybox-aarch64 - ef9694bf4d8e803a1c7de5c17f5d829db409e41a530a245edc2e5367708dbbab - [root@localhost ~]# docker exec -it ef96 cat /sys/fs/cgroup/files/files.limit - max - ``` - - 根因是lxc和runc启动过程的原理不一样,lxc创建cgroup子组后先设置files.limit值,再将容器进程的PID写入该子组的cgroup.procs文件,此时该进程已经打开超过1个句柄,因而写入报错导致启动失败。runc创建cgroup子组后先将容器进程的PID写入该子组的cgroup.procs文件,再设置files.limit值,此时由于该子组内的进程已经打开超过1个句柄,因而写入files.limit不会生效,内核也不会报错,容器启动成功。 - - diff --git "a/content/zh/docs/Container/\351\231\220\345\210\266\346\226\207\344\273\266\346\217\217\350\277\260\347\254\246\350\265\204\346\272\220.md" "b/content/zh/docs/Container/\351\231\220\345\210\266\346\226\207\344\273\266\346\217\217\350\277\260\347\254\246\350\265\204\346\272\220.md" deleted file mode 100644 index 10895112ed3609a95766d2df0358367054fe5221..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\351\231\220\345\210\266\346\226\207\344\273\266\346\217\217\350\277\260\347\254\246\350\265\204\346\272\220.md" +++ /dev/null @@ -1,15 +0,0 @@ -# 限制文件描述符资源 - -为了避免在容器中打开大量9p共享目录中的文件导致主机上文件描述符资源耗尽,使得安全容器无法正常提供服务,安全容器支持自定义配置安全容器qemu进程最多可以打开的文件描述符数量限制。 - -安全容器通过复用docker run命令中的**--files-limit**选项来设置安全容器qemu进程最多可以打开文件描述符,该参数仅可配置在pause容器上,使用方法如下所示: - -``` -docker run -tid --runtime kata-runtime --network none --annotation io.kubernetes.docker.type=podsandbox --files-limit bash -``` - ->![](public_sys-resources/icon-note.gif) **说明:** ->- 如果**--files-limit**选项的取值小于安全容器默认设置的最小值1024且不为0时,安全容器qemu进程最多可以打开的文件描述符数量会被设置为最小值1024。 ->- 如果**--files-limit**选项的取值为0时,安全容器qemu进程最多可以打开的文件描述符数量为系统可以打开文件描述符的最大值/proc/sys/fs/file-max除以400后得到的默认值。 ->- 如果启动安全容器时没有显示指定**--files-limit**可以打开的文件描述符的上限,安全容器qemu进程可以打开的文件描述符数量的上限和系统默认值保持一致。 - diff --git "a/content/zh/docs/Container/\351\231\220\345\210\266\350\277\220\350\241\214\346\227\266\347\232\204CPU\350\265\204\346\272\220.md" "b/content/zh/docs/Container/\351\231\220\345\210\266\350\277\220\350\241\214\346\227\266\347\232\204CPU\350\265\204\346\272\220.md" deleted file mode 100644 index dfb47484083863985230cb6187b234a68a8bcd1d..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\351\231\220\345\210\266\350\277\220\350\241\214\346\227\266\347\232\204CPU\350\265\204\346\272\220.md" +++ /dev/null @@ -1,84 +0,0 @@ -# 限制运行时的CPU资源 - -## 描述 - -可以通过参数限制容器的各项cpu资源值。 - -## 用法 - -isula create/run时使用cpu相关的参数限制容器的各项cpu资源值,具体参数及取值见下方参数列表。 - -## 参数 - -create/run时可以指定下列参数。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

参数项

-

参数说明

-

取值范围

-

是否必选

-

--cpu-period

-

限制容器中cpu cfs(完全公平调度)周期

-

64位整数(int64)

-

-

--cpu-quota

-

限制容器中cpu cfs(完全公平调度) 的配额

-

64位整数(int64)

-

-

--cpu-shares

-

限制容器中cpu相对权重

-

64位整数(int64)

-

-

--cpuset-cpus

-

限制容器中使用cpu节点

-

字符串。值为要设置的cpu编号,有效范围为主机上的cpu数量,例如可以设置0-3或者0,1.

-

-

--cpuset-mems

-

限制容器中cpuset使用的mem节点

-

字符串。值为要设置的cpu编号,有效范围为主机上的cpu数量,例如可以设置0-3或者0,1.

-

-
- -## 示例 - -如果需要限制容器只是用特定的cpu,在运行容器时,直接加上--cpuset-cpus number 即可,如: - -``` -isula run -tid --cpuset-cpus 0,2-3 busybox sh -``` - ->![](public_sys-resources/icon-note.gif) **说明:** ->是否设置成功,请参见“查询单个容器信息”章节。 - diff --git "a/content/zh/docs/Container/\351\231\220\345\210\266\350\277\220\350\241\214\346\227\266\347\232\204IO\350\265\204\346\272\220.md" "b/content/zh/docs/Container/\351\231\220\345\210\266\350\277\220\350\241\214\346\227\266\347\232\204IO\350\265\204\346\272\220.md" deleted file mode 100644 index dcb907b0310865d3713bfac5e83cea77896ba528..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\351\231\220\345\210\266\350\277\220\350\241\214\346\227\266\347\232\204IO\350\265\204\346\272\220.md" +++ /dev/null @@ -1,51 +0,0 @@ -# 限制运行时的IO资源 - -## 描述 - -可以通过参数限制容器中设备读写速度。 - -## 用法 - -isula create/run时使用--device-read-bps/--device-write-bps :\[\]来限制容器中设备的读写速度。 - -## 参数 - -create/run时指定--device-read/write-bps参数。 - - - - - - - - - - - - - - -

参数项

-

参数说明

-

取值范围

-

是否必选

-

--device-read-bps/--device-write-bps

-

限制容器中设备的读速度/写速度

-

64位整数(int64)。值为正整数,可以为0,0表示不设置(不限制);单位可以为空(byte),KB,MB,GB,TB,PB.

-

-
- -## 示例 - -如果需要限制容器内设备的读写速度,在运行容器时,直接加上--device-write-bps/--device-read-bps :\[\]即可,例如,限制容器busybox内设备/dev/sda的读速度为 1MB 每秒,则命令如下: - -``` -isula run -tid --device-write /dev/sda:1mb busybox sh -``` - -限制写速度的命令如下: - -``` -isula run -tid read-bps /dev/sda:1mb busybox sh -``` - diff --git "a/content/zh/docs/Container/\351\231\220\345\210\266\350\277\220\350\241\214\346\227\266\347\232\204\345\206\205\345\255\230.md" "b/content/zh/docs/Container/\351\231\220\345\210\266\350\277\220\350\241\214\346\227\266\347\232\204\345\206\205\345\255\230.md" deleted file mode 100644 index df2b6f62594fcdeecde6ce8c92a79fdbcace714e..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Container/\351\231\220\345\210\266\350\277\220\350\241\214\346\227\266\347\232\204\345\206\205\345\255\230.md" +++ /dev/null @@ -1,72 +0,0 @@ -# 限制运行时的内存 - -## 描述 - -可以通过参数限制容器的各项内存值上限。 - -## 用法 - -isula create/run时使用内存相关的参数限制容器的各项内存使用上限,具体参数及取值见下方参数列表。 - -## 参数 - -create/run时可以指定下列参数。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

参数项

-

参数说明

-

取值范围

-

是否必选

-

--memory

-

限制容器中内存使用上限

-

64位整数(int64)。值为非负数,0表示不设置(不限制);单位可以为空(byte),KB,MB,GB,TB,PB.

-

-

--memory-reservation

-

限制容器中内存的软上限

-

64位整数(int64)。值为非负数,0表示不设置(不限制);单位可以为空(byte),KB,MB,GB,TB,PB.

-

-

--memory-swap

-

限制容器中交换内存的上限

-

64位整数(int64)。值为-1或非负数,-1表示不限制,0表示不设置(不限制);单位可以为空(byte),KB,MB,GB,TB,PB.

-

-

--kernel-memory

-

限制容器中内核内存的上限

-

64位整数(int64)。值为非负数,0表示不设置(不限制);单位可以为空(byte),KB,MB,GB,TB,PB.

-

-
- -## 示例 - -如果需要限制容器内内存的上限,在运行容器时,直接加上--memory \[\]即可,如: - -``` -isula run -tid --memory 1G busybox sh -``` - diff --git "a/content/zh/docs/SecHarden/SELinux\351\205\215\347\275\256.md" "b/content/zh/docs/SecHarden/SELinux\351\205\215\347\275\256.md" index e9b34daa0b67b573256c4b49c6189260be548ee2..c7e96f4492c838ffecd5206776dddb0f3f05d318 100644 --- "a/content/zh/docs/SecHarden/SELinux\351\205\215\347\275\256.md" +++ "b/content/zh/docs/SecHarden/SELinux\351\205\215\347\275\256.md" @@ -2,7 +2,7 @@ ## 概述 -自由访问控制DAC(Discretionary Access Control)基于用户、组和其他权限,决定一个资源是否能被访问的因素是某个资源是否拥有对应用户的权限,它不能使系统管理员创建全面和细粒度的安全策略。SELinux(Security-Enhanced Linux)是Linux内核的一个模块,也是Linux的一个安全子系统。SELinux的实现了强制访问控制MAC(Mandatory Access Control ),每个进程和系统资源都有一个特殊的安全标签,资源能否被访问除了DAC规定的原则外,还需要判断每一类进程是否拥有对某一类资源的访问权限。 +自主访问控制DAC(Discretionary Access Control)基于用户、组和其他权限,决定一个资源是否能被访问的因素是某个资源是否拥有对应用户的权限,它不能使系统管理员创建全面和细粒度的安全策略。SELinux(Security-Enhanced Linux)是Linux内核的一个模块,也是Linux的一个安全子系统。SELinux的实现了强制访问控制MAC(Mandatory Access Control ),每个进程和系统资源都有一个特殊的安全标签,资源能否被访问除了DAC规定的原则外,还需要判断每一类进程是否拥有对某一类资源的访问权限。 openEuler默认使用SELinux提升系统安全性。SELinux分为三种模式: diff --git "a/content/zh/docs/SecHarden/\346\216\210\346\235\203\350\256\244\350\257\201.md" "b/content/zh/docs/SecHarden/\346\216\210\346\235\203\350\256\244\350\257\201.md" index f2024ab02475f3e818d1a5b20c0524ab3ca02dab..5220419c23c2387e4975222aa85bbfd2f3c266c5 100644 --- "a/content/zh/docs/SecHarden/\346\216\210\346\235\203\350\256\244\350\257\201.md" +++ "b/content/zh/docs/SecHarden/\346\216\210\346\235\203\350\256\244\350\257\201.md" @@ -24,7 +24,7 @@ Authorized users only. All activities may be monitored and reported. ``` -## 禁止通过Ctrl+Alt+Del重启系统.md">禁止通过Ctrl+Alt+Del重启系统 +## 禁止通过Ctrl+Alt+Del重启系统 ### 说明 @@ -69,7 +69,7 @@ export TMOUT=300 umask值用于为用户新创建的文件和目录设置缺省权限。如果umask的值设置过小,会使群组用户或其他用户的权限过大,给系统带来安全威胁。因此设置所有用户默认的umask值为0077,即用户创建的目录默认权限为700,文件的默认权限为600。umask值代表的是权限的“补码”,umask值和权限的换算方法请参见[umask值含义](#umask值含义)。 >![](public_sys-resources/icon-note.gif) **说明:** ->openEuler默认已设置用户的默认umask值为077。 +>openEuler默认已设置用户的默认umask值为022。 ### 实现 diff --git "a/content/zh/docs/SecHarden/\346\223\215\344\275\234\347\263\273\347\273\237\345\212\240\345\233\272\346\246\202\350\277\260.md" "b/content/zh/docs/SecHarden/\346\223\215\344\275\234\347\263\273\347\273\237\345\212\240\345\233\272\346\246\202\350\277\260.md" index a41f404b605447eaf987855d6e78260237ba4454..a107aefc61f960ff8fad2264186149bdf6a58d94 100644 --- "a/content/zh/docs/SecHarden/\346\223\215\344\275\234\347\263\273\347\273\237\345\212\240\345\233\272\346\246\202\350\277\260.md" +++ "b/content/zh/docs/SecHarden/\346\223\215\344\275\234\347\263\273\347\273\237\345\212\240\345\233\272\346\246\202\350\277\260.md" @@ -11,6 +11,10 @@ +## 须知 + +由于安全加固对系统至关重要,因此只有root用户允许修改并应用安全加固策略。 + ## 加固目的 操作系统作为信息系统的核心,承担着管理硬件资源和软件资源的重任,是整个信息系统安全的基础。操作系统之上的各种应用,要想获得信息的完整性、机密性、可用性和可控性,必须依赖于操作系统。脱离了对操作系统的安全保护,仅依靠其他层面的防护手段来阻止黑客和病毒等对网络信息系统的攻击,是无法满足安全需求的。 diff --git "a/content/zh/docs/SecHarden/\346\226\207\344\273\266\346\235\203\351\231\220.md" "b/content/zh/docs/SecHarden/\346\226\207\344\273\266\346\235\203\351\231\220.md" index bbbbe82029437960f196ad57512c2a3217a2fccf..0b52e2e25f5c33897ceac2f2d734f3e2148cc558 100644 --- "a/content/zh/docs/SecHarden/\346\226\207\344\273\266\346\235\203\351\231\220.md" +++ "b/content/zh/docs/SecHarden/\346\226\207\344\273\266\346\235\203\351\231\220.md" @@ -63,7 +63,7 @@ openEuler默认对系统中的常用目录、可执行文件和配置文件设 删除群组ID不存在的文件 -1. 查找用户ID不存在的文件。 +1. 查找群主ID不存在的文件。 ``` find / -nogroup @@ -116,7 +116,7 @@ openEuler系统安装完成后,可能存在空链接文件,这些空链接 umask值用来为新创建的文件和目录设置缺省权限。如果没有设定umask值,则生成的文件具有全局可写权限,存在一定的风险。守护进程负责系统上某个服务,让系统可以接受来自用户或者是网络客户的要求。为了提高守护进程所创建文件和目录的安全性,建议设置其umask值为0027。umask值代表的是权限的“补码”,umask值和权限的换算方法请参见 "附录 > umask值含义" 。 >![](public_sys-resources/icon-note.gif) **说明:** ->openEuler默认已设置守护进程的umask值为0027。 +>openEuler默认已设置守护进程的umask值为0022。 ### 实现 @@ -208,7 +208,7 @@ cron命令用于创建例行性任务。为避免任意用户通过cron命令安 1. 删除/etc/cron.deny文件。 ``` - rm -f /etc/at.deny + rm -f /etc/cron.deny ``` 2. 将/etc/cron.allow的文件属主改为root:root。 diff --git "a/content/zh/docs/Virtualization/CPU\344\273\275\351\242\235.md" "b/content/zh/docs/Virtualization/CPU\344\273\275\351\242\235.md" deleted file mode 100644 index 984f5d256043e9995ff599124877974ab9fcf4aa..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Virtualization/CPU\344\273\275\351\242\235.md" +++ /dev/null @@ -1,78 +0,0 @@ -# CPU份额 - -## 概述 - -虚拟化环境下,同一主机上的多个虚拟机竞争使用物理CPU。为了防止某些虚拟机占用过多的物理CPU资源,影响相同主机上其他虚拟机的性能,需要平衡虚拟机vCPU的调度,避免物理CPU的过度竞争。 - -CPU份额表示一个虚拟机竞争物理CPU计算资源的能力大小总和。用户通过调整cpu\_shares值能够设置虚拟机抢占物理CPU资源的能力。cpu\_shares值无单位,是一个相对值。虚拟机获得的CPU计算资源,是与其他虚拟机的CPU份额,按相对比例,瓜分物理CPU除预留外可用计算资源。通过调整CPU份额来保证虚拟机CPU计算资源服务质量。 - -## 操作步骤 - -通过修改分配给虚拟机的运行时间的cpu\_shares值,来平衡vCPU之间的调度。 - -- 查看虚拟机的当前CPU份额: - - ``` - # virsh schedinfo - Scheduler : posix - cpu_shares : 1024 - vcpu_period : 100000 - vcpu_quota : -1 - emulator_period: 100000 - emulator_quota : -1 - global_period : 100000 - global_quota : -1 - iothread_period: 100000 - iothread_quota : -1 - ``` - - -- 在线修改:修改处于running状态的虚拟机的当前CPU份额,使用带**--live**参数的virsh schedinfo命令: - - ``` - # virsh schedinfo --live cpu_shares= - ``` - - 比如将正在运行的虚拟机openEulerVM的CPU份额从1024改为2048: - - ``` - # virsh schedinfo openEulerVM --live cpu_shares=2048 - Scheduler : posix - cpu_shares : 2048 - vcpu_period : 100000 - vcpu_quota : -1 - emulator_period: 100000 - emulator_quota : -1 - global_period : 100000 - global_quota : -1 - iothread_period: 100000 - iothread_quota : -1 - ``` - - 对cpu\_shares值的修改立即生效,虚拟机_openEulerVM_能得到的运行时间将是原来的2倍。但是这一修改将在虚拟机关机并重新启动后失效。 - -- 持久化修改:在libvirt内部配置中修改虚拟机的CPU份额,使用带**--config**参数的virsh schedinfo命令: - - ``` - # virsh schedinfo --config cpu_shares= - ``` - - 比如将虚拟机openEulerVM的CPU份额从1024改为2048: - - ``` - # virsh schedinfo openEulerVM --config cpu_shares=2048 - Scheduler : posix - cpu_shares : 2048 - vcpu_period : 0 - vcpu_quota : 0 - emulator_period: 0 - emulator_quota : 0 - global_period : 0 - global_quota : 0 - iothread_period: 0 - iothread_quota : 0 - ``` - - 对cpu\_shares值的修改不会立即生效,在虚拟机openEulerVM下一次启动后才生效,并持久生效。虚拟机euler能得到的运行时间将是原来的2倍。 - - diff --git "a/content/zh/docs/Virtualization/IOThread\351\205\215\347\275\256.md" "b/content/zh/docs/Virtualization/IOThread\351\205\215\347\275\256.md" deleted file mode 100644 index a81c17cabe0eab0476b7d49cb8c556da670b6faf..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Virtualization/IOThread\351\205\215\347\275\256.md" +++ /dev/null @@ -1,59 +0,0 @@ -# IOThread配置 - -## 概述 - -KVM平台上,对虚拟磁盘的读写在后端默认由QEMU主线程负责处理。这样会造成如下问题: - -- 虚拟机的I/O请求都由一个QEMU主线程进行处理,因此单线程的CPU利用率成为虚拟机I/O性能的瓶颈。 -- 虚拟机I/O在QEMU主线程处理时会持有QEMU全局锁\(qemu\_global\_mutex\),一旦I/O处理耗时较长,QEMU主线程长时间占有全局锁,会导致虚拟机vCPU无法正常调度,影响虚拟机整体性能及用户体验。 - -可以为virtio-blk磁盘或者virtio-scsi控制器配置IOThread属性,在QEMU后端单独开辟IOThread线程处理虚拟磁盘读写请求,IOThread线程和virtio-blk磁盘或virtio-scsi控制器可配置成一对一的映射关系,尽可能地减少对QEMU主线程的影响,提高虚拟机整体I/O性能,提升用户体验。 - -## 配置说明 - -使用IOThread线程处理虚拟机磁盘读写请求,需要修改虚拟机配置,这里给出具体的配置说明。 - -- 配置虚拟机高性能虚拟磁盘的总数。例如通过配置IOThread线程的总数为4: - - ``` - - VMName - 4194304 - 4194304 - 4 - 4 - ``` - -- 给virtio-blk磁盘配置IOThread属性。**<**iothread**\>**表示IOThread线程编号,编号从1开始配置,最大为的配置值,且编号不能重复使用。例如将编号为2的IOThread配置给virtio-blk磁盘使用: - - ``` - - - - -
- - ``` - -- 给virtio-scsi控制器配置IOThread属性。例如将编号为2的IOThread配置给virtio-scsi控制器使用: - - ``` - - - -
- - ``` - -- IOThread线程绑定物理CPU - - 虚拟磁盘IOThread线程的绑核配置,将IOThread线程绑定到用户指定的物理CPU范围内,不影响vCPU线程的资源占用诉求。表示IOThread线程编号,表示绑定的物理CPU编号。 - - ``` - - - - - ``` - - diff --git "a/content/zh/docs/Virtualization/Libvirt\351\211\264\346\235\203.md" "b/content/zh/docs/Virtualization/Libvirt\351\211\264\346\235\203.md" deleted file mode 100644 index b2523aea5f55fe83d99ebb076cc786b91113cda5..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Virtualization/Libvirt\351\211\264\346\235\203.md" +++ /dev/null @@ -1,84 +0,0 @@ -# Libvirt鉴权 - -## 简介 - -用户使用libvirt远程调用功能时,如果不进行任何鉴权校验,所有连接到主机所在网络的第三方程序都可以通过libvirt的远程调用操作虚拟机,存在安全隐患。为了提升系统安全性,openEuler提供了libvirt鉴权功能,即用户通过libvirt远程调用操作虚拟机前,必须经过身份校验,只有特定用户允许访问虚拟机,从而保护组网中的虚拟机。 - -## 开启libvirt鉴权 - -openEuler默认关闭libvirt远程调用功能,这里给出开启libvirt远程调用和libvirt鉴权功能的方法。 - -1. 登录主机。 -2. 修改libvirt服务配置文件/etc/libvirt/libvirtd.conf,开启libvirt远程调用和libvirt鉴权功能。例如使用基于SASL(Simple Authentication and Security Layer)协议的TCP远程调用配置参考如下: - - ``` - # 传输层安全协议,0表示关闭,1表示开启,由用户自行配置 - listen_tls = 0 - # 开启基于TCP的远程调用,开启libvirt远程调用和libvirt鉴权功能必须配置为1 - listen_tcp = 1 - # TCP远程调用所使用的协议,由用户自行配置,此处以sasl为例 - auth_tcp = "sasl" - ``` - -3. 修改/etc/sasl2/libvirt.conf配置文件,设置SASL认证机制和sasldb数据库。 - - ``` - # sasl协议的认证机制 - mech_list: digest-md5 - # 存放用户和用户密码的数据库 - sasldb_path: /etc/libvirt/passwd.db - ``` - -4. 添加用于SASL验证的用户并设置其密码,假设用户名为userName,命令参考如下: - - ``` - # saslpasswd2 -a libvirt userName - Password: - Again (for verification): - ``` - -5. 修改/etc/sysconfig/libvirtd配置文件,开启libvirt侦听选项。 - - ``` - LIBVIRTD_ARGS="--listen" - ``` - -6. 重启libvirtd服务,使修改生效。 - - ``` - # systemctl restart libvirtd - ``` - -7. 确认libvirt远程调用的鉴权功能是否生效。根据提示输入用户名和密码能够成功连接libvirt服务,说明开启成功。 - - ``` - # virsh -c qemu+tcp://192.168.0.1/system - Please enter your authentication name: openeuler - Please enter your password: - Welcome to virsh, the virtualization interactive terminal. - - Type: 'help' for help with commands - 'quit' to quit - - virsh # - ``` - - -## 管理SASL - -这里给出管理SASL用户的操作。 - -- 查询数据库中存在的用户 - - ``` - # sasldblistusers2 -f /etc/libvirt/passwd.db - user@localhost.localdomain: userPassword - ``` - -- 从数据库中删除用户user - - ``` - # saslpasswd2 -a libvirt -d user - ``` - - diff --git "a/content/zh/docs/Virtualization/NUMA\347\256\200\344\273\213.md" "b/content/zh/docs/Virtualization/NUMA\347\256\200\344\273\213.md" deleted file mode 100644 index 5f86e23849119715f94102e0cd7cefb1d02492f4..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Virtualization/NUMA\347\256\200\344\273\213.md" +++ /dev/null @@ -1,6 +0,0 @@ -# NUMA简介 - -传统的多核运算使用SMP(Symmetric Multi-Processor)模式:将多个处理器与一个集中的存储器和I/O总线相连。所有处理器只能访问同一个物理存储器,因此SMP系统也被称为一致存储器访问(UMA)系统。一致性指无论在什么时候,处理器只能为内存的每个数据保持或共享唯一一个数值。很显然,SMP的缺点是可伸缩性有限,因为在存储器和I/O接口达到饱和的时候,增加处理器并不能获得更高的性能。 - -NUMA(Non Uniform Memory Access Architecture) 模式是一种分布式存储器访问方式,处理器可以同时访问不同的存储器地址,大幅度提高并行性。 NUMA模式下,处理器被划分成多个“节点”(NODE), 每个节点分配一块本地存储器空间。所有节点中的处理器都可以访问全部的物理存储器,但是访问本节点内的存储器所需要的时间,比访问某些远程节点内的存储器所花的时间要少得多。 - diff --git "a/content/zh/docs/Virtualization/PCI\347\233\264\351\200\232.md" "b/content/zh/docs/Virtualization/PCI\347\233\264\351\200\232.md" deleted file mode 100644 index 6a5f81583fcbcbaaf51dc7a0a2ba2c039345dff4..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Virtualization/PCI\347\233\264\351\200\232.md" +++ /dev/null @@ -1,84 +0,0 @@ -# PCI直通 - -PCI直通是指将host上的物理PCI设备直接呈现给一台虚拟机,供虚拟机直接访问的一种使用方式。PCI直通使用了vfio设备直通方式,为虚拟机配置PCI直通的xml配置如下: - -``` - - - -
- - -
- -``` - -**表 1** PCI直通设备配置项 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

参数名

-

说明

-

取值

-

hostdev.source.address.domain

-

host OS上的PCI设备的domain号。

-

>=0

-

hostdev.source.address.bus

-

host OS上的PCI设备bus号。

-

>=1

-

hostdev.source.address.slot

-

host OS上的PCI设备的device号。

-

>=0

-

hostdev.source.address.function

-

host OS上的PCI设备的function号。

-

>=0

-

hostdev.driver.name

-

可选配置项,指定PCI直通的后端驱动。

-

vfio(默认配置项)

-

hostdev.rom

-

直通设备的ROM是否呈现给虚拟机。

-

可以配置为“on/off”,默认为“on”。

-
  • on:表示直通设备的ROM呈现给虚拟机,例如:直通网卡虚拟机需要从该网卡的PXE启动时,可以将该选项配置为“on”,HBA卡直通虚拟机需要从ROM中启动时可以将该选项配置为“on”。
  • off:表示直通设备的ROM不呈现给虚拟机。
-

hostdev.address type

-

PCI设备呈现的Guest内bdf号。

-

[0x03-0x1e](slot范围)

-

说明:

-
  • domain为域信息,bus为总线号,slot为插槽号,function为功能
  • 除了slot插槽号,这里其余均默认为0。
  • 第一个slot插槽号0x00被系统占用,第二个slot号0x01被IDE控制器和USB控制器占用,第三个slot号0x02被video占用。
  • 最后一个slot号0x1f被pvchannel占用。
-
- ->![](public_sys-resources/icon-note.gif) **说明:** ->VFIO直通方式的最小直通单位是iommu\_group,host根据硬件上的ACS位,来划分iommu\_group。同一个iommu\_group中的设备只允许直通给同一台虚拟机(一个PCI设备上的若干个function,如果属于同一个iommu\_group,只允许直通给一个虚拟机使用)。 - diff --git "a/content/zh/docs/Virtualization/SR-IOV\347\233\264\351\200\232.md" "b/content/zh/docs/Virtualization/SR-IOV\347\233\264\351\200\232.md" deleted file mode 100644 index 26845f952037a88ccf929b846115fd614aba0921..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Virtualization/SR-IOV\347\233\264\351\200\232.md" +++ /dev/null @@ -1,171 +0,0 @@ -# SR-IOV直通 - -## 概述 - -SR-IOV(Single Root I/O Virtualizaiton)是一种基于硬件的虚拟化解决方案,通过SR-IOV技术可以将一个PF(Physical Function)虚拟成多个VF(Virtual Function),每个VF都可以单独被直通给一个虚拟机,极大地提升了硬件资源利用率和虚拟机的I/O性能。一种典型的应用场景就是网卡SR-IOV设备直通,利用SR-IOV技术可以将一个物理网卡(PF)虚拟成多个VF网卡,再把VF直通给虚拟机使用。 - ->![](public_sys-resources/icon-note.gif) **说明:** ->- SR-IOV需要物理硬件支持,使用SR-IOV前请确保要直通的硬件设备支持该能力,并且Host侧的设备驱动程序工作在SR-IOV模式下。 ->- 查询网卡具体型号的办法如下: ->例如下述回显,第一列为网卡的PCI号,19e5:1822为网卡的厂商号设备号。 ->``` -># lspci | grep Ether ->05:00.0 Ethernet controller: Device 19e5:1822 (rev 45) ->07:00.0 Ethernet controller: Device 19e5:1822 (rev 45) ->09:00.0 Ethernet controller: Device 19e5:1822 (rev 45) ->0b:00.0 Ethernet controller: Device 19e5:1822 (rev 45) ->81:00.0 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01) ->81:00.1 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01) ->``` - -## 操作方法 - -配置SR-IOV直通网卡的操作步骤如下: - -1. 开启网卡的SR-IOV模式。 - 1. 请确保Guest OS有网卡供应商提供的VF驱动支持,否则Guest OS内VF无法正常工作。 - 2. 在host OS的BIOS中开启SMMU/IOMMU的支持。不同厂家服务器的开启方式可能不同,请参考各服务器的帮助文档。 - 3. HOST驱动配置,开启SR-IOV的VF模式。这里以Hi1822网卡为例,开启16个VF。 - - ``` - echo 16 > /sys/class/net/ethX/device/sriov_numvfs - ``` - -2. 获取PF和VF的PCI BDF信息。 - 1. 获取当前单板上的网卡资源列表,参考命令如下: - - ``` - # lspci | grep Eth - 03:00.0 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family (4*25GE) (rev 45) - 04:00.0 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family (4*25GE) (rev 45) - 05:00.0 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family (4*25GE) (rev 45) - 06:00.0 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family (4*25GE) (rev 45) - 7d:00.0 Ethernet controller: Huawei Technologies Co., Ltd. Device a222 (rev 20) - 7d:00.1 Ethernet controller: Huawei Technologies Co., Ltd. Device a222 (rev 20) - 7d:00.2 Ethernet controller: Huawei Technologies Co., Ltd. Device a221 (rev 20) - 7d:00.3 Ethernet controller: Huawei Technologies Co., Ltd. Device a221 (rev 20) - ``` - - 2. 查看VF的PCI BDF信息,参考命令如下: - - ``` - # lspci | grep "Virtual Function" - 03:00.1 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family Virtual Function (rev 45) - 03:00.2 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family Virtual Function (rev 45) - 03:00.3 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family Virtual Function (rev 45) - 03:00.4 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family Virtual Function (rev 45) - 03:00.5 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family Virtual Function (rev 45) - 03:00.6 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family Virtual Function (rev 45) - 03:00.7 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family Virtual Function (rev 45) - 03:01.0 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family Virtual Function (rev 45) - 03:01.1 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family Virtual Function (rev 45) - 03:01.2 Ethernet controller: Huawei Technologies Co., Ltd. Hi1822 Family Virtual Function (rev 45) - ``` - - 3. 选择一个可用的VF,根据其BDF信息将其配置写入虚拟机的配置文件中。以03:00.1设备为例,对应的bus号是03,slot号是00,function号是1。 - -3. 识别和管理PF/VF对应关系。 - 1. 识别PF对应的VF关系,以PF 03.00.0为例: - - ``` - # ls -l /sys/bus/pci/devices/0000\:03\:00.0/ - ``` - - 可下显示如下的软链接信息,根据信息可以获得其对应的VF编号(virtfnX)和PCI BDF号。 - - 2. 识别VF对应的PF关系,以VF 03:00.1为例: - - ``` - # ls -l /sys/bus/pci/devices/0000\:03\:00.1/ - ``` - - 可显示下述软连接信息,即可获得其对应PF的PCI BDF号。 - - ``` - lrwxrwxrwx 1 root root 0 Mar 28 22:44 physfn -> ../0000:03:00.0 - ``` - - 3. 获知PF/VF对应的网卡设备名称,例如: - - ``` - # ls /sys/bus/pci/devices/0000:03:00.0/net - eth0 - ``` - - 4. 设置VF的mac/vlan/qos信息,确保VF在直通之前处于UP状态。以VF 03:00.1为例,假设PF为eth0,VF编号为0。 - - ``` - # ip link set eth0 vf 0 mac 90:E2:BA:21:XX:XX # 设置mac地址 - # ifconfig eth0 up - # ip link set eth0 vf 0 rate 100 # 设置VF出口速率,单位Mbps - # ip link show eth0 # 查看mac/vlan/qos信息,确认设置成功 - ``` - -4. 挂载SR-IOV网卡到虚拟机中。 - - 创建虚拟机时,在虚拟机配置文件中增加SR-IOV直通的配置项。 - - ``` - - - -
- - - - - - ``` - - **表 1** SR-IOV配置选项说明 - - - - - - - - - - - - - - - - - - - - - - - - -

参数名

-

说明

-

取值

-

hostdev.managed

-

libvirt处理PCI设备的两种模式。

-

no:默认配置,表示直通设备由用户自行管理。

-

yes:表示直通设备由libvirt管理。SR-IOV直通场景需要配置为yes。

-

hostdev.source.address.bus

-

host OS上的PCI设备bus号。

-

>=1

-

hostdev.source.address.slot

-

host OS上的PCI设备device号。

-

>=0

-

hostdev.source.address.function

-

host OS上的PCI设备function号。

-

>=0

-
- - >![](public_sys-resources/icon-note.gif) **说明:** - >关闭SR-IOV功能。 - >在虚拟机使用完毕后(虚拟机关机,所有的VF均没有在使用中的时候),若要关闭SR-IOV功能。执行操作如下: - >这里以Hi1822网卡(eth0对应PF的网口名称)为例: - >``` - >echo 0 > /sys/class/net/eth0/device/sriov_numvfs - >``` - - diff --git "a/content/zh/docs/Virtualization/XML\351\205\215\347\275\256\346\226\207\344\273\266\347\244\272\344\276\213.md" "b/content/zh/docs/Virtualization/XML\351\205\215\347\275\256\346\226\207\344\273\266\347\244\272\344\276\213.md" deleted file mode 100644 index d5c8cf8304586f90b27fffb613038b50bb00ad34..0000000000000000000000000000000000000000 --- "a/content/zh/docs/Virtualization/XML\351\205\215\347\275\256\346\226\207\344\273\266\347\244\272\344\276\213.md" +++ /dev/null @@ -1,140 +0,0 @@ -# XML配置文件示例 - -## 概述 - -本节给出一个基本的AArch64虚拟机和一个x86\_64虚拟机的XML配置文件示例,供用户参考。 - -## 示例一 - -一个包含基本元素的AArch64架构虚拟机的XML配置文件,其内容示例如下: - -``` - - openEulerVM - 8 - 4 - - hvm - /usr/share/edk2/aarch64/QEMU_EFI-pflash.raw - /var/lib/libvirt/qemu/nvram/openEulerVM.fd - - - - - - - - - 1 - - destroy - restart - restart - - /usr/libexec/qemu-kvm - - - - - - - - - - - - - - - - - - - - - - - - - - -``` - -## 示例二 - -一个包含基本元素及总线元素x86\_64架构虚拟机的XML配置文件,其配置示例如下: - -``` - - openEulerVM - 8388608 - 8388608 - 4 - 1 - - hvm - - - - - - - - - destroy - restart - restart - - /usr/libexec/qemu-kvm - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- - - - - - -