diff --git a/docs/zh/docs/1.py b/docs/zh/docs/1.py deleted file mode 100644 index fd33531887eddded2760e7f054b3c3694d04c699..0000000000000000000000000000000000000000 --- a/docs/zh/docs/1.py +++ /dev/null @@ -1,60 +0,0 @@ -import os -import re -from bs4 import BeautifulSoup - - -def fix_unclosed_tags(markdown_content): - """ - 修复Markdown内容中未闭合的HTML标签 - """ - # 使用正则表达式提取HTML片段 - html_fragments = re.findall(r'<[^>]+>', markdown_content) - - # 将HTML片段组合成一个完整的HTML文档 - html_content = '' + ''.join(html_fragments) + '' - - # 使用BeautifulSoup解析HTML - soup = BeautifulSoup(html_content, 'html5lib') - - # 获取修复后的HTML内容 - fixed_html = str(soup.body) - - # 去除多余的和标签 - fixed_html = fixed_html.replace('', '').replace('', '') - - # 将修复后的HTML替换回Markdown内容 - for original, fixed in zip(html_fragments, re.findall(r'<[^>]+>', fixed_html)): - markdown_content = markdown_content.replace(original, fixed) - - return markdown_content - - -def process_markdown_file(file_path): - """ - 处理单个Markdown文件 - """ - with open(file_path, 'r', encoding='utf-8') as file: - content = file.read() - - fixed_content = fix_unclosed_tags(content) - - with open(file_path, 'w', encoding='utf-8') as file: - file.write(fixed_content) - print(f"已修复文件: {file_path}") - - -def find_and_fix_markdown_files(root_dir): - """ - 递归查找并修复所有Markdown文件 - """ - for dirpath, _, filenames in os.walk(root_dir): - for filename in filenames: - if filename.endswith('.md'): - file_path = os.path.join(dirpath, filename) - process_markdown_file(file_path) - - -if __name__ == "__main__": - root_directory = r'/Users/liujingrong/Desktop/docs/docs/zh/docs/1newStruct/Server/Network' # 替换为你的Markdown文件根目录 - find_and_fix_markdown_files(root_directory) - print("所有Markdown文件已修复完成!") \ No newline at end of file diff --git a/docs/zh/docs/ClusterDeployment/Kubernetes/Menu/index.md b/docs/zh/docs/ClusterDeployment/Kubernetes/Menu/index.md deleted file mode 100644 index 958b26ef98ba452509c7504aa2c09f488691251b..0000000000000000000000000000000000000000 --- a/docs/zh/docs/ClusterDeployment/Kubernetes/Menu/index.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -headless: true ---- - -- [Kubernetes集群部署指南]({{< relref "./Kubernetes.md" >}}) - - [准备虚拟机]({{< relref "./preparing-VMs.md" >}}) - - [手动部署集群]({{< relref "./deploying-a-Kubernetes-cluster-manually.md" >}}) - - [安装Kubernetes软件包]({{< relref "./installing-the-Kubernetes-software-package.md" >}}) - - [准备证书]({{< relref "./preparing-certificates.md" >}}) - - [安装etcd]({{< relref "./installing-etcd.md" >}}) - - [部署控制面组件]({{< relref "./deploying-control-plane-components.md" >}}) - - [部署Node节点组件]({{< relref "./deploying-a-node-component.md" >}}) - - [自动部署集群]({{< relref "./eggo-automatic-deployment.md" >}}) - - [工具介绍]({{< relref "./eggo-tool-introduction.md" >}}) - - [部署集群]({{< relref "./eggo-deploying-a-cluster.md" >}}) - - [拆除集群]({{< relref "./eggo-dismantling-a-cluster.md" >}}) - - [运行测试pod]({{< relref "./running-the-test-pod.md" >}}) - - [基于containerd部署集群]({{< relref "./Kubernetes集群部署指南1.md" >}}) - - [常见问题与解决方法]({{< relref "./kubernates常见问题与解决方法.md" >}}) diff --git a/docs/zh/docs/ClusterDeployment/Kubernetes/figures/advertiseAddress.png b/docs/zh/docs/ClusterDeployment/Kubernetes/figures/advertiseAddress.png deleted file mode 100644 index b36e5c4664f2d2e5faaa23128fd4711c11e30179..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/ClusterDeployment/Kubernetes/figures/advertiseAddress.png and /dev/null differ diff --git a/docs/zh/docs/ClusterDeployment/Kubernetes/figures/arch.png b/docs/zh/docs/ClusterDeployment/Kubernetes/figures/arch.png deleted file mode 100644 index 93c5b4cb56b6d165dc5a5cf7aa76a007c362ef55..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/ClusterDeployment/Kubernetes/figures/arch.png and /dev/null differ diff --git a/docs/zh/docs/ClusterDeployment/Kubernetes/figures/flannelConfig.png b/docs/zh/docs/ClusterDeployment/Kubernetes/figures/flannelConfig.png deleted file mode 100644 index dc9e7c665edd02fad16d3e6f4970e3125efcbef8..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/ClusterDeployment/Kubernetes/figures/flannelConfig.png and /dev/null differ diff --git a/docs/zh/docs/ClusterDeployment/Kubernetes/figures/name.png b/docs/zh/docs/ClusterDeployment/Kubernetes/figures/name.png deleted file mode 100644 index dd6ddfdc3476780e8c896bfd5095025507f62fa8..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/ClusterDeployment/Kubernetes/figures/name.png and /dev/null differ diff --git a/docs/zh/docs/ClusterDeployment/Kubernetes/figures/podSubnet.png b/docs/zh/docs/ClusterDeployment/Kubernetes/figures/podSubnet.png deleted file mode 100644 index b368f77dd7dfd7722dcf7751b3e37ec28755e42d..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/ClusterDeployment/Kubernetes/figures/podSubnet.png and /dev/null differ diff --git "a/docs/zh/docs/ClusterDeployment/Kubernetes/kubernetes\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" "b/docs/zh/docs/ClusterDeployment/Kubernetes/kubernetes\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" deleted file mode 100644 index b4ab2cf2b721f1cc28da28ed74f9d21fe1bd2d7d..0000000000000000000000000000000000000000 --- "a/docs/zh/docs/ClusterDeployment/Kubernetes/kubernetes\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" +++ /dev/null @@ -1,13 +0,0 @@ -# 常见问题与解决方法 - -## **问题1:Kubernetes + docker为什么无法部署** - -原因:Kubernetes自1.21版本开始不再支持Kubernetes + docker部署Kubernetes集群。 - -解决方法:改为使用cri-dockerd+docker部署集群,也可以使用containerd或者iSulad部署集群。 - -## **问题2:openEuler无法通过yum直接安装Kubernetes相关的rpm包** - -原因:Kubernetes相关的rpm包需要配置yum的repo源有关EPOL的部分。 - -解决方法:[参考链接](https://forum.openeuler.org/t/topic/768)中repo源,重新配置环境中的EPOL源。 diff --git a/docs/zh/docs/ClusterDeployment/Kubernetes/public_sys-resources/icon-note.gif b/docs/zh/docs/ClusterDeployment/Kubernetes/public_sys-resources/icon-note.gif deleted file mode 100644 index 6314297e45c1de184204098efd4814d6dc8b1cda..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/ClusterDeployment/Kubernetes/public_sys-resources/icon-note.gif and /dev/null differ diff --git a/docs/zh/docs/ClusterDeployment/Menu/index.md b/docs/zh/docs/ClusterDeployment/Menu/index.md deleted file mode 100644 index 76c5e08fa74ef52ead6a4ee881c5ef27b3ae66f6..0000000000000000000000000000000000000000 --- a/docs/zh/docs/ClusterDeployment/Menu/index.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -headless: true ---- - -- [Kubernetes集群部署指南]({{< relref "./Kubernetes/Menu/index.md" >}}) -- [iSulad+k8s集群部署指南]({{< relref "./iSulad+k8s/Menu/index.md" >}}) diff --git a/docs/zh/docs/ClusterDeployment/iSulad+k8s/Menu/index.md b/docs/zh/docs/ClusterDeployment/iSulad+k8s/Menu/index.md deleted file mode 100644 index d372d4778a11bc04c311f98cf48ad5b0d88a225d..0000000000000000000000000000000000000000 --- a/docs/zh/docs/ClusterDeployment/iSulad+k8s/Menu/index.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -headless: true ---- - -- [iSulad+k8s集群部署指南]({{< relref "./iSulad+k8s集群部署指南.md" >}}) - - [iSulad+k8s环境部署]({{< relref "./iSulad+k8s环境部署.md" >}}) - - [gitlab部署]({{< relref "./gitlab部署.md" >}}) - - [gitlab-runner部署]({{< relref "./gitlab-runner部署.md" >}}) diff --git a/docs/zh/docs/ClusterDeployment/iSulad+k8s/figures/public_sys-resources/icon-note.gif b/docs/zh/docs/ClusterDeployment/iSulad+k8s/figures/public_sys-resources/icon-note.gif deleted file mode 100644 index 6314297e45c1de184204098efd4814d6dc8b1cda..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/ClusterDeployment/iSulad+k8s/figures/public_sys-resources/icon-note.gif and /dev/null differ diff --git "a/docs/zh/docs/ContainerEngine/DockerEngine/Docker\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" "b/docs/zh/docs/ContainerEngine/DockerEngine/Docker\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" deleted file mode 100644 index 9d7aec5ac4aced1046df0f36127fb6f7ed14317b..0000000000000000000000000000000000000000 --- "a/docs/zh/docs/ContainerEngine/DockerEngine/Docker\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" +++ /dev/null @@ -1,6 +0,0 @@ -# Docker常见问题与解决方法 - -## **问题1:docker v18.09.9拉起的容器挂载点相比docker v19.03.0及以后的版本多一个** - -原因:18.09版本的docker,默认ipcmode为shareable,该配置会多挂载一个shmpath挂载点。 -解决方法:结合实际情况修改docker配置文件中的ipcmode选项为private,或者使用新版本的docker。 diff --git a/docs/zh/docs/ContainerEngine/DockerEngine/Menu/index.md b/docs/zh/docs/ContainerEngine/DockerEngine/Menu/index.md deleted file mode 100644 index 794bf1fd5360703a977d3ee1ea4fb3feba54fb3c..0000000000000000000000000000000000000000 --- a/docs/zh/docs/ContainerEngine/DockerEngine/Menu/index.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -headless: true ---- - -- [Docker容器]({{< relref "./Docker容器.md" >}}) - - [安装配置]({{< relref "./安装配置-3.md" >}}) - - [容器管理]({{< relref "./容器管理-3.md" >}}) - - [镜像管理]({{< relref "./镜像管理-3.md" >}}) - - [命令行参考]({{< relref "./命令行参考.md" >}}) - - [容器引擎]({{< relref "./容器引擎-4.md" >}}) - - [容器管理]({{< relref "./容器管理-4.md" >}}) - - [镜像管理]({{< relref "./镜像管理-4.md" >}}) - - [统计信息]({{< relref "./统计信息-4.md" >}}) - - [Docker常见问题与解决方法]({{< relref "./Docker常见问题与解决方法.md" >}}) diff --git a/docs/zh/docs/ContainerEngine/DockerEngine/public_sys-resources/icon-caution.gif b/docs/zh/docs/ContainerEngine/DockerEngine/public_sys-resources/icon-caution.gif deleted file mode 100644 index 6e90d7cfc2193e39e10bb58c38d01a23f045d571..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/ContainerEngine/DockerEngine/public_sys-resources/icon-caution.gif and /dev/null differ diff --git a/docs/zh/docs/ContainerEngine/DockerEngine/public_sys-resources/icon-danger.gif b/docs/zh/docs/ContainerEngine/DockerEngine/public_sys-resources/icon-danger.gif deleted file mode 100644 index 6e90d7cfc2193e39e10bb58c38d01a23f045d571..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/ContainerEngine/DockerEngine/public_sys-resources/icon-danger.gif and /dev/null differ diff --git a/docs/zh/docs/ContainerEngine/DockerEngine/public_sys-resources/icon-note.gif b/docs/zh/docs/ContainerEngine/DockerEngine/public_sys-resources/icon-note.gif deleted file mode 100644 index 6314297e45c1de184204098efd4814d6dc8b1cda..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/ContainerEngine/DockerEngine/public_sys-resources/icon-note.gif and /dev/null differ diff --git a/docs/zh/docs/ContainerEngine/DockerEngine/public_sys-resources/icon-notice.gif b/docs/zh/docs/ContainerEngine/DockerEngine/public_sys-resources/icon-notice.gif deleted file mode 100644 index 86024f61b691400bea99e5b1f506d9d9aef36e27..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/ContainerEngine/DockerEngine/public_sys-resources/icon-notice.gif and /dev/null differ diff --git a/docs/zh/docs/ContainerEngine/DockerEngine/public_sys-resources/icon-tip.gif b/docs/zh/docs/ContainerEngine/DockerEngine/public_sys-resources/icon-tip.gif deleted file mode 100644 index 93aa72053b510e456b149f36a0972703ea9999b7..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/ContainerEngine/DockerEngine/public_sys-resources/icon-tip.gif and /dev/null differ diff --git a/docs/zh/docs/ContainerEngine/DockerEngine/public_sys-resources/icon-warning.gif b/docs/zh/docs/ContainerEngine/DockerEngine/public_sys-resources/icon-warning.gif deleted file mode 100644 index 6e90d7cfc2193e39e10bb58c38d01a23f045d571..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/ContainerEngine/DockerEngine/public_sys-resources/icon-warning.gif and /dev/null differ diff --git a/docs/zh/docs/ContainerEngine/Menu/index.md b/docs/zh/docs/ContainerEngine/Menu/index.md deleted file mode 100644 index dbd6d000bd70075886f756a3d086bf922e274037..0000000000000000000000000000000000000000 --- a/docs/zh/docs/ContainerEngine/Menu/index.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -headless: true ---- - -- [iSula容器引擎]({{< relref "./iSulaContainerEngine/Menu/index.md" >}}) -- [Docker容器]({{< relref "./DockerEngine/Menu/index.md" >}}) diff --git a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/Menu/index.md b/docs/zh/docs/ContainerEngine/iSulaContainerEngine/Menu/index.md deleted file mode 100644 index c38c2defcea7421f61ee945c19be589399912fe6..0000000000000000000000000000000000000000 --- a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/Menu/index.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -headless: true ---- - -- [iSula容器引擎]({{< relref "./iSula容器引擎.md" >}}) - - [安装、升级与卸载]({{< relref "./安装-升级与卸载.md" >}}) - -[安装与配置]({{< relref "./安装与配置.md" >}}) - -[升级]({{< relref "./升级.md" >}}) - -[卸载]({{< relref "./卸载.md" >}}) - - [使用指南]({{< relref "./使用指南.md" >}}) - - [容器管理]({{< relref "./容器管理.md" >}}) - - [支持CNI网络]({{< relref "./支持CNI网络.md" >}}) - - [容器资源管理]({{< relref "./容器资源管理.md" >}}) - - [特权容器]({{< relref "./特权容器.md" >}}) - - [CRI-v1alpha2接口]({{< relref "./CRI-v1alpha2接口.md" >}}) - - [CRI-v1接口]({{< relref "./CRI-v1接口.md" >}}) - - [镜像管理]({{< relref "./镜像管理.md" >}}) - - [容器健康状态检查]({{< relref "./容器健康状态检查.md" >}}) - - [查询信息]({{< relref "./查询信息.md" >}}) - - [安全特性]({{< relref "./安全特性.md" >}}) - - [支持OCI hooks]({{< relref "./支持OCI-hooks.md" >}}) - - [本地卷管理]({{< relref "./本地卷管理.md" >}}) - - [iSulad shim v2 对接 StratoVirt]({{< relref "./iSula-shim-v2对接stratovirt.md" >}}) - - [iSulad支持cgroup v2]({{< relref "./iSulad支持cgroup v2.md" >}}) - - [iSulad支持CDI]({{< relref "./iSulad支持CDI.md" >}}) - - [iSulad支持NRI]({{< relref "./iSulad支持NRI.md" >}}) - - [常见问题与解决方法]({{< relref "./isula常见问题与解决方法.md" >}}) - - [附录]({{< relref "./附录.md" >}}) diff --git "a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/iSulad\346\224\257\346\214\201NRI.md" "b/docs/zh/docs/ContainerEngine/iSulaContainerEngine/iSulad\346\224\257\346\214\201NRI.md" deleted file mode 100644 index 6b9c02d2b1867ef75bd4f7778963f7051540d49e..0000000000000000000000000000000000000000 --- "a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/iSulad\346\224\257\346\214\201NRI.md" +++ /dev/null @@ -1,167 +0,0 @@ -# iSulad支持NRI - -## 概述 - -NRI(Node Resource Interface), 是用于控制节点资源的公共接口, 是CRI兼容的容器运行时插件扩展的通用框架。 - -它为扩展插件提供了跟踪容器状态,并对其配置进行有限修改的基本机制。允许将用户某些自定的逻辑插入到OCI兼容的运行时中,此逻辑可以对容器进行受控更改,或在容器生命周期的某些时间点执行 OCI 范围之外的额外操作。例如,用于改进设备和其他容器资源的分配和管理。 - -iSulad目前支持的NRI api 版本为[0.6.1](https://github.com/containerd/nri/blob/v0.6.1/pkg/api/api.proto)。 - -## 配置iSulad支持NRI - -tips: 该功能仅在openeuler 24.09版本中默认可用 - -### 依赖软件包 - -需安装[isula-rust-extensions](https://gitee.com/src-openeuler/isula-rust-extensions)软件包 - -### 相关配置 - -首先打开CRI v1支持,NRI功能仅在V1中生效 - -```conf -"enable-cri-v1": true, -``` - -若使用默认的配置,仅需将以下选项打开: - -```conf -"nri-support": true, -``` - -其他均有默认值。 - -若需要配置其他项,参照: - -```sh -# add support for NRI plugin. -"nri-support": true, -# Allow connections from externally launched NRI plugins. -"disable-connections": true, -# plugin-config-path is the directory to search for plugin-specific configuration. -"plugin-config-path": "/etc/nri/conf.d" -# plugin-path is the directory to search for plugins to launch on startup. -"plugin-path": "/opt/nri/plugins" -# plugin-registration-timeout is the timeout for a plugin to register after connection. -"plugin-registration-timeout": 5 -# plugin-request-timeout is the timeout for a plugin to handle an event/request. -"plugin-request-timeout": 2 -``` - -## 使用示例 - -NRI 简单插件实例可参照[NRI 仓库](https://github.com/containerd/nri/tree/main/plugins),以下使用`Logger`为示例: - -拉取nri代码库,编译plugin二进制: - -```sh -git clone https://github.com/containerd/nri.git -cd plugins/logger -go build . -``` - -### pre-started NRI 插件使用示例 - -1. 若需要在iSulad启动时自动拉取`logger`插件,则将其二进制置于iSulad配置中设置的`plugin_path`路径下,并将`logger`插件的配置置于`plugin_config_path`路径下 - - ```sh - [root@openEuler logger]# mkdir -p /opt/nri/plugins - [root@openEuler logger]# cp 01-logger /opt/nri/plugins - [root@openEuler logger]# ls -l /opt/nri/plugins - total 16896 - -rwxr-xr-x. 1 root root 17300525 Aug 19 15:26 01-logger - [root@openEuler logger]# mkdir -p /etc/nri/conf.d/ - [root@openEuler logger]# vim /etc/nri/conf.d/01-logger.conf - [root@openEuler logger]# cat /etc/nri/conf.d/01-logger.conf - AddAnnotation: test_nri_isula - [root@openEuler logger]# - ``` - -2. 重启isuald后,由于未配置log日志存储位置,默认打印与isulad日志中,若在`01-logger.conf`中配置了日志存储位置则日志存储于配置路径中,产生的日志如下: - - ```conf - INFO [0026] RemovePodSandbox: pod: - INFO [0026] RemovePodSandbox: annotations: - INFO [0026] RemovePodSandbox: cri.sandbox.isulad.checkpoint: '{"version":"v1","name":"test-nri-sandbox2","ns":"testns","data":{"host_network":true},"checksum":"c86a8542e7380049831cca636355345cc5921beebc41cd93e80467491c27a8d9"}' - INFO [0026] RemovePodSandbox: cri.sandbox.network.setup.v2: "true" - INFO [0026] RemovePodSandbox: devices.nri.io/container.c0: | - INFO [0026] RemovePodSandbox: - path: /dev/nri-null - INFO [0026] RemovePodSandbox: type: c - INFO [0026] RemovePodSandbox: major: 1 - INFO [0026] RemovePodSandbox: minor: 3 - INFO [0026] RemovePodSandbox: io.kubernetes.cri.container-type: sandbox - INFO [0026] RemovePodSandbox: io.kubernetes.cri.sandbox-attempt: "1" - INFO [0026] RemovePodSandbox: io.kubernetes.cri.sandbox-name: test-nri-sandbox2 - INFO [0026] RemovePodSandbox: io.kubernetes.cri.sandbox-namespace: testns - INFO [0026] RemovePodSandbox: io.kubernetes.cri.sandbox-uid: b49ef5ee-ee30-11ed-a05b-0242ac120003 - INFO [0026] RemovePodSandbox: ulimits.nri.containerd.io/container.c0: | - INFO [0026] RemovePodSandbox: - type: RLIMIT_NOFILE - INFO [0026] RemovePodSandbox: hard: 1048576 - INFO [0026] RemovePodSandbox: soft: 1048576 - INFO [0026] RemovePodSandbox: id: 475daee4ca64e1d35894a5c27771bee32e55b22753f3ba80f57869e9b294a62b - INFO [0026] RemovePodSandbox: labels: - INFO [0026] RemovePodSandbox: cri.isulad.type: podsandbox - INFO [0026] RemovePodSandbox: io.kubernetes.container.name: POD - INFO [0026] RemovePodSandbox: linux: - INFO [0026] RemovePodSandbox: pod_resources: - INFO [0026] RemovePodSandbox: cpu: - INFO [0026] RemovePodSandbox: period: {} - INFO [0026] RemovePodSandbox: quota: {} - INFO [0026] RemovePodSandbox: shares: - INFO [0026] RemovePodSandbox: value: 2 - INFO [0026] RemovePodSandbox: memory: - INFO [0026] RemovePodSandbox: limit: {} - INFO [0026] RemovePodSandbox: name: k8s_POD_test-nri-sandbox2_testns_b49ef5ee-ee30-11ed-a05b-0242ac120003_1 - INFO [0026] RemovePodSandbox: namespace: testns - INFO [0026] RemovePodSandbox: uid: b49ef5ee-ee30-11ed-a05b-0242ac120003 - iSula 20240829135021.168 - Event: {Object: CRI, Type: Removed Pod: 47} - ``` - -### 外部注册NRI插件使用 - -若需要在iSulad启动后注册`logger`插件,则直接运行此插件二进制 - -```conf -➜ logger git:(v0.6.1) ✗ sudo ./02-logger -INFO [0000] Created plugin 02-logger (02-logger, handles RunPodSandbox,StopPodSandbox,RemovePodSandbox,CreateContainer,PostCreateContainer,StartContainer,PostStartContainer,UpdateContainer,PostUpdateContainer,StopContainer,RemoveContainer) -INFO [0000] Registering plugin 02-logger... -INFO [0000] Configuring plugin 02-logger for runtime v2/2.0.0-beta.2+unknown... -INFO [0000] got configuration data: "" from runtime v2 2.0.0-beta.2+unknown -INFO [0000] Subscribing plugin 02-logger (02-logger) for events RunPodSandbox,StopPodSandbox,RemovePodSandbox,CreateContainer,PostCreateContainer,StartContainer,PostStartContainer,UpdateContainer,PostUpdateContainer,StopContainer,RemoveContainer -INFO [0000] Started plugin 02-logger... -INFO [0000] Synchronize: pods: -INFO [0000] Synchronize: null -INFO [0000] Synchronize: containers: -INFO [0000] Synchronize: null -``` - -## 限制说明 - -### 接口参数限制 - -暂不支持修改某些参数: - -```proto -// Container to evict(IOW unsolicitedly stop). -ContainerEviction evict; - -// ref:https://github.com/containerd/containerd/pull/5490 -// - User defines blockio classes, for example: ThrottledIO and LowLatency. Class names are not restricted, and the number of classes is not limited. -// iSulad not support -OptionalString blockio_class; - -// iSulad now not support the following hook types -message Hooks { - repeated Hook create_runtime = 2; - repeated Hook create_container = 3; - repeated Hook start_container = 4; -} -``` - -### 使用限制 - -1. iSulad目前仅支持CRI V1方式使用NRI特性 -2. 目前支持的NRI api 版本为0.6.1 -3. 对于插件异常退出场景,iSulad目前仅在下次调用出错时打印日志 -4. 对于external 注册的plugin,若iSulad退出,iSulad不对其进行强制kill,生命周期与iSulad无关。 diff --git "a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/isula\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" "b/docs/zh/docs/ContainerEngine/iSulaContainerEngine/isula\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" deleted file mode 100644 index b41f205b7a5dc5bb145da44a387ec15742a39480..0000000000000000000000000000000000000000 --- "a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/isula\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" +++ /dev/null @@ -1,22 +0,0 @@ -# 常见问题与解决方法 - -## **问题1:修改`iSulad`默认运行时为`lxc`,启动容器报错:Failed to initialize engine or runtime** - -原因:`iSulad`默认运行时为`runc`,设置默认运行时为`lxc`时缺少依赖。 - -解决方法:若需修改`iSulad`默认运行时为`lxc`,需要安装`lcr`、`lxc`软件包依赖,且配置`iSulad`配置文件中`runtime`为`lcr` -或者启动容器时指定`--runtime lcr`。启动容器后不应该随意卸载`lcr`、`lxc`软件包,否则可能会导致删除容器时的资源残留。 - -## **问题2:使用`iSulad` `CRI V1`接口,报错:rpc error: code = Unimplemented desc =** - -原因:`iSulad`同时支持`CRI V1alpha2`和`CRI V1`接口,默认使用`CRI V1alpha2`,若使用`CRI V1`,需要开启相应的配置。 - -解决方法:在`iSulad`配置文件`/etc/isulad/daemon.json`中开启`CRI V1`的配置。 - -```json -{ - "enable-cri-v1": true, -} -``` - -若使用源码编译`iSulad`,还需在编译时增加`cmake`编译选项`-D ENABLE_CRI_API_V1=ON`。 diff --git a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/public_sys-resources/icon-caution.gif b/docs/zh/docs/ContainerEngine/iSulaContainerEngine/public_sys-resources/icon-caution.gif deleted file mode 100644 index 6e90d7cfc2193e39e10bb58c38d01a23f045d571..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/public_sys-resources/icon-caution.gif and /dev/null differ diff --git a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/public_sys-resources/icon-danger.gif b/docs/zh/docs/ContainerEngine/iSulaContainerEngine/public_sys-resources/icon-danger.gif deleted file mode 100644 index 6e90d7cfc2193e39e10bb58c38d01a23f045d571..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/public_sys-resources/icon-danger.gif and /dev/null differ diff --git a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/public_sys-resources/icon-note.gif b/docs/zh/docs/ContainerEngine/iSulaContainerEngine/public_sys-resources/icon-note.gif deleted file mode 100644 index 6314297e45c1de184204098efd4814d6dc8b1cda..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/public_sys-resources/icon-note.gif and /dev/null differ diff --git a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/public_sys-resources/icon-notice.gif b/docs/zh/docs/ContainerEngine/iSulaContainerEngine/public_sys-resources/icon-notice.gif deleted file mode 100644 index 86024f61b691400bea99e5b1f506d9d9aef36e27..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/public_sys-resources/icon-notice.gif and /dev/null differ diff --git a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/public_sys-resources/icon-tip.gif b/docs/zh/docs/ContainerEngine/iSulaContainerEngine/public_sys-resources/icon-tip.gif deleted file mode 100644 index 93aa72053b510e456b149f36a0972703ea9999b7..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/public_sys-resources/icon-tip.gif and /dev/null differ diff --git a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/public_sys-resources/icon-warning.gif b/docs/zh/docs/ContainerEngine/iSulaContainerEngine/public_sys-resources/icon-warning.gif deleted file mode 100644 index 6e90d7cfc2193e39e10bb58c38d01a23f045d571..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/public_sys-resources/icon-warning.gif and /dev/null differ diff --git "a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/\347\211\271\346\235\203\345\256\271\345\231\250.md" "b/docs/zh/docs/ContainerEngine/iSulaContainerEngine/\347\211\271\346\235\203\345\256\271\345\231\250.md" deleted file mode 100644 index 2c92da456dcde37f3282857129809db175067815..0000000000000000000000000000000000000000 --- "a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/\347\211\271\346\235\203\345\256\271\345\231\250.md" +++ /dev/null @@ -1,232 +0,0 @@ -# 特权容器 - -## 场景说明 - -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给容器添加特权模式,在非必要情况下,不要给容器添加特权,遵循最小特权原则,减少存在的安全风险。 - -```bash -isula run --rm -it --privileged busybox -``` diff --git a/docs/zh/docs/ContainerForm/Menu/index.md b/docs/zh/docs/ContainerForm/Menu/index.md deleted file mode 100644 index 4a96f855c6fd6c02f97813642a45e50d20b9402b..0000000000000000000000000000000000000000 --- a/docs/zh/docs/ContainerForm/Menu/index.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -headless: true ---- - -- [安全容器]({{< relref "./SecureContainer/Menu/index.md" >}}) -- [系统容器]({{< relref "./SystemContainer/Menu/index.md" >}}) diff --git a/docs/zh/docs/ContainerForm/SecureContainer/Menu/index.md b/docs/zh/docs/ContainerForm/SecureContainer/Menu/index.md deleted file mode 100644 index 3a55af3019dda2016dbac070e43db6ef04a871af..0000000000000000000000000000000000000000 --- a/docs/zh/docs/ContainerForm/SecureContainer/Menu/index.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -headless: true ---- - -- [安全容器]({{< relref "./安全容器.md" >}}) - - [安装与配置]({{< relref "./安装与配置-2.md" >}}) - - [使用方法]({{< relref "./使用方法-1.md" >}}) - - [管理安全容器的生命周期]({{< relref "./管理安全容器的生命周期.md" >}}) - - [为安全容器配置资源]({{< relref "./为安全容器配置资源.md" >}}) - - [监控安全容器]({{< relref "./监控安全容器.md" >}}) - - [附录]({{< relref "./appendix-2.md" >}}) diff --git a/docs/zh/docs/ContainerForm/SecureContainer/public_sys-resources/icon-caution.gif b/docs/zh/docs/ContainerForm/SecureContainer/public_sys-resources/icon-caution.gif deleted file mode 100644 index 6e90d7cfc2193e39e10bb58c38d01a23f045d571..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/ContainerForm/SecureContainer/public_sys-resources/icon-caution.gif and /dev/null differ diff --git a/docs/zh/docs/ContainerForm/SecureContainer/public_sys-resources/icon-danger.gif b/docs/zh/docs/ContainerForm/SecureContainer/public_sys-resources/icon-danger.gif deleted file mode 100644 index 6e90d7cfc2193e39e10bb58c38d01a23f045d571..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/ContainerForm/SecureContainer/public_sys-resources/icon-danger.gif and /dev/null differ diff --git a/docs/zh/docs/ContainerForm/SecureContainer/public_sys-resources/icon-note.gif b/docs/zh/docs/ContainerForm/SecureContainer/public_sys-resources/icon-note.gif deleted file mode 100644 index 6314297e45c1de184204098efd4814d6dc8b1cda..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/ContainerForm/SecureContainer/public_sys-resources/icon-note.gif and /dev/null differ diff --git a/docs/zh/docs/ContainerForm/SecureContainer/public_sys-resources/icon-notice.gif b/docs/zh/docs/ContainerForm/SecureContainer/public_sys-resources/icon-notice.gif deleted file mode 100644 index 86024f61b691400bea99e5b1f506d9d9aef36e27..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/ContainerForm/SecureContainer/public_sys-resources/icon-notice.gif and /dev/null differ diff --git a/docs/zh/docs/ContainerForm/SecureContainer/public_sys-resources/icon-tip.gif b/docs/zh/docs/ContainerForm/SecureContainer/public_sys-resources/icon-tip.gif deleted file mode 100644 index 93aa72053b510e456b149f36a0972703ea9999b7..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/ContainerForm/SecureContainer/public_sys-resources/icon-tip.gif and /dev/null differ diff --git a/docs/zh/docs/ContainerForm/SecureContainer/public_sys-resources/icon-warning.gif b/docs/zh/docs/ContainerForm/SecureContainer/public_sys-resources/icon-warning.gif deleted file mode 100644 index 6e90d7cfc2193e39e10bb58c38d01a23f045d571..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/ContainerForm/SecureContainer/public_sys-resources/icon-warning.gif and /dev/null differ diff --git a/docs/zh/docs/ContainerForm/SystemContainer/Menu/index.md b/docs/zh/docs/ContainerForm/SystemContainer/Menu/index.md deleted file mode 100644 index ded094fb9db74346310e274c3c741329a73ce837..0000000000000000000000000000000000000000 --- a/docs/zh/docs/ContainerForm/SystemContainer/Menu/index.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -headless: true ---- - -- [安全容器]({{< relref "./安全容器.md" >}}) - - [安装与配置]({{< relref "./安装与配置-2.md" >}}) - - [使用方法]({{< relref "./使用方法-1.md" >}}) - - [管理安全容器的生命周期]({{< relref "./管理安全容器的生命周期.md" >}}) - - [为安全容器配置资源]({{< relref "./为安全容器配置资源.md" >}}) - - [监控安全容器]({{< relref "./监控安全容器.md" >}}) - - [附录]({{< relref "./附录-3.md" >}}) diff --git a/docs/zh/docs/ContainerForm/SystemContainer/public_sys-resources/icon-caution.gif b/docs/zh/docs/ContainerForm/SystemContainer/public_sys-resources/icon-caution.gif deleted file mode 100644 index 6e90d7cfc2193e39e10bb58c38d01a23f045d571..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/ContainerForm/SystemContainer/public_sys-resources/icon-caution.gif and /dev/null differ diff --git a/docs/zh/docs/ContainerForm/SystemContainer/public_sys-resources/icon-danger.gif b/docs/zh/docs/ContainerForm/SystemContainer/public_sys-resources/icon-danger.gif deleted file mode 100644 index 6e90d7cfc2193e39e10bb58c38d01a23f045d571..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/ContainerForm/SystemContainer/public_sys-resources/icon-danger.gif and /dev/null differ diff --git a/docs/zh/docs/ContainerForm/SystemContainer/public_sys-resources/icon-note.gif b/docs/zh/docs/ContainerForm/SystemContainer/public_sys-resources/icon-note.gif deleted file mode 100644 index 6314297e45c1de184204098efd4814d6dc8b1cda..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/ContainerForm/SystemContainer/public_sys-resources/icon-note.gif and /dev/null differ diff --git a/docs/zh/docs/ContainerForm/SystemContainer/public_sys-resources/icon-notice.gif b/docs/zh/docs/ContainerForm/SystemContainer/public_sys-resources/icon-notice.gif deleted file mode 100644 index 86024f61b691400bea99e5b1f506d9d9aef36e27..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/ContainerForm/SystemContainer/public_sys-resources/icon-notice.gif and /dev/null differ diff --git a/docs/zh/docs/ContainerForm/SystemContainer/public_sys-resources/icon-tip.gif b/docs/zh/docs/ContainerForm/SystemContainer/public_sys-resources/icon-tip.gif deleted file mode 100644 index 93aa72053b510e456b149f36a0972703ea9999b7..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/ContainerForm/SystemContainer/public_sys-resources/icon-tip.gif and /dev/null differ diff --git a/docs/zh/docs/ContainerForm/SystemContainer/public_sys-resources/icon-warning.gif b/docs/zh/docs/ContainerForm/SystemContainer/public_sys-resources/icon-warning.gif deleted file mode 100644 index 6e90d7cfc2193e39e10bb58c38d01a23f045d571..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/ContainerForm/SystemContainer/public_sys-resources/icon-warning.gif and /dev/null differ diff --git "a/docs/zh/docs/ContainerForm/SystemContainer/\351\231\204\345\275\225-2.md" "b/docs/zh/docs/ContainerForm/SystemContainer/\351\231\204\345\275\225-2.md" deleted file mode 100644 index d29a56e4de1bc1b5135b71d2308711839b8da628..0000000000000000000000000000000000000000 --- "a/docs/zh/docs/ContainerForm/SystemContainer/\351\231\204\345\275\225-2.md" +++ /dev/null @@ -1,92 +0,0 @@ -# 附录 - -- [附录](#附录) - - [命令行接口列表](#命令行接口列表) - -## 命令行接口列表 - -此处仅列出系统容器与普通容器的差异命令,其他命令用户可以查阅iSulad容器引擎相关章节,或者执行isula XXX --help进行查询。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

命令

-

参数

-

参数指定值说明

-

isula create/run

-

--external-rootfs

-
  • 字符串变量。
  • 宿主机某个绝对路径。
  • 运行系统容器时,必须使用此参数指定特定虚拟机的rootfs。
-

--system-container

-
  • 布尔变量。
  • 指定某个容器是否属于系统容器,如果是系统容器场景,必须使能。
-

--add-host

-
  • 字符串变量。
  • 格式为:<hostname>:<ip>,指定容器的hosts配置,可以指定多个参数。
-

--dns,--dns-option,--dns-search

-
  • 字符串变量。
  • 可以指定多个,指定容器的dns配置。
-

--ns-change-opt

-
  • 字符串变量。
  • 容器namespace化内核参数可修改选项,参数只能为net或ipc,如果指定多个,用逗号隔开,例如--ns-change-opt=net,ipc。
-

--oom-kill-disable

-
  • 布尔变量。
  • 表示是否打开oom-kill-disable功能。
-

--shm-size

-
  • 字符串变量。
  • 设置/dev/shm大小,默认64MB。 支持单位B(b)、K(k)、M(m)、G(g)、T(t)、P(p)。
-

--sysctl

-
  • 字符串变量。
  • 指定容器内核参数值,格式为key=value,可传入多个,sysctl白名单如下:
-

kernel.msgmax,kernel.msgmnb,kernel.msgmni,kernel.sem,kernel.shmall,kernel.shmmax,kernel.shmmni, kernel.shm_rmid_forced,kernel.pid_max,net.,fs.mqueue。

-
说明:

容器内kernel.pid_max参数需要内核支持pid_max namespace化,否则会报错。

-

容器内sysctl白名单参数值限制与物理机对应的内核参数限制保持一致(包括参数类型、参数取值范围等)。

-
-

--env-target-file

-
  • 字符串变量。
  • 指定env持久化文件路径(路径必须为绝对路径,且文件必须在rootfs目录下),文件如果存在不能超过10MB,如果--env和文件里面的env出现冲突,--env指定值生效。
  • 绝对路径的根目录/为rootfs根目录,,即要指定文件路径为容器内/etc/environment,只用指定env-target-file=/etc/environment,而不是env-target-file=/path/of/root-fs/etc/environemt。
-

--cgroup-parent

-
  • 字符串变量。
  • 指定容器的cgroup父目录,cgroup根路径为/sys/fs/cgroup/<controller>。
-

--host-channel

-
  • 字符串变量。
  • 指定宿主机和容器共享内存空间(tmpfs),格式为:
-

<host path>:<container path>:<rw/ro>:<size limit>

-

--files-limit

-
  • 字符串变量。
  • 整数值,指定容器内文件句柄数最大值。
-

--user-remap

-
  • 字符串变量。
  • 参数格式为:<uid>:<gid>:<offset>
-
diff --git a/docs/zh/docs/ContainerRuntime/Kuasar/Menu/index.md b/docs/zh/docs/ContainerRuntime/Kuasar/Menu/index.md deleted file mode 100644 index 6050d5280474df6add4b06cdd923199219577f33..0000000000000000000000000000000000000000 --- a/docs/zh/docs/ContainerRuntime/Kuasar/Menu/index.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -headless: true ---- - -- [Kuasar多沙箱容器运行时]({{< relref "./kuasar.md" >}}) - - [安装与配置]({{< relref "./kuasar-install-config.md" >}}) - - [使用指南]({{< relref "./kuasar-usage.md" >}}) - - [附录]({{< relref "./kuasar-appendix.md" >}}) diff --git a/docs/zh/docs/ContainerRuntime/Kuasar/public_sys-resources/icon-caution.gif b/docs/zh/docs/ContainerRuntime/Kuasar/public_sys-resources/icon-caution.gif deleted file mode 100644 index 6e90d7cfc2193e39e10bb58c38d01a23f045d571..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/ContainerRuntime/Kuasar/public_sys-resources/icon-caution.gif and /dev/null differ diff --git a/docs/zh/docs/ContainerRuntime/Kuasar/public_sys-resources/icon-danger.gif b/docs/zh/docs/ContainerRuntime/Kuasar/public_sys-resources/icon-danger.gif deleted file mode 100644 index 6e90d7cfc2193e39e10bb58c38d01a23f045d571..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/ContainerRuntime/Kuasar/public_sys-resources/icon-danger.gif and /dev/null differ diff --git a/docs/zh/docs/ContainerRuntime/Kuasar/public_sys-resources/icon-note.gif b/docs/zh/docs/ContainerRuntime/Kuasar/public_sys-resources/icon-note.gif deleted file mode 100644 index 6314297e45c1de184204098efd4814d6dc8b1cda..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/ContainerRuntime/Kuasar/public_sys-resources/icon-note.gif and /dev/null differ diff --git a/docs/zh/docs/ContainerRuntime/Kuasar/public_sys-resources/icon-notice.gif b/docs/zh/docs/ContainerRuntime/Kuasar/public_sys-resources/icon-notice.gif deleted file mode 100644 index 86024f61b691400bea99e5b1f506d9d9aef36e27..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/ContainerRuntime/Kuasar/public_sys-resources/icon-notice.gif and /dev/null differ diff --git a/docs/zh/docs/ContainerRuntime/Kuasar/public_sys-resources/icon-tip.gif b/docs/zh/docs/ContainerRuntime/Kuasar/public_sys-resources/icon-tip.gif deleted file mode 100644 index 93aa72053b510e456b149f36a0972703ea9999b7..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/ContainerRuntime/Kuasar/public_sys-resources/icon-tip.gif and /dev/null differ diff --git a/docs/zh/docs/ContainerRuntime/Kuasar/public_sys-resources/icon-warning.gif b/docs/zh/docs/ContainerRuntime/Kuasar/public_sys-resources/icon-warning.gif deleted file mode 100644 index 6e90d7cfc2193e39e10bb58c38d01a23f045d571..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/ContainerRuntime/Kuasar/public_sys-resources/icon-warning.gif and /dev/null differ diff --git a/docs/zh/docs/ContainerRuntime/Menu/index.md b/docs/zh/docs/ContainerRuntime/Menu/index.md deleted file mode 100644 index 4e2109b5b7ea40f197041e24aef71fd05519fa8e..0000000000000000000000000000000000000000 --- a/docs/zh/docs/ContainerRuntime/Menu/index.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -headless: true ---- - -- [Kuasar多沙箱容器运行时]({{< relref "./Kuasar/Menu/index.md" >}}) diff --git a/docs/zh/docs/HybridDeployment/Menu/index.md b/docs/zh/docs/HybridDeployment/Menu/index.md deleted file mode 100644 index c93aa3b477c18a192712b2529431b495a006a624..0000000000000000000000000000000000000000 --- a/docs/zh/docs/HybridDeployment/Menu/index.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -headless: true ---- - -- [云原生混合部署rubik用户指南]({{< relref "./rubik/Menu/index.md" >}}) -- [oncn-bwm用户指南]({{< relref "./oncn-bwm//Menu/index.md" >}}) diff --git a/docs/zh/docs/HybridDeployment/oncn-bwm/Menu/index.md b/docs/zh/docs/HybridDeployment/oncn-bwm/Menu/index.md deleted file mode 100644 index d4e601fbe2993747eb92845b3e5b89ab6a216854..0000000000000000000000000000000000000000 --- a/docs/zh/docs/HybridDeployment/oncn-bwm/Menu/index.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -headless: true ---- - -- [oncn-bwm用户指南]({{< relref "./overview.md" >}}) diff --git a/docs/zh/docs/HybridDeployment/rubik/Menu/index.md b/docs/zh/docs/HybridDeployment/rubik/Menu/index.md deleted file mode 100644 index ad2bfa419fb5347553bb501d0b5e0891de8cd7af..0000000000000000000000000000000000000000 --- a/docs/zh/docs/HybridDeployment/rubik/Menu/index.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -headless: true ---- - -- [云原生混合部署rubik用户指南]({{< relref "./overview.md" >}}) - - [安装与部署]({{< relref "./installation-and-deployment.md" >}}) - - [http接口文档]({{< relref "./http-apis.md" >}}) - - [混部隔离示例]({{< relref "./example-of-isolation-for-hybrid-deployed-services.md" >}}) diff --git a/docs/zh/docs/HybridDeployment/rubik/figures/icon-note.gif b/docs/zh/docs/HybridDeployment/rubik/figures/icon-note.gif deleted file mode 100644 index 6314297e45c1de184204098efd4814d6dc8b1cda..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/HybridDeployment/rubik/figures/icon-note.gif and /dev/null differ diff --git a/docs/zh/docs/HybridDeployment/rubik/http-apis.md b/docs/zh/docs/HybridDeployment/rubik/http-apis.md deleted file mode 100644 index 75bca4a21377e1cd452552922cb1da17e27520ed..0000000000000000000000000000000000000000 --- a/docs/zh/docs/HybridDeployment/rubik/http-apis.md +++ /dev/null @@ -1,67 +0,0 @@ -# http接口 - -## 概述 - -rubik对外开放接口均为http接口,当前包括pod优先级设置/更新接口、rubik探活接口和rubik版本号查询接口。 - -## 接口介绍 - -### 设置、更新Pod优先级接口 - -rubik提供了设置或更新pod优先级的功能,外部可通过调用该接口发送pod相关信息,rubik根据接收到的pod信息对其设置优先级从而达到资源隔离的目的。接口调用格式为: - -```bash -HTTP POST /run/rubik/rubik.sock -{ - "Pods": { - "podaaa": { - "CgroupPath": "kubepods/burstable/podaaa", - "QosLevel": 0 - }, - "podbbb": { - "CgroupPath": "kubepods/burstable/podbbb", - "QosLevel": -1 - } - } -} -``` - -Pods 配置中为需要设置或更新优先级的 Pod 信息,每一个http请求至少需要指定配置1个 pod,每个 pod 必须指定CgroupPath 和 QosLevel,其含义如下: - -| 配置项 | 配置值类型 | 配置取值范围 | 配置含义 | -| ---------- | ---------- | ------------ | ------------------------------------------------------- | -| QosLevel | int | 0、-1 | pod优先级,0表示其为在线业务,-1表示其为离线业务 | -| CgroupPath | string | 相对路径 | 对应Pod的cgroup子路径(即其在cgroup子系统下的相对路径) | - -接口调用示例如下: - -```sh -curl -v -H "Accept: application/json" -H "Content-type: application/json" -X POST --data '{"Pods": {"podaaa": {"CgroupPath": "kubepods/burstable/podaaa","QosLevel": 0},"podbbb": {"CgroupPath": "kubepods/burstable/podbbb","QosLevel": -1}}}' --unix-socket /run/rubik/rubik.sock http://localhost/ -``` - -### 探活接口 - -rubik作为HTTP服务,提供探活接口用于帮助判断rubik是否处于运行状态。 - -接口形式:HTTP/GET /ping - -接口调用示例如下: - -```sh -curl -XGET --unix-socket /run/rubik/rubik.sock http://localhost/ping -``` - -若返回ok则代表rubik服务处于运行状态。 - -### 版本信息查询接口 - -rubik支持通过HTTP请求查询当前rubik的版本号。 - -接口形式:HTTP/GET /version - -接口调用示例如下: - -```sh -curl -XGET --unix-socket /run/rubik/rubik.sock http://localhost/version -{"Version":"0.0.1","Release":"1","Commit":"29910e6","BuildTime":"2021-05-12"} -``` diff --git a/docs/zh/docs/HybridDeployment/rubik/installation-and-deployment.md b/docs/zh/docs/HybridDeployment/rubik/installation-and-deployment.md deleted file mode 100644 index 14835de7d81eeb9aa4e9e61cd8b444748e9bc1aa..0000000000000000000000000000000000000000 --- a/docs/zh/docs/HybridDeployment/rubik/installation-and-deployment.md +++ /dev/null @@ -1,198 +0,0 @@ -# 安装与部署 - -## 概述 - -本章节主要介绍rubik组件的安装以及部署方式。 - -## 软硬件要求 - -### 硬件要求 - -* 当前仅支持 x86、aarch64架构。 -* rubik磁盘使用需求:配额1GB及以上。 -* rubik内存使用需求:配额100MB及以上。 - -### 软件要求 - -* 操作系统:openEuler 22.03-LTS -* 内核:openEuler 22.03-LTS版本内核 - -### 环境准备 - -* 安装 openEuler 系统,安装方法参考《[安装指南](../Installation/installation.md)》。 -* 安装并部署 kubernetes,安装及部署方法参考《Kubernetes 集群部署指南》。 -* 安装docker或isulad容器引擎,若采用isulad容器引擎,需同时安装isula-build容器镜像构建工具。 - -## 安装rubik - -rubik以k8s daemonSet形式部署在k8s的每一个节点上,故需要在每一个节点上使用以下步骤安装rubik rpm包。 - -1. 配置 yum 源:openEuler 22.03-LTS 和 openEuler 22.03-LTS:EPOL(rubik组件当前仅在EPOL源中),参考如下: - - ```conf - # openEuler 22.03-LTS 官方发布源 - name=openEuler22.03 - baseurl=https://repo.openeuler.org/openEuler-22.03-LTS/everything/$basearch/ - enabled=1 - gpgcheck=1 - gpgkey=https://repo.openeuler.org/openEuler-22.03-LTS/everything/$basearch/RPM-GPG-KEY-openEuler - ``` - - ```conf - # openEuler 22.03-LTS:Epol 官方发布源 - name=Epol - baseurl=https://repo.openeuler.org/openEuler-22.03-LTS/EPOL/$basearch/ - enabled=1 - gpgcheck=0 - ``` - -2. 使用root权限安装rubik: - - ```bash - sudo yum install -y rubik - ``` - -> ![](./figures/icon-note.gif)**说明**: -> -> rubik工具相关文件会安装在/var/lib/rubik目录下 - -## 部署rubik - -rubik以容器形式运行在混合部署场景下的k8s集群中,用于对不同优先级业务进行资源隔离和限制,避免离线业务对在线业务产生干扰,在提高资源总体利用率的同时保障在线业务的服务质量。当前rubik支持对CPU、内存资源进行隔离和限制,需配合openEuler 22.03-LTS版本的内核使用。若用户想要开启内存优先级特性(即针对不同优先级业务实现内存资源的分级),需要通过设置/proc/sys/vm/memcg_qos_enable开关,有效值为0和1,其中0为缺省值表示关闭特性,1表示开启特性。 - -```bash -sudo echo 1 > /proc/sys/vm/memcg_qos_enable -``` - -### 部署rubik daemonset - -1. 使用docker或isula-build容器引擎构建rubik镜像,由于rubik以daemonSet形式部署,故每一个节点都需要rubik镜像。用户可以在一个节点构建镜像后使用docker save/load功能将rubik镜像load到k8s的每一个节点,也可以在各节点上都构建一遍rubik镜像。以isula-build为例,参考命令如下: - - ```bash - isula-build ctr-img build -f /var/lib/rubik/Dockerfile --tag rubik:0.1.0 . - ``` - -2. 在k8s master节点,修改`/var/lib/rubik/rubik-daemonset.yaml`文件中的rubik镜像名,与上一步构建出来的镜像名保持一致。 - - ```yaml - ... - containers: - - name: rubik-agent - image: rubik:0.1.0 # 此处镜像名需与上一步构建的rubik镜像名一致 - imagePullPolicy: IfNotPresent - ... - ``` - -3. 在k8s master节点,使用kubectl命令部署rubik daemonset,rubik会自动被部署在k8s的所有节点: - - ```bash - kubectl apply -f /var/lib/rubik/rubik-daemonset.yaml - ``` - -4. 使用`kubectl get pods -A`命令查看rubik是否已部署到集群每一个节点上(rubik-agent数量与节点数量相同且均为Running状态) - - ```bash - [root@localhost rubik]# kubectl get pods -A - NAMESPACE NAME READY STATUS RESTARTS AGE - ... - kube-system rubik-agent-76ft6 1/1 Running 0 4s - ... - ``` - -## 常用配置说明 - -通过以上方式部署的rubik将以默认配置启动,用户可以根据实际需要修改rubik配置,可通过修改rubik-daemonset.yaml文件中的config.json段落内容后重新部署rubik daemonset实现。 - -本章介绍 config.json 的常用配置,以方便用户根据需要进行配置。 - -### 配置项说明 - -```yaml -# 该部分配置内容位于rubik-daemonset.yaml文件中的config.json段落 -{ - "autoConfig": true, - "autoCheck": false, - "logDriver": "stdio", - "logDir": "/var/log/rubik", - "logSize": 1024, - "logLevel": "info", - "cgroupRoot": "/sys/fs/cgroup" -} -``` - -| 配置项 | 配置值类型 | 配置取值范围 | 配置含义 | -| ---------- | ---------- | ------------------ | ------------------------------------------------------------ | -| autoConfig | bool | true、false | true:开启Pod自动感知功能。
false:关闭 Pod 自动感知功能。 | -| autoCheck | bool | true、false | true:开启 Pod 优先级校验功能。
false:关闭 Pod 优先级校验功能。 | -| logDriver | string | stdio、file | stdio:直接向标准输出打印日志,日志收集和转储由调度平台完成。
file:将文件打印到日志目录,路径由logDir指定。 | -| logDir | string | 绝对路径 | 指定日志存放的目录路径。 | -| logSize | int | [10,1048576] | 指定日志存储总大小,单位 MB,若日志总量达到上限则最早的日志会被丢弃。 | -| logLevel | string | error、info、debug | 指定日志级别。 | -| cgroupRoot | string | 绝对路径 | 指定 cgroup 挂载点。 | - -### Pod优先级自动配置 - -若在rubik config中配置autoConfig为true开启了Pod自动感知配置功能,用户仅需在部署业务pod时在yaml中通过annotation指定其优先级,部署后rubik会自动感知当前节点pod的创建与更新,并根据用户配置的优先级设置pod优先级。 - -### 依赖于kubelet的Pod优先级配置 - -由于Pod优先级自动配置依赖于来自api-server pod创建事件的通知,具有一定的延迟性,无法在进程启动之前及时完成Pod优先级的配置,导致业务性能可能存在抖动。用户可以关闭优先级自动配置选项,通过修改kubelet源码,在容器cgroup创建后、容器进程启动前调用rubik http接口配置pod优先级,http接口具体使用方法详见[http接口文档](./http接口文档.md) - -### 支持自动校对Pod优先级 - -rubik支持在启动时对当前节点Pod QoS优先级配置进行一致性校对,此处的一致性是指k8s集群中的配置和rubik对pod优先级的配置之间的一致性。该校对功能默认关闭,用户可以通过 autoCheck 选项控制是否开启。若开启该校对功能,启动或者重启 rubik 时,rubik会自动校验并更正当前节点pod优先级配置。 - -## 在离线业务配置示例 - -rubik部署成功后,用户在部署实际业务时,可以根据以下配置示例对业务yaml文件进行修改,指定业务的在离线类型,rubik即可在业务部署后对其优先级进行配置,从而达到资源隔离的目的。 - -以下为部署一个nginx在线业务的示例: - -```yaml -apiVersion: v1 -kind: Pod -metadata: - name: nginx - namespace: qosexample - annotations: - volcano.sh/preemptable: "false" # volcano.sh/preemptable为true代表业务为离线业务,false代表业务为在线业务,默认为false -spec: - containers: - - name: nginx - image: nginx - resources: - limits: - memory: "200Mi" - cpu: "1" - requests: - memory: "200Mi" - cpu: "1" -``` - -## 约束限制 - -* rubik接受HTTP请求并发量上限1000QPS,并发量超过上限则报错。 - -* rubik接受的单个请求中pod上限为100个,pod数量越界则报错。 - -* 每个k8s节点只能部署一个rubik,多个rubik会冲突。 - -* rubik不提供端口访问,只能通过socket通信。 - -* rubik只接收合法http请求路径及网络协议:](./http接口文档.md)。 - -* rubik磁盘使用需求:配额1GB及以上。 - -* rubik内存使用需求:配额100MB及以上。 - -* 禁止将业务从低优先级(离线业务)往高优先级(在线业务)切换。如业务A先被设置为离线业务,接着请求设置为在线业务,rubik报错。 - -* 容器挂载目录时,rubik本地套接字/run/rubik的目录权限需由业务侧保证最小权限700。 - -* rubik服务端可用时,单个请求超时时间为120s。如果rubik进程进入T(暂停状态或跟踪状态)、D状态(不可中断的睡眠状态),则服务端不可用,此时rubik服务不会响应任何请求。为了避免此情况的发生,请在客户端设置超时时间,避免无限等待。 - -* 使用混部后,原始的cgroup cpu share功能存在限制。具体表现为: - - 若当前CPU中同时有在线任务和离线任务运行,则离线任务的CPU share配置无法生效。 - - 若当前CPU中只有在线任务或只有离线任务,CPU share能生效。 diff --git a/docs/zh/docs/HybridDeployment/rubik/overview.md b/docs/zh/docs/HybridDeployment/rubik/overview.md deleted file mode 100644 index fae5ab55d0c0a0583baa2f8ddb93feabc9265f8c..0000000000000000000000000000000000000000 --- a/docs/zh/docs/HybridDeployment/rubik/overview.md +++ /dev/null @@ -1,17 +0,0 @@ -# rubik使用指南 - -## 概述 - -服务器资源利用率低一直是业界公认的难题,随着云原生技术的发展,将在线(高优先级)、离线(低优先级)业务混合部署成为了当下提高资源利用率的有效手段。 - -rubik容器调度在业务混合部署的场景下,根据QoS分级,对资源进行合理调度,从而实现在保障在线业务服务质量的前提下,大幅提升资源利用率。 - -rubik当前支持如下特性: - -- pod CPU优先级的配置 -- pod memory优先级的配置 - -本文档适用于使用openEuler系统并希望了解和使用rubik的社区开发者、开源爱好者以及相关合作伙伴。使用人员需要具备以下经验和技能: - -- 熟悉Linux基本操作 -- 熟悉kubernetes和docker/iSulad基本操作 diff --git a/docs/zh/docs/ImageBuilder/Menu/index.md b/docs/zh/docs/ImageBuilder/Menu/index.md deleted file mode 100644 index c572cff4b69d925948a08e71f0169e5124dd0320..0000000000000000000000000000000000000000 --- a/docs/zh/docs/ImageBuilder/Menu/index.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -headless: true ---- - -- [容器镜像构建]({{< relref ".isula-build/Menu/index.md" >}}) diff --git a/docs/zh/docs/ImageBuilder/isula-build/Menu/index.md b/docs/zh/docs/ImageBuilder/isula-build/Menu/index.md deleted file mode 100644 index d91409f2293339335cad2f6069d393808e873d22..0000000000000000000000000000000000000000 --- a/docs/zh/docs/ImageBuilder/isula-build/Menu/index.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -headless: true ---- - -- [容器镜像构建]({{< relref "./isula-build构建工具.md" >}}) - - [使用指南]({{< relref "./isula-build使用指南.md" >}}) - - [常见问题与解决方法]({{< relref "./isula-build常见问题与解决方法.md" >}}) - - [附录]({{< relref "./isula-build附录.md" >}}) diff --git "a/docs/zh/docs/ImageBuilder/isula-build/isula-build\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" "b/docs/zh/docs/ImageBuilder/isula-build/isula-build\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" deleted file mode 100644 index a9c308f1669737a117553b7d3b8278048c5670d6..0000000000000000000000000000000000000000 --- "a/docs/zh/docs/ImageBuilder/isula-build/isula-build\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" +++ /dev/null @@ -1,7 +0,0 @@ -# 常见问题与解决方法 - -## **问题1:isula-build拉取镜像报错:pinging container registry xx: get xx: dial tcp host:repo: connect: connection refused** - -原因:拉取的镜像来源于非授信仓库。 - -解决方法:修改isula-build镜像仓库的配置文件/etc/isula-build/registries.toml,将该非授信仓库加入[registries.insecure],重启isula-build。 diff --git a/docs/zh/docs/ImageBuilder/isula-build/public_sys-resources/icon-caution.gif b/docs/zh/docs/ImageBuilder/isula-build/public_sys-resources/icon-caution.gif deleted file mode 100644 index 6e90d7cfc2193e39e10bb58c38d01a23f045d571..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/ImageBuilder/isula-build/public_sys-resources/icon-caution.gif and /dev/null differ diff --git a/docs/zh/docs/ImageBuilder/isula-build/public_sys-resources/icon-danger.gif b/docs/zh/docs/ImageBuilder/isula-build/public_sys-resources/icon-danger.gif deleted file mode 100644 index 6e90d7cfc2193e39e10bb58c38d01a23f045d571..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/ImageBuilder/isula-build/public_sys-resources/icon-danger.gif and /dev/null differ diff --git a/docs/zh/docs/ImageBuilder/isula-build/public_sys-resources/icon-note.gif b/docs/zh/docs/ImageBuilder/isula-build/public_sys-resources/icon-note.gif deleted file mode 100644 index 6314297e45c1de184204098efd4814d6dc8b1cda..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/ImageBuilder/isula-build/public_sys-resources/icon-note.gif and /dev/null differ diff --git a/docs/zh/docs/ImageBuilder/isula-build/public_sys-resources/icon-notice.gif b/docs/zh/docs/ImageBuilder/isula-build/public_sys-resources/icon-notice.gif deleted file mode 100644 index 86024f61b691400bea99e5b1f506d9d9aef36e27..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/ImageBuilder/isula-build/public_sys-resources/icon-notice.gif and /dev/null differ diff --git a/docs/zh/docs/ImageBuilder/isula-build/public_sys-resources/icon-tip.gif b/docs/zh/docs/ImageBuilder/isula-build/public_sys-resources/icon-tip.gif deleted file mode 100644 index 93aa72053b510e456b149f36a0972703ea9999b7..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/ImageBuilder/isula-build/public_sys-resources/icon-tip.gif and /dev/null differ diff --git a/docs/zh/docs/ImageBuilder/isula-build/public_sys-resources/icon-warning.gif b/docs/zh/docs/ImageBuilder/isula-build/public_sys-resources/icon-warning.gif deleted file mode 100644 index 6e90d7cfc2193e39e10bb58c38d01a23f045d571..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/ImageBuilder/isula-build/public_sys-resources/icon-warning.gif and /dev/null differ diff --git a/docs/zh/docs/Kmesh/Kmesh/Menu/index.md b/docs/zh/docs/Kmesh/Kmesh/Menu/index.md deleted file mode 100644 index 5b3a42899637c2fd1029cada5c5192a1d5af0d9b..0000000000000000000000000000000000000000 --- a/docs/zh/docs/Kmesh/Kmesh/Menu/index.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -headless: true ---- - -- [Kmesh用户指南]({{< relref "./Kmesh.md" >}}) - - [认识Kmesh]({{< relref "./认识Kmesh.md" >}}) - - [安装与部署]({{< relref "./安装与部署.md" >}}) - - [使用方法]({{< relref "./使用方法.md" >}}) - - [常见问题与解决方法]({{< relref "./常见问题与解决方法.md" >}}) - - [附录]({{< relref "./附录.md" >}}) diff --git a/docs/zh/docs/Kmesh/Kmesh/figures/get_kubeconfig_error.png b/docs/zh/docs/Kmesh/Kmesh/figures/get_kubeconfig_error.png deleted file mode 100644 index 99087b68c6fafea1506e5f8bd862c371e93bdc97..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/Kmesh/Kmesh/figures/get_kubeconfig_error.png and /dev/null differ diff --git a/docs/zh/docs/Kmesh/Kmesh/figures/not_set_cluster_ip.png b/docs/zh/docs/Kmesh/Kmesh/figures/not_set_cluster_ip.png deleted file mode 100644 index 9c879f37fa93c0f4fe0ab0f6220beff174e5f436..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/Kmesh/Kmesh/figures/not_set_cluster_ip.png and /dev/null differ diff --git "a/docs/zh/docs/Kmesh/Kmesh/\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" "b/docs/zh/docs/Kmesh/Kmesh/\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" deleted file mode 100644 index f8a6490bbdc0f4cf32edd71e25677a0a3a5bffca..0000000000000000000000000000000000000000 --- "a/docs/zh/docs/Kmesh/Kmesh/\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" +++ /dev/null @@ -1,23 +0,0 @@ -# 常见问题与解决方法 - -## **问题1:在使用集群启动模式时,若没有配置控制面程序ip信息,Kmesh服务启动后会报错退出** - -![](./figures/not_set_cluster_ip.png) - -原因:集群启动模式下,Kmesh服务需要跟控制面程序通信,然后从控制面获取配置信息,因此需要设置正确的控制面程序ip信息。 - -解决方法:参考[安装与部署](./安装与部署.md)章节中集群启动模式,设置正确的控制面程序ip信息。 - -## **问题2:Kmesh服务在启动时,提示"get kube config error!"** - -![](./figures/get_kubeconfig_error.png) - -原因:集群启动模式下,Kmesh服务会根据k8s的配置,自动获取控制面程序ip信息,若环境中没有配置k8s的kubeconfig路径,会导致获取kubeconfig失败,然后提示上述信息。(若已经手动修改Kmesh的配置文件,正确配置控制面程序ip信息,该问题可忽略) - -解决方法:按如下方式配置kubeconfig: - -```shell -mkdir -p $HOME/.kube -sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config -sudo chown $(id -u):$(id -g) $HOME/.kube/config -``` diff --git a/docs/zh/docs/Kmesh/Menu/index.md b/docs/zh/docs/Kmesh/Menu/index.md deleted file mode 100644 index b1cc4b7e36ebb3684d73243c8cd9ba13be50d025..0000000000000000000000000000000000000000 --- a/docs/zh/docs/Kmesh/Menu/index.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -headless: true ---- - -- [KubeOS用户指南]({{< relref "./KubeOS/Menu/index.md" >}}) diff --git a/docs/zh/docs/KubeOS/KubeOS/Menu/index.md b/docs/zh/docs/KubeOS/KubeOS/Menu/index.md deleted file mode 100644 index 83beb11ef89ccd1d6d96ef53175693bba4449973..0000000000000000000000000000000000000000 --- a/docs/zh/docs/KubeOS/KubeOS/Menu/index.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -headless: true ---- - -- [容器OS升级用户指南]({{< relref "./overview.md" >}}) - - [认识容器OS升级]({{< relref "./认识容器OS升级.md" >}}) - - [安装与部署]({{< relref "./安装与部署.md" >}}) - - [使用方法]({{< relref "./使用方法.md" >}}) - - [容器OS镜像制作指导]({{< relref "./容器OS镜像制作指导.md" >}}) diff --git "a/docs/zh/docs/KubeOS/KubeOS/\345\256\271\345\231\250OS\351\225\234\345\203\217\345\210\266\344\275\234\346\214\207\345\257\274.md" "b/docs/zh/docs/KubeOS/KubeOS/\345\256\271\345\231\250OS\351\225\234\345\203\217\345\210\266\344\275\234\346\214\207\345\257\274.md" deleted file mode 100644 index d8b33136435929fcdb6e7cc7869fd490ca43f079..0000000000000000000000000000000000000000 --- "a/docs/zh/docs/KubeOS/KubeOS/\345\256\271\345\231\250OS\351\225\234\345\203\217\345\210\266\344\275\234\346\214\207\345\257\274.md" +++ /dev/null @@ -1,169 +0,0 @@ -# 容器OS镜像制作指导 - -## 简介 - -kbimg是KubeOS部署和升级所需的镜像制作工具,可以使用kbimg制作KubeOS docker,虚拟机和物理机镜像。 - -## 命令介绍 - -### 命令格式 - -**bash kbimg.sh** \[ --help | -h \] create \[ COMMANDS \] \[ OPTIONS \] - -### 参数说明 - -* COMMANDS - - | 参数 | 描述 | - | ------------- | ---------------------------------------------- | - | upgrade-image | 生成用于安装和升级的OCI镜像格式的 KubeOS 镜像 | - | vm-image | 生成用于部署和升级的虚拟机镜像 | - | pxe-image | 生成物理机安装所需的镜像及文件 | - -* OPTIONS - - | 参数 | 描述 | - | ------------ | ------------------------------------------------------------ | - | -p | repo 文件的路径,repo 文件中配置制作镜像所需要的 yum 源 | - | -v | 制作出来的KubeOS镜像的版本 | - | -b | os-agent二进制的路径 | - | -e | KubeOS 镜像 root 用户密码,加密后的带盐值的密码,可以用 openssl,kiwi 命令生成 | - | -d | 生成或者使用的 docke r镜像 | - | -h --help | 查看帮助信息 | - -## 使用说明 - -### 注意事项 - -* kbimg.sh 执行需要 root 权限 -* 当前仅支持 x86和 AArch64 架构使用 -* 容器 OS 镜像制作工具的 rpm 包源为 openEuler 具体版本的 everything 仓库和 EPOL 仓库。制作镜像时提供的 repo 文件中,yum 源建议同时配置 openEuler 具体版本的 everything 仓库和 EPOL 仓库 - -### KubeOS OCI 镜像制作 - -#### 注意事项 - -* 制作的 OCI 镜像仅用于后续的虚拟机/物理机镜像制作或升级使用,不支持启动容器 -* 使用默认 rpmlist 进行容器OS镜像制作时所需磁盘空间至少为6G,如自已定义 rpmlist 可能会超过6G - -#### 使用示例 - -* 如需进行DNS配置,请先在```scripts```目录下自定义```resolv.conf```文件 - -```shell - cd /opt/kubeOS/scripts - touch resolv.conf - vim resolv.conf -``` - -* 制作KubeOS容器镜像 - -``` shell -cd /opt/kubeOS/scripts -bash kbimg.sh create upgrade-image -p xxx.repo -v v1 -b ../bin/os-agent -e '''$1$xyz$RdLyKTL32WEvK3lg8CXID0''' -d your_imageRepository/imageName:version -``` - -* 制作完成后查看制作出来的KubeOS容器镜像 - -``` shell -docker images -``` - -### KubeOS 虚拟机镜像制作 - -#### 注意事项 - -* 如使用 docker 镜像制作请先拉取相应镜像或者先制作docker镜像,并保证 docker 镜像的安全性 -* 制作出来的容器 OS 虚拟机镜像目前只能用于 CPU 架构为 x86 和 AArch64 的虚拟机 -* 容器 OS 目前不支持 x86 架构的虚拟机使用 legacy 启动模式启动 -* 使用默认rpmlist进行容器OS镜像制作时所需磁盘空间至少为25G,如自已定义rpmlist可能会超过25G - -#### 使用示例 - -* 使用repo源制作 - * 如需进行DNS配置,请先在```scripts```目录下自定义```resolv.conf```文件 - - ```shell - cd /opt/kubeOS/scripts - touch resolv.conf - vim resolv.conf - ``` - - * KubeOS虚拟机镜像制作 - - ``` shell - cd /opt/kubeOS/scripts - bash kbimg.sh create vm-image -p xxx.repo -v v1 -b ../bin/os-agent -e '''$1$xyz$RdLyKTL32WEvK3lg8CXID0''' - ``` - -* 使用docker镜像制作 - - ``` shell - cd /opt/kubeOS/scripts - bash kbimg.sh create vm-image -d your_imageRepository/imageName:version - ``` - -* 结果说明 - 容器 OS 镜像制作完成后,会在 /opt/kubeOS/scripts 目录下生成: - * system.qcow2: qcow2 格式的系统镜像,大小默认为 20GiB,支持的根文件系统分区大小 < 2020 MiB,持久化分区 < 16GiB 。 - * update.img: 用于升级的根文件系统分区镜像 - -### KubeOS 物理机安装所需镜像及文件制作 - -#### 注意事项 - -* 如使用 docker 镜像制作请先拉取相应镜像或者先制作 docker 镜像,并保证 docker 镜像的安全性 -* 制作出来的容器 OS 物理安装所需的镜像目前只能用于 CPU 架构为 x86 和 AArch64 的物理机安装 -* Global.cfg配置中指定的ip为安装时使用的临时ip,请在系统安装启动后请参考《openEuler 22.09 管理员指南-配置网络》进行网络配置 -* 不支持多个磁盘都安装KubeOS,可能会造成启动失败或挂载紊乱 -* 容器OS 目前不支持 x86 架构的物理机使用 legacy 启动模式启动 -* 使用默认rpmlist进行镜像制作时所需磁盘空间至少为5G,如自已定义 rpmlist 可能会超过5G - -#### 使用示例 - -* 首先需要修改```00bootup/Global.cfg```的配置,对相关参数进行配置,参数均为必填,ip目前仅支持ipv4,配置示例如下 - - ```shell - # rootfs file name - rootfs_name=kubeos.tar - # select the target disk to install kubeOS - disk=/dev/sda - # pxe server ip address where stores the rootfs on the http server - server_ip=192.168.1.50 - # target machine temporary ip - local_ip=192.168.1.100 - # target machine temporary route - route_ip=192.168.1.1 - # target machine temporary netmask - netmask=255.255.255.0 - # target machine netDevice name - net_name=eth0 - ``` - -* 使用 repo 源制作 - * 如需进行DNS配置,请在```scripts```目录下自定义```resolv.conf```文件 - - ```shell - cd /opt/kubeOS/scripts - touch resolv.conf - vim resolv.conf - ``` - - * KubeOS物理机安装所需镜像制作 - - ```shell - cd /opt/kubeOS/scripts - bash kbimg.sh create pxe-image -p xxx.repo -v v1 -b ../bin/os-agent -e '''$1$xyz$RdLyKTL32WEvK3lg8CXID0''' - ``` - -* 使用 docker 镜像制作 - - ``` shell - cd /opt/kubeOS/scripts - bash kbimg.sh create pxe-image -d your_imageRepository/imageName:version - ``` - -* 结果说明 - - * initramfs.img: 用于pxe启动用的 initramfs 镜像 - * kubeos.tar: pxe安装所用的 OS diff --git a/docs/zh/docs/KubeOS/Menu/index.md b/docs/zh/docs/KubeOS/Menu/index.md deleted file mode 100644 index b1cc4b7e36ebb3684d73243c8cd9ba13be50d025..0000000000000000000000000000000000000000 --- a/docs/zh/docs/KubeOS/Menu/index.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -headless: true ---- - -- [KubeOS用户指南]({{< relref "./KubeOS/Menu/index.md" >}}) diff --git a/docs/zh/docs/Menu/index.md b/docs/zh/docs/Menu/index.md deleted file mode 100644 index 48f57b0aba5b556083482e6b819ce7f39091bd87..0000000000000000000000000000000000000000 --- a/docs/zh/docs/Menu/index.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -headless: true ---- - -- [容器引擎]({{< relref "./ContainerEngine/Menu/index.md" >}}) -- [容器形态]({{< relref "./ContainerForm/Menu/index.md" >}}) -- [容器运行时]({{< relref "./ContainerRuntime/Menu/index.md" >}}) -- [容器镜像构建工具]({{< relref "./ImageBuilder/Menu/index.md" >}}) -- [云原生操作系统]({{< relref "./KubeOS/Menu/index.md" >}}) -- [云底座操作系统]({{< relref "./NestOS/Menu/index.md" >}}) -- [混合部署]({{< relref "./HybridDeployment/Menu/index.md" >}}) -- [集群部署]({{< relref "./ClusterDeployment/Menu/index.md" >}}) -- [服务网格]({{< relref "./Kmesh/Menu/index.md" >}}) diff --git a/docs/zh/docs/NestOS/Menu/index.md b/docs/zh/docs/NestOS/Menu/index.md deleted file mode 100644 index 4e0bf66d5895e5f648e1dc529739e25a63d337ca..0000000000000000000000000000000000000000 --- a/docs/zh/docs/NestOS/Menu/index.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -headless: true ---- - -- [NestOS用户指南]({{< relref "./NestOS/Menu/index.md" >}}) diff --git a/docs/zh/docs/NestOS/NestOS/Menu/index.md b/docs/zh/docs/NestOS/NestOS/Menu/index.md deleted file mode 100644 index 75612e77ddb708eda6a7b2d2e850269d942f45c1..0000000000000000000000000000000000000000 --- a/docs/zh/docs/NestOS/NestOS/Menu/index.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -headless: true ---- - -- [NestOS用户指南]({{< relref "./overview.md" >}}) - - [NestOS For Container用户指南]({{< relref "./NestOS For Container用户指南.md" >}}) - - [功能特性描述]({{< relref "./功能特性描述.md" >}}) diff --git a/docs/zh/docs/NestOS/NestOS/figures/figure1.png b/docs/zh/docs/NestOS/NestOS/figures/figure1.png deleted file mode 100644 index b4eb9017ed202e854c076802492d8561942dfc88..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/NestOS/NestOS/figures/figure1.png and /dev/null differ diff --git a/docs/zh/docs/NestOS/NestOS/figures/figure2.png b/docs/zh/docs/NestOS/NestOS/figures/figure2.png deleted file mode 100644 index 90049769c04e2bd494533da1613e38a5199da3d7..0000000000000000000000000000000000000000 Binary files a/docs/zh/docs/NestOS/NestOS/figures/figure2.png and /dev/null differ diff --git a/docs/zh/docs/cluster_deployment/isulad+k8s/_toc.yaml b/docs/zh/docs/cluster_deployment/isulad+k8s/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..a8afc8956b7d8a6b7d67eecf24ed5e97e4f9a226 --- /dev/null +++ b/docs/zh/docs/cluster_deployment/isulad+k8s/_toc.yaml @@ -0,0 +1,12 @@ +label: iSulad+k8s集群部署指南 +isManual: true +description: 在openEuler环境,基于iSulad容器引擎搭建Kubernetes集群 +sections: + - label: 概述 + href: ./overview.md + - label: iSulad+k8s环境部署 + href: ./isulad+k8s_environment_deploy.md + - label: gitlab部署 + href: ./gitlab_deploy.md + - label: gitlab runner部署 + href: ./gitlab_runner_deploy.md diff --git "a/docs/zh/docs/ClusterDeployment/iSulad+k8s/figures/1.\346\237\245\347\234\213\351\234\200\350\246\201\351\225\234\345\203\217.png" "b/docs/zh/docs/cluster_deployment/isulad+k8s/figures/1.\346\237\245\347\234\213\351\234\200\350\246\201\351\225\234\345\203\217.png" similarity index 100% rename from "docs/zh/docs/ClusterDeployment/iSulad+k8s/figures/1.\346\237\245\347\234\213\351\234\200\350\246\201\351\225\234\345\203\217.png" rename to "docs/zh/docs/cluster_deployment/isulad+k8s/figures/1.\346\237\245\347\234\213\351\234\200\350\246\201\351\225\234\345\203\217.png" diff --git "a/docs/zh/docs/ClusterDeployment/iSulad+k8s/figures/10.\350\207\252\345\256\232\344\271\211\351\241\271\347\233\256\345\220\215\347\247\260.jpg" "b/docs/zh/docs/cluster_deployment/isulad+k8s/figures/10.\350\207\252\345\256\232\344\271\211\351\241\271\347\233\256\345\220\215\347\247\260.jpg" similarity index 100% rename from "docs/zh/docs/ClusterDeployment/iSulad+k8s/figures/10.\350\207\252\345\256\232\344\271\211\351\241\271\347\233\256\345\220\215\347\247\260.jpg" rename to "docs/zh/docs/cluster_deployment/isulad+k8s/figures/10.\350\207\252\345\256\232\344\271\211\351\241\271\347\233\256\345\220\215\347\247\260.jpg" diff --git "a/docs/zh/docs/ClusterDeployment/iSulad+k8s/figures/11.\350\256\276\347\275\256-cicd-runner.png" "b/docs/zh/docs/cluster_deployment/isulad+k8s/figures/11.\350\256\276\347\275\256-cicd-runner.png" similarity index 100% rename from "docs/zh/docs/ClusterDeployment/iSulad+k8s/figures/11.\350\256\276\347\275\256-cicd-runner.png" rename to "docs/zh/docs/cluster_deployment/isulad+k8s/figures/11.\350\256\276\347\275\256-cicd-runner.png" diff --git "a/docs/zh/docs/ClusterDeployment/iSulad+k8s/figures/12.\350\256\260\344\270\213runner\345\234\260\345\235\200\344\270\216\344\273\244\347\211\214.jpg" "b/docs/zh/docs/cluster_deployment/isulad+k8s/figures/12.\350\256\260\344\270\213runner\345\234\260\345\235\200\344\270\216\344\273\244\347\211\214.jpg" similarity index 100% rename from "docs/zh/docs/ClusterDeployment/iSulad+k8s/figures/12.\350\256\260\344\270\213runner\345\234\260\345\235\200\344\270\216\344\273\244\347\211\214.jpg" rename to "docs/zh/docs/cluster_deployment/isulad+k8s/figures/12.\350\256\260\344\270\213runner\345\234\260\345\235\200\344\270\216\344\273\244\347\211\214.jpg" diff --git "a/docs/zh/docs/ClusterDeployment/iSulad+k8s/figures/13.\346\237\245\347\234\213\350\257\201\344\271\246\351\205\215\347\275\256\346\226\207\344\273\266.png" "b/docs/zh/docs/cluster_deployment/isulad+k8s/figures/13.\346\237\245\347\234\213\350\257\201\344\271\246\351\205\215\347\275\256\346\226\207\344\273\266.png" similarity index 100% rename from "docs/zh/docs/ClusterDeployment/iSulad+k8s/figures/13.\346\237\245\347\234\213\350\257\201\344\271\246\351\205\215\347\275\256\346\226\207\344\273\266.png" rename to "docs/zh/docs/cluster_deployment/isulad+k8s/figures/13.\346\237\245\347\234\213\350\257\201\344\271\246\351\205\215\347\275\256\346\226\207\344\273\266.png" diff --git "a/docs/zh/docs/ClusterDeployment/iSulad+k8s/figures/14.\350\257\201\344\271\246\345\257\274\345\205\245\346\226\207\344\273\266.png" "b/docs/zh/docs/cluster_deployment/isulad+k8s/figures/14.\350\257\201\344\271\246\345\257\274\345\205\245\346\226\207\344\273\266.png" similarity index 100% rename from "docs/zh/docs/ClusterDeployment/iSulad+k8s/figures/14.\350\257\201\344\271\246\345\257\274\345\205\245\346\226\207\344\273\266.png" rename to "docs/zh/docs/cluster_deployment/isulad+k8s/figures/14.\350\257\201\344\271\246\345\257\274\345\205\245\346\226\207\344\273\266.png" diff --git "a/docs/zh/docs/ClusterDeployment/iSulad+k8s/figures/15.\346\263\250\345\206\214gitlab-runner.jpg" "b/docs/zh/docs/cluster_deployment/isulad+k8s/figures/15.\346\263\250\345\206\214gitlab-runner.jpg" similarity index 100% rename from "docs/zh/docs/ClusterDeployment/iSulad+k8s/figures/15.\346\263\250\345\206\214gitlab-runner.jpg" rename to "docs/zh/docs/cluster_deployment/isulad+k8s/figures/15.\346\263\250\345\206\214gitlab-runner.jpg" diff --git "a/docs/zh/docs/ClusterDeployment/iSulad+k8s/figures/16.web\347\253\257\345\267\262\345\212\240\345\205\245_LI.jpg" "b/docs/zh/docs/cluster_deployment/isulad+k8s/figures/16.web\347\253\257\345\267\262\345\212\240\345\205\245_LI.jpg" similarity index 100% rename from "docs/zh/docs/ClusterDeployment/iSulad+k8s/figures/16.web\347\253\257\345\267\262\345\212\240\345\205\245_LI.jpg" rename to "docs/zh/docs/cluster_deployment/isulad+k8s/figures/16.web\347\253\257\345\267\262\345\212\240\345\205\245_LI.jpg" diff --git a/docs/zh/docs/ClusterDeployment/iSulad+k8s/figures/17.png b/docs/zh/docs/cluster_deployment/isulad+k8s/figures/17.png similarity index 100% rename from docs/zh/docs/ClusterDeployment/iSulad+k8s/figures/17.png rename to docs/zh/docs/cluster_deployment/isulad+k8s/figures/17.png diff --git "a/docs/zh/docs/ClusterDeployment/iSulad+k8s/figures/18.dns\351\205\215\347\275\256.png" "b/docs/zh/docs/cluster_deployment/isulad+k8s/figures/18.dns\351\205\215\347\275\256.png" similarity index 100% rename from "docs/zh/docs/ClusterDeployment/iSulad+k8s/figures/18.dns\351\205\215\347\275\256.png" rename to "docs/zh/docs/cluster_deployment/isulad+k8s/figures/18.dns\351\205\215\347\275\256.png" diff --git "a/docs/zh/docs/ClusterDeployment/iSulad+k8s/figures/19.CICD\347\225\214\351\235\242.png" "b/docs/zh/docs/cluster_deployment/isulad+k8s/figures/19.CICD\347\225\214\351\235\242.png" similarity index 100% rename from "docs/zh/docs/ClusterDeployment/iSulad+k8s/figures/19.CICD\347\225\214\351\235\242.png" rename to "docs/zh/docs/cluster_deployment/isulad+k8s/figures/19.CICD\347\225\214\351\235\242.png" diff --git "a/docs/zh/docs/ClusterDeployment/iSulad+k8s/figures/2.calico\351\205\215\347\275\256.png" "b/docs/zh/docs/cluster_deployment/isulad+k8s/figures/2.calico\351\205\215\347\275\256.png" similarity index 100% rename from "docs/zh/docs/ClusterDeployment/iSulad+k8s/figures/2.calico\351\205\215\347\275\256.png" rename to "docs/zh/docs/cluster_deployment/isulad+k8s/figures/2.calico\351\205\215\347\275\256.png" diff --git "a/docs/zh/docs/ClusterDeployment/iSulad+k8s/figures/20.yaml\346\226\207\344\273\266.png" "b/docs/zh/docs/cluster_deployment/isulad+k8s/figures/20.yaml\346\226\207\344\273\266.png" similarity index 100% rename from "docs/zh/docs/ClusterDeployment/iSulad+k8s/figures/20.yaml\346\226\207\344\273\266.png" rename to "docs/zh/docs/cluster_deployment/isulad+k8s/figures/20.yaml\346\226\207\344\273\266.png" diff --git "a/docs/zh/docs/ClusterDeployment/iSulad+k8s/figures/21.\346\265\201\346\260\264\347\272\277\347\212\266\346\200\201.png" "b/docs/zh/docs/cluster_deployment/isulad+k8s/figures/21.\346\265\201\346\260\264\347\272\277\347\212\266\346\200\201.png" similarity index 100% rename from "docs/zh/docs/ClusterDeployment/iSulad+k8s/figures/21.\346\265\201\346\260\264\347\272\277\347\212\266\346\200\201.png" rename to "docs/zh/docs/cluster_deployment/isulad+k8s/figures/21.\346\265\201\346\260\264\347\272\277\347\212\266\346\200\201.png" diff --git a/docs/zh/docs/ClusterDeployment/iSulad+k8s/figures/3.png b/docs/zh/docs/cluster_deployment/isulad+k8s/figures/3.png similarity index 100% rename from docs/zh/docs/ClusterDeployment/iSulad+k8s/figures/3.png rename to docs/zh/docs/cluster_deployment/isulad+k8s/figures/3.png diff --git "a/docs/zh/docs/ClusterDeployment/iSulad+k8s/figures/4.gitlab\347\275\221\351\241\265\345\205\245\345\217\243.jpg" "b/docs/zh/docs/cluster_deployment/isulad+k8s/figures/4.gitlab\347\275\221\351\241\265\345\205\245\345\217\243.jpg" similarity index 100% rename from "docs/zh/docs/ClusterDeployment/iSulad+k8s/figures/4.gitlab\347\275\221\351\241\265\345\205\245\345\217\243.jpg" rename to "docs/zh/docs/cluster_deployment/isulad+k8s/figures/4.gitlab\347\275\221\351\241\265\345\205\245\345\217\243.jpg" diff --git "a/docs/zh/docs/ClusterDeployment/iSulad+k8s/figures/5.\346\237\245\350\257\242\345\257\206\347\240\201.jpg" "b/docs/zh/docs/cluster_deployment/isulad+k8s/figures/5.\346\237\245\350\257\242\345\257\206\347\240\201.jpg" similarity index 100% rename from "docs/zh/docs/ClusterDeployment/iSulad+k8s/figures/5.\346\237\245\350\257\242\345\257\206\347\240\201.jpg" rename to "docs/zh/docs/cluster_deployment/isulad+k8s/figures/5.\346\237\245\350\257\242\345\257\206\347\240\201.jpg" diff --git "a/docs/zh/docs/ClusterDeployment/iSulad+k8s/figures/6.\347\231\273\345\275\225\345\220\216\351\241\265\351\235\242.png" "b/docs/zh/docs/cluster_deployment/isulad+k8s/figures/6.\347\231\273\345\275\225\345\220\216\351\241\265\351\235\242.png" similarity index 100% rename from "docs/zh/docs/ClusterDeployment/iSulad+k8s/figures/6.\347\231\273\345\275\225\345\220\216\351\241\265\351\235\242.png" rename to "docs/zh/docs/cluster_deployment/isulad+k8s/figures/6.\347\231\273\345\275\225\345\220\216\351\241\265\351\235\242.png" diff --git "a/docs/zh/docs/ClusterDeployment/iSulad+k8s/figures/7.\351\225\234\345\203\217.png" "b/docs/zh/docs/cluster_deployment/isulad+k8s/figures/7.\351\225\234\345\203\217.png" similarity index 100% rename from "docs/zh/docs/ClusterDeployment/iSulad+k8s/figures/7.\351\225\234\345\203\217.png" rename to "docs/zh/docs/cluster_deployment/isulad+k8s/figures/7.\351\225\234\345\203\217.png" diff --git "a/docs/zh/docs/ClusterDeployment/iSulad+k8s/figures/8.\346\226\260\345\273\272\351\241\271\347\233\256.png" "b/docs/zh/docs/cluster_deployment/isulad+k8s/figures/8.\346\226\260\345\273\272\351\241\271\347\233\256.png" similarity index 100% rename from "docs/zh/docs/ClusterDeployment/iSulad+k8s/figures/8.\346\226\260\345\273\272\351\241\271\347\233\256.png" rename to "docs/zh/docs/cluster_deployment/isulad+k8s/figures/8.\346\226\260\345\273\272\351\241\271\347\233\256.png" diff --git "a/docs/zh/docs/ClusterDeployment/iSulad+k8s/figures/9.\345\210\233\345\273\272\347\251\272\347\231\275\351\241\271\347\233\256.png" "b/docs/zh/docs/cluster_deployment/isulad+k8s/figures/9.\345\210\233\345\273\272\347\251\272\347\231\275\351\241\271\347\233\256.png" similarity index 100% rename from "docs/zh/docs/ClusterDeployment/iSulad+k8s/figures/9.\345\210\233\345\273\272\347\251\272\347\231\275\351\241\271\347\233\256.png" rename to "docs/zh/docs/cluster_deployment/isulad+k8s/figures/9.\345\210\233\345\273\272\347\251\272\347\231\275\351\241\271\347\233\256.png" diff --git a/docs/zh/docs/KubeOS/KubeOS/public_sys-resources/icon-note.gif b/docs/zh/docs/cluster_deployment/isulad+k8s/figures/public_sys-resources/icon-note.gif similarity index 100% rename from docs/zh/docs/KubeOS/KubeOS/public_sys-resources/icon-note.gif rename to docs/zh/docs/cluster_deployment/isulad+k8s/figures/public_sys-resources/icon-note.gif diff --git "a/docs/zh/docs/ClusterDeployment/iSulad+k8s/gitlab\351\203\250\347\275\262.md" b/docs/zh/docs/cluster_deployment/isulad+k8s/gitlab_deploy.md similarity index 95% rename from "docs/zh/docs/ClusterDeployment/iSulad+k8s/gitlab\351\203\250\347\275\262.md" rename to docs/zh/docs/cluster_deployment/isulad+k8s/gitlab_deploy.md index 892c6a2d8c81ac4ff719c7c49ea95a5dfa7661a0..b8727f7606f9f2f30b350665392a891e33141200 100644 --- "a/docs/zh/docs/ClusterDeployment/iSulad+k8s/gitlab\351\203\250\347\275\262.md" +++ b/docs/zh/docs/cluster_deployment/isulad+k8s/gitlab_deploy.md @@ -11,7 +11,7 @@ gitlab部署 是场景一(基于gitlab-ci从“0”开始构建欧拉原生开 ## 启动gitlab 将需要的yaml文件拷贝至/home目录,并启动对应的pod。 -> ![](./figures/public_sys-resources/icon-note.gif) **说明:** +> [!NOTE]说明 > gitlab相关的yaml文件可从官网获得。 以下为yaml文件的示例参考,请根据实际情况进行修改。 @@ -299,7 +299,7 @@ spec: 查看是否可以登录gitlab网页,网址为ip地址加设定的端口。 -![网页入口](figures/4.gitlab%E7%BD%91%E9%A1%B5%E5%85%A5%E5%8F%A3.jpg) +![网页入口](figures/4.gitlab网页入口.jpg) 用户名为root,默认密码需进入容器后查看密码文件。 ```bash @@ -307,8 +307,8 @@ spec: # cat /etc/gitlab/initial_root_password ``` -![查询密码](figures/5.%E6%9F%A5%E8%AF%A2%E5%AF%86%E7%A0%81.jpg) +![查询密码](figures/5.查询密码.jpg) - 登录后界面如图: -![登录后页面](figures/6.%E7%99%BB%E5%BD%95%E5%90%8E%E9%A1%B5%E9%9D%A2.png) +![登录后页面](figures/6.登录后页面.png) diff --git "a/docs/zh/docs/ClusterDeployment/iSulad+k8s/gitlab-runner\351\203\250\347\275\262.md" b/docs/zh/docs/cluster_deployment/isulad+k8s/gitlab_runner_deploy.md similarity index 75% rename from "docs/zh/docs/ClusterDeployment/iSulad+k8s/gitlab-runner\351\203\250\347\275\262.md" rename to docs/zh/docs/cluster_deployment/isulad+k8s/gitlab_runner_deploy.md index 29500c1e5d3fbb46336ce950423377adda275c72..b7bf818020f69302c7e121fff793d326dcffd5f4 100644 --- "a/docs/zh/docs/ClusterDeployment/iSulad+k8s/gitlab-runner\351\203\250\347\275\262.md" +++ b/docs/zh/docs/cluster_deployment/isulad+k8s/gitlab_runner_deploy.md @@ -66,29 +66,29 @@ spec: # kubectl get pod -A -o wide ``` -![镜像](figures/7.%E9%95%9C%E5%83%8F.png) +![镜像](figures/7.镜像.png) ## 登录gitlab容器网页-用户证书认证 1. 新建项目。 - ![新建项目](figures/8.%E6%96%B0%E5%BB%BA%E9%A1%B9%E7%9B%AE.png) + ![新建项目](figures/8.新建项目.png) 2. 创建空白项目。 - ![创建空白项目](figures/9.%E5%88%9B%E5%BB%BA%E7%A9%BA%E7%99%BD%E9%A1%B9%E7%9B%AE.png) + ![创建空白项目](figures/9.创建空白项目.png) 3. 自定义项目名称。 - ![自定义项目名称](figures/10.%E8%87%AA%E5%AE%9A%E4%B9%89%E9%A1%B9%E7%9B%AE%E5%90%8D%E7%A7%B0.jpg) + ![自定义项目名称](figures/10.自定义项目名称.jpg) 4. 设置--CI/CD--Runner--展开。 - ![设置-cicd-runner](figures/11.%E8%AE%BE%E7%BD%AE-cicd-runner.png) + ![设置-cicd-runner](figures/11.设置-cicd-runner.png) 5. 记录注册Runner的地址和令牌。 - ![记下runner地址与令牌](figures/12.%E8%AE%B0%E4%B8%8Brunner%E5%9C%B0%E5%9D%80%E4%B8%8E%E4%BB%A4%E7%89%8C.jpg) + ![记下runner地址与令牌](figures/12.记下runner地址与令牌.jpg) 6. 导入证书文件。 @@ -100,7 +100,7 @@ spec: # cat /etc/kubernetes/admin.conf ``` - ![查看证书配置文件](figures/13.%E6%9F%A5%E7%9C%8B%E8%AF%81%E4%B9%A6%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6.png) + ![查看证书配置文件](figures/13.查看证书配置文件.png) - 加密生成admin.crt @@ -122,8 +122,9 @@ spec: 7. 在runner运行的节点处将三个证书文件导入gitlab-runner容器。 - > ![](./figures/public_sys-resources/icon-note.gif) **说明:** - >导入容器需查看gitlab-runner运行在哪个节点上,将三个证书文件拷贝至该节点,然后使用isula cp命令导入。 + > [!NOTE]说明 + > + > 导入容器需查看gitlab-runner运行在哪个节点上,将三个证书文件拷贝至该节点,然后使用isula cp命令导入。 ```bash # isula cp admin.crt [容器id]:存放位置 @@ -133,15 +134,15 @@ spec: 注:isula cp 命令只能一次拷贝一个文件 - ![证书导入文件](figures/14.%E8%AF%81%E4%B9%A6%E5%AF%BC%E5%85%A5%E6%96%87%E4%BB%B6.png) + ![证书导入文件](figures/14.证书导入文件.png) ## 注册gitlab-runner 进入到runner的容器内进行注册;目前采用交互式注册,注册信息在gitlab上获得,当前配置的 runner服务于项目组,此信息的界面在gitlab-\>项目组(group)-\>设置-\>CI/CD-\>runner中查看。 -![注册gitlab-runner](figures/15.%E6%B3%A8%E5%86%8Cgitlab-runner.jpg) +![注册gitlab-runner](figures/15.注册gitlab-runner.jpg) -![web端已加入](figures/16.web%E7%AB%AF%E5%B7%B2%E5%8A%A0%E5%85%A5_LI.jpg) +![web端已加入](figures/16.web端已加入_LI.jpg) 将准备好的gitlab-runner-helper镜像提前上传至私有镜像仓,进入gitlab-runner容器中,修改配置文件。 @@ -170,7 +171,7 @@ spec: # kubectl edit configmaps coredns -n kube-system ``` - ![dns](figures/18.dns%E9%85%8D%E7%BD%AE.png) + ![dns](figures/18.dns配置.png) 3. 重启coredns服务。 @@ -183,12 +184,12 @@ spec: 返回gitlab的web界面,选择CI/CD--编辑器--创建CI/CD流水线。 -![CICD界面](figures/19.CICD%E7%95%8C%E9%9D%A2.png) +![CICD界面](figures/19.CICD界面.png) - 编译yaml文件如下: -![yaml文件](figures/20.yaml%E6%96%87%E4%BB%B6.png) +![yaml文件](figures/20.yaml文件.png) - 流水线-查看状态。 -![流水线状态](figures/21.%E6%B5%81%E6%B0%B4%E7%BA%BF%E7%8A%B6%E6%80%81.png) +![流水线状态](figures/21.流水线状态.png) diff --git "a/docs/zh/docs/ClusterDeployment/iSulad+k8s/iSulad+k8s\347\216\257\345\242\203\351\203\250\347\275\262.md" b/docs/zh/docs/cluster_deployment/isulad+k8s/isulad+k8s_environment_deploy.md similarity index 93% rename from "docs/zh/docs/ClusterDeployment/iSulad+k8s/iSulad+k8s\347\216\257\345\242\203\351\203\250\347\275\262.md" rename to docs/zh/docs/cluster_deployment/isulad+k8s/isulad+k8s_environment_deploy.md index e065fcedad8d56c9cd7417a3930c8b8ca2f6f771..f79493865b560b3a52170b670d17cae1309badf6 100644 --- "a/docs/zh/docs/ClusterDeployment/iSulad+k8s/iSulad+k8s\347\216\257\345\242\203\351\203\250\347\275\262.md" +++ b/docs/zh/docs/cluster_deployment/isulad+k8s/isulad+k8s_environment_deploy.md @@ -35,9 +35,9 @@ | calico/cni | v3.14.2 | | calico/kube-controllers | v3.14.2 | -如果在无外网环境中搭建,可以从以下链接提前下载对应的软件包、相关依赖软件包及镜像: +如果在无外网环境中搭建,可以从以下链接提前下载对应版本的软件包、相关依赖软件包及镜像: -1. 软件包下载地址:[https://repo.openeuler.org/openEuler-22.03-LTS-SP4/](https://repo.openeuler.org/openEuler-22.03-LTS-SP4/) +1. 软件包下载地址: 2. 镜像下载地址:[https://developer.aliyun.com/mirror/](https://developer.aliyun.com/mirror/) ## 修改host文件 @@ -249,11 +249,12 @@ ``` 注意对应的版本号,输出结果如图所示。 - ![](figures/1.%E6%9F%A5%E7%9C%8B%E9%9C%80%E8%A6%81%E9%95%9C%E5%83%8F.png) + ![](figures/1.查看需要镜像.png) 2. 使用isula拉取所需镜像。 - > ![](./figures/public_sys-resources/icon-note.gif) **说明:** + > [!NOTE]说明 + > > 以下所下载的镜像版本均为示例,具体版本号以上条命令返回结果为准,下同。 ```shell @@ -331,11 +332,7 @@ pod-network-cidr 指定pod分配的ip段 ## node节点添加进集群 -粘贴master上初始化生成的kubeadm join ...命令,并在discovery前添加--cri-socket=/var/run/isulad.sock,执行如下命令: - -```shell -# kubeadm join [IP地址] --token bgyis4.euwkjqb7jwuenwvs --cri-socket=/var/run/isulad.sock --discovery-token-ca-cert-hash sha256:3792f02e136042e2091b245ac71c1b9cdcb97990311f9300e91e1c339e1dfcf6 -``` +粘贴master上初始化生成的kubeadm join ...命令,并在discovery前添加--cri-socket=/var/run/isulad.sock。 ## 安装calico网络插件 diff --git "a/docs/zh/docs/ClusterDeployment/iSulad+k8s/iSulad+k8s\351\233\206\347\276\244\351\203\250\347\275\262\346\214\207\345\215\227.md" b/docs/zh/docs/cluster_deployment/isulad+k8s/overview.md similarity index 92% rename from "docs/zh/docs/ClusterDeployment/iSulad+k8s/iSulad+k8s\351\233\206\347\276\244\351\203\250\347\275\262\346\214\207\345\215\227.md" rename to docs/zh/docs/cluster_deployment/isulad+k8s/overview.md index 5bcb2c805cacd2108bd79852ba009624423ee785..26e15fd33956852fe2ecb4f729dcdd6baedf8378 100644 --- "a/docs/zh/docs/ClusterDeployment/iSulad+k8s/iSulad+k8s\351\233\206\347\276\244\351\203\250\347\275\262\346\214\207\345\215\227.md" +++ b/docs/zh/docs/cluster_deployment/isulad+k8s/overview.md @@ -18,5 +18,6 @@ 1. K8s+iSulad 环境部署。 2. gitlab runner 部署和测试。 -> ![](./figures/public_sys-resources/icon-note.gif) **说明:** +> [!NOTE]说明 +> > 本文档所有操作均使用root权限执行。 diff --git a/docs/zh/docs/cluster_deployment/kubernetes/_toc.yaml b/docs/zh/docs/cluster_deployment/kubernetes/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..aef523ff51953b09a04fed355b09715d5d1f8966 --- /dev/null +++ b/docs/zh/docs/cluster_deployment/kubernetes/_toc.yaml @@ -0,0 +1,35 @@ +label: Kubernetes集群部署指南 +isManual: true +description: 在openEuler环境,为搭建稳定高效Kubernetes集群提供基本的操作指引 +sections: + - label: 概述 + href: ./overview.md + - label: 准备虚拟机 + href: ./preparing_vms.md + - label: 手动部署集群 + href: ./deploying_a_kubernets_cluster_manually.md + sections: + - label: 安装Kubernetes软件包 + href: ./installing_the_kubernetes_software_package.md + - label: 准备证书 + href: ./preparing_certificates.md + - label: 安装etcd + href: ./installing_etcd.md + - label: 部署控制面组件 + href: ./deploying_control_plane_components.md + - label: 部署Node节点组件 + href: ./deploying_a_node_component.md + - label: 自动部署集群 + href: ./eggo_automatic_deployment.md + sections: + - label: 工具介绍 + href: ./eggo_tool_introduction.md + - label: 部署集群 + href: ./eggo_deploying_a_cluster.md + - label: 拆除集群 + href: ./eggo_dismantling_a_cluster.md + - label: 运行测试pod + href: ./running_the_test_pod.md + - label: 基于containerd部署集群 + href: ./kubernetes-containerd.md + diff --git a/docs/zh/docs/ClusterDeployment/Kubernetes/deploying-a-Kubernetes-cluster-manually.md b/docs/zh/docs/cluster_deployment/kubernetes/deploying_a_kubernets_cluster_manually.md similarity index 100% rename from docs/zh/docs/ClusterDeployment/Kubernetes/deploying-a-Kubernetes-cluster-manually.md rename to docs/zh/docs/cluster_deployment/kubernetes/deploying_a_kubernets_cluster_manually.md diff --git a/docs/zh/docs/ClusterDeployment/Kubernetes/deploying-a-node-component.md b/docs/zh/docs/cluster_deployment/kubernetes/deploying_a_node_component.md similarity index 100% rename from docs/zh/docs/ClusterDeployment/Kubernetes/deploying-a-node-component.md rename to docs/zh/docs/cluster_deployment/kubernetes/deploying_a_node_component.md diff --git a/docs/zh/docs/ClusterDeployment/Kubernetes/deploying-control-plane-components.md b/docs/zh/docs/cluster_deployment/kubernetes/deploying_control_plane_components.md similarity index 100% rename from docs/zh/docs/ClusterDeployment/Kubernetes/deploying-control-plane-components.md rename to docs/zh/docs/cluster_deployment/kubernetes/deploying_control_plane_components.md diff --git a/docs/zh/docs/ClusterDeployment/Kubernetes/eggo-automatic-deployment.md b/docs/zh/docs/cluster_deployment/kubernetes/eggo_automatic_deployment.md similarity index 77% rename from docs/zh/docs/ClusterDeployment/Kubernetes/eggo-automatic-deployment.md rename to docs/zh/docs/cluster_deployment/kubernetes/eggo_automatic_deployment.md index 259e29b93e8aecff26ae29e610e6833bc8602017..bccbb49b97a8a8d371cf085bb742ec9efb336b60 100644 --- a/docs/zh/docs/ClusterDeployment/Kubernetes/eggo-automatic-deployment.md +++ b/docs/zh/docs/cluster_deployment/kubernetes/eggo_automatic_deployment.md @@ -1,6 +1,6 @@ # 自动化部署 -由于手动部署 Kubernetes 集群依赖人工部署各类组件,该方式耗时耗力。尤其是在大规模部署 Kubernetes 集群环境时,面临效率和出错的问题。为了解决该问题,openEuler 自 21.09 版本推出 Kubernetes 集群部署工具,该工具实现了大规模 Kubernetes 的自动化部署、部署流程追踪等功能,并且具备高度的灵活性。 +由于手动部署 Kubernetes 集群依赖人工部署各类组件,该方式耗时耗力。尤其是在大规模部署 Kubernetes 集群环境时,面临效率和出错的问题。为了解决该问题,openEuler 推出 Kubernetes 集群部署工具,该工具实现了大规模 Kubernetes 的自动化部署、部署流程追踪等功能,并且具备高度的灵活性。 这里介绍 Kubernetes 集群自动化部署工具的使用方法。 @@ -10,7 +10,7 @@ 自动化集群部署整体架构如图所示,各模块含义如下: -- GitOps:负责集群配置信息的管理,如更新、创建、删除等; 21.09 版本暂时不提供集群管理集群的功能。 +- GitOps:负责集群配置信息的管理,如更新、创建、删除等; - InitCluster:元集群,作为中心集群管理其他业务集群。 - eggops:自定义 CRD 和 controller 用于抽象 k8s 集群。 - master:k8s 的 master 节点,承载集群的控制面。 diff --git a/docs/zh/docs/ClusterDeployment/Kubernetes/eggo-deploying-a-cluster.md b/docs/zh/docs/cluster_deployment/kubernetes/eggo_deploying_a_cluster.md similarity index 100% rename from docs/zh/docs/ClusterDeployment/Kubernetes/eggo-deploying-a-cluster.md rename to docs/zh/docs/cluster_deployment/kubernetes/eggo_deploying_a_cluster.md diff --git a/docs/zh/docs/ClusterDeployment/Kubernetes/eggo-dismantling-a-cluster.md b/docs/zh/docs/cluster_deployment/kubernetes/eggo_dismantling_a_cluster.md similarity index 95% rename from docs/zh/docs/ClusterDeployment/Kubernetes/eggo-dismantling-a-cluster.md rename to docs/zh/docs/cluster_deployment/kubernetes/eggo_dismantling_a_cluster.md index 3e02ed6be85bc879b482bd975bbee5e16729be45..21cadf9014c3769105b04df7606a9601cdc41d48 100644 --- a/docs/zh/docs/ClusterDeployment/Kubernetes/eggo-dismantling-a-cluster.md +++ b/docs/zh/docs/cluster_deployment/kubernetes/eggo_dismantling_a_cluster.md @@ -12,7 +12,7 @@ $ eggo -d delete --id k8s-cluster 192.168.0.5 192.168.0.6 ## 删除整个集群 -> ![](./public_sys-resources/icon-note.gif)**说明** +> [!NOTE]说明 > > - 删除集群会删除整个集群的数据,且无法恢复,请谨慎操作。 > - 当前,拆除集群不会清理容器和容器镜像,但若部署 Kubernetes 集群时,配置了需要安装容器引擎,则会清除容器引擎,这可能导致容器运行异常。 diff --git a/docs/zh/docs/ClusterDeployment/Kubernetes/eggo-tool-introduction.md b/docs/zh/docs/cluster_deployment/kubernetes/eggo_tool_introduction.md similarity index 88% rename from docs/zh/docs/ClusterDeployment/Kubernetes/eggo-tool-introduction.md rename to docs/zh/docs/cluster_deployment/kubernetes/eggo_tool_introduction.md index 0f73d2921d9c69282856fe84e96e4b2636b69208..7902450ee67b365b1733b80cab3bbcb1558fb2ab 100644 --- a/docs/zh/docs/ClusterDeployment/Kubernetes/eggo-tool-introduction.md +++ b/docs/zh/docs/cluster_deployment/kubernetes/eggo_tool_introduction.md @@ -7,7 +7,7 @@ openEuler 提供的 Kubernetes 集群自动化部署工具使用命令行方式进行集群的一键部署。它提供了如下几种部署方式: - 离线部署:本地准备好所有需要用到的 RPM 软件包、二进制文件、插件、容器镜像,并将它们按照一定的格式打包成一个 tar.gz 文件,然后完成对应 YAML 配置文件的编写,即可执行命令实现一键部署。当虚拟机无法访问外部网络时,可以采用该部署方式。 -- 在线部署:只需要完成对应 YAML 配置文件的编写,所需的RPM 软件包、二进制文件、插件、容器镜像,都在安装部署阶段连接互联网自动下载。该方式需要虚拟机能够访问软件源、集群依赖的镜像仓库,例如 Docker Hub。 +- 在线部署:只需要完成对应 YAML 配置文件的编写,所需的RPM 软件包、二进制文件、插件、容器镜像,都在安装部署阶段连接互联网自动下载。该方式需要虚拟机能够访问软件源、集群依赖的镜像仓库,例如 Docker Hub 。 ## 配置介绍 @@ -63,7 +63,7 @@ openEuler 提供的 Kubernetes 集群自动化部署工具使用命令行方式 - podcidr:k8s 集群网络的 IP 地址网段 - plugin:k8s 集群部署的网络插件 - plugin-args:k8s 集群网络的网络插件的配置文件路径。例如 : {"NetworkYamlPath": "/etc/kubernetes/addons/calico.yaml"} - + - apiserver-endpoint:进群外部可访问的 APISERVER 服务的地址或域名,如果配置了 loadbalances 则填loadbalance 地址,否则填写第 1 个 master 节点地址。 - apiserver-cert-sans:apiserver 相关证书中需要额外配置的 IP 和域名。它包含如下子配置项 @@ -101,7 +101,7 @@ openEuler 提供的 Kubernetes 集群自动化部署工具使用命令行方式 - worker | master | etcd | loadbalance:指定打开端口的节点类型,每项配置包含一个多或者多个 port 和 protocol 子配置项。 - port:端口地址 - protocol:端口类型,可选值为 tcp 或者 udp - + - install:配置各种类型节点上需要安装的安装包或者二进制文件的详细信息,注意将对应文件放到在 tar.gz 安装包中。以下为全量配置说明,具体配置请根据实际情况选择。 - package-source:配置安装包的详细信息 - type:安装包的压缩类型,目前只支持 tar.gz 类型的安装包 @@ -109,29 +109,27 @@ openEuler 提供的 Kubernetes 集群自动化部署工具使用命令行方式 - srcpath:不同架构安装包的存放路径,架构必须与机器架构相对应,必须是可用的绝对路径 - arm64:arm64 架构安装包的路径,配置的机器中存在 arm64 机器场景下需要配置 - amd64:amd64 类型安装包的路径,配置的机器中存在 x86_64 机器场景下需要配置 - - > ![](./public_sys-resources/icon-note.gif)**说明**: + > [!NOTE]说明 > > install 配置中 etcd、kubernetes-master、kubernetes-worker、network、loadbalance、container、image、dns 中的子配置项相同,都是 name、type、dst,schedule、TimeOut 。其中 dst,schedule、TimeOut 为可选项,用户根据安装的文件决定是否配置。下述仅以 etcd 和 kubernetes-master 节点的配置为例说明。 - - - etcd:etcd 类型节点需要安装的包或二进制文件列表。 - - name:需要安装的软件包或二进制文件的名称,如果是安装包则只写名称,不填写具体的版本号,安装时会使用 `$name*` 识别,例如 etcd 。如果为多个软件包,各名称使用 ,分隔。 - - type:配置项类型,可选值为 pkg、repo、bin、file、dir、image、yaml、shell 。如果配置为 repo ,请在对应节点上配置 repo 源。 - - dst:目的文件夹路径,type 为 bin、file、dir 类型时需要配置。表示将文件/文件夹放到节点的哪个目录下,为了防止用户误配置路径,导致 cleanup 时删除重要文件,此配置必须配置为白名单中的路径。详见 “白名单说明” 。 - - kubernetes-master:k8s master 类型节点需要安装的包或二进制文件列表 - - kubernetes-worker:k8s worker 类型节点需要安装的包或二进制文件列表 - - network:网络需要安装的包或二进制文件列表 - - loadbalance:loadbalance 类型节点需要安装的包或二进制文件列表 - - container:容器需要安装的包或二进制文件列表 - - image:容器镜像 tar 包 - - dns:k8s coredns 安装包。如果 corednstype 配置为 pod,此处无需配置 - - addition:额外的安装包或二进制文件列表 - - master:以下配置会安装在所有 master 节点 - - name:需要安装的软件包或二进制文件的名称 - - type:配置项类型,可选值为 pkg、repo、bin、file、dir、image、yaml、shell 。如果配置为 repo ,请在对应节点上配置 repo 源 - - schedule:仅在 type 为 shell 时有效,代表用户想要执行脚本的时机,支持 prejoin(节点加入前)、postjoin(节点加入后)、precleanup(节点退出前)、postcleanup(节点退出后)。 - - TimeOut:脚本执行超时时间,超时时该进程被强制终止运行。未配置默认为 30s - - worker:配置会安装在所有 worker 节点,具体配置格式和 addition 下的 master 相同 + - etcd:etcd 类型节点需要安装的包或二进制文件列表 + - name:需要安装的软件包或二进制文件的名称,如果是安装包则只写名称,不填写具体的版本号,安装时会使用 `$name*` 识别,例如 etcd 。如果为多个软件包,各名称使用 ,分隔 。 + - type:配置项类型,可选值为 pkg、repo、bin、file、dir、image、yaml、shell 。如果配置为 repo ,请在对应节点上配置 repo 源 + - dst:目的文件夹路径,type 为 bin、file、dir 类型时需要配置。表示将文件/文件夹放到节点的哪个目录下,为了防止用户误配置路径,导致 cleanup 时删除重要文件,此配置必须配置为白名单中的路径。详见 “白名单说明” + - kubernetes-master:k8s master 类型节点需要安装的包或二进制文件列表 + - kubernetes-worker:k8s worker 类型节点需要安装的包或二进制文件列表 + - network:网络需要安装的包或二进制文件列表 + - loadbalance:loadbalance 类型节点需要安装的包或二进制文件列表 + - container:容器需要安装的包或二进制文件列表 + - image:容器镜像 tar 包 + - dns:k8s coredns 安装包。如果 corednstype 配置为 pod,此处无需配置 + - addition:额外的安装包或二进制文件列表 + - master:以下配置会安装在所有 master 节点 + - name:需要安装的软件包或二进制文件的名称 + - type:配置项类型,可选值为 pkg、repo、bin、file、dir、image、yaml、shell 。如果配置为 repo ,请在对应节点上配置 repo 源 + - schedule:仅在 type 为 shell 时有效,代表用户想要执行脚本的时机,支持 prejoin(节点加入前)、postjoin(节点加入后)、precleanup(节点退出前)、postcleanup(节点退出后)。 + - TimeOut:脚本执行超时时间,超时时该进程被强制终止运行。未配置默认为 30s + - worker:配置会安装在所有 worker 节点,具体配置格式和 addition 下的 master 相同 ### 白名单介绍 @@ -382,7 +380,7 @@ openEuler 提供的集群部署工具,使用命令行 eggo 进行集群部署 | --id | 是 | 指定将要清除的 k8s 集群名称 | | --file \| -f | 否 | 指定清除 k8s 集群的 YAML 文件路径。不指定时,默认使用部署集群时缓存的集群配置。正常情况下,建议不配置该选项,仅异常情况下配置。 | -> ![](./public_sys-resources/icon-note.gif)**说明** +> [!NOTE]说明 > > - 建议使用部署集群时缓存的集群配置删除集群,即正常情况下,不建议配置 --file | -f 参数。当异常导致缓存配置破坏或者丢失时,才配置该参数。 diff --git a/docs/zh/docs/cluster_deployment/kubernetes/figures/advertiseAddress.png b/docs/zh/docs/cluster_deployment/kubernetes/figures/advertiseAddress.png new file mode 100644 index 0000000000000000000000000000000000000000..94e8913c6a87ea32adb7a28f60acaab50d77e4b4 Binary files /dev/null and b/docs/zh/docs/cluster_deployment/kubernetes/figures/advertiseAddress.png differ diff --git a/docs/zh/docs/cluster_deployment/kubernetes/figures/arch.png b/docs/zh/docs/cluster_deployment/kubernetes/figures/arch.png new file mode 100644 index 0000000000000000000000000000000000000000..f616315bb1a94cac2dba2f7a94d25d8d759345d8 Binary files /dev/null and b/docs/zh/docs/cluster_deployment/kubernetes/figures/arch.png differ diff --git a/docs/zh/docs/cluster_deployment/kubernetes/figures/flannelConfig.png b/docs/zh/docs/cluster_deployment/kubernetes/figures/flannelConfig.png new file mode 100644 index 0000000000000000000000000000000000000000..44bfdadfc570a93bc821fb3708a1403d8af5b1ce Binary files /dev/null and b/docs/zh/docs/cluster_deployment/kubernetes/figures/flannelConfig.png differ diff --git a/docs/zh/docs/cluster_deployment/kubernetes/figures/name.png b/docs/zh/docs/cluster_deployment/kubernetes/figures/name.png new file mode 100644 index 0000000000000000000000000000000000000000..f9edd3b6d2759ce33f991404f4e91969cb141540 Binary files /dev/null and b/docs/zh/docs/cluster_deployment/kubernetes/figures/name.png differ diff --git a/docs/zh/docs/cluster_deployment/kubernetes/figures/podSubnet.png b/docs/zh/docs/cluster_deployment/kubernetes/figures/podSubnet.png new file mode 100644 index 0000000000000000000000000000000000000000..1712801f53d1fc62d71b8d06fc0b0207e84b835e Binary files /dev/null and b/docs/zh/docs/cluster_deployment/kubernetes/figures/podSubnet.png differ diff --git "a/docs/zh/docs/ClusterDeployment/Kubernetes/\345\256\211\350\243\205etcd.md" b/docs/zh/docs/cluster_deployment/kubernetes/installing_etcd.md similarity index 100% rename from "docs/zh/docs/ClusterDeployment/Kubernetes/\345\256\211\350\243\205etcd.md" rename to docs/zh/docs/cluster_deployment/kubernetes/installing_etcd.md diff --git a/docs/zh/docs/ClusterDeployment/Kubernetes/installing-the-Kubernetes-software-package.md b/docs/zh/docs/cluster_deployment/kubernetes/installing_the_kubernetes_software_package.md similarity index 79% rename from docs/zh/docs/ClusterDeployment/Kubernetes/installing-the-Kubernetes-software-package.md rename to docs/zh/docs/cluster_deployment/kubernetes/installing_the_kubernetes_software_package.md index 924795f889b5bf8747baed8d21904f1dda27aba9..c24f73eec29ee7b6436cab6e868c896b3a9835f8 100644 --- a/docs/zh/docs/ClusterDeployment/Kubernetes/installing-the-Kubernetes-software-package.md +++ b/docs/zh/docs/cluster_deployment/kubernetes/installing_the_kubernetes_software_package.md @@ -1,5 +1,7 @@ # 安装 Kubernetes 软件包 +通过dnf安装k8s所需要的依赖工具包 + ```bash dnf install -y docker conntrack-tools socat ``` diff --git "a/docs/zh/docs/ClusterDeployment/Kubernetes/Kubernetes\351\233\206\347\276\244\351\203\250\347\275\262\346\214\207\345\215\2271.md" b/docs/zh/docs/cluster_deployment/kubernetes/kubernetes-containerd.md similarity index 94% rename from "docs/zh/docs/ClusterDeployment/Kubernetes/Kubernetes\351\233\206\347\276\244\351\203\250\347\275\262\346\214\207\345\215\2271.md" rename to docs/zh/docs/cluster_deployment/kubernetes/kubernetes-containerd.md index ac603e15c59002ed7aa301f65fc7bd8f0c004735..3c5ec7a00745fb85b30082517633c35d8e73cd0c 100644 --- "a/docs/zh/docs/ClusterDeployment/Kubernetes/Kubernetes\351\233\206\347\276\244\351\203\250\347\275\262\346\214\207\345\215\2271.md" +++ b/docs/zh/docs/cluster_deployment/kubernetes/kubernetes-containerd.md @@ -12,7 +12,7 @@ $ yum install -y kubernetes* $ yum install -y cri-tools ``` -> ![](./public_sys-resources/icon-note.gif)**说明** +> [!NOTE]说明 > > - 如果系统中已经安装了Docker,请确保在安装containerd之前卸载Docker,否则可能会引发冲突。 @@ -25,7 +25,7 @@ $ rpm -Uvh containerd-1.6.22-15.oe2403.x86_64.rpm 本教程中通过yum下载的软件包版本如下所示: -```bash +```txt 1. containerd -架构:x86_64 -版本:1.6.22-15 @@ -39,20 +39,20 @@ $ rpm -Uvh containerd-1.6.22-15.oe2403.x86_64.rpm ### 2. 下载cni组件 -```bash +```shell $ mkdir -p /opt/cni/bin $ cd /opt/cni/bin $ wget --no-check-certificate https://github.com/containernetworking/plugins/releases/download/v1.5.1/cni-plugins-linux-amd64-v1.5.1.tgz $ tar -xzvf ./cni-plugins-linux-amd64-v1.5.1.tgz -C . ``` -> ![](./public_sys-resources/icon-note.gif)**说明** +> [!NOTE]说明 > > - 这里提供的是AMD64架构版本的下载链接,请根据系统架构选择合适的版本,其他版本可从[github仓库](https://github.com/containernetworking/plugins/releases/)获取。 ### 3. 下载CNI插件(Flannel) -```bash +```shell $ wget https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml --no-check-certificate ``` @@ -62,7 +62,7 @@ $ wget https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation ### 1. 设置主机名 -```bash +```sh $ hostnamectl set-hostname nodeName ``` @@ -73,24 +73,24 @@ $ hostnamectl set-hostname nodeName 配置防火墙规则以开放etcd和API Server的端口,确保控制平面和工作节点之间的正常通信。 开放etcd的端口: -```bash +```sh $ firewall-cmd --zone=public --add-port=2379/tcp --permanent $ firewall-cmd --zone=public --add-port=2380/tcp --permanent ``` 开放API Server的端口: -```bash +```sh $ firewall-cmd --zone=public --add-port=6443/tcp --permanent ``` 使防火墙规则生效: -```bash +```sh $ firewall-cmd --reload ``` -> ![](./public_sys-resources/icon-note.gif)**说明** +> [!NOTE]说明 > > - 防火墙配置可能会导致某些容器镜像无法正常使用。为了确保其顺利运行,需要根据所使用的镜像开放相应的端口。 @@ -98,7 +98,7 @@ $ firewall-cmd --reload 使用以下命令禁用防火墙: -```bash +```sh $ systemctl stop firewalld $ systemctl disable firewalld ``` @@ -107,7 +107,7 @@ $ systemctl disable firewalld SELinux的安全策略可能会阻止容器内的某些操作,比如写入特定目录、访问网络资源、或执行具有特权的操作。这会导致 CoreDNS 等关键服务无法正常运行,并表现为CrashLoopBackOff或 Error状态。可以使用以下命令来禁用SELinux: -```bash +```sh $ setenforce 0 $ sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config ``` @@ -116,7 +116,7 @@ $ sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config Kubernetes的资源调度器根据节点的可用内存和CPU资源来决定将哪些Pod分配到哪些节点上。如果节点上启用了swap,实际可用的物理内存和逻辑上可用的内存可能不一致,这会影响调度器的决策,导致某些节点出现过载,或者在某些情况下调度错误。因此需要禁用swap: -```bash +```sh $ swapoff -a $ sed -ri 's/.*swap.*/#&/' /etc/fstab ``` @@ -125,7 +125,7 @@ $ sed -ri 's/.*swap.*/#&/' /etc/fstab 启用桥接网络上的IPv6和IPv4流量通过iptables进行过滤,并启动IP转发,运行内核转发IPv4包,确保跨界点的Pod间通信: -```bash +```sh $ cat > /etc/sysctl.d/k8s.conf << EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 @@ -142,7 +142,7 @@ $ sysctl -p /etc/sysctl.d/k8s.conf 首先,生成containerd的默认配置文件并将其输出到containerd_conf指定的文件: -```bash +```sh $ containerd_conf="/etc/containerd/config.toml" $ mkdir -p /etc/containerd $ containerd config default > "${containerd_conf}" @@ -150,26 +150,26 @@ $ containerd config default > "${containerd_conf}" 配置pause_image: -```bash +```sh $ pause_img=$(kubeadm config images list | grep pause | tail -1) $ sed -i "/sandbox_image/s#\".*\"#\"${pause_img}\"#" "${containerd_conf}" ``` 将cgroup驱动指定为systemd: -```bash +```sh $ sed -i "/SystemdCgroup/s/=.*/= true/" "${containerd_conf}" ``` 关闭"registry.k8s.io"镜像源证书验证: -```bash +```sh $ sed -i '/plugins."io.containerd.grpc.v1.cri".registry.configs/a\[plugins."io.containerd.grpc.v1.cri".registry.configs."registry.k8s.io".tls]\n insecure_skip_verify = true' /etc/containerd/config.toml ``` 配置代理(将HTTP_PROXY、HTTPS_PROXY、NO_PROXY中的"***"替换为自己的代理信息): -```bash +```sh $ server_path="/etc/systemd/system/containerd.service.d" $ mkdir -p "${server_path}" $ cat > "${server_path}"/http-proxy.conf << EOF @@ -182,21 +182,21 @@ EOF 重启containerd,使得以上配置生效: -```bash +```sh $ systemctl daemon-reload $ systemctl restart containerd ``` ## 配置crictl使用containerd作为容器运行时 -```bash +```sh $ crictl config runtime-endpoint unix:///run/containerd/containerd.sock $ crictl config image-endpoint unix:///run/containerd/containerd.sock ``` ## 配置kubelet使用systemd作为cgroup驱动 -```bash +```sh $ systemctl enable kubelet.service $ echo 'KUBELET_EXTRA_ARGS="--runtime-cgroups=/systemd/system.slice --kubelet-cgroups=/systemd/system.slice"' >> /etc/sysconfig/kubelet $ systemctl restart kubelet @@ -206,23 +206,23 @@ $ systemctl restart kubelet ### 1. 配置集群信息 -```bash +```sh $ kubeadm config print init-defaults --component-configs KubeletConfiguration >> kubeletConfig.yaml $ vim kubeletConfig.yaml ``` 在kubeletConfig.yaml文件中,配置节点名称、广播地址(advertiseAddress)以及Pod网络的CIDR。 - +
**修改name为主机名,与环境配置[第一步](#1-设置主机名)一致:** - +
![](./figures/name.png) - +
**将advertiseAddress修改为控制平面的ip地址:** - +
![](./figures/advertiseAddress.png) - +
**在Networking中添加podSubnet指定CIDR范围:** - +
![](./figures/podSubnet.png) ### 2. 部署集群 @@ -231,19 +231,19 @@ $ vim kubeletConfig.yaml **关闭代理(如有):** -```bash +```sh $ unset http_proxy https_proxy ``` 使用kubeadm init部署集群: -```bash +```sh $ kubeadm init --config kubeletConfig.yaml ``` 指定kubectl使用的配置文件: -```bash +```sh $ mkdir -p "$HOME"/.kube $ cp -i /etc/kubernetes/admin.conf "$HOME"/.kube/config $ chown "$(id -u)":"$(id -g)" "$HOME"/.kube/config @@ -254,16 +254,16 @@ $ export KUBECONFIG=/etc/kubernetes/admin.conf 本教程中使用flannel作为cni插件,以下介绍flannel下载和部署。 以下使用的flannel从registry-1.docker.io镜像源下载,为避免证书验证失败的问题,请在containerd配置文件(/etc/containerd/config.toml)中配置该镜像源跳过证书验证。 - +
![](./figures/flannelConfig.png) - +
使用kubectl apply部署最开始在软件包安装中下载的kube-flannel.yml。 -```bash +```sh $ kubectl apply -f kube-flannel.yml ``` -> ![](./public_sys-resources/icon-note.gif)**说明** +> [!NOTE]说明 > > 控制平面可能会有污点的问题,导致kubectl get nodes中节点状态无法变成ready,请查阅[官方文档](https://kubernetes.io/zh-cn/docs/concepts/scheduling-eviction/taint-and-toleration/)去除污点。 > @@ -271,19 +271,19 @@ $ kubectl apply -f kube-flannel.yml **关闭代理(如有):** -```bash +```sh $ unset http_proxy https_proxy ``` 工作节点安装配置完环境后可以通过以下命令加入集群。 -```bash -$ kubeadm join
: --token
--discovery-token-ca-cert-hash sha256: +```sh +$ kubeadm join : --token --discovery-token-ca-cert-hash sha256: ``` 这个命令会在控制平面库kubeadm init结束后生成,也可以在控制平面按照以下命令获取: -```bash +```sh $ kubeadm token create #生成token $ openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \ openssl dgst -sha256 -hex | sed 's/^.* //' #获取hash @@ -291,16 +291,16 @@ $ openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outf 加入后可以在控制平面通过以下命令查看工作节点的状态: -```bash +```sh $ kubectl get nodes ``` 如果节点状态显示为not ready,可能是因为Flannel插件未成功部署。在这种情况下,请运行本地生成的Flannel可执行文件来完成部署。 - +
**在工作节点运行kubectl命令(可选):** 如果需要在工作节点上运行kubectl命令,需要将控制面板的配置文件/etc/kubernetes/admin.conf复制到同样的目录,然后运行以下命令进行配置: -```bash +```sh $ export KUBECONFIG=/etc/kubernetes/admin.conf ``` diff --git a/docs/zh/docs/ClusterDeployment/Kubernetes/Kubernetes.md b/docs/zh/docs/cluster_deployment/kubernetes/overview.md similarity index 63% rename from docs/zh/docs/ClusterDeployment/Kubernetes/Kubernetes.md rename to docs/zh/docs/cluster_deployment/kubernetes/overview.md index c0af759cb21ee5fdae603a3d1e014f82addb4f7b..8420bde6c3da261d47f476345b387147222f795b 100644 --- a/docs/zh/docs/ClusterDeployment/Kubernetes/Kubernetes.md +++ b/docs/zh/docs/cluster_deployment/kubernetes/overview.md @@ -8,5 +8,5 @@ 本文所使用的集群状态如下: -- 集群结构:6 个 `openEuler 21.09`系统的虚拟机,3 个 master 和 3 个 node 节点 -- 物理机:`openEuler 21.09`的 `x86/ARM`服务器 +- 集群结构:6 个 openEuler 系统的虚拟机,3 个 master 和 3 个 node 节点 +- 物理机:openEuler 的 `x86/ARM`架构服务器 diff --git a/docs/zh/docs/ClusterDeployment/Kubernetes/preparing-certificates.md b/docs/zh/docs/cluster_deployment/kubernetes/preparing_certificates.md similarity index 95% rename from docs/zh/docs/ClusterDeployment/Kubernetes/preparing-certificates.md rename to docs/zh/docs/cluster_deployment/kubernetes/preparing_certificates.md index 0ae3428c21353ba3326b44b41d18b3706d4b73a8..fbd3c1607d35749161816318712a836d60b32253 100644 --- a/docs/zh/docs/ClusterDeployment/Kubernetes/preparing-certificates.md +++ b/docs/zh/docs/cluster_deployment/kubernetes/preparing_certificates.md @@ -4,32 +4,6 @@ 部署集群前,需要生成集群各组件之间通信所需的证书。本文使用开源 CFSSL 作为验证部署工具,以便用户了解证书的配置和集群组件之间证书的关联关系。用户可以根据实际情况选择合适的工具,例如 OpenSSL 。 -## 配置go环境 - -1. 下载go - - ```bash - wget https://go.dev/dl/go1.22.3.linux-amd64.tar.gz - ``` - -2. 移除旧版本并安装 - - ```bash - $ rm -rf /usr/local/go && tar -C /usr/local -xzf go1.22.3.linux-amd64.tar.gz - ``` - -3. 添加环境变量 - - ```bash - export PATH=$PATH:/usr/local/go/bin - ``` - -4. 检查是否安装成功 - - ```bash - go version - ``` - ## 编译安装 CFSSL 编译安装 CFSSL 的参考命令如下(需要互联网下载权限,需要配置代理的请先完成配置,需要配置 go语言环境): diff --git a/docs/zh/docs/ClusterDeployment/Kubernetes/preparing-VMs.md b/docs/zh/docs/cluster_deployment/kubernetes/preparing_vms.md similarity index 98% rename from docs/zh/docs/ClusterDeployment/Kubernetes/preparing-VMs.md rename to docs/zh/docs/cluster_deployment/kubernetes/preparing_vms.md index 534c7f6342b39dc512168affbd1746fcfb4ab48b..bac58f1bee91f3be403c7fe5d8d040563de1e3c1 100644 --- a/docs/zh/docs/ClusterDeployment/Kubernetes/preparing-VMs.md +++ b/docs/zh/docs/cluster_deployment/kubernetes/preparing_vms.md @@ -95,7 +95,7 @@ $ systemctl stop firewalld - + diff --git a/docs/zh/docs/ClusterDeployment/Kubernetes/running-the-test-pod.md b/docs/zh/docs/cluster_deployment/kubernetes/running_the_test_pod.md similarity index 94% rename from docs/zh/docs/ClusterDeployment/Kubernetes/running-the-test-pod.md rename to docs/zh/docs/cluster_deployment/kubernetes/running_the_test_pod.md index b5fe0d521e9b9a6821f0b160c5be8ad029a57ebc..b8006ebb84fad354db79f4a191386ce339610fc7 100644 --- a/docs/zh/docs/ClusterDeployment/Kubernetes/running-the-test-pod.md +++ b/docs/zh/docs/cluster_deployment/kubernetes/running_the_test_pod.md @@ -29,7 +29,7 @@ spec: ## 启动 pod -通过kubectl命令运行nginx。 +通过kubectl命令运行nginx.yaml文件。 ```bash $ kubectl apply -f nginx.yaml diff --git a/docs/zh/docs/container.md b/docs/zh/docs/container.md deleted file mode 100644 index 04cb5efa28685dad8df3747659a0ed2b27144e5b..0000000000000000000000000000000000000000 --- a/docs/zh/docs/container.md +++ /dev/null @@ -1,18 +0,0 @@ -# 概述 - -openEuler软件包中同时提供了轻量化容器引擎iSulad与docker engine两种容器引擎。 - -同时根据不同使用场景,提供多种容器形态,包括: - -- 适合大部分通用场景的普通容器 -- 适合强隔离与多租户场景的安全容器 -- 适合使用systemd管理容器内业务场景的系统容器 - -本文档提供容器引擎的安装和使用方法以及各个容器形态的部署使用方法。 - -## 读者对象 - -本文档主要适用于使用openEuler并需要安装容器的用户。用户需要具备以下经验和技能: - -- 熟悉Linux基本操作 -- 对容器有一定了解 diff --git a/docs/zh/docs/container_engine/docker_engine/_toc.yaml b/docs/zh/docs/container_engine/docker_engine/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..a6cb6f0f696397e11d14db28212129bfb0015c79 --- /dev/null +++ b/docs/zh/docs/container_engine/docker_engine/_toc.yaml @@ -0,0 +1,24 @@ +label: Docker容器 +isManual: true +description: Docker是一个开源的容器引擎项目,用以实现应用的快速打包、部署和交付 +sections: + - label: 概述 + href: ./overview.md + - label: 安装配置 + href: ./installation_and_configuration_3.md + - label: 容器管理 + href: ./container_management_1.md + - label: 镜像管理 + href: ./image_management_1.md + - label: 命令行参考 + href: ./command_reference.md + sections: + - label: 容器引擎 + href: ./container_engine.md + - label: 容器管理 + href: ./container_management_2.md + - label: 镜像管理 + href: ./image_management_2.md + - label: 统计信息 + href: ./statistics.md + diff --git "a/docs/zh/docs/ContainerEngine/DockerEngine/\345\221\275\344\273\244\350\241\214\345\217\202\350\200\203.md" b/docs/zh/docs/container_engine/docker_engine/command_reference.md similarity index 100% rename from "docs/zh/docs/ContainerEngine/DockerEngine/\345\221\275\344\273\244\350\241\214\345\217\202\350\200\203.md" rename to docs/zh/docs/container_engine/docker_engine/command_reference.md diff --git "a/docs/zh/docs/ContainerEngine/DockerEngine/\345\256\271\345\231\250\345\274\225\346\223\216-4.md" b/docs/zh/docs/container_engine/docker_engine/container_engine.md similarity index 100% rename from "docs/zh/docs/ContainerEngine/DockerEngine/\345\256\271\345\231\250\345\274\225\346\223\216-4.md" rename to docs/zh/docs/container_engine/docker_engine/container_engine.md diff --git "a/docs/zh/docs/ContainerEngine/DockerEngine/\345\256\271\345\231\250\347\256\241\347\220\206-3.md" b/docs/zh/docs/container_engine/docker_engine/container_management_1.md similarity index 98% rename from "docs/zh/docs/ContainerEngine/DockerEngine/\345\256\271\345\231\250\347\256\241\347\220\206-3.md" rename to docs/zh/docs/container_engine/docker_engine/container_management_1.md index 0d972add5190b0a38054469df0e989c6f47e4cf6..2ee33952e23856376c8b92412334fab29cb551a7 100644 --- "a/docs/zh/docs/ContainerEngine/DockerEngine/\345\256\271\345\231\250\347\256\241\347\220\206-3.md" +++ b/docs/zh/docs/container_engine/docker_engine/container_management_1.md @@ -1,13 +1,5 @@ # 容器管理 -- [容器管理](#容器管理) - - [创建容器](#创建容器) - - [创建容器使用hook-spec](#创建容器使用hook-spec) - - [创建容器配置健康检查](#创建容器配置健康检查) - - [停止与删除容器](#停止与删除容器) - - [容器信息查询](#容器信息查询) - - [修改操作](#修改操作) - ## 创建容器 ### 下载镜像 @@ -102,7 +94,7 @@ container\_registry这个容器已经启动了,但是并不知道容器中的 5000/tcp -> 0.0.0.0:49155 ``` -从输出可以看出,容器内的5000端口映射到了主机的49155端口。通过主机IP:49155就可以访问registry服务了,在浏览器中输入 +从输出可以看出,容器内的5000端口映射到了主机的49155端口。通过主机IP:49155就可以访问registry服务了,在浏览器中输入就可以返回registry的版本信息。 在运行registry镜像的时候还可以直接指定端口映射如: @@ -164,7 +156,7 @@ docker run --name=container_registry -d -p 5000:5000 registry \--blkio-weight-device参数需要磁盘工作于完全公平队列调度(CFQ:Completely Fair Queuing)的策略时才能工作。 - 通过查看磁盘scheduler文件(‘/sys/block/<磁盘>/queue/scheduler’)可以获知磁盘支持的策略以及当前所采用的策略,如查看sda: + 通过查看磁盘scheduler文件(‘/sys/block/\<磁盘>/queue/scheduler’)可以获知磁盘支持的策略以及当前所采用的策略,如查看sda: ```bash # cat /sys/block/sda/queue/scheduler noop [deadline] cfq @@ -564,7 +556,7 @@ CONTAINER ID IMAGE COMMAND CREATED } ``` -> ![](./public_sys-resources/icon-note.gif) **说明:** +> [!NOTE]说明 > > - 容器内健康检查的状态信息最多保存5条。会保存最后得到的5条记录。 > - 容器内健康检查相关配置同时最多只能有一条生效。Dockerfile中配置的靠后的条目会覆盖靠前的;容器创建时的配置会覆盖镜像中的。 @@ -660,7 +652,7 @@ docker inspect docker exec进入容器执行的第一个命令为 bash 命令时,当退出 exec 时,要保证在这次exec启动的进程都退出了,再执行exit退出,否则会导致exit退出时终端卡住的情况。如果要在exit退出时,exec中启动的进程仍然在后台保持运行,要在启动进程时加上nohup。 -### docker rename和docker stats 的使用冲突 +### docker rename和docker stats \的使用冲突 如果使用`docker stats ` 实时监控容器,当使用docker rename重命名容器之后,docker stats中显示的名字将还是原来的名字,不是rename后的名字。 diff --git "a/docs/zh/docs/ContainerEngine/DockerEngine/\345\256\271\345\231\250\347\256\241\347\220\206-4.md" b/docs/zh/docs/container_engine/docker_engine/container_management_2.md similarity index 40% rename from "docs/zh/docs/ContainerEngine/DockerEngine/\345\256\271\345\231\250\347\256\241\347\220\206-4.md" rename to docs/zh/docs/container_engine/docker_engine/container_management_2.md index 5d147ef368f1d63d6ec9121d7638155234ef816c..20357d89e2a5bc0c891ff30e3149b0051f1672fa 100644 --- "a/docs/zh/docs/ContainerEngine/DockerEngine/\345\256\271\345\231\250\347\256\241\347\220\206-4.md" +++ b/docs/zh/docs/container_engine/docker_engine/container_management_2.md @@ -1,251 +1,226 @@ # 容器管理 -- [容器管理](#容器管理) - - [总体说明](#总体说明) - - [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支持的子命令,按照功能划分为以下几组: -

功能划分

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -267,10 +242,10 @@ 示例: -```shell +```sh $ 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 -``` +```sh ## commit @@ -290,7 +265,7 @@ root@2988b8658669:/# ls bin boot dev etc home lib lib64 media mnt opt 运行一个容器,然后将这个容器提交成一个新的image -```shell +```sh $ sudo docker commit test busybox:test sha256:be4672959e8bd8a4291fbdd9e99be932912fe80b062fba3c9b16ee83720c33e1 @@ -319,7 +294,7 @@ docker cp \[OPTIONS\] SRC\_PATH|- CONTAINER:DEST\_PATH 复制registry容器中/test目录到主机的/home/aaa目录中 -```shell +```sh $ sudo docker cp registry:/test /home/aaa ``` @@ -334,117 +309,117 @@ $ sudo docker cp registry:/test /home/aaa **表 2** 参数说明 -

功能划分

命令

+

命令

命令功能

+

命令功能

主机环境相关

+

主机环境相关

version

+

version

查看docker版本信息

+

查看docker版本信息

info

+

info

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

+

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

容器相关

+

容器相关

容器生命周期管理

+

容器生命周期管理

create

+

create

由image创建一个容器

+

由image创建一个容器

run

+

run

由image创建一个容器并运行

+

由image创建一个容器并运行

start

+

start

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

+

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

stop

+

stop

停止一个运行中的容器

+

停止一个运行中的容器

restart

+

restart

重启一个容器

+

重启一个容器

wait

+

wait

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

+

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

rm

+

rm

删除一个容器

+

删除一个容器

容器内进程管理

+

容器内进程管理

pause

+

pause

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

+

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

unpause

+

unpause

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

+

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

top

+

top

查看容器内的进程

+

查看容器内的进程

exec

+

exec

在容器内执行进程

+

在容器内执行进程

容器检视工具

+

容器检视工具

ps

+

ps

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

+

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

logs

+

logs

显示一个容器的日志信息

+

显示一个容器的日志信息

attach

+

attach

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

+

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

inspect

+

inspect

返回容器的底层信息

+

返回容器的底层信息

port

+

port

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

+

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

diff

+

diff

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

+

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

cp

+

cp

容器与主机之间复制文件

+

容器与主机之间复制文件

export

+

export

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

+

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

stats

+

stats

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

+

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

images相关

+

images相关

生成一个新image

+

生成一个新image

build

+

build

通过一个Dockerfile构建一个image

+

通过一个Dockerfile构建一个image

commit

+

commit

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

+

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

import

+

import

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

+

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

load

+

load

从一个tar包中加载一个image

+

从一个tar包中加载一个image

与image仓库有关

+

与image仓库有关

login

+

login

登录一个registry

+

登录一个registry

logout

+

logout

登出一个registry

+

登出一个registry

pull

+

pull

从registry中拉取一个image

+

从registry中拉取一个image

push

+

push

将一个image推送到registry中

+

将一个image推送到registry中

search

+

search

在registry中搜寻image

+

在registry中搜寻image

与image管理有关

+

与image管理有关

images

+

images

显示系统中的image

+

显示系统中的image

history

+

history

显示一个image的变化历史

+

显示一个image的变化历史

rmi

+

rmi

删除image

+

删除image

tag

+

tag

给image打标签

+

给image打标签

save

+

save

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

+

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

其他

+

其他

events

+

events

从docker daemon中获取实时事件

+

从docker daemon中获取实时事件

rename

+

rename

重命名容器

+

重命名容器

参数

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -707,7 +682,7 @@ $ sudo docker cp registry:/test /home/aaa 创建了一个名为busybox的容器,创建之后的容器用docker start命令启动。 -```shell +```sh $ sudo docker create -ti --name=busybox busybox /bin/bash ``` @@ -721,7 +696,7 @@ $ sudo docker create -ti --name=busybox busybox /bin/bash 示例: -```shell +```sh $ sudo docker diff registry C /root A /root/.bash_history @@ -732,7 +707,7 @@ A /test ### 接口原型 -```shell +```sh rpc Exec(ExecRequest) returns (ExecResponse) {} ``` @@ -813,7 +788,7 @@ rpc Exec(ExecRequest) returns (ExecResponse) {} 将名为busybox的容器的内容导出到busybox.tar包中: -```shell +```sh $ sudo docker export busybox > busybox.tar $ ls busybox.tar @@ -839,7 +814,7 @@ busybox.tar 1. 返回一个容器的信息 - ```shell + ```sh $ sudo docker inspect busybox_test [ { @@ -865,7 +840,7 @@ busybox.tar 2. 按照给定格式返回一个容器的指定信息,下面的例子返回busybox\_test容器IP地址 - ```shell + ```sh $ sudo docker inspect -f {{.NetworkSettings.IPAddress}} busybox_test 172.17.0.91 ``` @@ -890,7 +865,7 @@ busybox.tar 1. 查看jaegertracing容器的日志信息,该容器上跑了一个jaegertracing服务 - ```shell + ```sh $ 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}} @@ -904,7 +879,7 @@ busybox.tar 2. 加上-f选项,实时打印jaegertracing容器的日志信息 - ```shell + ```sh $ 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}} @@ -929,19 +904,19 @@ busybox.tar 1. 启动一个registry容器 - ```shell + ```sh $ sudo docker run -d --name pause_test -p 5000:5000 registry ``` 此时可以用curl命令访问这个服务,请求状态码会返回200 OK。 - ```shell + ```sh $ sudo curl -v 127.0.0.1:5000 ``` 2. 暂停这个容器内的进程 - ```shell + ```sh $ sudo docker pause pause_test ``` @@ -949,7 +924,7 @@ busybox.tar 3. 恢复运行这个容器内的进程 - ```shell + ```sh $ sudo docker unpause pause_test ``` @@ -967,14 +942,14 @@ busybox.tar 1. 列出容器所有的端口映射 - ```shell + ```sh $ sudo docker port registry 5000/tcp -> 0.0.0.0.:5000 ``` 2. 查找容器指定端口的映射 - ```shell + ```sh $ sudo docker port registry 5000 0.0.0.0.:5000 ``` @@ -1005,13 +980,13 @@ busybox.tar 1. 列出正在运行的容器 - ```shell + ```sh $ sudo docker ps ``` 2. 列出所有的容器 - ```shell + ```sh $ sudo docker ps -a ``` @@ -1025,7 +1000,7 @@ busybox.tar 示例中,用docker run创建并启动一个容器,使用docker rename对容器重命名,并查看容器名是否改变。 -```shell +```sh $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b15976967abb busybox:latest "bash" 3 seconds ago Up 2 seconds festive_morse @@ -1047,12 +1022,12 @@ b15976967abb busybox:latest "bash" 34 seconds ago 示例: -```shell +```sh $ sudo docker restart busybox ``` -> ![](./public_sys-resources/icon-note.gif) **说明:** -> 容器在restart过程中,如果容器内存在D状态或Z状态的进程,可能会导致容器重启失败,这需要进一步分析导致容器内进程D状态或Z状态的原因,待容器内进程D状态或Z状态解除后,再进行容器restart操作。 +>![NOTE]说明 +>容器在restart过程中,如果容器内存在D状态或Z状态的进程,可能会导致容器重启失败,这需要进一步分析导致容器内进程D状态或Z状态的原因,待容器内进程D状态或Z状态解除后,再进行容器restart操作。 ## rm @@ -1072,13 +1047,13 @@ $ sudo docker restart busybox 1. 删除一个停止运行的容器 - ```shell + ```sh $ sudo docker rm test ``` 2. 删除一个正在运行的容器 - ```shell + ```sh $ sudo docker rm -f rm_test ``` @@ -1100,7 +1075,7 @@ $ sudo docker restart busybox 使用busybox镜像运行一个容器,在容器启动后执行/bin/sh -```shell +```sh $ sudo docker run -ti busybox /bin/sh ``` @@ -1122,7 +1097,7 @@ $ sudo docker run -ti busybox /bin/sh 如果启动容器时不加-i -a选项,容器将在后台启动。 -```shell +```sh $ sudo docker start -i -a busybox ``` @@ -1142,7 +1117,7 @@ $ sudo docker start -i -a busybox 示例中,用docker run创建并启动一个容器,docker stats将输出容器的资源占用情况。 -```shell +```sh $ 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 @@ -1162,7 +1137,7 @@ deb9e49fdef1 hardcore_montalcini 0.01% 12.79MiB / 125.8 示例: -```shell +```sh $ sudo docker stop -t=15 busybox ``` @@ -1178,7 +1153,7 @@ $ sudo docker stop -t=15 busybox 先运行了一个名为top\_test的容器,并在其中执行了top指令 -```shell +```sh $ 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 @@ -1197,77 +1172,77 @@ root 70045 70028 0 **表 3** 参数说明 -

参数

参数含义

+

参数含义

-a --attach=[]

+

-a --attach=[]

使控制台Attach到容器内进程的STDIN,STDOUT,STDERR

+

使控制台Attach到容器内进程的STDIN,STDOUT,STDERR

--name=""

+

--name=""

指定容器的名字

+

指定容器的名字

--add-host=[host:ip]

+

--add-host=[host:ip]

在容器内的/etc/hosts中添加一个hostname到IP地址的映射

+

在容器内的/etc/hosts中添加一个hostname到IP地址的映射

e.g. --add-host=test:10.10.10.10

--annotation

+

--annotation

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

+

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

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

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

--blkio-weight

+

--blkio-weight

blockio的相对权重,从10到1000

+

blockio的相对权重,从10到1000

--blkio-weight-device=[]

+

--blkio-weight-device=[]

blockio权重(设置相对权重)

+

blockio权重(设置相对权重)

-c, --cpu-shares=0

+

-c, --cpu-shares=0

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

+

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

--cap-add=[]

+

--cap-add=[]

添加Linux权能

+

添加Linux权能

--cap-drop=[]

+

--cap-drop=[]

清除Linux权能

+

清除Linux权能

--cgroup-parent

+

--cgroup-parent

为容器设置cgroup父目录

+

为容器设置cgroup父目录

--cidfile=""

+

--cidfile=""

将容器的ID写到指定的文件中

+

将容器的ID写到指定的文件中

e.g. --cidfile=/home/cidfile-test 将该容器的ID写入到/home/cidfile-test中

--cpu-period

+

--cpu-period

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

+

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

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

使用--cpus=0.5也可达到同样的效果

--cpu-quota

+

--cpu-quota

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

+

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

--cpuset-cpus

+

--cpuset-cpus

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

+

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

--cpuset-mems

+

--cpuset-mems

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

+

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

--device=[]

+

--device=[]

将主机的设备添加到容器中 (e.g. --device=/dev/sdc:/dev/xvdc:rwm)

+

将主机的设备添加到容器中 (e.g. --device=/dev/sdc:/dev/xvdc:rwm)

--dns=[]

+

--dns=[]

强制容器使用指定的dns服务器(e.g. 创建容器时指定--dns=114.114.xxx.xxx,将在容器的/etc/resolv.conf中写入nameserver 114.114.xxx.xxx并将覆盖原来的内容)

+

强制容器使用指定的dns服务器(e.g. 创建容器时指定--dns=114.114.xxx.xxx,将在容器的/etc/resolv.conf中写入nameserver 114.114.xxx.xxx并将覆盖原来的内容)

--dns-opt=[]

+

--dns-opt=[]

设置DNS选项

+

设置DNS选项

--dns-search=[]

+

--dns-search=[]

强制容器使用指定的dns搜索域名

+

强制容器使用指定的dns搜索域名

-e, --env=[]

+

-e, --env=[]

设置容器的环境变量

+

设置容器的环境变量

--env=[KERNEL_MODULES=]:

在容器中插入指定模块。目前仅支持Host主机上有的模块,且容器删除后Host主机上模块仍然驻留,且容器需要同时指定--hook-spec选项。以下都是参数的合法格式:

KERNEL_MODULERS=

@@ -453,251 +428,251 @@ $ sudo docker cp registry:/test /home/aaa

KERNEL_MODULERS=a,b,

--entrypoint=""

+

--entrypoint=""

覆盖image中原有的entrypoint,entrypoint设置容器启动时执行的命令

+

覆盖image中原有的entrypoint,entrypoint设置容器启动时执行的命令

--env-file=[]

+

--env-file=[]

从一个文件中读取环境变量,多个环境变量在文件中按行分割(e.g. --env-file=/home/test/env,其中env文件中存放了多个环境变量)

+

从一个文件中读取环境变量,多个环境变量在文件中按行分割(e.g. --env-file=/home/test/env,其中env文件中存放了多个环境变量)

--expose=[]

+

--expose=[]

开放一个容器内部的端口,使用下文介绍的-P选项将会使开放的端口映射到主机的一个端口。

+

开放一个容器内部的端口,使用下文介绍的-P选项将会使开放的端口映射到主机的一个端口。

--group-add=[]

+

--group-add=[]

指定容器添加到额外的组

+

指定容器添加到额外的组

-h, --hostname=""

+

-h, --hostname=""

设置容器主机名

+

设置容器主机名

--health-cmd

+

--health-cmd

设置容器健康检查执行的命令

+

设置容器健康检查执行的命令

--health-interval

+

--health-interval

相邻两次命令执行的间隔时间,默认 30s

+

相邻两次命令执行的间隔时间,默认 30s

--health-timeout

+

--health-timeout

单次检查命令执行的时间上限,超时则任务命令执行失败,默认30s

+

单次检查命令执行的时间上限,超时则任务命令执行失败,默认30s

--health-start-period

+

--health-start-period

容器启动距离第一次执行健康检查开始的时间,默认0s

+

容器启动距离第一次执行健康检查开始的时间,默认0s

--health-retries

+

--health-retries

健康检查失败最大的重试次数,默认3

+

健康检查失败最大的重试次数,默认3

--health-exit-on-unhealthy

+

--health-exit-on-unhealthy

容器被检查为非健康后停止容器,默认false

+

容器被检查为非健康后停止容器,默认false

--host-channel=[]

+

--host-channel=[]

设置一个通道供容器内进程与主机进行通信,格式:<host path>:<container path>:<rw/ro>:<size limit>

+

设置一个通道供容器内进程与主机进行通信,格式:<host path>:<container path>:<rw/ro>:<size limit>

-i, --interactive=false

+

-i, --interactive=false

设置STDIN打开即使没有attached

+

设置STDIN打开即使没有attached

--ip

+

--ip

设置容器的IPv4地址

+

设置容器的IPv4地址

--ip6

+

--ip6

设置容器的IPv6地址

+

设置容器的IPv6地址

--ipc

+

--ipc

指定容器的ipc命名空间

+

指定容器的ipc命名空间

--isolation

+

--isolation

指定容器隔离策略

+

指定容器隔离策略

-l, --label=[]

+

-l, --label=[]

设置容器的标签

+

设置容器的标签

--label-file=[]

+

--label-file=[]

从文件中获取标签

+

从文件中获取标签

--link=[]

+

--link=[]

链接到其他容器,这个选项将在容器中添加一些被链接容器IP地址和端口的环境变量及在/etc/hosts中添加一条映射(e.g. --link=name:alias)

+

链接到其他容器,这个选项将在容器中添加一些被链接容器IP地址和端口的环境变量及在/etc/hosts中添加一条映射(e.g. --link=name:alias)

--log-driver

+

--log-driver

设置容器的日志驱动

+

设置容器的日志驱动

--log-opt=[]

+

--log-opt=[]

设置日志驱动选项

+

设置日志驱动选项

-m, --memory=""

+

-m, --memory=""

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

+

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

--mac-address

+

--mac-address

设置容器的mac地址 (e.g. 92:d0:c6:0a:xx:xx)

+

设置容器的mac地址 (e.g. 92:d0:c6:0a:xx:xx)

--memory-reservation

+

--memory-reservation

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

+

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

--memory-swap

+

--memory-swap

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

+

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

--memory-swappiness=-1

+

--memory-swappiness=-1

设置容器使用交换内存的时机,以剩余内存百分比为度量(0-100)

+

设置容器使用交换内存的时机,以剩余内存百分比为度量(0-100)

--net="bridge"

+

--net="bridge"

设置容器的网络模式,当前1.3.0版本的docker有四个模式:bridge、host、none、container:<name|id>。默认使用的是bridge。

+

设置容器的网络模式,当前1.3.0版本的docker有四个模式:bridge、host、none、container:<name|id>。默认使用的是bridge。

  • bridge:使用桥接模式在docker daemon启动时使用的网桥上创建一个网络栈。
  • host:在容器内使用主机的网络栈
  • none:不使用网络
  • container:<name|id>:重复利用另外一个容器的网络栈

--no-healthcheck

+

--no-healthcheck

设置容器不使用健康检查

+

设置容器不使用健康检查

--oom-kill-disable

+

--oom-kill-disable

禁用OOM killer,建议如果不设置-m参数,也不要设置此参数。

+

禁用OOM killer,建议如果不设置-m参数,也不要设置此参数。

--oom-score-adj

+

--oom-score-adj

调整容器的oom规则(-1000到1000)

+

调整容器的oom规则(-1000到1000)

-P, --publish-all=false

+

-P, --publish-all=false

将容器开放的所有端口一一映射到主机的端口,通过主机的端口可以访问容器内部,通过下文介绍的docker port命令可以查看具体容器端口和主机端口具体的映射关系。

+

将容器开放的所有端口一一映射到主机的端口,通过主机的端口可以访问容器内部,通过下文介绍的docker port命令可以查看具体容器端口和主机端口具体的映射关系。

-p, --publish=[]

+

-p, --publish=[]

将容器内的一个端口映射到主机的一个端口,format: ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort | containerPort,如果没有指定IP代表侦听主机所有网卡的访问,如果没有指定hostPort,表示自动分配主机的端口。

+

将容器内的一个端口映射到主机的一个端口,format: ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort | containerPort,如果没有指定IP代表侦听主机所有网卡的访问,如果没有指定hostPort,表示自动分配主机的端口。

--pid

+

--pid

设置容器的PID命名空间

+

设置容器的PID命名空间

--privileged=false

+

--privileged=false

给予容器额外的权限,当使用了--privileged选项,容器将可以访问主机的所有设备。

+

给予容器额外的权限,当使用了--privileged选项,容器将可以访问主机的所有设备。

--restart=""

+

--restart=""

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

+

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

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

--read-only

+

--read-only

将容器的根文件系统以只读的形式挂载

+

将容器的根文件系统以只读的形式挂载

--security-opt=[]

+

--security-opt=[]

容器安全规则

+

容器安全规则

--shm-size

+

--shm-size

/dev/shm设备的大小,缺省值是64M

+

/dev/shm设备的大小,缺省值是64M

--stop-signal=SIGTERM

+

--stop-signal=SIGTERM

容器停止信号,默认为SIGTERM

+

容器停止信号,默认为SIGTERM

-t, --tty=false

+

-t, --tty=false

分配一个伪终端

+

分配一个伪终端

--tmpfs=[]

+

--tmpfs=[]

挂载tmpfs目录

+

挂载tmpfs目录

-u, --user=""

+

-u, --user=""

指定用户名或者用户ID

+

指定用户名或者用户ID

--ulimit=[]

+

--ulimit=[]

ulimit选项

+

ulimit选项

--userns

+

--userns

指定容器的user命名空间

+

指定容器的user命名空间

-v, --volume=[]

+

-v, --volume=[]

将主机的一个目录挂载到容器内部,或者在容器中创建一个新卷(e.g. -v /home/test:/home将主机的/home/test目录挂载到容器的/home目录下,-v /tmp 在容器中的根目录下创建tmp文件夹,该文件夹可以被其他容器用--volumes-from选项共享 )。不支持将主机目录挂载到容器/proc子目录,否则启动容器会报错。

+

将主机的一个目录挂载到容器内部,或者在容器中创建一个新卷(e.g. -v /home/test:/home将主机的/home/test目录挂载到容器的/home目录下,-v /tmp 在容器中的根目录下创建tmp文件夹,该文件夹可以被其他容器用--volumes-from选项共享 )。不支持将主机目录挂载到容器/proc子目录,否则启动容器会报错。

--volume-driver

+

--volume-driver

设置容器的数据卷驱动,可选。

+

设置容器的数据卷驱动,可选。

--volumes-from=[]

+

--volumes-from=[]

将另外一个容器的卷挂载到本容器中,实现卷的共享(e.g. -volumes-from container_name将container_name中的卷挂载到这个容器中 )。-v和--volumes-from=[]是两个非常重要的选项用于数据的备份和热迁移。

+

将另外一个容器的卷挂载到本容器中,实现卷的共享(e.g. -volumes-from container_name将container_name中的卷挂载到这个容器中 )。-v和--volumes-from=[]是两个非常重要的选项用于数据的备份和热迁移。

-w, --workdir=""

+

-w, --workdir=""

指定容器的工作目录,进入容器时的目录

+

指定容器的工作目录,进入容器时的目录

参数

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1277,7 +1252,7 @@ root 70045 70028 0 变更一个容器名为busybox的cpu和mem配置,包括容器获得主机CPU的相对权重值为512,容器中进程允许运行的CPU核心为0,1,2,3,容器运行内存限制为512m。 -```shell +```sh $ sudo docker update --cpu-shares 512 --cpuset-cpus=0,3 --memory 512m ubuntu ``` @@ -1293,13 +1268,13 @@ $ sudo docker update --cpu-shares 512 --cpuset-cpus=0,3 --memory 512m ubuntu 先开启一个名为busybox的容器 -```shell +```sh $ sudo docker start -i -a busybox ``` 执行docker wait -```shell +```sh $ sudo docker wait busybox 0 ``` diff --git "a/docs/zh/docs/ContainerEngine/DockerEngine/\351\225\234\345\203\217\347\256\241\347\220\206-3.md" b/docs/zh/docs/container_engine/docker_engine/image_management_1.md similarity index 95% rename from "docs/zh/docs/ContainerEngine/DockerEngine/\351\225\234\345\203\217\347\256\241\347\220\206-3.md" rename to docs/zh/docs/container_engine/docker_engine/image_management_1.md index 9ed41a02793f861279b4473a076d603e71a8791f..3d686fc23c16f4db7201c3ac1a77c16e4f634b1d 100644 --- "a/docs/zh/docs/ContainerEngine/DockerEngine/\351\225\234\345\203\217\347\256\241\347\220\206-3.md" +++ b/docs/zh/docs/container_engine/docker_engine/image_management_1.md @@ -1,10 +1,5 @@ # 镜像管理 -- [镜像管理](#镜像管理) - - [创建镜像](#创建镜像) - - [查看镜像](#查看镜像) - - [删除镜像](#删除镜像) - ## 创建镜像 docker pull、docker build、docker commit、docker import、docker load都可以创建一个新的镜像,关于这些命令的使用详见命令行参考镜像管理。 @@ -45,7 +40,7 @@ docker pull、docker build、docker commit、docker import、docker load都可 查看本地镜像列表: -```bash +```sh docker images ``` @@ -53,7 +48,7 @@ docker images 删除镜像(image处为具体镜像名): -```bash +```sh docker rmi image ``` diff --git "a/docs/zh/docs/ContainerEngine/DockerEngine/\351\225\234\345\203\217\347\256\241\347\220\206-4.md" b/docs/zh/docs/container_engine/docker_engine/image_management_2.md similarity index 68% rename from "docs/zh/docs/ContainerEngine/DockerEngine/\351\225\234\345\203\217\347\256\241\347\220\206-4.md" rename to docs/zh/docs/container_engine/docker_engine/image_management_2.md index 5acdc9ae41dd904553cd3486734b2669c8e8250a..4fea14dfc2bf84d5bde8462bb2bd11b9471eb788 100644 --- "a/docs/zh/docs/ContainerEngine/DockerEngine/\351\225\234\345\203\217\347\256\241\347\220\206-4.md" +++ b/docs/zh/docs/container_engine/docker_engine/image_management_2.md @@ -1,20 +1,5 @@ # 镜像管理 -- [镜像管理](#镜像管理) - - [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 | -** @@ -26,55 +11,55 @@ **表 4** 参数说明 -

参数

参数含义

+

参数含义

--accel=[]

+

--accel=[]

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

+

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

--blkio-weight

+

--blkio-weight

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

+

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

--cpu-shares

+

--cpu-shares

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

+

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

--cpu-period

+

--cpu-period

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

+

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

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

--cpu-quota

+

--cpu-quota

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

+

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

--cpuset-cpus

+

--cpuset-cpus

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

+

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

--cpuset-mems

+

--cpuset-mems

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

+

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

--kernel-memory=""

+

--kernel-memory=""

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

+

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

-m, --memory=""

+

-m, --memory=""

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

+

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

--memory-reservation

+

--memory-reservation

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

+

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

--memory-swap

+

--memory-swap

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

+

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

--restart=""

+

--restart=""

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

+

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

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

--help

+

--help

打印help信息

+

打印help信息

参数

+ - - - - - - - - - - - - - - - - - - - @@ -172,7 +157,7 @@ CMD command param1 param2 \(as a shell\) 下面是Dockerfile的一个完整例子,该Dockerfile将构建一个安装了sshd服务的image -```bash +```txt FROM busybox ENV http_proxy http://192.168.0.226:3128 ENV https_proxy https://192.168.0.226:3128 @@ -186,13 +171,13 @@ ENTRYPOINT /usr/sbin/sshd -D 1. 以上文的Dockerfile构建一个image - ```bash + ```sh $ sudo docker build -t busybox:latest ``` 2. 通过以下命令可以看到这个生成的image: - ```bash + ```sh docker images | grep busybox ``` @@ -212,7 +197,7 @@ ENTRYPOINT /usr/sbin/sshd -D 示例: -```bash +```sh $ sudo docker history busybox:test IMAGE CREATED CREATED BY SIZE COMMENT be4672959e8b 15 minutes ago bash 23B @@ -237,7 +222,7 @@ be4672959e8b 15 minutes ago bash 23B 示例: -```bash +```sh $ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest e02e811dd08f 2 years ago 1.09MB @@ -255,7 +240,7 @@ busybox latest e02e811dd08f 2 years ago 从上文介绍的docker export命令时导出的busybox.tar用docker import命令生成一个新的image -```bash +```sh $ sudo docker import busybox.tar busybox:test sha256:a79d8ae1240388fd3f6c49697733c8bac4d87283920defc51fb0fe4469e30a4f $ sudo docker images @@ -275,7 +260,7 @@ busybox test a79d8ae12403 2 seconds ago 示例: -```bash +```sh $ sudo docker load -i busybox.tar Loaded image ID: sha256:e02e811dd08fd49e7f6032625495118e63f597eb150403d02e3238af1df240ba $ sudo docker images @@ -299,7 +284,7 @@ busybox latest e02e811dd08f 2 years ago 示例: -```bash +```sh $ sudo docker login ``` @@ -313,7 +298,7 @@ $ sudo docker login 示例: -```bash +```sh $ sudo docker logout ``` @@ -331,7 +316,7 @@ $ sudo docker logout 1. 从官方镜像库中拉取nginx镜像 - ```bash + ```sh $ sudo docker pull nginx Using default tag: latest latest: Pulling from official/nginx @@ -348,7 +333,7 @@ $ sudo docker logout 从私有镜像库中拉取Fedora镜像,比如所使用的私有镜像库的地址是192.168.1.110:5000: - ```bash + ```sh $ sudo docker pull 192.168.1.110:5000/fedora ``` @@ -365,13 +350,13 @@ $ sudo docker logout 1. 将一个image推送到私有镜像库192.168.1.110:5000中 2. 将要推送的镜像打标签(docker tag命令将在下文介绍),本例中要推送的镜像为busybox:sshd - ```bash + ```sh $ sudo docker tag ubuntu:sshd 192.168.1.110:5000/busybox:sshd ``` 3. 将打好标签的镜像推送到私有镜像库中 - ```bash + ```sh $ sudo docker push 192.168.1.110:5000/busybox:sshd ``` @@ -391,7 +376,7 @@ $ sudo docker logout 示例: -```bash +```sh $ sudo docker rmi 192.168.1.110:5000/busybox:sshd ``` @@ -407,7 +392,7 @@ $ sudo docker rmi 192.168.1.110:5000/busybox:sshd 示例: -```bash +```sh $ sudo docker save -o nginx.tar nginx:latest $ ls nginx.tar @@ -431,10 +416,10 @@ nginx.tar 1. 在官方镜像库中搜寻nginx - ```bash + ```sh $ sudo docker search nginx NAME DESCRIPTION STARS OFFICIAL AUTOMATED - nginx Official build of Nginx. 11873 [OK] + 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 @@ -444,7 +429,7 @@ nginx.tar 2. 在私有镜像库中搜寻busybox,在私有镜像库中搜寻时要加上私有镜像库的地址 - ```bash + ```sh $ sudo docker search 192.168.1.110:5000/busybox ``` @@ -460,6 +445,6 @@ nginx.tar 示例: -```bash +```sh $ sudo docker tag busybox:latest busybox:test ``` diff --git "a/docs/zh/docs/ContainerEngine/DockerEngine/\345\256\211\350\243\205\351\205\215\347\275\256-3.md" b/docs/zh/docs/container_engine/docker_engine/installation_and_configuration_3.md similarity index 94% rename from "docs/zh/docs/ContainerEngine/DockerEngine/\345\256\211\350\243\205\351\205\215\347\275\256-3.md" rename to docs/zh/docs/container_engine/docker_engine/installation_and_configuration_3.md index f4c06dfc3bbcbb703464e700cbc44398b6f8ff37..0274ee3f4b59236dfa66ce7280346c256f1cc547 100644 --- "a/docs/zh/docs/ContainerEngine/DockerEngine/\345\256\211\350\243\205\351\205\215\347\275\256-3.md" +++ b/docs/zh/docs/container_engine/docker_engine/installation_and_configuration_3.md @@ -26,13 +26,15 @@ cat /etc/docker/daemon.json 用户需要明白重新指定各种运行目录和文件(包括--graph、--exec-root等),可能会存在目录冲突,或文件属性变换,对应用的正常使用造成影响。 ->![](./public_sys-resources/icon-notice.gif) **须知:** ->用户指定的目录或文件应为docker专用,避免冲突导致的文件属性变化带来安全问题。 +> [!TIP]须知 +> +> 用户指定的目录或文件应为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替代。 +> [!TIP]须知 +> +> 从docker-17.05开始,--graph参数被标记为Deprecated,用新的参数--data-root替代。 ### daemon自带网络配置 @@ -46,8 +48,9 @@ cat /etc/docker/daemon.json 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中的配置为准。 +> [!TIP]须知 +> +> 如果docker create/run也配置了native.umask参数,则以docker create/run中的配置为准。 详细的配置见[docker create](./容器管理-4.md#create)和[docker run](./容器管理-4.md#run)章节的参数说明。 @@ -117,8 +120,9 @@ docker支持配置audit,但不是强制的。例如: [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中。 +> [!NOTE]说明 +> +> -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中。 ```text 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 @@ -288,7 +292,7 @@ docker rm: Error response from daemon: driver "overlay2" failed to remove root f #### 注意事项 -- 使用devicemapper必须使用devicemapper+direct-lvm的方式,配置的方法可以参考 +- 使用devicemapper必须使用devicemapper+direct-lvm的方式 - 配置devicemapper时,如果系统上没有足够的空间给thinpool做自动扩容,请禁止自动扩容功能。 - 禁止把/etc/lvm/profile/docker-thinpool.profile中如下两个值都改成100。 @@ -396,5 +400,6 @@ Error response from daemon: oci runtime error: container with id exists: xxxxxx - 构建缓存,构建缓存信息会在重启后删除。 - containerd保存的元数据,由于启动容器会重建containerd元数据,重启节点会清理containerd中保存的元数据。 - > ![](./public_sys-resources/icon-note.gif) **说明:** + > [!NOTE]说明 + > > 用户若选择采用手动清理恢复环境的方式,可通过配置环境变量“DISABLE\_CRASH\_FILES\_DELETE=true”屏蔽daemon掉电重启时db文件清理功能。 diff --git "a/docs/zh/docs/ContainerEngine/DockerEngine/Docker\345\256\271\345\231\250.md" b/docs/zh/docs/container_engine/docker_engine/overview.md similarity index 92% rename from "docs/zh/docs/ContainerEngine/DockerEngine/Docker\345\256\271\345\231\250.md" rename to docs/zh/docs/container_engine/docker_engine/overview.md index d4baff4b07922cebf8f7f8898867a1e13f6e5c3c..8cdcf173a6b7bff8a722978700e640a25d300327 100644 --- "a/docs/zh/docs/ContainerEngine/DockerEngine/Docker\345\256\271\345\231\250.md" +++ b/docs/zh/docs/container_engine/docker_engine/overview.md @@ -2,5 +2,5 @@ Docker是一个开源的Linux容器引擎项目, 用以实现应用的快速打包、部署和交付。Docker的英文本意是码头工人,码头工人的工作就是将商品打包到container\(集装箱\)并且搬运container、装载container。 对应到Linux中,Docker就是将app打包到container,通过container实现app在各种平台上的部署、运行。Docker通过Linux Container技术将app变成一个标准化的、可移植的、自管理的组件,从而实现应用的“一次构建,到处运行”。Docker技术特点就是:应用快速发布、部署简单、管理方便,应用密度更高。 ->![](./public_sys-resources/icon-note.gif) **说明:** +>![NOTE]说明 >Docker容器的安装和使用需要root权限。 diff --git "a/docs/zh/docs/ContainerEngine/DockerEngine/\347\273\237\350\256\241\344\277\241\346\201\257-4.md" b/docs/zh/docs/container_engine/docker_engine/statistics.md similarity index 100% rename from "docs/zh/docs/ContainerEngine/DockerEngine/\347\273\237\350\256\241\344\277\241\346\201\257-4.md" rename to docs/zh/docs/container_engine/docker_engine/statistics.md diff --git a/docs/zh/docs/container_engine/isula_container_engine/_toc.yaml b/docs/zh/docs/container_engine/isula_container_engine/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..e2ae69c7344ff86696a41bdecf022298b749f65f --- /dev/null +++ b/docs/zh/docs/container_engine/isula_container_engine/_toc.yaml @@ -0,0 +1,51 @@ +label: iSula容器引擎 +isManual: true +description: 在iSula是使用C/C++实现的容器引起,具有轻、灵、巧、快的特点 +sections: + +- label: 概述 + href: ./overview.md +- label: 安装、升级与卸载 + href: ./installation_upgrade_uninstallation.md + sections: + - label: 安装与配置 + href: ./installation_configuration.md + - label: 升级 + href: ./upgrade_methods.md + - label: 卸载 + href: ./uninstallation.md +- label: 使用指南 + href: ./application_scenarios.md + sections: + - label: 容器管理 + href: ./container_management.md + - label: 支持CNI网络 + href: ./interconnection_with_the_cni_network.md + - label: 容器资源管理 + href: ./container_resource_management.md + - label: 特权容器 + href: ./privileged_container.md + - label: CRI_v1alpha2接口 + href: ./cri.md + - label: CRI_v1接口 + href: ./cri_2.md + - label: 镜像管理 + href: ./image_management.md + - label: 容器健康状态检查 + href: ./checking_the_container_health_status.md + - label: 查询信息 + href: ./query_information.md + - label: 安全特性 + href: ./security_features.md + - label: 支持OCI hooks + href: ./supporting_oci_hooks.md + - label: 本地卷管理 + href: ./local_volume_management.md + - label: iSulad shim v2 对接 StratoVirt + href: ./interconnecting_isula_shim_v2_with_stratovirt.md + - label: iSulad支持cgroup v2 + href: ./isulad_support_cgroup_v2.md + - label: iSulad支持CDI + href: ./isulad_support_cdi.md +- label: 附录 + href: ./appendix.md diff --git "a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/\351\231\204\345\275\225.md" b/docs/zh/docs/container_engine/isula_container_engine/appendix.md similarity index 49% rename from "docs/zh/docs/ContainerEngine/iSulaContainerEngine/\351\231\204\345\275\225.md" rename to docs/zh/docs/container_engine/isula_container_engine/appendix.md index 8347bcb6b6cdfe60e6b86d7891a937caa3d2450b..86a2268af9021521e5496e72d69bbdc9cf76201c 100644 --- "a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/\351\231\204\345\275\225.md" +++ b/docs/zh/docs/container_engine/isula_container_engine/appendix.md @@ -1,9 +1,5 @@ # 附录 -- [附录](#附录.md) - - [命令行参数说明](#命令行参数说明) - - [CNI配置参数](#cni配置参数) - ## 命令行参数说明 **表 1** login命令参数列表 @@ -230,19 +226,19 @@ **表 7** inspect命令参数列表 -

参数

参数含义

+

参数含义

--force-rm=false

+

--force-rm=false

即使没有构建成功也删除构建过程中生成的容器

+

即使没有构建成功也删除构建过程中生成的容器

--no-cache=false

+

--no-cache=false

构建image的过程中不使用缓存

+

构建image的过程中不使用缓存

-q, --quiet=false

+

-q, --quiet=false

禁止构建过程中产生的冗余信息

+

禁止构建过程中产生的冗余信息

--rm=true

+

--rm=true

构建成功后删除过程中生成的容器

+

构建成功后删除过程中生成的容器

-t, --tag=""

+

-t, --tag=""

指定构建生成的image的tag名

+

指定构建生成的image的tag名

--build-arg=[]

+

--build-arg=[]

设置构建参数

+

设置构建参数

--label=[]

+

--label=[]

镜像相关参数设置,各参数意义与create类似

+

镜像相关参数设置,各参数意义与create类似

--isolation

+

--isolation

指定容器的隔离方法

+

指定容器的隔离方法

--pull

+

--pull

构建时总是尝试获取最新版本镜像

+

构建时总是尝试获取最新版本镜像

命令

+ - - - - - - - - - @@ -374,41 +370,41 @@ **表 1** CNI单网络配置参数 -

命令

参数

+

参数

说明

+

说明

inspect

+

inspect

-H, --host

+

-H, --host

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

+

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

--help

@@ -255,14 +251,14 @@

开启调试模式

-f, --format

+

-f, --format

使用模板格式化输出

+

使用模板格式化输出

-t, --time

+

-t, --time

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

+

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

参数

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -661,154 +657,154 @@ **表 2** CNI args参数表 -

参数

类型

+

类型

是否可选

+

是否可选

说明

+

说明

cniVersion

+

cniVersion

string

+

string

必选

+

必选

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

+

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

name

+

name

string

+

string

必选

+

必选

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

+

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

type

+

type

string

+

string

必选

+

必选

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

+

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

underlay_ipvlan

overlay_l2

underlay_l2

@@ -417,31 +413,31 @@

phy-direct

ipMasq

+

ipMasq

bool

+

bool

可选

+

可选

设置IP masquerade

+

设置IP masquerade

ipam

+

ipam

结构体

+

结构体

可选

+

可选

详细定义参考IPAM参数定义

+

详细定义参考IPAM参数定义

ipam.type

+

ipam.type

string

+

string

可选

+

可选

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

+

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。

@@ -453,204 +449,204 @@

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

ipam.subnet

+

ipam.subnet

string

+

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)。

+

子网信息。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

+

ipam.gateway

string

+

string

可选

+

可选

网关IP

+

网关IP

ipam.range-start

+

ipam.range-start

string

+

string

可选

+

可选

可用的起始IP地址

+

可用的起始IP地址

ipam.range-end

+

ipam.range-end

string

+

string

可选

+

可选

可用的结束IP地址

+

可用的结束IP地址

ipam.routes

+

ipam.routes

结构体

+

结构体

可选

+

可选

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

+

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

ipam.routes.dst

+

ipam.routes.dst

string

+

string

可选

+

可选

表示目的网络

+

表示目的网络

ipam.routes.gw

+

ipam.routes.gw

string

+

string

可选

+

可选

表示网关地址

+

表示网关地址

dns

+

dns

结构体

+

结构体

可选

+

可选

包含一些DNS的特殊值。

+

包含一些DNS的特殊值。

dns.nameservers

+

dns.nameservers

[]string

+

[]string

可选

+

可选

nameservers

+

nameservers

dns.domain

+

dns.domain

string

+

string

可选

+

可选

domain

+

domain

dns.search

+

dns.search

[]string

+

[]string

可选

+

可选

search

+

search

dns.options

+

dns.options

[]string

+

[]string

可选

+

可选

选项

+

选项

multi_entry

+

multi_entry

int

+

int

可选

+

可选

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

+

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

backup_mode

+

backup_mode

bool

+

bool

可选

+

可选

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

+

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

vlanID

+

vlanID

int

+

int

可选

+

可选

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

+

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

vlan_inside

+

vlan_inside

bool

+

bool

可选

+

可选

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

+

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

vxlanID

+

vxlanID

int

+

int

可选

+

可选

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

+

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

vxlan_inside

+

vxlan_inside

bool

+

bool

可选

+

可选

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

+

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

action

+

action

string

+

string

可选

+

可选

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

+

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

Create表示创建网络。

Delete表示删除网络。

args

+

args

map[string]interface{}

+

map[string]interface{}

可选

+

可选

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

+

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

runtimeConfig

+

runtimeConfig

结构体

+

结构体

可选

+

可选

+

capabilities

+

capabilities

结构体

+

结构体

可选

+

可选

+

参数

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

参数

类型

+

类型

是否可选

+

是否可选

说明

+

说明

K8S_POD_NAME

+

K8S_POD_NAME

string

+

string

可选

+

可选

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

+

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

K8S_POD_NAMESPACE

+

K8S_POD_NAMESPACE

string

+

string

可选

+

可选

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

+

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

SECURE_CONTAINER

+

SECURE_CONTAINER

string

+

string

可选

+

可选

安全容器标志

+

安全容器标志

multi_port

+

multi_port

int

+

int

可选

+

可选

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

+

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

phy-direct

+

phy-direct

string

+

string

可选

+

可选

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

+

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

dpdk-direct

+

dpdk-direct

string

+

string

可选

+

可选

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

+

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

tenant_id

+

tenant_id

string

+

string

可选

+

可选

租户的ID。

+

租户的ID。

只支持vpc-router类型网络。

vpc_id

+

vpc_id

string

+

string

可选

+

可选

VPC的ID。

+

VPC的ID。

只支持vpc-router类型网络。

secret_name

+

secret_name

string

+

string

可选

+

可选

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

+

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

只支持vpc-router类型网络

参考配置VPC-Router逻辑网络

IP

+

IP

string

+

string

可选

+

可选

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

+

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

K8S_POD_NETWORK_ARGS

+

K8S_POD_NETWORK_ARGS

string

+

string

可选

+

可选

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

+

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

INSTANCE_NAME

+

INSTANCE_NAME

string

+

string

可选

+

可选

INSTANCE ID。

+

INSTANCE ID。

参考支持容器固定IP

dist_gateway_disable

+

dist_gateway_disable

bool

+

bool

可选

+

可选

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

+

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

phynet

+

phynet

string或[]string

+

string或[]string

可选

+

可选

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

+

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

endpoint_policies

+

endpoint_policies

struct

+

struct

可选

+

可选

"endpoint_policies": [

+

"endpoint_policies": [

{

"Type": "",

"ExceptionList": [

@@ -820,13 +816,13 @@

]

port_map

+

port_map

struct

+

struct

可选

+

可选

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

+

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

"port_map": [

{

"local_port": number,

@@ -844,41 +840,41 @@ **表 3** CNI多网络配置参数 -

参数

+ - - - - - - - - - - - - - - - diff --git "a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/\344\275\277\347\224\250\346\214\207\345\215\227.md" b/docs/zh/docs/container_engine/isula_container_engine/application_scenarios.md similarity index 35% rename from "docs/zh/docs/ContainerEngine/iSulaContainerEngine/\344\275\277\347\224\250\346\214\207\345\215\227.md" rename to docs/zh/docs/container_engine/isula_container_engine/application_scenarios.md index 8a9147aa3754ec51b829cc39be0d568921c3c9bb..93f2b26a314ab35ff6d2e65d15f8ca53b56cba3f 100644 --- "a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/\344\275\277\347\224\250\346\214\207\345\215\227.md" +++ b/docs/zh/docs/container_engine/isula_container_engine/application_scenarios.md @@ -1,5 +1,6 @@ # 使用指南 本章介绍iSula容器引擎的使用方法。 ->![](./public_sys-resources/icon-note.gif) **说明:** ->iSulad的所有使用操作均需要使用root权限。 + +> !![NOTE]说明 +> iSulad的所有使用操作均需要使用root权限。 diff --git "a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/\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/docs/zh/docs/container_engine/isula_container_engine/checking_the_container_health_status.md similarity index 94% rename from "docs/zh/docs/ContainerEngine/iSulaContainerEngine/\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" rename to docs/zh/docs/container_engine/isula_container_engine/checking_the_container_health_status.md index 4901650f20be00808efa0e3b27762bd86ddf75d9..c217b43f6bc904f826b46d12ee4b64e1f4fba1d0 100644 --- "a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/\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/docs/zh/docs/container_engine/isula_container_engine/checking_the_container_health_status.md @@ -1,11 +1,5 @@ # 容器健康状态检查 -- [容器健康状态检查](#容器健康状态检查) - - [场景说明](#场景说明) - - [配置方法](#配置方法) - - [检查规则](#检查规则) - - [使用限制](#使用限制) - ## 场景说明 在实际的生产环境中,开发者提供的应用程序或者平台提供的服务难免存在bug,因此,一套管理系统对运行的应用程序进行周期性的健康检查和修复就是不可或缺的。容器健康检查机制便添加了用户定义的对容器进行健康检查的功能。在容器创建时配置\--health-cmd选项,在容器内部周期性地执行命令,通过命令的返回值来监测容器的健康状态。 @@ -14,7 +8,7 @@ 在容器启动时的配置: -```bash +```sh 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 ``` diff --git "a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/\345\256\271\345\231\250\347\256\241\347\220\206.md" b/docs/zh/docs/container_engine/isula_container_engine/container_management.md similarity index 99% rename from "docs/zh/docs/ContainerEngine/iSulaContainerEngine/\345\256\271\345\231\250\347\256\241\347\220\206.md" rename to docs/zh/docs/container_engine/isula_container_engine/container_management.md index 4130f041b3829ae8168005309b43c735291be0f9..3101c3a634e2fab995d3b173f832caa18742a24e 100644 --- "a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/\345\256\271\345\231\250\347\256\241\347\220\206.md" +++ b/docs/zh/docs/container_engine/isula_container_engine/container_management.md @@ -8,7 +8,7 @@ isula create 命令用于创建一个新的容器。容器引擎会使用指定 ### 用法 -```bash +```sh isula create [OPTIONS] IMAGE [COMMAND] [ARG...] ``` @@ -475,7 +475,7 @@ create命令支持参数参考下表。 创建一个新容器 -```bash +```sh # isula create busybox fd7376591a9c3d8ee9a14f5d2c2e5255b02cc44cddaabca82170efd4497510e1 # isula ps -a @@ -491,7 +491,7 @@ isula start命令用于启动一个或多个容器。 ### 用法 -```bash +```sh isula start [OPTIONS] CONTAINER [CONTAINER...] ``` @@ -538,7 +538,7 @@ start命令支持参数参考下表。 启动一个新容器 -```bash +```sh # isula start fd7376591a9c3d8ee9a14f5d2c2e5255b02cc44cddaabca82170efd4497510e1 ``` @@ -550,7 +550,7 @@ isula run命令命令用于创建一个新的容器。会使用指定的容器 ### 用法 -```bash +```sh isula run [OPTIONS] ROOTFS|IMAGE [COMMAND] [ARG...] ``` @@ -1030,7 +1030,7 @@ run命令支持参数参考下表。 - 使用-it参数时,由于容器启动时会对/dev/ptmx设备进行删除重建,因此请勿将/dev目录挂载至容器/dev目录,应使用--device对/dev下的设备再容器中进行挂载。 - 禁止使用echo的方式向run命令的stdin输入数据,会导致客户端卡死。应该直接将echo的值作为命令行参数传给容器 - ```bash + ```sh # echo ls | isula run -i busybox /bin/sh @@ -1042,7 +1042,7 @@ run命令支持参数参考下表。 正确的执行方式为: - ```bash + ```sh # isula run -i busybox ls bin dev @@ -1081,19 +1081,18 @@ run命令支持参数参考下表。

参数

类型

+

类型

是否可选

+

是否可选

说明

+

说明

cniVersion

+

cniVersion

string

+

string

必选

+

必选

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

+

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

name

+

name

string

+

string

必选

+

必选

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

+

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

plugins

+

plugins

struct

+

struct

必选

+

必选

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

+

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

- > ![](./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的内容就看不到了。 - > 因此,不支持第一种使用方式;第二种使用用户需要了解这种数据无法访问的风险 + >![WARNING]注意 + >第一种情况,先挂载/home/test1,然后挂载/home/test2,这种情况会导致/home/test1的内容覆盖掉原来/mnt下面的内容,这样可能导致/mnt下面不存在abc目录,这样会导致挂载/home/test2到/mnt/abc失败。 + >第二种情况,先挂载/home/test2,然后挂载/home/test1。这种情况,第二次的挂载会把/mnt的内容替换为/home/test1的内容,这样第一次挂载的/home/test2到/mnt/abc的内容就看不到了。 + >因此,不支持第一种使用方式;第二种使用用户需要了解这种数据无法访问的风险 - 请谨慎配置/sys和/proc目录可写。/sys和/proc目录包含了linux维护内核参数、设备管理的接口,容器中配置该目录可写可能会导致容器逃逸。 - 请谨慎配置容器与host共享namespace。比如—pid,--ipc, --uts,--net配置该参数为容器和host共享namespace空间,容器和host的namespace隔离没有了,在容器中可对host进行攻击。比如,使用—pid 和host共享pid namespace,容器中可以看到host上的进程pid号,可以随意杀死host的进程。 - 请谨慎配置使用--device、-v 等可以挂载主机资源的参数,请勿将host的敏感目录或者设备,映射到容器中,以防止敏感信息泄漏。 - 请谨慎使用--privileged选项启动容器,--privileged选项会导致容器权限过大,影响宿主机配置。 - > ![](./public_sys-resources/icon-notice.gif) **须知:** - > 高并发场景(并发启动200容器)下,glibc的内存管理机制会导致内存空洞以及虚拟内存较大(例如10GB)的问题。该问题是高并发场景下glibc内存管理机制的限制,而不是内存泄露,不会导致内存消耗无限增大。可以通过设置MALLOC\_ARENA\_MAX环境变量来减少虚拟内存的问题,而且可以增大减少物理内存的概率。但是这个环境变量会导致iSulad的并发性能下降,需要用户根据实际情况做配置。 - > + >![WARNING]注意 + >- 高并发场景(并发启动200容器)下,glibc的内存管理机制会导致内存空洞以及虚拟内存较大(例如10GB)的问题。该问题是高并发场景下glibc内存管理机制的限制,而不是内存泄露,不会导致内存消耗无限增大。可以通过设置MALLOC\_ARENA\_MAX环境变量来减少虚拟内存的问题,而且可以增大减少物理内存的概率。但是这个环境变量会导致iSulad的并发性能下降,需要用户根据实际情况做配置。 > 参考实践情况,平衡性能和内存,可以设置MALLOC_ARENA_MAX为4。(在arm64服务器上面对iSulad的性能影响在10%以内) > 配置方法: > 1. 手动启动iSulad的场景,可以直接export MALLOC_ARENA_MAX=4,然后再启动iSulad即可。 @@ -1103,7 +1102,7 @@ run命令支持参数参考下表。 运行一个新容器 -```bash +```sh # isula run -itd busybox 9c2c13b6c35f132f49fb7ffad24f9e673a07b7fe9918f97c0591f0d7014c713b ``` @@ -1116,7 +1115,7 @@ isula stop命令用于停止一个或多个运行中的容器。首先向容器 ### 用法 -```bash +```sh isula stop [OPTIONS] CONTAINER [CONTAINER...] ``` @@ -1184,7 +1183,7 @@ stop命令支持参数参考下表。 停止一个容器 -```bash +```sh # isula stop fd7376591a9c3d8ee9a14f5d2c2e5255b02cc44cddaabca82170efd4497510e1 fd7376591a9c3d8ee9a14f5d2c2e5255b02cc44cddaabca82170efd4497510e1 ``` @@ -1197,7 +1196,7 @@ isula kill命令用于强制停止一个或多个运行中的容器。 ### 用法 -```bash +```sh isula kill [OPTIONS] CONTAINER [CONTAINER...] ``` @@ -1244,7 +1243,7 @@ kill命令支持参数参考下表。 杀掉一个容器 -```bash +```sh # isula kill fd7376591a9c3d8ee9a14f5d2c2e5255b02cc44cddaabca82170efd4497510e1 fd7376591a9c3d8ee9a14f5d2c2e5255b02cc44cddaabca82170efd4497510e1 ``` @@ -1257,7 +1256,7 @@ isula rm命令用于删除一个或多个容器。 ### 用法 -```bash +```sh isula rm [OPTIONS] CONTAINER [CONTAINER...] ``` @@ -1313,7 +1312,7 @@ rm命令支持参数参考下表。 删除一个停止状态的容器 -```bash +```sh # isula rm fd7376591a9c3d8ee9a14f5d2c2e5255b02cc44cddaabca82170efd4497510e1 fd7376591a9c3d8ee9a14f5d2c2e5255b02cc44cddaabca82170efd4497510e1 ``` @@ -1326,7 +1325,7 @@ isula attach命令用于将当前终端的标准输入、标准输出和标准 ### 用法 -```bash +```sh isula attach [OPTIONS] CONTAINER ``` @@ -1373,7 +1372,7 @@ attach命令支持参数参考下表。 接入一个运行状态的容器 -```bash +```sh # isula attach fd7376591a9c3d8ee9a14f5d2c2e5255b02cc44cddaabca82170efd4497510e1 / # / # @@ -1387,7 +1386,7 @@ isula rename命令用于重命名容器。 ### 用法 -```bash +```sh isula rename [OPTIONS] OLD_NAME NEW_NAME ``` @@ -1430,7 +1429,7 @@ rename命令支持参数参考下表。 重命名一个容器 -```bash +```sh # isula rename my_container my_new_container ``` @@ -1442,7 +1441,7 @@ isula exec命令用于正在运行的容器中运行一个新命令。新执行 ### 用法 -```bash +```sh isula exec [OPTIONS] CONTAINER COMMAND [ARG...] ``` @@ -1526,9 +1525,11 @@ exec命令支持参数参考下表。 2. 进入容器后,执行 script & 3. 执行exit,导致终端卡死 + ```markdown isula exec 进入容器后,执行后台程序卡住的原因为isula exec进入容器运行后台while1程序,当bash退出时,while1程序并不会退出,变为孤儿进程由1号 进程接管,while1程序是由容器的初始bash进程fork &exec执行的,while1进程复制了bash进程的文件句柄,导致bash退出时,句柄并未完全关闭,导致 console进程收不到句柄关闭事件,epoll_wait卡住,进程不退出。 + ``` - isula exec 不能用后台方式执行,否则可能会出现卡死现象。 @@ -1544,7 +1545,7 @@ exec命令支持参数参考下表。 原因:使用exec 执行ls /test,输出带有换行,针对该输出进行“| grep "xx" | wc -l“,处理结果为2(两行) - ```bash + ```sh # isula exec -it container ls /test xx xx10 xx12 xx14 xx3 xx5 xx7 xx9 xx1 xx11 xx13 xx2 xx4 xx6 xx8 @@ -1553,7 +1554,7 @@ exec命令支持参数参考下表。 建议处理方式:使用run/exec执行带有管道操作的命令时,使用/bin/bash -c 执行命令,在容器中执行管道操作。 - ```bash + ```sh # isula exec -it container /bin/sh -c "ls /test | grep "xx" | wc -l" 15 # @@ -1561,7 +1562,7 @@ exec命令支持参数参考下表。 - 禁止使用echo的方式向exec命令的stdin输入数据,会导致客户端卡死。应该直接将echo的值作为命令行参数传给容器 - ```bash + ```sh # echo ls | isula exec 38 /bin/sh @@ -1573,7 +1574,7 @@ exec命令支持参数参考下表。 正确的执行方式为: - ```bash + ```sh # isula exec 38 ls bin dev etc home proc root sys tmp usr var ``` @@ -1582,7 +1583,7 @@ exec命令支持参数参考下表。 在运行中的容器中,执行echo命令 -```bash +```sh # isula exec c75284634bee echo "hello,world" hello,world ``` @@ -1595,7 +1596,7 @@ isula inspect提供了容器的详细信息。 ### 用法 -```bash +```sh isula inspect [OPTIONS] CONTAINER|IMAGE [CONTAINER|IMAGE...] ``` @@ -1648,7 +1649,7 @@ inspect命令支持参数参考下表。 查询容器信息 -```bash +```sh # isula inspect -f '{{.State.Status} {{.State.Running}}}' c75284634bee running true @@ -1789,7 +1790,7 @@ isula ps 用于查询所有容器的信息。 ### 用法 -```bash +```sh isula ps [OPTIONS] ``` @@ -1860,7 +1861,7 @@ ps命令支持参数参考下表。 查询所有容器信息 -```bash +```sh # isula ps -a ID IMAGE STATUS PID COMMAND EXIT_CODE RESTART_COUNT STARTAT FINISHAT RUNTIME NAMES @@ -1879,7 +1880,7 @@ isula restart 用于重启一个或者多个容器。 ### 用法 -```bash +```sh isula restart [OPTIONS] CONTAINER [CONTAINER...] ``` @@ -1942,7 +1943,7 @@ restart命令支持参数参考下表。 重启单个容器 -```bash +```sh # isula restart c75284634beeede3ab86c828790b439d16b6ed8a537550456b1f94eb852c1c0a c75284634beeede3ab86c828790b439d16b6ed8a537550456b1f94eb852c1c0a ``` @@ -1955,7 +1956,7 @@ isula wait用于等待一个或者多个容器退出。仅支持runtime类型为 ### 用法 -```bash +```sh isula wait [OPTIONS] CONTAINER [CONTAINER...] ``` @@ -1997,7 +1998,7 @@ wait命令支持参数参考下表。 等待单个容器退出 -```bash +```sh # isula wait c75284634beeede3ab86c828790b439d16b6ed8a537550456b1f94eb852c1c0a 137 ``` @@ -2010,7 +2011,7 @@ isula top用于查看容器中的进程信息。 ### 用法 -```bash +```sh isula top [OPTIONS] container [ps options] ``` @@ -2053,7 +2054,7 @@ top命令支持参数参考下表。 查询容器中进程信息 -```bash +```sh # isula top 21fac8bb9ea8e0be4313c8acea765c8b4798b7d06e043bbab99fc20efa72629c UID PID PPID C STIME TTY TIME CMD root 22166 22163 0 23:04 pts/1 00:00:00 sh @@ -2067,7 +2068,7 @@ isula stats用于实时显示资源使用的统计信息。 ### 用法 -```bash +```sh isula stats [OPTIONS] [CONTAINER...] ``` @@ -2126,7 +2127,7 @@ stats命令支持参数参考下表。 显示资源使用的统计信息 -```bash +```sh # 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 ``` @@ -2139,7 +2140,7 @@ isula logs用于获取容器的日志。 ### 用法 -```bash +```sh isula logs [OPTIONS] [CONTAINER...] ``` @@ -2201,7 +2202,7 @@ logs命令支持参数参考下表。 获取容器日志 -```bash +```sh # isula logs 6a144695f5dae81e22700a8a78fac28b19f8bf40e8827568b3329c7d4f742406 hello, world hello, world @@ -2216,7 +2217,7 @@ isula cp 用于容器与主机之间的数据拷贝,仅支持runtime类型为l ### 用法 -```bash +```sh isula cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH isula cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH ``` @@ -2259,7 +2260,7 @@ cp命令支持参数参考下表。 - iSulad在执行拷贝时,不会挂载/etc/hostname, /etc/resolv.conf,/etc/hosts三个文件,也不会对--volume和--mount参数传入的参数挂载到host,所以对这些文件的拷贝使用的是镜像中的原始文件,而不是真实容器中的文件。 - ```bash + ```sh # isula cp b330e9be717a:/etc/hostname /tmp/hostname # cat /tmp/hostname # @@ -2267,7 +2268,7 @@ cp命令支持参数参考下表。 - iSulad在解压文件时,不会对文件系统中即将被覆盖的文件或文件夹做类型判断,而是直接覆盖,所以在拷贝时,如果源为文件夹,同名的文件会被强制覆盖为文件夹;如果源为文件,同名的文件夹会被强制覆盖为文件。 - ```bash + ```sh # 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 @@ -2281,13 +2282,13 @@ cp命令支持参数参考下表。 将主机/test/host目录拷贝到容器21fac8bb9ea8的/test目录下。 -```bash +```sh isula cp /test/host 21fac8bb9ea8:/test ``` 将容器21fac8bb9ea8的/www目录拷贝到主机的/tmp目录中。 -```bash +```sh isula cp 21fac8bb9ea8:/www /tmp/ ``` @@ -2299,7 +2300,7 @@ isula pause用于暂停一个或者多个容器中的所有进程。 ### 用法 -```bash +```sh isula pause [OPTIONS] CONTAINER [CONTAINER...] ``` @@ -2343,7 +2344,7 @@ isula pause [OPTIONS] CONTAINER [CONTAINER...] 暂停一个正在运行的容器,命令示例如下: -```bash +```sh # isula pause 8fe25506fb5883b74c2457f453a960d1ae27a24ee45cdd78fb7426d2022a8bac 8fe25506fb5883b74c2457f453a960d1ae27a24ee45cdd78fb7426d2022a8bac ``` @@ -2356,7 +2357,7 @@ isula unpause用于恢复一个或者多个容器中的所有进程, 为isula pa ### 用法 -```bash +```sh isula unpause [OPTIONS] CONTAINER [CONTAINER...] ``` @@ -2398,7 +2399,7 @@ isula unpause [OPTIONS] CONTAINER [CONTAINER...] 恢复一个被暂停的容器,命令示例如下: -```bash +```sh # isula unpause 8fe25506fb5883b74c2457f453a960d1ae27a24ee45cdd78fb7426d2022a8bac 8fe25506fb5883b74c2457f453a960d1ae27a24ee45cdd78fb7426d2022a8bac ``` @@ -2411,7 +2412,7 @@ isula events用于从服务端获取实时事件。 ### 用法 -```bash +```sh isula events [OPTIONS] ``` @@ -2469,6 +2470,6 @@ isula events [OPTIONS] 从服务端实时获取事件消息,命令示例如下: -```bash +```sh # isula events ``` diff --git "a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/\345\256\271\345\231\250\350\265\204\346\272\220\347\256\241\347\220\206.md" b/docs/zh/docs/container_engine/isula_container_engine/container_resource_management.md similarity index 48% rename from "docs/zh/docs/ContainerEngine/iSulaContainerEngine/\345\256\271\345\231\250\350\265\204\346\272\220\347\256\241\347\220\206.md" rename to docs/zh/docs/container_engine/isula_container_engine/container_resource_management.md index 1297a3b5f5f170bb3785e3690f482b0a27907112..a86c40a332d363535e8a0061b60ffdb1eb5e4aac 100644 --- "a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/\345\256\271\345\231\250\350\265\204\346\272\220\347\256\241\347\220\206.md" +++ b/docs/zh/docs/container_engine/isula_container_engine/container_resource_management.md @@ -13,7 +13,7 @@ cgroup v2来进行资源管理。无论是cgroup v1还是使用cgroup v2对容 容器间或者容器与host之间可以共享namespace信息,包括pid, net, ipc, uts。 ->![](./public_sys-resources/icon-note.gif) **说明:** +>![NOTE]说明 >当使用与主机共享namespace信息时,即缺少了对应的namespace隔离机制,在容器中可以查询、操作主机上的信息,存在安全 隐患。比如使用--pid=host共享主机pid namespace时,即可以看到主机上其他进程信息,造成信息泄露,甚至直接kill杀死主机 进程。请在确保安全的场景下,谨慎使用共享主机host namespace功能。 @@ -27,50 +27,50 @@ isula create/run时使用namespace相关的参数共享资源,具体参数见 create/run时可以指定下列参数。 -

参数项

+ - - - - - - - - - - - - - - - - - - - @@ -80,7 +80,7 @@ create/run时可以指定下列参数。 如果两个容器需要共享同一个pid namespace,在运行容器时,直接加上--pid container: 即可,如: -```bash +```sh isula run -tid --name test_pid busybox sh isula run -tid --name test --pid container:test_pid busybox sh ``` @@ -100,77 +100,77 @@ isula create/run时使用cpu相关的参数限制容器的各项cpu资源值, create/run时可以指定下列参数。 -

参数项

参数说明

+

参数说明

取值范围

+

取值范围

是否必选

+

是否必选

--pid

+

--pid

指定要共享的pid namespace

+

指定要共享的pid namespace

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

+

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

+

--net

+

--net

指定要共享的net namespace

+

指定要共享的net namespace

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

+

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

+

--ipc

+

--ipc

指定要共享的ipc namespace

+

指定要共享的ipc namespace

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

+

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

+

--uts

+

--uts

指定要共享的uts namespace

+

指定要共享的uts namespace

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

+

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

+

参数项

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

参数项

参数说明

+

参数说明

取值范围

+

取值范围

是否必选

+

是否必选

--cpu-period

+

--cpu-period

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

+

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

64位整数(int64)

+

64位整数(int64)

+

--cpu-quota

+

--cpu-quota

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

+

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

64位整数(int64)

+

64位整数(int64)

+

--cpu-shares

+

--cpu-shares

限制容器中cpu相对权重

+

限制容器中cpu相对权重

64位整数(int64)

+

64位整数(int64)

+

--cpu-rt-period

+

--cpu-rt-period

限制容器中cpu实时周期(以微秒为单位)

+

限制容器中cpu实时周期(以微秒为单位)

64位整数(int64)

+

64位整数(int64)

+

--cpu-rt-runtime

+

--cpu-rt-runtime

限制容器中cpu实时运行时间(以微秒为单位)

+

限制容器中cpu实时运行时间(以微秒为单位)

64位整数(int64)

+

64位整数(int64)

+

--cpuset-cpus

+

--cpuset-cpus

限制容器中使用cpu节点

+

限制容器中使用cpu节点

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

+

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

+

--cpuset-mems

+

--cpuset-mems

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

+

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

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

+

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

+

参数项

+ - - - - - - - - - - - - - - - - - - - @@ -253,9 +253,9 @@ create/run时可以指定下列参数。 ### 示例 -如果需要限制容器内内存的上限,在运行容器时,直接加上`--memory []`即可,如: +如果需要限制容器内内存的上限,在运行容器时,直接加上--memory \[\]即可,如: -```bash +```sh isula run -tid --memory 1G busybox sh ``` @@ -274,23 +274,23 @@ isula create/run时使用--device-read-bps/--device-write-bps : -

参数项

参数说明

+

参数说明

取值范围

+

取值范围

是否必选

+

是否必选

--memory

+

--memory

限制容器中内存使用上限

+

限制容器中内存使用上限

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

+

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

+

--memory-reservation

+

--memory-reservation

限制容器中内存的软上限

+

限制容器中内存的软上限

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

+

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

+

--memory-swap

+

--memory-swap

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

+

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

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

+

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

+

--kernel-memory

+

--kernel-memory

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

+

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

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

+

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

+

参数项

+ - - - - - - - @@ -300,13 +300,13 @@ create/run时指定--device-read/write-bps参数。 如果需要限制容器内设备的读写速度,在运行容器时,直接加上--device-write-bps/--device-read-bps :\[\]即可,例如,限制容器busybox内设备/dev/sda的读速度为 1MB 每秒,则命令如下: -```bash +```sh isula run -tid --device-write /dev/sda:1mb busybox sh ``` 限制写速度的命令如下: -```bash +```sh isula run -tid read-bps /dev/sda:1mb busybox sh ``` @@ -328,7 +328,7 @@ isula run -tid read-bps /dev/sda:1mb busybox sh 3. 配额的设置需要在容器外以特权用户进行。 4. daemon中增加如下配置 - ```shell + ```sh -s overlay2 --storage-opt overlay2.override_kernel_check=true ``` @@ -339,7 +339,7 @@ isula run -tid read-bps /dev/sda:1mb busybox sh 6. 需要开启文件系统Project ID和Project Quota属性。 - 新格式化文件系统并mount - ```shell + ```sh # mkfs.ext4 -O quota,project /dev/sdb # mount -o prjquota /dev/sdb /var/lib/isulad ``` @@ -349,23 +349,23 @@ isula run -tid read-bps /dev/sda:1mb busybox sh create/run时指定--storage-opt参数。 -

参数项

参数说明

+

参数说明

取值范围

+

取值范围

是否必选

+

是否必选

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

+

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

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

+

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

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

+

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

+

参数项

+ - - - - - - - @@ -373,9 +373,9 @@ create/run时指定--storage-opt参数。 ### 示例 -在isula run/create命令行上通过已有参数“--storage-opt size=”来设置限额。其中value是一个正数,单位可以是`[kKmMgGtTpP]?[iI]?[bB]?`,在不带单位的时候默认单位是字节。 +在isula run/create命令行上通过已有参数“--storage-opt size=”来设置限额。其中value是一个正数,单位可以是\[kKmMgGtTpP\]?\[iI\]?\[bB\]?,在不带单位的时候默认单位是字节。 -```bash +```sh # isula run -ti --storage-opt size=10M busybox / # df -h Filesystem Size Used Available Use% Mounted on @@ -420,7 +420,7 @@ overlay 10.0M 10.0M 0 100% / 内核必须支持ext4的project quota功能,并在mkfs的时候要加上-O quota,project,挂载的时候要加上-o prjquota。任何一个不满足,在使用--storage-opt size=时都将报错。 - ```bash + ```sh # 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 @@ -440,7 +440,7 @@ overlay 10.0M 10.0M 0 100% / docker启动失败。 - ```bash + ```sh # 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'. @@ -448,7 +448,7 @@ overlay 10.0M 10.0M 0 100% / 轻量级容器不报错,正常启动 - ```bash + ```sh # isula run -itd --storage-opt size=4k rnd-dockerhub.huawei.com/official/ubuntu-arm64:latest 636480b1fc2cf8ac895f46e77d86439fe2b359a1ff78486ae81c18d089bbd728 # isula ps @@ -462,7 +462,7 @@ overlay 10.0M 10.0M 0 100% / 轻量级容器在启动容器过程中,使用默认配置时,挂载点较少,如/proc,或/sys等路径不存在时,才会创建。用例中的镜像rnd-dockerhub.huawei.com/official/ubuntu-arm64:latest本身含有/proc, /sys等,因此整个启动容器的过程中,都不会有新文件或路径生成,故轻量级容器启动过程不会报错。为验证这一过程,当把镜像替换为rnd-dockerhub.huawei.com/official/busybox-aarch64:latest时,由于该镜像内无/proc存在,轻量级容器启动一样会报错。 - ```bash + ```sh # 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, @@ -473,8 +473,8 @@ overlay 10.0M 10.0M 0 100% / 使用限额功能的isulad切换数据盘时,需要保证被切换的数据盘使用\`prjquota\`选项挂载,且/var/lib/isulad/storage/overlay2目录的挂载方式与/var/lib/isulad相同。 - > ![](./public_sys-resources/icon-note.gif) **说明:** - > 切换数据盘时需要保证/var/lib/isulad/storage/overlay2的挂载点被卸载。 + >![NOTE]说明 + >切换数据盘时需要保证/var/lib/isulad/storage/overlay2的挂载点被卸载。 ## 限制容器内文件句柄数 @@ -491,24 +491,24 @@ isula create/run时使用--files-limit来限制容器中可以打开的文件句 create/run时指定--files-limit参数。 -

参数项

参数说明

+

参数说明

取值范围

+

取值范围

是否必选

+

是否必选

--storage-opt size=${rootfsSize}

+

--storage-opt size=${rootfsSize}

限制容器rootfs存储空间。

+

限制容器rootfs存储空间。

rootfsSize解析出的大小为int64范围内以字节表示的正数,默认单位为B,也可指定为([kKmMgGtTpP])?[iI]?[bB]?$。(device mapper场景下最小取值为10G)

+

rootfsSize解析出的大小为int64范围内以字节表示的正数,默认单位为B,也可指定为([kKmMgGtTpP])?[iI]?[bB]?$。(device mapper场景下最小取值为10G)

+

参数项

+ - - - - - - - @@ -518,7 +518,7 @@ create/run时指定--files-limit参数。 在运行容器时,直接加上--files-limit n 即可,如: -```bash +```sh isula run -ti --files-limit 1024 busybox bash ``` @@ -526,7 +526,7 @@ isula run -ti --files-limit 1024 busybox bash 1. 使用--files-limit参数传入一个很小的值,如1,可能导致容器启动失败。 - ```bash + ```sh # 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 @@ -534,7 +534,7 @@ isula run -ti --files-limit 1024 busybox bash 而docker会启动成功,其files.limit cgroup值为max。 - ```bash + ```sh # 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 @@ -558,23 +558,23 @@ isula run -ti --files-limit 1024 busybox bash create/run时指定--pids-limit参数。 -

参数项

参数说明

+

参数说明

取值范围

+

取值范围

是否必选

+

是否必选

--files-limit

+

--files-limit

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

+

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

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

+

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

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

+

参数项

+ - - - - - - - @@ -584,7 +584,7 @@ create/run时指定--pids-limit参数。 在运行容器时,直接加上--pids-limit n 即可,如: -```bash +```sh isula run -ti --pids-limit 1024 busybox bash ``` @@ -609,23 +609,23 @@ isula run -ti --pids-limit 1024 busybox bash 1. isula create/run时使用--ulimit =\[:\]来控制shell执行程序的资源。 -

参数项

参数说明

+

参数说明

取值范围

+

取值范围

是否必选

+

是否必选

--pids-limit

+

--pids-limit

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

+

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

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

+

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

+

参数项

+ - - - - - - - @@ -638,91 +638,91 @@ isula run -ti --pids-limit 1024 busybox bash --ulimit可以对以下类型的资源进行限制。 -

参数项

参数说明

+

参数说明

取值范围

+

取值范围

是否必选

+

是否必选

--ulimit

+

--ulimit

限制shell执行程序的资源

+

限制shell执行程序的资源

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

+

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

+

类型

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -730,9 +730,9 @@ isula run -ti --pids-limit 1024 busybox bash ### 示例 -在容器的创建或者运行时,加上`--ulimit =[:]`即可,如: +在容器的创建或者运行时,加上--ulimit =\[:\]即可,如: -```bash +```sh isula create/run -tid --ulimit nofile=1024:2048 busybox sh ``` diff --git "a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/CRI-v1alpha2\346\216\245\345\217\243.md" b/docs/zh/docs/container_engine/isula_container_engine/cri.md similarity index 47% rename from "docs/zh/docs/ContainerEngine/iSulaContainerEngine/CRI-v1alpha2\346\216\245\345\217\243.md" rename to docs/zh/docs/container_engine/isula_container_engine/cri.md index b902cf6332b5c1f684c51e415db1ca7385ced52d..aa8e1424395a91684ad977dc9e873c0d303b8fbe 100644 --- "a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/CRI-v1alpha2\346\216\245\345\217\243.md" +++ b/docs/zh/docs/container_engine/isula_container_engine/cri.md @@ -12,8 +12,9 @@ CRI API 接口是由kubernetes 推出的容器运行时接口,CRI定义了容 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配置文件进行配置。 +> [!NOTE]说明 +> +> CRI接口websocket流式服务,服务端侦听地址为127.0.0.1,端口为10350,端口可通过命令行--websocket-server-listening-port参数接口或者daemon.json配置文件进行配置。 ## 接口 @@ -59,37 +60,14 @@ ISulad使用的为pass使用的1.14版本API描述文件,与官方API略有出 指定sandbox的端口映射配置 - -

类型

说明

+

说明

取值范围

+

取值范围

core

+

core

limits the core file size (KB)

+

limits the core file size (KB)

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

+

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

cpu

+

cpu

max CPU time (MIN)

+

max CPU time (MIN)

data

+

data

max data size (KB)

+

max data size (KB)

fsize

+

fsize

maximum filesize (KB)

+

maximum filesize (KB)

locks

+

locks

max number of file locks the user can hold

+

max number of file locks the user can hold

memlock

+

memlock

max locked-in-memory address space (KB)

+

max locked-in-memory address space (KB)

msgqueue

+

msgqueue

max memory used by POSIX message queues (bytes)

+

max memory used by POSIX message queues (bytes)

nice

+

nice

nice priority

+

nice priority

nproc

+

nproc

max number of processes

+

max number of processes

rss

+

rss

max resident set size (KB)

+

max resident set size (KB)

rtprio

+

rtprio

max realtime priority

+

max realtime priority

rttime

+

rttime

realtime timeout

+

realtime timeout

sigpending

+

sigpending

max number of pending signals

+

max number of pending signals

stack

+

stack

max stack size (KB)

+

max stack size (KB)

nofile

+

nofile

max number of open file descriptors

+

max number of open file descriptors

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

+

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

- - - - - - - - - - - - - - - - -

参数成员

-

描述

-

Protocol protocol

-

端口映射使用的协议

-

int32 container_port

-

容器内的端口号

-

int32 host_port

-

主机上的端口号

-

string host_ip

-

主机IP地址

-
+ | **参数成员** | **描述** | + |----------------------|--------------------| + | Protocol protocol | 端口映射使用的协议 | + | int32 container_port | 容器内的端口号 | + | int32 host_port | 主机上的端口号 | + | string host_ip | 主机IP地址 | -- **MountPropagation** +- **MountPropagation** 挂载传播属性的enum列表 @@ -122,40 +100,13 @@ ISulad使用的为pass使用的1.14版本API描述文件,与官方API略有出 Mount指定host上的一个挂载卷挂载到容器中(只支持文件和文件夹\) - - - - - - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

string container_path

-

容器中的路径

-

string host_path

-

主机上的路径

-

bool readonly

-

是否配置在容器中是只读的, 缺省值: false

-

bool selinux_relabel

-

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

-

MountPropagation propagation

-

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

-
+ | **参数成员** | **描述** | + |------------------------------|---------------------------------------------------------------------------------| + | string container_path | 容器中的路径 | + | string host_path | 主机上的路径 | + | bool readonly | 是否配置在容器中是只读的, 缺省值: false | + | bool selinux_relabel | 是否设置SELinux标签(不支持配置) | + | MountPropagation propagation | 挂载传播属性配置(取值**0/1/2**,分别对应**private/rslave/rshared**传播属性) **缺省值:0** | - **NamespaceOption** @@ -246,89 +197,31 @@ ISulad使用的为pass使用的1.14版本API描述文件,与官方API略有出
-- **LinuxSandboxSecurityContext** +- **LinuxSandboxSecurityContext** 配置sandbox的linux安全选项。 - 注意,这些安全选项不会应用到sandbox中的容器中,也可能不适用于没有任何running进程的sandbox + 注意,这些安全选项不会应用到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。

-
+ | **参数成员** | **描述** | + |------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| + | 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配置

-
+ | **参数成员** | **描述** | + |----------------------------------------------|-----------------------------------------------------------------------------------------| + | string cgroup_parent | sandbox的cgroup父路径,runtime可根据实际情况使用cgroupfs或systemd的语法。(不支持配置) | + | LinuxSandboxSecurityContext security_context | sandbox的安全属性 | + | map\ sysctls | sandbox的linux sysctls配置 | - **PodSandboxMetadata** @@ -368,55 +261,16 @@ ISulad使用的为pass使用的1.14版本API描述文件,与官方API略有出 包含创建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主机相关的可选项

-
+ | **参数成员** | **描述** | + |------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------| + | 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\ labels | 可用于标识单个或一系列sandbox的键值对 | + | map\ annotations | 存储任意信息的键值对,这些值是不可更改的,且能够利用PodSandboxStatus接口查询 | + | LinuxPodSandboxConfig linux | 与linux主机相关的可选项 | - **PodSandboxNetworkStatus** @@ -451,39 +305,17 @@ ISulad使用的为pass使用的1.14版本API描述文件,与官方API略有出 命名空间选项 - - - - - - - - - -

参数成员

-

描述

-

NamespaceOption options

-

Linux 命名空间选项

-
+ | **参数成员** | **描述** | + |-------------------------|--------------------| + | NamespaceOption options | Linux 命名空间选项 | - **LinuxPodSandboxStatus** 描述Linux sandbox的状态 - - - - - - - - - -

参数成员

-

描述

-

Namespace namespaces

-

sandbox命名空间

-
+ | **参数成员** | **描述** | + |----------------------|-----------------| + | Namespace **namespaces** | sandbox命名空间 | - **PodSandboxState** @@ -513,147 +345,47 @@ ISulad使用的为pass使用的1.14版本API描述文件,与官方API略有出 描述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更改的

-
+ | **参数成员** | **描述** | + |-------------------------------------------|---------------------------------------------------| + | string id | sandbox的ID | + | PodSandboxMetadata metadata | sandbox的元数据 | + | PodSandboxState state | sandbox的状态值 | + | int64 created_at | sandbox的创建时间戳,单位纳秒 | + | repeated PodSandboxNetworkStatus networks | sandbox的多平面网络状态 | + | LinuxPodSandboxStatus linux | Linux规范的sandbox状态 | + | map\ labels | 可用于标识单个或一系列sandbox的键值对 | + | map\ annotations | 存储任意信息的键值对,这些值是不可被runtime更改的 | - **PodSandboxStateValue** 对PodSandboxState的封装 - - - - - - - - - -

参数成员

-

描述

-

PodSandboxState state

-

sandbox的状态值

-
+ | **参数成员** | **描述** | + |-----------------------|-----------------| + | PodSandboxState state | sandbox的状态值 | - **PodSandboxFilter** 用于列出sandbox时添加过滤条件,多个条件取交集显示 - - - - - - - - - - - - - - - -

参数成员

-

描述

-

string id

-

sandbox的ID

-

PodSandboxStateValue state

-

sandbox的状态

-

map<string, string> label_selector

-

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

-
+ | **参数成员** | **描述** | + |------------------------------------|------------------------------------------------------| + | string id | sandbox的ID | + | PodSandboxStateValue state | sandbox的状态 | + | map\ 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更改的

-
+ | **参数成员** | **描述** | + |---------------------------------|---------------------------------------------------| + | string id | sandbox的ID | + | PodSandboxMetadata metadata | sandbox的元数据 | + | PodSandboxState state | sandbox的状态值 | + | int64 created_at | sandbox的创建时间戳,单位纳秒 | + | map\ labels | 可用于标识单个或一系列sandbox的键值对 | + | map\ annotations | 存储任意信息的键值对,这些值是不可被runtime更改的 | - **KeyValue** @@ -775,166 +507,82 @@ ISulad使用的为pass使用的1.14版本API描述文件,与官方API略有出 封装ContainerState的数据结构 - - - - - - - - - -

参数成员

-

描述

-

ContainerState state

-

容器状态值

-
+ | **参数成员** | **描述** | + |----------------------|------------| + | 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只支持完全匹配,不支持正则匹配

-
+ | **参数成员** | **描述** | + |------------------------------------|--------------------------------------------------------| + | string id | container的ID | + | PodSandboxStateValue state | container的状态 | + | string pod_sandbox_id | sandbox的ID | + | map\ 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容器资源的特定配置 + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

参数成员

描述

+

描述

Capability capabilities

+

int64 cpu_period

新增或去除的权能

+

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

bool privileged

+

int64 cpu_quota

指定容器是否未特权模式, 缺省值:false

+

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

NamespaceOption namespace_options

+

int64 cpu_shares

指定容器的namespace选项

+

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

SELinuxOption selinux_options

+

int64 memory_limit_in_bytes

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

+

内存限制(字节)。 缺省值:0

Int64Value run_as_user

+

int64 oom_score_adj

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

+

OOMScoreAdj用于调整oom-killer。 缺省值:0

string run_as_username

+

string cpuset_cpus

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

+

指定容器使用的CPU核心。 缺省值:“”

bool readonly_rootfs

+

string cpuset_mems

设置容器中根文件系统是否为只读 缺省值由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容器资源的特定配置 - - - - - - - - - - - - - - - - - - - - - - - - - @@ -944,44 +592,14 @@ ISulad使用的为pass使用的1.14版本API描述文件,与官方API略有出 Image信息描述一个镜像的基本数据。 - -

参数成员

-

描述

-

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

-

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

+

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

- - - - - - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

string id

-

镜像ID

-

repeated string repo_tags

-

镜像tag 名称 repo_tags

-

repeated string repo_digests

-

镜像digest信息

-

uint64 size

-

镜像大小

-

Int64Value uid

-

镜像默认用户UID

-

string username

-

镜像默认用户名称

-
+ | **参数成员** | **描述** | + |------------------------------|------------------------| + | string id | 镜像ID | + | repeated string repo_tags | 镜像tag 名称 repo_tags | + | repeated string repo_digests | 镜像digest信息 | + | uint64 size | 镜像大小 | + | Int64Value uid | 镜像默认用户UID | + | string username | 镜像默认用户名称 | - **ImageSpec** @@ -1023,34 +641,12 @@ ISulad使用的为pass使用的1.14版本API描述文件,与官方API略有出 - **FilesystemUsage** - - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

int64 timestamp

-

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

-

StorageIdentifier storage_id

-

存储镜像的文件系统UUID

-

UInt64Value used_bytes

-

存储镜像元数据的大小

-

UInt64Value inodes_used

-

存储镜像元数据的inodes个数

-
+ | **参数成员** | **描述** | + |------------------------------|----------------------------| + | int64 timestamp | 收集文件系统信息时的时间戳 | + | StorageIdentifier storage_id | 存储镜像的文件系统UUID | + | UInt64Value used_bytes | 存储镜像元数据的大小 | + | UInt64Value inodes_used | 存储镜像元数据的inodes个数 | - **AuthConfig** @@ -1097,149 +693,39 @@ ISulad使用的为pass使用的1.14版本API描述文件,与官方API略有出 用于描述容器信息,例如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更改的

-
+ | **参数成员** | **描述** | + |---------------------------------|-------------------------------------------------------------| + | 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\ labels | 可用于标识单个或一系列container的键值对 | + | map\ 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文件夹下

-
+ | **参数成员** | **描述** | + |---------------------------------|---------------------------------------------------------------------------| + | 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\ labels | 可用于标识单个或一系列container的键值对 | + | map\ annotations | 存储任意信息的键值对,这些值是不可被runtime更改的 | + | repeated Mount mounts | 容器的挂载点信息 | + | string log_path | 容器日志文件路径,该文件位于PodSandboxConfig中配置的log_directory文件夹下 | - **ContainerStatsFilter** @@ -1274,69 +760,23 @@ ISulad使用的为pass使用的1.14版本API描述文件,与官方API略有出 用于列出container stats时添加过滤条件,多个条件取交集显示 - - - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

ContainerAttributes attributes

-

容器的信息

-

CpuUsage cpu

-

CPU使用情况

-

MemoryUsage memory

-

内存使用情况

-

FilesystemUsage writable_layer

-

可写层使用情况

-
+ | **参数成员** | **描述** | + |--------------------------------|----------------| + | 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更改的

-
+ | **参数成员** | **描述** | + |--------------------------------|---------------------------------------------------| + | string id | 容器的ID | + | ContainerMetadata metadata | 容器的metadata | + | map\ labels | 可用于标识单个或一系列container的键值对 | + | map\ annotations | 存储任意信息的键值对,这些值是不可被runtime更改的 | - **CpuUsage** @@ -1389,211 +829,103 @@ ISulad使用的为pass使用的1.14版本API描述文件,与官方API略有出 - **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

+

int64 timestamp

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

+

时间戳

map<string, string> labels

+

StorageIdentifier storage_id

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

+

可写层目录

map<string, string> annotations

+

UInt64Value used_bytes

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

+

镜像在可写层的占用字节

string log_path

+

UInt64Value inodes_used

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

+

镜像在可写层的占用inode数

bool stdin

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

参数成员

是否打开容器的stdin

+

描述

bool stdin_once

+

string container_path

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

+

容器内的挂载路径

bool tty

+

string host_path

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

+

主机上的挂载路径

LinuxContainerConfig linux

+

string permissions

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

+

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

-- **NetworkConfig** +- **LinuxContainerConfig** + + 包含特定于Linux平台的配置 - Runtime的网络配置 + | **参数成员** | **描述** | + |------------------------------------------------|-------------------------| + | LinuxContainerResources resources | 容器的资源规范 | + | LinuxContainerSecurityContext security_context | 容器的Linux容器安全配置 | - - - - - - - - -

参数成员

-

描述

-

string pod_cidr

-

Pod IP 地址使用的CIDR

-
+- **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\ labels | 可用于索引和选择单个资源的键值对。 | + | map\ annotations | 可用于存储和检索任意元数据的非结构化键值映射。 | + | string log_path | 相对于PodSandboxConfig.LogDirectory的路径,用于存储容器主机上的日志(STDOUT和STDERR)。 | + | bool stdin | 是否打开容器的stdin | + | bool stdin_once | 当某次连接stdin的数据流断开时,是否立即断开其他与stdin连接的数据流 **(暂不支持)** | + | bool tty | 是否使用伪终端连接容器的stdio | + | LinuxContainerConfig linux | linux系统上容器的特定配置信息 | - **RuntimeConfig** Runtime的网络配置 - - - - - - - - -

参数成员

-

描述

-

NetworkConfig network_config

-

Runtime的网络配置

-
+ | **参数成员** | **描述** | + |------------------------------|-------------------| + | NetworkConfig network_config | Runtime的网络配置 | - **RuntimeCondition** @@ -1669,24 +1001,10 @@ rpc RunPodSandbox(RunPodSandboxRequest) returns (RunPodSandboxResponse) {} #### 参数 - - - - - - - - - - - -

参数成员

-

描述

-

PodSandboxConfig config

-

sandbox的配置

-

string runtime_handler

-

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

-
+| **参数成员** | **描述** | +|-------------------------|-----------------------------------------------------------------------| +| PodSandboxConfig config | sandbox的配置 | +| string runtime_handler | 指定创建sandbox的runtime运行时,当前支持lcr、kata-runtime运行时类型。 | #### 返回值 @@ -1832,24 +1150,10 @@ rpc PodSandboxStatus(PodSandboxStatusRequest) returns (PodSandboxStatusResponse) #### 返回值 - - - - - - - - - - - -

返回值

-

描述

-

PodSandboxStatus status

-

sandbox的状态信息

-

map<string, string> info

-

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

-
+| **返回值** | **描述** | +|--------------------------|------------------------------------------------------------------------------------------------------------------------------------------| +| PodSandboxStatus status | sandbox的状态信息 | +| map\ info | sandbox的额外信息,key是任意string,value是json格式的字符串,这些信息可以是任意调试内容。当verbose为true时info不能为空。(暂不支持配置) | #### ListPodSandbox @@ -1865,35 +1169,15 @@ rpc ListPodSandbox(ListPodSandboxRequest) returns (ListPodSandboxResponse) {} #### 参数 - - - - - - - - -

参数成员

-

描述

-

PodSandboxFilter filter

-

条件过滤参数

-
+| **参数成员** | **描述** | +|-------------------------|--------------| +| PodSandboxFilter filter | 条件过滤参数 | #### 返回值 - - - - - - - - -

返回值

-

描述

-

repeated PodSandbox items

-

sandbox信息的列表

-
+| **返回值** | **描述** | +|---------------------------|-------------------| +| repeated PodSandbox items | sandbox信息的列表 | #### CreateContainer @@ -1915,29 +1199,11 @@ rpc CreateContainer(CreateContainerRequest) returns (CreateContainerResponse) {} #### 参数 - - - - - - - - - - - - - - -

参数成员

-

描述

-

string pod_sandbox_id

-

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

-

ContainerConfig config

-

容器的配置信息

-

PodSandboxConfig sandbox_config

-

PodSandbox的配置信息

-
+| **参数成员** | **描述** | +|---------------------------------|------------------------------------| +| string pod_sandbox_id | 待在其中创建容器的PodSandbox的ID。 | +| ContainerConfig config | 容器的配置信息 | +| PodSandboxConfig sandbox_config | PodSandbox的配置信息 | #### 补充 @@ -2102,35 +1368,15 @@ rpc ListContainers(ListContainersRequest) returns (ListContainersResponse) {} #### 参数 - - - - - - - - -

参数成员

-

描述

-

ContainerFilter filter

-

条件过滤参数

-
+| **参数成员** | **描述** | +|------------------------|--------------| +| ContainerFilter filter | 条件过滤参数 | #### 返回值 - - - - - - - - -

返回值

-

描述

-

repeated Container containers

-

容器信息的列表

-
+| **返回值** | **描述** | +|-------------------------------|----------------| +| repeated Container containers | 容器信息的列表 | #### ContainerStatus @@ -2167,24 +1413,10 @@ rpc ContainerStatus(ContainerStatusRequest) returns (ContainerStatusResponse) {} #### 返回值 - - - - - - - - - - - -

返回值

-

描述

-

ContainerStatus status

-

容器的状态信息

-

map<string, string> info

-

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

-
+| **返回值** | **描述** | +|--------------------------|------------------------------------------------------------------------------------------------------------------------------------------| +| ContainerStatus status | 容器的状态信息 | +| map\ info | sandbox的额外信息,key是任意string,value是json格式的字符串,这些信息可以是任意调试内容。当verbose为true时info不能为空。(暂不支持配置) | #### UpdateContainerResources @@ -2205,24 +1437,10 @@ rpc UpdateContainerResources(UpdateContainerResourcesRequest) returns (UpdateCon #### 参数 - - - - - - - - - - - -

参数成员

-

描述

-

string container_id

-

容器id

-

LinuxContainerResources linux

-

linux资源配置信息

-
+| **参数成员** | **描述** | +|-------------------------------|-------------------| +| string container_id | 容器id | +| LinuxContainerResources linux | linux资源配置信息 | #### 返回值 @@ -2463,19 +1681,9 @@ rpc ContainerStats(ContainerStatsRequest) returns (ContainerStatsResponse) {} #### 返回值 - - - - - - - - -

返回值

-

描述

-

ContainerStats stats

-

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

-
+| **返回值** | **描述** | +|----------------------|---------------------------------------------------------| +| ContainerStats stats | 容器信息。
注:disk和inodes只支持oci格式镜像起的容器查询 | #### ListContainerStats @@ -2491,35 +1699,15 @@ rpc ListContainerStats(ListContainerStatsRequest) returns (ListContainerStatsRes #### 参数 - - - - - - - - -

参数成员

-

描述

-

ContainerStatsFilter filter

-

条件过滤参数

-
+| **参数成员** | **描述** | +|-----------------------------|--------------| +| ContainerStatsFilter filter | 条件过滤参数 | #### 返回值 - - - - - - - - -

返回值

-

描述

-

repeated ContainerStats stats

-

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

-
+| **返回值** | **描述** | +|-------------------------------|-----------------------------------------------------------------| +| repeated ContainerStats stats | 容器信息的列表。注:disk和inodes只支持oci格式镜像启动的容器查询 | #### UpdateRuntimeConfig @@ -2539,19 +1727,9 @@ rpc UpdateRuntimeConfig(UpdateRuntimeConfigRequest) returns (UpdateRuntimeConfig #### 参数 - - - - - - - - -

参数成员

-

描述

-

RuntimeConfig runtime_config

-

包含Runtime要配置的信息

-
+| **参数成员** | **描述** | +|------------------------------|-------------------------| +| RuntimeConfig runtime_config | 包含Runtime要配置的信息 | #### 返回值 @@ -2591,24 +1769,10 @@ rpc Status(StatusRequest) returns (StatusResponse) {}; #### 返回值 - - - - - - - - - - - -

返回值

-

描述

-

RuntimeStatus status

-

Runtime的状态

-

map<string, string> info

-

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

-
+| **返回值** | **描述** | +|--------------------------|-------------------------------------------------------------------------------------------------------------| +| RuntimeStatus status | Runtime的状态 | +| map\ info | Runtime额外的信息,info的key为任意值,value为json格式,可包含任何debug信息;只有Verbose为true是才应该被赋值 | ### Image服务 @@ -2635,35 +1799,15 @@ rpc ListImages(ListImagesRequest) returns (ListImagesResponse) {} #### 参数 - - - - - - - - -

参数成员

-

描述

-

ImageSpec filter

-

筛选的镜像名称

-
+| **参数成员** | **描述** | +|------------------|----------------| +| ImageSpec filter | 筛选的镜像名称 | #### 返回值 - - - - - - - - -

返回值

-

描述

-

repeated Image images

-

镜像信息列表

-
+| **返回值** | **描述** | +|-----------------------|--------------| +| repeated Image images | 镜像信息列表 | #### ImageStatus @@ -2684,45 +1828,17 @@ rpc ImageStatus(ImageStatusRequest) returns (ImageStatusResponse) {} #### 参数 - - - - - - - - - - - -

参数成员

-

描述

-

ImageSpec image

-

镜像名称

-

bool verbose

-

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

-
+| **参数成员** | **描述** | +|-----------------|----------------------------------------| +| ImageSpec image | 镜像名称 | +| bool verbose | 查询额外信息,暂不支持,无额外信息返回 | #### 返回值 - - - - - - - - - - - -

返回值

-

描述

-

Image image

-

镜像信息

-

map<string, string> info

-

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

-
+| **返回值** | **描述** | +|--------------------------|----------------------------------------| +| Image image | 镜像信息 | +| map\ info | 镜像额外信息,暂不支持,无额外信息返回 | #### PullImage @@ -2742,29 +1858,11 @@ rpc ImageStatus(ImageStatusRequest) returns (ImageStatusResponse) {} #### 参数 - - - - - - - - - - - - - - -

参数成员

-

描述

-

ImageSpec image

-

要下载的镜像名称

-

AuthConfig auth

-

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

-

PodSandboxConfig sandbox_config

-

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

-
+| **参数成员** | **描述** | +|---------------------------------|-----------------------------------| +| ImageSpec image | 要下载的镜像名称 | +| AuthConfig auth | 下载私有镜像时的验证信息 | +| PodSandboxConfig sandbox_config | 在Pod上下文中下载镜像(暂不支持) | #### 返回值 @@ -2800,19 +1898,9 @@ rpc RemoveImage(RemoveImageRequest) returns (RemoveImageResponse) {} #### 参数 - - - - - - - - -

参数成员

-

描述

-

ImageSpec image

-

要删除的镜像名称或者ID

-
+| **参数成员** | **描述** | +|-----------------|------------------------| +| ImageSpec image | 要删除的镜像名称或者ID | #### 返回值 @@ -2840,19 +1928,9 @@ rpc ImageFsInfo(ImageFsInfoRequest) returns (ImageFsInfoResponse) {} #### 返回值 - - - - - - - - -

返回值

-

描述

-

repeated FilesystemUsage image_filesystems

-

镜像存储文件系统信息

-
+| **返回值** | **描述** | +|--------------------------------------------|----------------------| +| repeated FilesystemUsage image_filesystems | 镜像存储文件系统信息 | ### 约束 diff --git "a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/CRI-v1\346\216\245\345\217\243.md" b/docs/zh/docs/container_engine/isula_container_engine/cri_2.md similarity index 99% rename from "docs/zh/docs/ContainerEngine/iSulaContainerEngine/CRI-v1\346\216\245\345\217\243.md" rename to docs/zh/docs/container_engine/isula_container_engine/cri_2.md index 43b93852948f969d9eeccbbcc2939751f2b2d112..52f1df63d11dc6a8746d4308016b6f9b05316146 100644 --- "a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/CRI-v1\346\216\245\345\217\243.md" +++ b/docs/zh/docs/container_engine/isula_container_engine/cri_2.md @@ -5,8 +5,8 @@ CRI(Container Runtime Interface, 容器运行时接口)是kublet与容器引擎通信使用的主要协议。 在K8S 1.25及之前,K8S存在CRI v1alpha2 和 CRI V1两种版本的CRI接口,但从1.26开始,K8S仅提供对于CRI V1的支持。 -iSulad同时提供对[CRI v1alpha2](./CRI-v1alpha2接口.md)和CRI v1的支持, -对于CRI v1,iSulad支持[CRI v1alpha2](./CRI-v1alpha2接口.md)所述功能, +iSulad同时提供对[CRI v1alpha2](./cri.md)和CRI v1的支持, +对于CRI v1,iSulad支持[CRI v1alpha2](./cri.md)所述功能, 并提供对CRI V1中所定义新接口和字段的支持。 目前iSulad支持的CRI V1版本为1.29,对应官网描述API如下: diff --git a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/figures/zh-cn_image_0183048952.png b/docs/zh/docs/container_engine/isula_container_engine/figures/zh-cn_image_0183048952.png similarity index 100% rename from docs/zh/docs/ContainerEngine/iSulaContainerEngine/figures/zh-cn_image_0183048952.png rename to docs/zh/docs/container_engine/isula_container_engine/figures/zh-cn_image_0183048952.png diff --git "a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/\351\225\234\345\203\217\347\256\241\347\220\206.md" b/docs/zh/docs/container_engine/isula_container_engine/image_management.md similarity index 90% rename from "docs/zh/docs/ContainerEngine/iSulaContainerEngine/\351\225\234\345\203\217\347\256\241\347\220\206.md" rename to docs/zh/docs/container_engine/isula_container_engine/image_management.md index 5824b3bf6bf347b0833e2302509ba6333c48bb83..df14898899ee847c67ed2e55e2607a0406a1b319 100644 --- "a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/\351\225\234\345\203\217\347\256\241\347\220\206.md" +++ b/docs/zh/docs/container_engine/isula_container_engine/image_management.md @@ -1,25 +1,5 @@ # 镜像管理 - - -- [镜像管理](#镜像管理) - - [docker镜像管理](#docker镜像管理) - - [登录到镜像仓库](#登录到镜像仓库) - - [从镜像仓库退出登录](#从镜像仓库退出登录) - - [从镜像仓库拉取镜像](#从镜像仓库拉取镜像) - - [删除镜像](#删除镜像) - - [加载镜像](#加载镜像) - - [列出镜像](#列出镜像) - - [检视镜像](#检视镜像) - - [双向认证](#双向认证) - - [embedded镜像管理](#embedded镜像管理) - - [加载镜像](#加载镜像-1) - - [列出镜像](#列出镜像-1) - - [检视镜像](#检视镜像-1) - - [删除镜像](#删除镜像-1) - - - ## docker镜像管理 ### 登录到镜像仓库 @@ -30,7 +10,7 @@ isula login命令用于登录到镜像仓库。登录成功后可以使用isula #### 用法 -```bash +```sh isula login [OPTIONS] SERVER ``` @@ -40,7 +20,7 @@ login命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表1 #### 示例 -```bash +```sh $ isula login -u abc my.csp-edge.com:5000 Login Succeeded @@ -54,7 +34,7 @@ isula logout命令用于从镜像仓库退出登录。退出登录成功后再 #### 用法 -```bash +```sh isula logout SERVER ``` @@ -64,7 +44,7 @@ logout命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表 #### 示例 -```bash +```sh $ isula logout my.csp-edge.com:5000 Logout Succeeded ``` @@ -77,7 +57,7 @@ Logout Succeeded #### 用法 -```bash +```sh isula pull [OPTIONS] NAME[:TAG] ``` @@ -87,7 +67,7 @@ login命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表3 #### 示例 -```bash +```sh $ isula pull localhost:5000/official/busybox Image "localhost:5000/official/busybox" pulling Image "localhost:5000/official/busybox@sha256:bf510723d2cd2d4e3f5ce7e93bf1e52c8fd76831995ac3bd3f90ecc866643aff" pulled @@ -101,7 +81,7 @@ Image "localhost:5000/official/busybox@sha256:bf510723d2cd2d4e3f5ce7e93bf1e52c8f #### 用法 -```bash +```sh isula rmi [OPTIONS] IMAGE [IMAGE...] ``` @@ -111,7 +91,7 @@ rmi命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表4 r #### 示例 -```bash +```sh $ isula rmi rnd-dockerhub.huawei.com/official/busybox Image "rnd-dockerhub.huawei.com/official/busybox" removed ``` @@ -124,7 +104,7 @@ tag命令用于添加镜像标签 #### 用法 -```bash +```sh isula tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG] ``` @@ -134,7 +114,7 @@ tag命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表8 t #### 示例 -```bash +```sh $ isula tag busybox:latest test:latest ``` @@ -146,7 +126,7 @@ $ isula tag busybox:latest test:latest #### 用法 -```bash +```sh isula load [OPTIONS] ``` @@ -156,7 +136,7 @@ load命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表5 #### 示例 -```bash +```sh $ isula load -i busybox.tar Load image from "/root/busybox.tar" success ``` @@ -169,7 +149,7 @@ Load image from "/root/busybox.tar" success #### 用法 -```bash +```sh isula images [OPTIONS] ``` @@ -179,7 +159,7 @@ images命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表 #### 示例 -```bash +```sh $ isula images REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest beae173ccac6 2021-12-31 03:19:41 1.184MB @@ -193,7 +173,7 @@ busybox latest beae173ccac6 202 #### 用法 -```bash +```sh isula inspect [options] CONTAINER|IMAGE [CONTAINER|IMAGE...] ``` @@ -203,7 +183,7 @@ inspect命令支持参数请参见"附录 > 命令行参数说明" 章节的 " #### 示例 -```bash +```sh $ isula inspect -f "{{json .image.id}}" rnd-dockerhub.huawei.com/official/busybox "e4db68de4ff27c2adfea0c54bbb73a61a42f5b667c326de4d7d5b19ab71c6a3b" ``` @@ -229,7 +209,7 @@ $ isula inspect -f "{{json .image.id}}" rnd-dockerhub.huawei.com/official/busybo 可以在/etc/isulad/daemon.json中配置参数,也可以在启动isulad时携带参数: -```bash +```sh isulad --use-decrypted-key=false ``` @@ -237,7 +217,7 @@ isulad --use-decrypted-key=false 配置use-decrypted-key参数为false -```bash +```sh $ cat /etc/isulad/daemon.json { "group": "isulad", @@ -279,7 +259,7 @@ $ cat /etc/isulad/daemon.json 将证书放到对应的目录下 -```bash +```sh $ pwd /etc/isulad/certs.d/my.csp-edge.com:5000 $ ls @@ -288,13 +268,13 @@ ca.crt tls.cert tls.key 重启isulad -```bash +```sh $ systemctl restart isulad ``` 执行pull命令从仓库下载镜像 -```bash +```sh $ 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 @@ -309,7 +289,7 @@ Image "my.csp-edge.com:5000/busybox@sha256:f1bdc62115dbfe8f54e52e19795ee34b4473b #### 用法 -```bash +```sh isula import file REPOSITORY[:TAG] ``` @@ -321,7 +301,7 @@ import命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表 #### 示例 -```bash +```sh $ isula import busybox.tar test sha256:441851e38dad32478e6609a81fac93ca082b64b366643bafb7a8ba398301839d $ isula images @@ -337,7 +317,7 @@ test latest 441851e38dad 2020-09-01 11:14:35 1.168 MB #### 用法 -```bash +```sh isula export [OPTIONS] [ID|NAME] ``` @@ -347,7 +327,7 @@ export命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表 #### 示例 -```bash +```sh $ isula run -tid --name container_test test sh d7e601c2ef3eb8d378276d2b42f9e58a2f36763539d3bfcaf3a0a77dc668064b $ isula export -o rootfs.tar d7e601c @@ -365,7 +345,7 @@ rootfs.tar #### 用法 -```bash +```sh isula load [OPTIONS] --input=FILE --type=TYPE ``` @@ -375,7 +355,7 @@ load命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表5 #### 示例 -```bash +```sh $ isula load -i test.manifest --type embedded Load image from "/root/work/bugfix/tmp/ci_testcase_data/embedded/img/test.manifest" success ``` @@ -388,7 +368,7 @@ Load image from "/root/work/bugfix/tmp/ci_testcase_data/embedded/img/test.manife #### 用法 -```bash +```sh isula images [OPTIONS] ``` @@ -398,7 +378,7 @@ images命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表 #### 示例 -```bash +```sh $ isula images REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest beae173ccac6 2021-12-31 03:19:41 1.184MB @@ -412,7 +392,7 @@ busybox latest beae173ccac6 202 #### 用法 -```bash +```sh isula inspect [options] CONTAINER|IMAGE [CONTAINER|IMAGE...] ``` @@ -422,7 +402,7 @@ inspect命令支持参数请参见"附录 > 命令行参数说明" 章节的 " #### 示例 -```bash +```sh $ isula inspect -f "{{json .created}}" test:v1 "2018-03-01T15:55:44.322987811Z" ``` @@ -435,7 +415,7 @@ $ isula inspect -f "{{json .created}}" test:v1 #### 用法 -```bash +```sh isula rmi [OPTIONS] IMAGE [IMAGE...] ``` @@ -445,7 +425,7 @@ rmi命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表4 r #### 示例 -```bash +```sh $ isula rmi test:v1 Image "test:v1" removed ``` @@ -458,7 +438,7 @@ Image "test:v1" removed #### 用法 -```bash +```sh isula tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG] ``` @@ -468,7 +448,7 @@ tag命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表8 t #### 示例 -```bash +```sh $ isula tag test:v1 test:v2 ``` @@ -480,7 +460,7 @@ $ isula tag test:v1 test:v2 #### 用法 -```bash +```sh isula export [command options] [ID|NAME] ``` @@ -490,6 +470,6 @@ export命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表 #### 示例 -```bash +```sh $ isula export -o test.tar containername ``` diff --git "a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/\345\256\211\350\243\205\344\270\216\351\205\215\347\275\256.md" b/docs/zh/docs/container_engine/isula_container_engine/installation_configuration.md similarity index 99% rename from "docs/zh/docs/ContainerEngine/iSulaContainerEngine/\345\256\211\350\243\205\344\270\216\351\205\215\347\275\256.md" rename to docs/zh/docs/container_engine/isula_container_engine/installation_configuration.md index 1321cfeead20d86f8d6ec331d67685b01e1692bf..9758f2a60e227ae6bcb47476676a7892ba899783 100644 --- "a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/\345\256\211\350\243\205\344\270\216\351\205\215\347\275\256.md" +++ b/docs/zh/docs/container_engine/isula_container_engine/installation_configuration.md @@ -1,7 +1,8 @@ # 安装与配置 本章介绍iSulad的安装、安装后配置,以及升级和卸载的方法。 -> ![](./public_sys-resources/icon-note.gif) **说明:** +> [!NOTE]说明 +> > iSulad的安装、升级、卸载均需要使用root权限。 ## 安装方法 @@ -16,7 +17,7 @@ iSulad可以通过yum或rpm命令两种方式安装,由于yum会自动安装 # sudo yum install -y iSulad ``` -- 使用rpm安装iSulad,需要下载iSulad及其所有依赖的RPM包,然后手动安装。安装单个iSulad的RPM包(依赖包安装方式相同),参考命令如下: +- 使用rpm安装iSulad,需要下载iSulad及其所有依赖库的RPM包,然后手动安装。安装单个iSulad的RPM包(依赖包安装方式相同),参考命令如下: ```bash # sudo rpm -ihv iSulad-xx.xx.xx-xx.xxx.aarch64.rpm @@ -30,8 +31,9 @@ iSulad 安装完成后,可以根据需要进行相关配置。 轻量级容器引擎(iSulad)服务端daemon为isulad,isulad可以通过配置文件进行配置,也可以通过命令行的方式进行配置,例如:isulad --xxx,优先级从高到低是:命令行方式\>配置文件\>代码中默认配置。 ->![](./public_sys-resources/icon-note.gif) **说明:** ->如果采用systemd管理iSulad进程,修改/etc/sysconfig/iSulad文件中的OPTIONS字段,等同于命令行方式进行配置。 +> [!NOTE]说明 +> +> 如果采用systemd管理iSulad进程,修改/etc/sysconfig/iSulad文件中的OPTIONS字段,等同于命令行方式进行配置。 - **命令行方式** @@ -60,7 +62,7 @@ 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-layer-check Check layer integrity when needed --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 @@ -544,7 +546,8 @@ iSulad 安装完成后,可以根据需要进行相关配置。 ``` - > ![](./public_sys-resources/icon-notice.gif) **须知:** + > [!TIP]须知 + > > 默认配置文件/etc/isulad/daemon.json仅供参考,请根据实际需要进行配置。 ### 存储说明 @@ -637,7 +640,8 @@ iSulad 安装完成后,可以根据需要进行相关配置。 - 日志文件管理: - > ![](./public_sys-resources/icon-notice.gif) **须知:** + > [!TIP]须知 + > > 日志功能对接: iSulad由systemd管理,日志也由systemd管理,然后传输给rsyslogd。rsyslog默认会对写日志速度有限制,可以通过修改/etc/rsyslog.conf文件,增加"$imjournalRatelimitInterval 0"配置项,然后重启rsyslogd的服务即可。 - 命令行参数解析限制 @@ -828,7 +832,7 @@ iSulad采用C/S模式进行设计,在默认情况,iSulad守护进程isulad 如果需要采用单向认证方式进行通讯,则服务端采用模式2,客户端采用模式2。 -> ![](./public_sys-resources/icon-notice.gif) **须知:** +> [!TIP]须知 > > - 采用RPM安装方式时,服务端配置可通过/etc/isulad/daemon.json以及/etc/sysconfig/iSulad配置修改。 > - 相比非认证或者单向认证方式,双向认证具备更高的安全性,推荐使用双向认证的方式进行通讯。 diff --git "a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/\345\256\211\350\243\205-\345\215\207\347\272\247\344\270\216\345\215\270\350\275\275.md" b/docs/zh/docs/container_engine/isula_container_engine/installation_upgrade_uninstallation.md similarity index 100% rename from "docs/zh/docs/ContainerEngine/iSulaContainerEngine/\345\256\211\350\243\205-\345\215\207\347\272\247\344\270\216\345\215\270\350\275\275.md" rename to docs/zh/docs/container_engine/isula_container_engine/installation_upgrade_uninstallation.md diff --git "a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/iSula-shim-v2\345\257\271\346\216\245stratovirt.md" b/docs/zh/docs/container_engine/isula_container_engine/interconnecting_isula_shim_v2_with_stratovirt.md old mode 100755 new mode 100644 similarity index 96% rename from "docs/zh/docs/ContainerEngine/iSulaContainerEngine/iSula-shim-v2\345\257\271\346\216\245stratovirt.md" rename to docs/zh/docs/container_engine/isula_container_engine/interconnecting_isula_shim_v2_with_stratovirt.md index 8fd9ec2e3582db9ef5246496b9bad7a28dcae581..845b80fe757a570d4423da89cb668122891bb009 --- "a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/iSula-shim-v2\345\257\271\346\216\245stratovirt.md" +++ b/docs/zh/docs/container_engine/isula_container_engine/interconnecting_isula_shim_v2_with_stratovirt.md @@ -115,7 +115,7 @@ iSula 对接 containerd-shim-kata-v2 前,需要满足如下前提: 若回显有如下信息,说明配置成功。 - ```text + ```sh Storage Driver: devicemapper ``` @@ -133,7 +133,7 @@ containerd-shim-kata-v2 使用的虚拟化组件为 QEMU 时,iSula 对接 cont sandbox_cgroup_with_emulator 需要设置为 false, 目前 shimv2 不支该改功能, 其他参数与 shim v1 中 kata 配置参数保持一致或者保持缺省值。 - ```conf + ```sh sandbox_cgroup_with_emulator = false ``` @@ -196,14 +196,14 @@ containerd-shim-kata-v2 使用的虚拟化组件为 StratoVirt 时,iSula 对 $ lsmod |grep vhost_vsock ``` - 下载对应版本和架构的 kernel 并放到 /var/lib/kata/ 路径下, 如下载 openEuler 21.03 版本 x86 架构的内核 [openeuler repo](): + 下载对应版本和架构的 kernel 并放到 /var/lib/kata/ 路径下, [openeuler repo](https://repo.openeuler.org/): ```bash $ cd /var/lib/kata - $ wget https://archives.openeuler.openatom.cn/openEuler-21.03/stratovirt_img/x86_64/vmlinux.bin + $ wget https://dl-cdn.openeuler.openatom.cn/openEuler-24.03-LTS-SP1/stratovirt_img/x86_64/vmlinux.bin ``` -3. 使用 busybox 镜像运行安全容器并检查使用的 runtime 为 io.containerd.kata.v2 +3. 使用 busybox 镜像运行安全容器并检查使用的 runtime 为 io.containerd.kata.v2 ```bash $ id=`isula run -tid busybox sh` diff --git "a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/\346\224\257\346\214\201CNI\347\275\221\347\273\234.md" b/docs/zh/docs/container_engine/isula_container_engine/interconnection_with_the_cni_network.md similarity index 99% rename from "docs/zh/docs/ContainerEngine/iSulaContainerEngine/\346\224\257\346\214\201CNI\347\275\221\347\273\234.md" rename to docs/zh/docs/container_engine/isula_container_engine/interconnection_with_the_cni_network.md index 5c683aeb92bd69eb15af55ba12c0c07b09166a87..8ceda130d345fb5c219e186449a4ed5380d16c03 100644 --- "a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/\346\224\257\346\214\201CNI\347\275\221\347\273\234.md" +++ b/docs/zh/docs/container_engine/isula_container_engine/interconnection_with_the_cni_network.md @@ -108,7 +108,7 @@ Pod配置中和网络相关的还有port\_mappings项,用于设置Pod的端口 StopPodSandbox的时候,会调用退出CNI网络的接口,清理网络相关的资源。 ->![](./public_sys-resources/icon-note.gif) **说明:** +>[!NOTE]说明 > > - 在调用RemovePodSandbox接口之前,至少要调用一次StopPodSandbox接口。 > - StopPodSandbox调用CNI接口失败,导致的网络资源残留,由CNI网络插件负责清理。 diff --git "a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/iSulad\346\224\257\346\214\201CDI.md" b/docs/zh/docs/container_engine/isula_container_engine/isulad_support_cdi.md similarity index 85% rename from "docs/zh/docs/ContainerEngine/iSulaContainerEngine/iSulad\346\224\257\346\214\201CDI.md" rename to docs/zh/docs/container_engine/isula_container_engine/isulad_support_cdi.md index d8bbd45676bf232bda8d30c409cd9d8f3e5d6501..739374de8cd4fe99bc2d5f22d05b2d705ca993db 100644 --- "a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/iSulad\346\224\257\346\214\201CDI.md" +++ b/docs/zh/docs/container_engine/isula_container_engine/isulad_support_cdi.md @@ -1,120 +1,120 @@ -# iSulad支持CDI - -## 概述 - -CDI(Container Device Interface,容器设备接口)是容器运行时的一种规范,用于支持第三方设备。 - -CDI解决了如下问题: -在Linux上,为了使容器具有设备感知能力,过去只需在该容器中暴露一个设备节点。但是,随着设备和软件变得越来越复杂,供应商希望执行更多的操作,例如: - -- 向容器公开设备可能需要公开多个设备节点、从运行时命名空间挂载文件或隐藏procfs条目。 -- 执行容器和设备之间的兼容性检查(例如:检查容器是否可以在指定设备上运行)。 -- 执行特定于运行时的操作(例如:虚拟机与基于Linux容器的运行时)。 -- 执行特定于设备的操作(例如:清理GPU的内存或重新配置FPGA)。 - -在缺乏第三方设备标准的情况下,供应商通常不得不为不同的运行时编写和维护多个插件,甚至直接在运行时中贡献特定于供应商的代码。此外,运行时不统一地暴露插件系统(甚至根本不暴露插件系统),导致在更高级别的抽象(例如Kubernetes设备插件)中重复功能。 - -CDI解决上述问题的方法: -CDI描述了一种允许第三方供应商与设备交互的机制,从而不需要更改容器运行时。 - -使用的机制是一个JSON文件(类似于容器网络接口(CNI)),它允许供应商描述容器运行时应该对容器的OCI规范执行的操作。 - -iSulad目前已支持[CDI v0.6.0](https://github.com/cncf-tags/container-device-interface/blob/v0.6.0/SPEC.md)规范。 - -## 配置iSulad支持CDI - -需要对daemon.json做如下配置,然后重启iSulad: - -```json -{ - ... - "enable-cri-v1": true, - "cdi-spec-dirs": ["/etc/cdi", "/var/run/cdi"], - "enable-cdi": true -} -``` - -其中"cdi-spec-dirs"用于指定CDI specs所在目录,如果不指定则默认为"/etc/cdi", "/var/run/cdi"。 - -## 使用示例 - -### CDI specification实例 - -具体每个字段含义详见[CDI v0.6.0](https://github.com/cncf-tags/container-device-interface/blob/v0.6.0/SPEC.md) - -```bash -$ mkdir /etc/cdi -$ cat > /etc/cdi/vendor.json < /etc/cdi/vendor.json < + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

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给容器添加特权模式,在非必要情况下,不要给容器添加特权,遵循最小特权原则,减少存在的安全风险。 + +```sh +isula run --rm -it --privileged busybox +``` diff --git "a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/\346\237\245\350\257\242\344\277\241\346\201\257.md" b/docs/zh/docs/container_engine/isula_container_engine/query_information.md similarity index 88% rename from "docs/zh/docs/ContainerEngine/iSulaContainerEngine/\346\237\245\350\257\242\344\277\241\346\201\257.md" rename to docs/zh/docs/container_engine/isula_container_engine/query_information.md index e6f485be203565724baadd5e59b77c4541bc8bd0..48e10e011d4e955e1d295a290ae8b1868c41cb5f 100644 --- "a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/\346\237\245\350\257\242\344\277\241\346\201\257.md" +++ b/docs/zh/docs/container_engine/isula_container_engine/query_information.md @@ -1,9 +1,5 @@ # 查询信息 -- [查询信息](#查询信息) - - [查询服务版本信息](#查询服务版本信息) - - [查询系统级信息](#查询系统级信息) - ## 查询信息 ## 查询服务版本信息 @@ -14,7 +10,7 @@ isula version 命令用于查询iSulad服务的版本信息。 ### 用法 -```bash +```shell isula version ``` @@ -22,13 +18,13 @@ isula version 查询版本信息 -```bash +```shell isula version ``` 如果isulad服务正常运行,则可以查看到客户端、服务端以及OCI config的版本等信息。 -```text +```shell Client: Version: 1.0.31 Git commit: fa7f9902738e8b3d7f2eb22768b9a1372ddd1199 @@ -46,7 +42,7 @@ OCI config: 若isulad服务未运行,则仅仅查询到客户端的信息,并提示无法连接到服务端。 -```text +```shell Client: Version: 1.0.31 Git commit: fa7f9902738e8b3d7f2eb22768b9a1372ddd1199 @@ -65,7 +61,7 @@ isula info命令用于对系统级信息,以及容器和镜像数目等信息 ### 用法 -```bash +```shell isula info ``` @@ -73,7 +69,7 @@ isula info 查询系统级信息,可以展示容器数目,镜像数目,内核版本、操作系统等信息 -```bash +```shell # isula info Containers: 2 Running: 0 @@ -82,7 +78,7 @@ Containers: 2 Images: 8 Server Version: 1.0.31 Logging Driver: json-file -Cgroup Driverr: cgroupfs +Cgroup Driver: cgroupfs Hugetlb Pagesize: 2MB Kernel Version: 4.19 Operating System: Fedora 29 (Twenty Nine) diff --git "a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/\345\256\211\345\205\250\347\211\271\346\200\247.md" b/docs/zh/docs/container_engine/isula_container_engine/security_features.md similarity index 95% rename from "docs/zh/docs/ContainerEngine/iSulaContainerEngine/\345\256\211\345\205\250\347\211\271\346\200\247.md" rename to docs/zh/docs/container_engine/isula_container_engine/security_features.md index a8b45fb43934d6719096f66e285105b03811348f..b43a097b44023e8357bfbe63a8c70a90689d682a 100644 --- "a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/\345\256\211\345\205\250\347\211\271\346\200\247.md" +++ b/docs/zh/docs/container_engine/isula_container_engine/security_features.md @@ -1,10 +1,5 @@ # 安全特性 -- [安全特性](#安全特性.md) - - [seccomp安全配置场景](#seccomp安全配置场景) - - [capabilities安全配置场景](#capabilities安全配置场景) - - [SELinux安全配置场景](#selinux安全配置场景) - ## seccomp安全配置场景 ### 场景说明 @@ -35,7 +30,7 @@ seccomp(**secure computing** **mode**)是linux kernel从2.6.23版本开始 isula run -itd --security-opt seccomp=/path/to/seccomp/profile.json rnd-dockerhub.huawei.com/official/busybox ``` -> ![](./public_sys-resources/icon-note.gif) **说明:** +> [!NOTE]说明 > > - 创建容器时通过--security-opt将配置文件传给容器时,采用默认配置文件(/etc/isulad/seccomp\_default.json)。 > - 创建容器时--security-opt设置为unconfined时,对容器不过滤系统调用。 @@ -121,7 +116,7 @@ isula run --rm -it --security-opt seccomp:/path/to/seccomp/profile.json rnd-dock } ``` -> ![](./public_sys-resources/icon-notice.gif) **须知:** +> [!TIP]须知 > > - defaultAction、syscalls:对应的action的类型是一样的,但其值是不能一样的,目的就是让所有的syscall都有一个默认的action,并且如果syscalls数组中有明确的定义,就以syscalls中的为准,由于defaultAction、action的值不一样,就能保证action不会有冲突。当前支持的action有: > - "SCMP\_ACT\_ERRNO":禁止,并打印错误信息。 @@ -203,7 +198,7 @@ SELinux\(Security-Enhanced Linux\)是一个Linux内核的安全模块,提供 - 引入SELinux会影响性能,设置SELinux之前需要对场景进行评估,确定必要时打开daemon端SELinux开关并设置容器SELinux配置 - 对挂载卷进行标签配置时,源目录不允许为/、/usr、/etc、/tmp、/home、/run、/var、/root以及/usr的子目录。 -> ![](./public_sys-resources/icon-note.gif) **说明:** +> [!NOTE]说明 > > - 目前iSulad不支持对容器的文件系统打标签,确保容器文件系统及配置目录打上容器可访问标签,需使用chcon命令对其打上标签。 > - 若iSulad启用SELinux访问控制,建议daemon启动前对/var/lib/isulad目录打上标签,容器容器创建时目录下生产的文件及文件夹将默认继承其标签,例如: diff --git "a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/\346\224\257\346\214\201OCI-hooks.md" b/docs/zh/docs/container_engine/isula_container_engine/supporting_oci_hooks.md similarity index 86% rename from "docs/zh/docs/ContainerEngine/iSulaContainerEngine/\346\224\257\346\214\201OCI-hooks.md" rename to docs/zh/docs/container_engine/isula_container_engine/supporting_oci_hooks.md index 00373d38356374fe90a49d674afddf75ca4edd3a..1c60bab92905d93a42d41fa4f983a7564b0d59b2 100644 --- "a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/\346\224\257\346\214\201OCI-hooks.md" +++ b/docs/zh/docs/container_engine/isula_container_engine/supporting_oci_hooks.md @@ -49,17 +49,17 @@ hook的配置为json格式,一般存放在json结尾的文件中,示例如 ## 接口 -isulad和isula都提供了hook的接口,isulad提供了默认的hook配置,会作用于所有容器;而isula提供的hook接口,只会作用于当前创建的容器。 +iSulad和iSula都提供了hook的接口,iSulad提供了默认的hook配置,会作用于所有容器;而iSula提供的hook接口,只会作用于当前创建的容器。 -isulad提供的默认OCI hooks配置: +iSulad提供的默认OCI hooks配置: - 通过/etc/isulad/daemon.json配置文件的hook-spec配置项设置hook配置的文件路径:"hook-spec": "/etc/default/isulad/hooks/default.json"。 -- 通过isulad --hook-spec参数设置hook配置的文件路径。 +- 通过iSulad --hook-spec参数设置hook配置的文件路径。 -isula提供的OCI hooks配置: +iSula提供的OCI hooks配置: -- isula create --hook-spec:指定hook配置的json文件的路径。 -- isula run --hook-spec:指定hook配置的json文件的路径。 +- iSula create --hook-spec:指定hook配置的json文件的路径。 +- iSula run --hook-spec:指定hook配置的json文件的路径。 run的配置其实也是在create阶段生效了。 diff --git "a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/\345\215\270\350\275\275.md" b/docs/zh/docs/container_engine/isula_container_engine/uninstallation.md similarity index 92% rename from "docs/zh/docs/ContainerEngine/iSulaContainerEngine/\345\215\270\350\275\275.md" rename to docs/zh/docs/container_engine/isula_container_engine/uninstallation.md index c7e5d64daa66f0149f9746963890a41241f3a075..55f883df1feb05e657d475351ea2faed7297e970 100644 --- "a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/\345\215\270\350\275\275.md" +++ b/docs/zh/docs/container_engine/isula_container_engine/uninstallation.md @@ -5,18 +5,18 @@ 1. 卸载iSulad及其依赖软件包 - 若使用yum方式安装,卸载的参考命令如下: - ```bash + ```sh # yum remove iSulad ``` - 若使用rpm方式安装,需卸载iSulad及其依赖包,卸载单个RPM包的参考命令如下: - ```bash + ```sh # rpm -e iSulad-xx.xx.xx-YYYYmmdd.HHMMSS.gitxxxxxxxx.aarch64.rpm ``` 2. 镜像、容器、volumes以及相关配置文件不会自动删除,需要手动删除。参考命令如下: - ```bash + ```sh # rm -rf /var/lib/iSulad ``` diff --git "a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/\345\215\207\347\272\247.md" b/docs/zh/docs/container_engine/isula_container_engine/upgrade_methods.md similarity index 32% rename from "docs/zh/docs/ContainerEngine/iSulaContainerEngine/\345\215\207\347\272\247.md" rename to docs/zh/docs/container_engine/isula_container_engine/upgrade_methods.md index 25b8aa7350f87927b8345be15264a9e9a47ccb6a..959624d090e49a493898ccc4af2e6257e890016a 100644 --- "a/docs/zh/docs/ContainerEngine/iSulaContainerEngine/\345\215\207\347\272\247.md" +++ b/docs/zh/docs/container_engine/isula_container_engine/upgrade_methods.md @@ -2,23 +2,31 @@ - 若为相同大版本之间的升级,例如从2.x.x版本升级到2.x.x版本,请执行如下命令: - ```bash + ```sh # sudo yum update -y iSulad ``` - 若为不同大版本之间的升级,例如从1.x.x版本升级到2.x.x版本,请先保存当前的配置文件/etc/isulad/daemon.json,并卸载已安装的iSulad软件包,然后安装待升级的iSulad软件包,随后恢复配置文件。 -> ![](./public_sys-resources/icon-note.gif) **说明:** +>![NOTE]说明 > > - 可通过**sudo rpm -qa |grep iSulad** 或 **isula version** 命令确认当前iSulad的版本号。 -> - 相同大版本之间,如果希望手动升级,请下载iSulad及其所有依赖库的RPM包进行升级,参考命令如下: +> - 相同大版本之间,如果希望手动升级,请下载iSulad及其所有依赖的RPM包进行升级,参考命令如下: > -> ```bash -> # sudo rpm -Uhv iSulad-xx.xx.xx-YYYYmmdd.HHMMSS.gitxxxxxxxx.aarch64.rpm -> ``` +> ```sh +> # sudo rpm -Uhv iSulad-xx.xx.xx-YYYYmmdd.HHMMSS.gitxxxxxxxx.aarch64.rpm +> ``` > -> 若升级失败,可通过--force选项进行强制升级,参考命令如下: +> 若升级失败,可通过--force选项进行强制升级,参考命令如下: > -> ```bash -> # sudo rpm -Uhv --force iSulad-xx.xx.xx-YYYYmmdd.HHMMSS.gitxxxxxxxx.aarch64.rpm -> ``` +> ```sh +> # sudo rpm -Uhv --force iSulad-xx.xx.xx-YYYYmmdd.HHMMSS.gitxxxxxxxx.aarch64.rpm +> ``` +> +> - 如若iSulad依赖的libisula组件发生升级,iSulad应该与对应版本的libisula一起升级,参考命令如下: +> +> ```sh +> # sudo rpm -Uvh libisula-xx.xx.xx-YYYYmmdd.HHMMSS.gitxxxxxxxx.aarch64.rpm iSulad-xx.xx.xx-YYYYmmdd.HHMMSS.gitxxxxxxxx.aarch64.rpm +> ``` +> +> - iSulad在openeuler 22.03-LTS-SP3之前的版本使用lcr作为默认容器运行时。因此,跨此版本升级时,在升级之前创建的容器仍是使用lcr作为容器运行时,只有在升级之后创建的容器才会采用新版本的默认运行时runc。若在新版本中仍需使用lcr容器运行时,需要修改isulad默认配置文件(默认为/etc/isulad/daemon.json)中的default-runtime为lcr或者在运行容器时指定容器运行时为lcr(--runtime lcr), 在升级时若对应的lcr、lxc版本发生升级,同样应该与iSulad一起升级。 diff --git a/docs/zh/docs/container_form/secure_container/_toc.yaml b/docs/zh/docs/container_form/secure_container/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..21b84ccdc103ade5c2925c1ab07c1c6b2fe20dff --- /dev/null +++ b/docs/zh/docs/container_form/secure_container/_toc.yaml @@ -0,0 +1,19 @@ +label: 安全容器 +isManual: true +description: 安全容器结合了虚拟化技术和容器技术,具有更好的隔离性 +sections: + - label: 概述 + href: ./overview.md + - label: 安装与配置 + href: ./installation_and_deployment_2.md + - label: 使用方法 + href: ./application_scenarios_2.md + sections: + - label: 管理安全容器的生命周期 + href: ./managing_the_lifecycle_of_a_secure_container.md + - label: 为安全容器配置资源 + href: ./configuring_resources_for_a_secure_container.md + - label: 监控安全容器 + href: ./monitoring_secure_containers.md + - label: 附录 + href: ./appendix_2.md diff --git a/docs/zh/docs/ContainerForm/SecureContainer/appendix-2.md b/docs/zh/docs/container_form/secure_container/appendix_2.md similarity index 99% rename from docs/zh/docs/ContainerForm/SecureContainer/appendix-2.md rename to docs/zh/docs/container_form/secure_container/appendix_2.md index 0e722af74202d9394125b136e5863352132ad6c0..4fd2bf3ad64a83f21dd902cd39a5d253dbb278fa 100644 --- a/docs/zh/docs/ContainerForm/SecureContainer/appendix-2.md +++ b/docs/zh/docs/container_form/secure_container/appendix_2.md @@ -1,13 +1,10 @@ # 附录 -- [附录](#附录) - - [configuration.toml配置说明](#configuration-toml配置说明) - - [接口列表](#接口列表) - ## configuration-toml配置说明 ->![](./public_sys-resources/icon-note.gif) **说明:** ->configuration.toml配置文件中各个字段的取值以kata-containers-.rpm包中的configuration.toml文件为准,不支持用户对配置文件中的字段任意取值。 +> [!NOTE]说明 +> +> configuration.toml配置文件中各个字段的取值以kata-containers-.rpm包中的configuration.toml文件为准,不支持用户对配置文件中的字段任意取值。 ```conf [hypervisor.qemu] diff --git "a/docs/zh/docs/ContainerForm/SecureContainer/\344\275\277\347\224\250\346\226\271\346\263\225-1.md" b/docs/zh/docs/container_form/secure_container/application_scenarios_2.md similarity index 62% rename from "docs/zh/docs/ContainerForm/SecureContainer/\344\275\277\347\224\250\346\226\271\346\263\225-1.md" rename to docs/zh/docs/container_form/secure_container/application_scenarios_2.md index 1b6f532057d170ff342b2a78fb43466cadf48411..8e7f74d9d9cc150a8be98731787b0b398bee8e23 100644 --- "a/docs/zh/docs/ContainerForm/SecureContainer/\344\275\277\347\224\250\346\226\271\346\263\225-1.md" +++ b/docs/zh/docs/container_form/secure_container/application_scenarios_2.md @@ -1,5 +1,5 @@ # 使用方法 本章介绍安全容器的使用方法。 ->![](./public_sys-resources/icon-note.gif) **说明:** +>![NOTE]说明 >安全容器的使用需要root权限。 diff --git "a/docs/zh/docs/ContainerForm/SecureContainer/\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/docs/zh/docs/container_form/secure_container/configuring_resources_for_a_secure_container.md similarity index 90% rename from "docs/zh/docs/ContainerForm/SecureContainer/\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" rename to docs/zh/docs/container_form/secure_container/configuring_resources_for_a_secure_container.md index ffbccd64a756a4a1e5e3265babb3686fe0c81656..c822271b5a639adc13fa9491a10bf56d971b30d6 100644 --- "a/docs/zh/docs/ContainerForm/SecureContainer/\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/docs/zh/docs/container_form/secure_container/configuring_resources_for_a_secure_container.md @@ -1,13 +1,8 @@ # 为安全容器配置资源 -- [为安全容器配置资源](#为安全容器配置资源) - - [资源共享](#资源共享-27) - - [限制资源](#限制资源) - - [热插拔限制内存资源](#热插拔限制内存资源) - 安全容器运行于虚拟化隔离的轻量级虚拟机内,因此资源的配置应分为两部分:对轻量级虚拟机的资源配置,即Host资源配置;对虚拟机内容器的配置,即Guest容器资源配置。以下资源配置均分为这两部分。 -## 资源共享-27 +## 资源共享 由于安全容器运行于虚拟化隔离的轻量虚拟机内,故无法访问Host上某些namespace下的资源,因此启动时不支持--net host,--ipc host,--pid host,--uts host。 diff --git a/docs/zh/docs/ContainerForm/SecureContainer/figures/kata-arch.png b/docs/zh/docs/container_form/secure_container/figures/kata-arch.png similarity index 100% rename from docs/zh/docs/ContainerForm/SecureContainer/figures/kata-arch.png rename to docs/zh/docs/container_form/secure_container/figures/kata-arch.png diff --git a/docs/zh/docs/ContainerForm/SecureContainer/figures/zh_cn_image_0221924928.png b/docs/zh/docs/container_form/secure_container/figures/zh_cn_image_0221924928.png similarity index 100% rename from docs/zh/docs/ContainerForm/SecureContainer/figures/zh_cn_image_0221924928.png rename to docs/zh/docs/container_form/secure_container/figures/zh_cn_image_0221924928.png diff --git "a/docs/zh/docs/ContainerForm/SecureContainer/\345\256\211\350\243\205\344\270\216\351\205\215\347\275\256-2.md" b/docs/zh/docs/container_form/secure_container/installation_and_deployment_2.md similarity index 88% rename from "docs/zh/docs/ContainerForm/SecureContainer/\345\256\211\350\243\205\344\270\216\351\205\215\347\275\256-2.md" rename to docs/zh/docs/container_form/secure_container/installation_and_deployment_2.md index a76b864619a3b754baf139a7935a21e286422659..6934b46c60855536478767ab5da3fdc4cc4f0859 100644 --- "a/docs/zh/docs/ContainerForm/SecureContainer/\345\256\211\350\243\205\344\270\216\351\205\215\347\275\256-2.md" +++ b/docs/zh/docs/container_form/secure_container/installation_and_deployment_2.md @@ -1,24 +1,20 @@ # 安装与配置 -- [安装与配置](#安装部署.md) - - [安装方法](#安装方法) - - [配置方法](#配置方法) - ## 安装方法 ### 前提条件 - 安全容器的安装需要使用root权限。 - 为了获取更好的性能体验,安全容器需要运行在裸金属服务器上,**暂不支持安全容器运行在虚拟机内**。 -- 安全容器运行依赖以下组件,请确保环境上已安装所需版本的依赖组件。以下组件来自配套的openEuler版本。如果使用iSula容器引擎,请参考iSula容器引擎的[安装与配置](./安装与配置.md)章节安装iSulad。 +- 安全容器运行依赖以下组件,请确保环境上已安装所需版本的依赖组件。以下组件来自配套的openEuler版本。如果使用iSula容器引擎,请参考iSula容器引擎的[安装与配置](../../container_engine/isula_container_engine/installation_configuration.md)章节安装iSulad。 - docker-engine - qemu ### 安装操作 -安全容器发布组件集成在同一个`kata-containers-.rpm`包中,使用rpm命令可以直接安装对应的软件,其中version为版本号。 +安全容器发布组件集成在同一个kata-containers-<_version_\>.rpm包中,使用rpm命令可以直接安装对应的软件,其中version为版本号。 -```bash +```sh rpm -ivh kata-containers-.rpm ``` @@ -31,7 +27,7 @@ rpm -ivh kata-containers-.rpm 1. 请保证环境上所有的软件包(docker-engine、kata-containers)都已经安装完毕。 2. 停止docker-engine。 - ```bash + ```sh systemctl stop docker ``` @@ -53,7 +49,7 @@ rpm -ivh kata-containers-.rpm 4. 重新启动docker-engine。 - ```bash + ```sh systemctl start docker ``` @@ -64,13 +60,13 @@ rpm -ivh kata-containers-.rpm 1. 请保证环境上所有的软件包(iSulad、kata-containers)都已经安装完毕。 2. 停止isulad。 - ```bash + ```sh systemctl stop isulad ``` 3. 修改iSula容器引擎的配置文件/etc/isulad/daemon.json,并新增如下配置: - ```conf + ```sh { "runtimes": { "kata-runtime": { @@ -86,7 +82,7 @@ rpm -ivh kata-containers-.rpm 4. 重新启动isulad。 - ```bash + ```sh systemctl start isulad ``` diff --git "a/docs/zh/docs/ContainerForm/SecureContainer/\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/docs/zh/docs/container_form/secure_container/managing_the_lifecycle_of_a_secure_container.md similarity index 78% rename from "docs/zh/docs/ContainerForm/SecureContainer/\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" rename to docs/zh/docs/container_form/secure_container/managing_the_lifecycle_of_a_secure_container.md index dd329f14f086c2ea5be6f3de15b28d5ca1004e34..4e9158c26468e9c830d17d88cba650d4d9886187 100644 --- "a/docs/zh/docs/ContainerForm/SecureContainer/\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/docs/zh/docs/container_form/secure_container/managing_the_lifecycle_of_a_secure_container.md @@ -1,11 +1,5 @@ # 管理安全容器的生命周期 -- [管理安全容器的生命周期](#管理安全容器的生命周期) - - [启动安全容器](#启动安全容器) - - [停止安全容器](#停止安全容器) - - [删除安全容器](#删除安全容器) - - [在容器中执行一条新的命令](#在容器中执行一条新的命令) - ## 启动安全容器 用户可以使用docker-engine或者iSulad作为安全容器的容器引擎,两者的调用方式类似,请用户自行选择一种方式启动安全容器。 @@ -15,45 +9,45 @@ 1. 确保安全容器组件已经正确安装部署。 2. 准备容器镜像。假设容器镜像为busybox,使用docker-engine和iSula容器引擎下载容器镜像的命令分别如下: - ```bash + ```sh docker pull busybox ``` - ```bash + ```sh isula pull busybox ``` 3. 启动一个安全容器。使用docker-engine和iSula容器引擎启动安全容器的命令分别如下: - ```bash + ```sh docker run -tid --runtime kata-runtime --network none busybox ``` - ```bash + ```sh isula run -tid --runtime kata-runtime --network none busybox ``` - > ![](./public_sys-resources/icon-note.gif) **说明:** - > 安全容器网络使用仅支持CNI网络,不支持CNM网络,不支持使用-p和--expose暴露容器端口,使用安全容器时需指定参数--net=none。 + >![NOTE]说明 + >安全容器网络使用仅支持CNI网络,不支持CNM网络,不支持使用-p和--expose暴露容器端口,使用安全容器时需指定参数--net=none。 4. 启动一个Pod 1. 启动pause容器并根据回显获取pod的sandbox-id。使用docker-engine和iSula容器引擎启动的命令分别如下: - ```bash + ```sh docker run -tid --runtime kata-runtime --network none --annotation io.kubernetes.docker.type=podsandbox ``` - ```bash + ```sh isula run -tid --runtime kata-runtime --network none --annotation io.kubernetes.cri.container-type=sandbox ``` 2. 创建业务容器并加入到这个pod中。使用docker-engine和iSula容器引擎创建的命令分别如下: - ```bash + ```sh docker run -tid --runtime kata-runtime --network none --annotation io.kubernetes.docker.type=container --annotation io.kubernetes.sandbox.id= busybox ``` - ```bash + ```sh isula run -tid --runtime kata-runtime --network none --annotation io.kubernetes.cri.container-type=container --annotation io.kubernetes.cri.sandbox-id= busybox ``` @@ -63,7 +57,7 @@ - 停止一个安全容器。 - ```bash + ```sh docker stop ``` @@ -75,13 +69,13 @@ 删除前请确保容器已经停止: -```bash +```sh docker rm ``` 如果需要强制删除一个正在运行的容器,可以使用**-f**强制删除: -```bash +```sh docker rm -f ``` @@ -89,11 +83,11 @@ docker rm -f 由于pause容器仅作为占位容器,如果启动一个Pod时,请在业务容器内执行新的命令,pause容器并没有相应的指令;如果只启动一个容器时,则可以直接执行新增命令: -```bash +```sh docker exec -ti ``` -> ![](./public_sys-resources/icon-note.gif) **说明:** +>![NOTE]说明 > -> - 如遇到docker exec -ti进入容器的同时,另一终端执行docker restart或者docker stop命令造成exec界面卡住的情况,可使用Ctrl+P+Q退出docker exec操作界面。 -> - 如果使用-d参数则命令在后台执行,不会打印错误信息,其退出码也不能作为命令执行是否正确的判断依据。 +> - 如遇到docker exec -ti进入容器的同时,另一终端执行docker restart或者docker stop命令造成exec界面卡住的情况,可使用Ctrl+P+Q退出docker exec操作界面。 +> - 如果使用-d参数则命令在后台执行,不会打印错误信息,其退出码也不能作为命令执行是否正确的判断依据。 diff --git "a/docs/zh/docs/ContainerForm/SecureContainer/\347\233\221\346\216\247\345\256\211\345\205\250\345\256\271\345\231\250.md" b/docs/zh/docs/container_form/secure_container/monitoring_secure_containers.md similarity index 99% rename from "docs/zh/docs/ContainerForm/SecureContainer/\347\233\221\346\216\247\345\256\211\345\205\250\345\256\271\345\231\250.md" rename to docs/zh/docs/container_form/secure_container/monitoring_secure_containers.md index 5f728428d80839c62d4d14c405f18f7aab673539..4bf7b5fe482c4c5e8f15113bd7d7544bfde5640c 100644 --- "a/docs/zh/docs/ContainerForm/SecureContainer/\347\233\221\346\216\247\345\256\211\345\205\250\345\256\271\345\231\250.md" +++ b/docs/zh/docs/container_form/secure_container/monitoring_secure_containers.md @@ -6,7 +6,7 @@ kata 2.x中移除了kata-runtime events命令,代之以kata-runtime metrics命 ## 用法 -```bash +```sh kata-runtime metrics ``` @@ -20,7 +20,7 @@ sandbox id为长id,要查询的容器状态必须为running,否则报错:G ## 示例 -```bash +```shell $ kata-runtime metrics e2270357d23f9d3dd424011e1e70aa8defb267d813c3d451db58f35aeac97a04 # HELP go_gc_duration_seconds A summary of the pause duration of garbage collection cycles. diff --git "a/docs/zh/docs/ContainerForm/SecureContainer/\345\256\211\345\205\250\345\256\271\345\231\250.md" b/docs/zh/docs/container_form/secure_container/overview.md similarity index 96% rename from "docs/zh/docs/ContainerForm/SecureContainer/\345\256\211\345\205\250\345\256\271\345\231\250.md" rename to docs/zh/docs/container_form/secure_container/overview.md index 92975c0f36d6d6107b7f798e4ed00748b81c9a18..0d2f9ea8469bbc05c8e2dcb5992ef6e5486528a1 100644 --- "a/docs/zh/docs/ContainerForm/SecureContainer/\345\256\211\345\205\250\345\256\271\345\231\250.md" +++ b/docs/zh/docs/container_form/secure_container/overview.md @@ -22,5 +22,5 @@ **图 2** 安全容器与周边组件的关系 ![](./figures/zh_cn_image_0221924928.png) ->![](./public_sys-resources/icon-note.gif) **说明:** +>![NOTE]说明 >安全容器的安装和使用需要使用root权限。 diff --git a/docs/zh/docs/container_form/system_container/_toc.yaml b/docs/zh/docs/container_form/system_container/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..3cde0247cdb375e51542177ff446a8ca7d41c8ea --- /dev/null +++ b/docs/zh/docs/container_form/system_container/_toc.yaml @@ -0,0 +1,36 @@ +label: 系统容器 +isManual: true +description: 解决在重计算、高性能、大并发的场景下,重型应用和业务云化的问题 +sections: + +- label: 概述 + href: ./overview.md +- label: 安装指导 + href: ./installation_guideline.md +- label: 使用指南 + href: ./usage_guide.md + sections: + - label: 指定rootfs创建容器 + href: ./specifying_rootfs_to_create_a_container.md + - label: 通过systemd启动容器 + href: ./using_systemd_to_start_a_container.md + - label: 容器内reboot/shutdown + href: ./reboot_or_shutdown_in_a_container.md + - label: cgroup路径可配置 + href: ./configurable_cgroup_path.md + - label: namespace化内核参数可写 + href: ./writable_namespace_kernel_parameters.md + - label: 共享内存通道 + href: ./shared_memory_channels.md + - label: 动态加载内核模块 + href: ./dynamically_loading_the_kernel_module.md + - label: 环境变量持久化 + href: ./environment_variable_persisting.md + - label: 最大句柄数限制 + href: ./maximum_number_of_handles.md + - label: 安全性和隔离性 + href: ./security_and_isolation.md + - label: 容器资源动态管理 + href: ./dynamically_managing_container_resources_syscontainer_tools.md +- label: 附录 + href: ./appendix_1.md diff --git a/docs/zh/docs/container_form/system_container/appendix_1.md b/docs/zh/docs/container_form/system_container/appendix_1.md new file mode 100644 index 0000000000000000000000000000000000000000..ef017b6b1415e120119e6d90ee372b38f70f49c7 --- /dev/null +++ b/docs/zh/docs/container_form/system_container/appendix_1.md @@ -0,0 +1,89 @@ +# 附录 + +## 命令行接口列表 + +此处仅列出系统容器与普通容器的差异命令,其他命令用户可以查阅iSulad容器引擎相关章节,或者执行isula XXX --help进行查询。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

命令

+

参数

+

参数指定值说明

+

isula create/run

+

--external-rootfs

+
  • 字符串变量。
  • 宿主机某个绝对路径。
  • 运行系统容器时,必须使用此参数指定特定虚拟机的rootfs。
+

--system-container

+
  • 布尔变量。
  • 指定某个容器是否属于系统容器,如果是系统容器场景,必须使能。
+

--add-host

+
  • 字符串变量。
  • 格式为:<hostname>:<ip>,指定容器的hosts配置,可以指定多个参数。
+

--dns,--dns-option,--dns-search

+
  • 字符串变量。
  • 可以指定多个,指定容器的dns配置。
+

--ns-change-opt

+
  • 字符串变量。
  • 容器namespace化内核参数可修改选项,参数只能为net或ipc,如果指定多个,用逗号隔开,例如--ns-change-opt=net,ipc。
+

--oom-kill-disable

+
  • 布尔变量。
  • 表示是否打开oom-kill-disable功能。
+

--shm-size

+
  • 字符串变量。
  • 设置/dev/shm大小,默认64MB。 支持单位B(b)、K(k)、M(m)、G(g)、T(t)、P(p)。
+

--sysctl

+
  • 字符串变量。
  • 指定容器内核参数值,格式为key=value,可传入多个,sysctl白名单如下:
+

kernel.msgmax,kernel.msgmnb,kernel.msgmni,kernel.sem,kernel.shmall,kernel.shmmax,kernel.shmmni, kernel.shm_rmid_forced,kernel.pid_max,net.,fs.mqueue。

+
说明:

容器内kernel.pid_max参数需要内核支持pid_max namespace化,否则会报错。

+

容器内sysctl白名单参数值限制与物理机对应的内核参数限制保持一致(包括参数类型、参数取值范围等)。

+
+

--env-target-file

+
  • 字符串变量。
  • 指定env持久化文件路径(路径必须为绝对路径,且文件必须在rootfs目录下),文件如果存在不能超过10MB,如果--env和文件里面的env出现冲突,--env指定值生效。
  • 绝对路径的根目录/为rootfs根目录,,即要指定文件路径为容器内/etc/environment,只用指定env-target-file=/etc/environment,而不是env-target-file=/path/of/root-fs/etc/environment。
+

--cgroup-parent

+
  • 字符串变量。
  • 指定容器的cgroup父目录,cgroup根路径为/sys/fs/cgroup/<controller>。
+

--host-channel

+
  • 字符串变量。
  • 指定宿主机和容器共享内存空间(tmpfs),格式为:
+

<host path>:<container path>:<rw/ro>:<size limit>

+

--files-limit

+
  • 字符串变量。
  • 整数值,指定容器内文件句柄数最大值。
+

--user-remap

+
  • 字符串变量。
  • 参数格式为:<uid>:<gid>:<offset>
+
diff --git a/docs/zh/docs/ContainerForm/SystemContainer/configurable-cgroup-path.md b/docs/zh/docs/container_form/system_container/configurable_cgroup_path.md similarity index 63% rename from docs/zh/docs/ContainerForm/SystemContainer/configurable-cgroup-path.md rename to docs/zh/docs/container_form/system_container/configurable_cgroup_path.md index e8d6d6d201544e8b3035eaddb26dfc80fce90e9a..3465df9c44432586b677e065b072acd6eafebfe1 100644 --- a/docs/zh/docs/ContainerForm/SystemContainer/configurable-cgroup-path.md +++ b/docs/zh/docs/container_form/system_container/configurable_cgroup_path.md @@ -7,19 +7,19 @@ ## 参数说明 -

命令

+ - - - - - @@ -28,19 +28,19 @@ 除了通过命令行指定单个系统容器对应的cgroup父路径外,还可通过修改iSulad容器引擎启动配置文件,指定所有容器的cgroup路径。 -

命令

参数

+

参数

参数指定值说明

+

参数指定值说明

isula create/run

+

isula create/run

--cgroup-parent

+

--cgroup-parent

  • 字符串变量。
  • 指定容器cgroup父路径。
+
  • 字符串变量。
  • 指定容器cgroup父路径。

配置文件路径

+ - - - - - @@ -55,14 +55,14 @@ 启动系统容器,指定--cgroup-parent参数: -```bash +```sh [root@localhost ~]# isula run -tid --cgroup-parent /lxc/cgroup123 --system-container --external-rootfs /root/myrootfs none init 115878a4dfc7c5b8c62ef8a4b44f216485422be9a28f447a4b9ecac4609f332e ``` 查看容器init进程的cgroup信息: -```bash +```sh [root@localhost ~]# isula inspect -f "{{json .State.Pid}}" 11 22167 [root@localhost ~]# cat /proc/22167/cgroup diff --git a/docs/zh/docs/ContainerForm/SystemContainer/dynamically-loading-the-kernel-module.md b/docs/zh/docs/container_form/system_container/dynamically_loading_the_kernel_module.md similarity index 64% rename from docs/zh/docs/ContainerForm/SystemContainer/dynamically-loading-the-kernel-module.md rename to docs/zh/docs/container_form/system_container/dynamically_loading_the_kernel_module.md index bc376d79a84f1741129dba163fac758d4c494a75..d479fab66c3a5fbf58a611cd3a4d3803730b8afe 100644 --- a/docs/zh/docs/ContainerForm/SystemContainer/dynamically-loading-the-kernel-module.md +++ b/docs/zh/docs/container_form/system_container/dynamically_loading_the_kernel_module.md @@ -7,19 +7,19 @@ ## 参数说明 -

配置文件路径

配置项

+

配置项

配置项说明

+

配置项说明

/etc/isulad/daemon.json

+

/etc/isulad/daemon.json

--cgroup-parent

+

--cgroup-parent

  • 字符串变量。
  • 指定容器默认cgroup父路径。
  • 配置示例:"cgroup-parent": "/lxc/mycgroup"
+
  • 字符串变量。
  • 指定容器默认cgroup父路径。
  • 配置示例:"cgroup-parent": "/lxc/mycgroup"

命令

+ - - - - - @@ -35,7 +35,7 @@ 启动系统容器时,指定-e KERNEL\_MODULES参数,待系统容器启动后,可以看到ip\_vs模块被成功加载到内核中。 -```bash +```sh [root@localhost ~]# lsmod | grep ip_vs [root@localhost ~]# isula run -tid -e KERNEL_MODULES=ip_vs,ip_vs_wrr --hook-spec /etc/syscontainer-tools/hookspec.json --system-container --external-rootfs /root/myrootfs none init ae18c4281d5755a1e153a7bff6b3b4881f36c8e528b9baba8a3278416a5d0980 @@ -47,7 +47,7 @@ nf_defrag_ipv6 20480 2 nf_conntrack,ip_vs libcrc32c 16384 3 nf_conntrack,nf_nat,ip_vs ``` -> ![](./public_sys-resources/icon-note.gif) **说明:** +> [!NOTE]说明 > > - 宿主机需要安装syscontainer-tools。 > - 需要指定--hooks-spec为syscontainer hooks。 diff --git a/docs/zh/docs/ContainerForm/SystemContainer/dynamically-managing-container-resources-(syscontainer-tools).md b/docs/zh/docs/container_form/system_container/dynamically_managing_container_resources_syscontainer_tools.md similarity index 60% rename from docs/zh/docs/ContainerForm/SystemContainer/dynamically-managing-container-resources-(syscontainer-tools).md rename to docs/zh/docs/container_form/system_container/dynamically_managing_container_resources_syscontainer_tools.md index 73e25a3d0de7eb1efc3e2a6157cc05dedbb41a46..9f0e91a1c8b08654ddbe2567d711dc7fc537ff07 100644 --- a/docs/zh/docs/ContainerForm/SystemContainer/dynamically-managing-container-resources-(syscontainer-tools).md +++ b/docs/zh/docs/container_form/system_container/dynamically_managing_container_resources_syscontainer_tools.md @@ -33,61 +33,61 @@ ARG:命令对应的参数。 ### 参数说明 -

命令

参数

+

参数

参数指定值说明

+

参数指定值说明

isula create/run

+

isula create/run

-e KERNEL_MODULES=module_name1,module_name

+

-e KERNEL_MODULES=module_name1,module_name

  • 字符串变量。
  • 支持配置多个模块,模块名以逗号分隔。
+
  • 字符串变量。
  • 支持配置多个模块,模块名以逗号分隔。

命令

+ - - - - - - - - - - - - - - - - - - - @@ -166,43 +166,43 @@ container\_id:容器id。 ### 参数说明 -

命令

功能说明

+

功能说明

选项说明

+

选项说明

参数说明

+

参数说明

add-device

+

add-device

将宿主机块设备/字符设备添加到容器中。

+

将宿主机块设备/字符设备添加到容器中。

支持的选项如下:

+

支持的选项如下:

  • --blkio-weight-device:设置块设备IO权重(相对权重,10-100之间)。
  • --device-read-bps:设置块设备读取速率限制(byte/秒)。
  • --device-read-iops:设置块设备读取速率限制(IO/秒)。
  • --device-write-bps:设置块设备写入速率限制(byte/秒)。
  • --device-write-iops:设置块设备写入速率限制(IO/秒)。
  • --follow-partition:如果块设备是基础块设备(主SCSI块磁盘),加入此参数可以添加主磁盘下的所有分区。
  • --force:如果容器中已有块设备/字符设备,使用此参数覆盖旧的块设备/字符设备文件。
  • --update-config-only:只更新配置文件不实际做添加磁盘动作。

参数格式为:hostdevice[:containerdevice][:permission] [hostdevice[:containerdevice][:permission] ...]

+

参数格式为:hostdevice[:containerdevice][:permission] [hostdevice[:containerdevice][:permission] ...]

其中:

hostdevice:设备在主机上的路径。

containerdevice:设备在容器中的路径。

permission:容器内对设备的操作权限。

remove-device

+

remove-device

将块设备/字符设备从容器中删除,还原至宿主机。

+

将块设备/字符设备从容器中删除,还原至宿主机。

支持的选项如下:

+

支持的选项如下:

--follow-partition:如果块设备是基础块设备(主SCSI块磁盘),加入此参数可以删除容器中主磁盘下的所有分区,还原至宿主机。

参数格式为:hostdevice[:containerdevice] [hostdevice[:containerdevice] ...]

+

参数格式为:hostdevice[:containerdevice] [hostdevice[:containerdevice] ...]

其中:

hostdevice:设备在主机上的路径。

containerdevice:设备在容器中的路径。

list-device

+

list-device

列出容器中所有的块设备/字符设备。

+

列出容器中所有的块设备/字符设备。

支持的选项如下:

+

支持的选项如下:

  • --pretty:按照json格式输出。
  • --sub-partition:如果某磁盘为主磁盘,加入此flag,在显示主磁盘的同时,也显示主磁盘的子分区。

+

update-device

+

update-device

更新磁盘Qos。

+

更新磁盘Qos。

支持的选项如下:

+

支持的选项如下:

  • --device-read-bps:设置块设备读取速率限制(byte/秒),建议设置值大于等于1024。
  • --device-read-iops:设置块设备读取速率限制(IO/秒)。
  • --device-write-bps:设置块设备写入速率限制(byte/秒),建议设置值大于等于1024。
  • --device-write-iops:设置块设备写入速率限制(IO/秒)。

+

命令

+ - - - - - - - - - - - - - - @@ -243,8 +243,8 @@ container\_id:容器id。 Add network interface to container 2aaca5c1af7c (eth3,eth1) done ``` - > ![](./public_sys-resources/icon-note.gif) **说明:** - > 添加虚拟网卡或物理网卡时,请确保网卡处于空闲状态,添加正在使用的网卡会导致系统网络断开。 + >[!NOTE]说明 + >添加虚拟网卡或物理网卡时,请确保网卡处于空闲状态,添加正在使用的网卡会导致系统网络断开。 ## 路由管理 @@ -271,50 +271,50 @@ ARG:命令对应的参数。 ### 接口说明 -

命令

功能说明

+

功能说明

选项说明

+

选项说明

add-nic

+

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

+

remove-nic

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

+

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

支持的选项如下:

+

支持的选项如下:

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

list-nic

+

list-nic

列出容器中所有的网卡。

+

列出容器中所有的网卡。

支持的选项如下:

+

支持的选项如下:

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

update-nic

+

update-nic

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

+

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

支持的选项如下:

+

支持的选项如下:

  • --name:容器内网卡名(必须项)。
  • --ip:设置网卡IP地址。
  • --mac:设置网卡mac地址。
  • --bridge:设置网卡绑定的网桥。
  • --mtu:设置网卡的mtu值。
  • --update-config-only:如果此flag设置了,只更新配置文件,不会实际做更新网卡的动作。
  • --qlen:配置qlen值。

命令

+ - - - - - - - - - - - - - - - @@ -383,23 +383,23 @@ ARG:命令对应的参数。 ### 接口说明 -

命令

功能说明

+

功能说明

选项说明

+

选项说明

参数说明

+

参数说明

add-route

+

add-route

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

+

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

支持的选项如下:

+

支持的选项如下:

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

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

+

参数格式:[{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

+

remove-route

从容器中删除路由。

+

从容器中删除路由。

支持的选项如下:

+

支持的选项如下:

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

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

+

参数格式:[{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

+

list-route

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

+

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

支持的选项如下:

+

支持的选项如下:

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

+

命令

+ - - - - - - - - - - - - - - - diff --git a/docs/zh/docs/ContainerForm/SystemContainer/environment-variable-persisting.md b/docs/zh/docs/container_form/system_container/environment_variable_persisting.md similarity index 56% rename from docs/zh/docs/ContainerForm/SystemContainer/environment-variable-persisting.md rename to docs/zh/docs/container_form/system_container/environment_variable_persisting.md index 75a6507e207703a4aa371a9a2aa3fe8e3e273a28..7eeeb5c53da90134577f0627716f615c91907bc0 100644 --- a/docs/zh/docs/ContainerForm/SystemContainer/environment-variable-persisting.md +++ b/docs/zh/docs/container_form/system_container/environment_variable_persisting.md @@ -7,19 +7,19 @@ ## 参数说明 -

命令

功能说明

+

功能说明

选项说明

+

选项说明

参数说明

+

参数说明

add-path

+

add-path

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

+

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

+

参数格式为:

+

参数格式为:

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

其中:

hostdevice:卷在主机上的路径。

@@ -407,26 +407,26 @@ ARG:命令对应的参数。

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

remove-path

+

remove-path

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

+

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

+

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

+

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

其中:

hostdevice:卷在主机上的路径。

containerdevice:卷在容器中的路径。

list-path

+

list-path

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

+

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

支持的选项如下:

+

支持的选项如下:

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

+

命令

+ - - - - - @@ -35,7 +35,7 @@ 启动系统容器,指定env环境变量和--env-target-file参数: -```bash +```sh [root@localhost ~]# isula run -tid -e abc=123 --env-target-file /etc/environment --system-container --external-rootfs /root/myrootfs none init b75df997a64da74518deb9a01d345e8df13eca6bcc36d6fe40c3e90ea1ee088e [root@localhost ~]# isula exec b7 cat /etc/environment diff --git a/docs/zh/docs/ContainerForm/SystemContainer/installation-guideline.md b/docs/zh/docs/container_form/system_container/installation_guideline.md similarity index 80% rename from docs/zh/docs/ContainerForm/SystemContainer/installation-guideline.md rename to docs/zh/docs/container_form/system_container/installation_guideline.md index 145f758c35adf10f6c8a35baf3e531c2075afcae..30c03ebbb641e3eee94d83b581a47403ae8666de 100644 --- a/docs/zh/docs/ContainerForm/SystemContainer/installation-guideline.md +++ b/docs/zh/docs/container_form/system_container/installation_guideline.md @@ -1,29 +1,29 @@ # 安装指导 ->![](./public_sys-resources/icon-note.gif) **说明:** +>[!NOTE]说明 >系统容器的安装需要使用root权限。 1. 首先需要安装iSulad容器引擎。 - ```bash + ```sh # yum install iSulad ``` 2. 安装系统容器依赖包。 - ```bash + ```sh # yum install syscontainer-tools authz lxcfs-tools lxcfs ``` 3. 查看iSulad是否已经启动。 - ```bash + ```sh # systemctl status isulad ``` 4. 开启lxcfs和authz服务。 - ```bash + ```sh # systemctl start lxcfs # systemctl start authz ``` diff --git a/docs/zh/docs/ContainerForm/SystemContainer/maximum-number-of-handles.md b/docs/zh/docs/container_form/system_container/maximum_number_of_handles.md similarity index 61% rename from docs/zh/docs/ContainerForm/SystemContainer/maximum-number-of-handles.md rename to docs/zh/docs/container_form/system_container/maximum_number_of_handles.md index 227197b882c82a41348c1b08d5c47a9595c89b78..4b2a928cde8b5e1a3597f33cba4c6e3eafb3aafc 100644 --- a/docs/zh/docs/ContainerForm/SystemContainer/maximum-number-of-handles.md +++ b/docs/zh/docs/container_form/system_container/maximum_number_of_handles.md @@ -7,20 +7,20 @@ ## 参数说明 -

命令

参数

+

参数

参数指定值说明

+

参数指定值说明

isula create/run

+

isula create/run

--env-target-file

+

--env-target-file

  • 字符串变量。
  • env持久化文件必须在rootfs目录下,且配置为绝对路径。
+
  • 字符串变量。
  • env持久化文件必须在rootfs目录下,且配置为绝对路径。

命令

+ - - - - - @@ -35,7 +35,7 @@ 使用\--files-limit限制容器内打开文件句柄数需要内核支持files cgroup,可以执行以下命令查看: -```bash +```sh [root@localhost ~]# cat /proc/1/cgroup | grep files 10:files:/ ``` @@ -44,7 +44,7 @@ 容器启动指定--files-limit参数,并检查files.limit参数是否成功写入: -```bash +```sh [root@localhost ~]# isula run -tid --files-limit 1024 --system-container --external-rootfs /tmp/root-fs empty init 01e82fcf97d4937aa1d96eb8067f9f23e4707b92de152328c3fc0ecb5f64e91d [root@localhost ~]# isula exec -it 01e82fcf97d4 bash [root@localhost ~]# cat /sys/fs/cgroup/files/files.limit diff --git a/docs/zh/docs/ContainerForm/SystemContainer/system-container.md b/docs/zh/docs/container_form/system_container/overview.md similarity index 100% rename from docs/zh/docs/ContainerForm/SystemContainer/system-container.md rename to docs/zh/docs/container_form/system_container/overview.md diff --git a/docs/zh/docs/ContainerForm/SystemContainer/reboot-or-shutdown-in-a-container.md b/docs/zh/docs/container_form/system_container/reboot_or_shutdown_in_a_container.md similarity index 66% rename from docs/zh/docs/ContainerForm/SystemContainer/reboot-or-shutdown-in-a-container.md rename to docs/zh/docs/container_form/system_container/reboot_or_shutdown_in_a_container.md index 37fb5386d605a45be16d467873ca8ad73881418c..10d6944a56e2cf9bfea0bfcf1e73c7c586c873a5 100644 --- a/docs/zh/docs/ContainerForm/SystemContainer/reboot-or-shutdown-in-a-container.md +++ b/docs/zh/docs/container_form/system_container/reboot_or_shutdown_in_a_container.md @@ -7,19 +7,19 @@ ## 参数说明 -

命令

参数

+

参数

参数指定值说明

+

参数指定值说明

isula create/run

+

isula create/run

--files-limit

+

--files-limit

  

  • 整数值,不能为负数。
  • 指定为0表示不受限制,最大值限制由当前内核files cgroup决定。
+
  • 整数值,不能为负数。
  • 指定为0表示不受限制,最大值限制由当前内核files cgroup决定。

命令

+ - - - - - @@ -36,21 +36,21 @@ - 容器启动时指定\--restart on-reboot参数,示例如下: - ```bash + ```sh [root@localhost ~]# isula run -tid --restart on-reboot --system-container --external-rootfs /root/myrootfs none init 106faae22a926e22c828a0f2b63cf5c46e5d5986ea8a5b26de81390d0ed9714f ``` - 进入容器执行reboot命令: - ```bash + ```sh [root@localhost ~]# isula exec -it 10 bash [root@localhost /]# reboot ``` 查看容器是否重启: - ```bash + ```sh [root@localhost ~]# isula exec -it 10 ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.1 0.0 21588 9504 ? Ss 12:11 0:00 init @@ -62,7 +62,7 @@ - 进入容器执行shutdown命令: - ```bash + ```sh [root@localhost ~]# isula exec -it 10 bash [root@localhost /]# shutdown -h now [root@localhost /]# [root@localhost ~]# @@ -70,7 +70,7 @@ 检查容器是否停止: - ```bash + ```sh [root@localhost ~]# isula exec -it 10 bash Error response from daemon: Exec container error;Container is not running:106faae22a926e22c828a0f2b63cf5c46e5d5986ea8a5b26de81390d0ed9714f ``` diff --git a/docs/zh/docs/ContainerForm/SystemContainer/security-and-isolation.md b/docs/zh/docs/container_form/system_container/security_and_isolation.md similarity index 72% rename from docs/zh/docs/ContainerForm/SystemContainer/security-and-isolation.md rename to docs/zh/docs/container_form/system_container/security_and_isolation.md index 57b4c54c1d6698431e3cbf0af889bc39e7f6fee3..eeb0ff1c893d64f5c9e43ca05f4ab2ff4317e148 100644 --- a/docs/zh/docs/ContainerForm/SystemContainer/security-and-isolation.md +++ b/docs/zh/docs/container_form/system_container/security_and_isolation.md @@ -1,10 +1,5 @@ # 安全性和隔离性 -- [安全性和隔离性](#安全性和隔离性) - - [user namespace多对多](#user-namespace多对多) - - [用户权限控制](#用户权限控制) - - [proc文件系统隔离](#proc文件系统隔离) - ## user-namespace多对多 ### 功能描述 @@ -16,19 +11,19 @@ user namespace是将容器的root映射到主机的普通用户,使得容器 ### 参数说明 -

命令

参数

+

参数

参数指定值说明

+

参数指定值说明

isula create/run

+

isula create/run

--restart

+

--restart

  • 字符串变量。
  • 可取指定值:

    on-reboot:表示重启系统容器。

    +
  • 字符串变量。
  • 可取指定值:

    on-reboot:表示重启系统容器。

      

命令

+ - - - - - @@ -48,14 +43,14 @@ user namespace是将容器的root映射到主机的普通用户,使得容器 ### 使用指导 ->![](./public_sys-resources/icon-note.gif) **说明:** +>[!NOTE]说明 >指定--user-remap参数前,请先将rootfs下所有目录和文件的uid和gid做整体偏移,偏移量为--user-remap指定uid和gid的偏移量。 >例如将dev目录的uid和gid整体uid和gid偏移100000的参考命令为: >chown 100000:100000 dev 系统容器启动指定--user-remap参数: -```bash +```sh [root@localhost ~]# chmod 751 /var/lib/isulad/ [root@localhost ~]# chmod 751 /var/lib/isulad/engines/ [root@localhost ~]# chmod 751 /var/lib/isulad/engines/lcr @@ -65,7 +60,7 @@ eb9605b3b56dfae9e0b696a729d5e1805af900af6ce24428fde63f3b0a443f4a 分别在宿主机和容器内查看/sbin/init进程信息: -```bash +```sh [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 @@ -77,7 +72,7 @@ root 4948 0.0 0.0 213032 808 pts/0 S+ 15:48 0:00 grep --color=au 在容器内创建一个文件,然后在宿主机上查看文件的owner: -```bash +```sh [root@localhost ~]# isula exec -it eb bash [root@localhost /]# echo test123 >> /test123 [root@localhost /]# exit @@ -99,19 +94,19 @@ exit 通过配置iSulad容器引擎启动参数来指定权限控制插件,daemon配置文件默认为/etc/isulad/daemon.json。 -

命令

参数

+

参数

参数指定值说明

+

参数指定值说明

isula create/run

+

isula create/run

--user-remap

+

--user-remap

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

+

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

  • uid、gid为整数型,且必须大于等于0。
  • offset为整数型,且必须大于0,并且小于65536。取值不能太小,否则容器无法启动。
  • uid加上offset的值必须小于等于232-1,gid加上offset的值必须小于等于232-1,否则容器启动会报错。

配置参数

+ - - - - - @@ -129,14 +124,14 @@ exit 1. 确认宿主机安装了authz插件,如果需要安装,安装并启动authz插件服务命令如下: - ```bash + ```sh [root@localhost ~]# yum install authz [root@localhost ~]# systemctl start authz ``` 2. 要启动该功能,首先需要配置容器引擎和用户的TLS证书。可以使用OPENSSL来生成需要的证书,具体步骤如下: - ```bash + ```sh #SERVERSIDE # Generate CA key @@ -166,7 +161,7 @@ exit 3. 容器引擎启动时添加TLS相关参数和认证插件相关参数,并保证认证插件的运行。此外,为了使用TLS认证,容器引擎必须使用TCP侦听的方式启动,不能使用传统的unix socket的方式启动。容器daemon端配置如下: - ```conf + ```con { "tls": true, "tls-verify": true, @@ -189,20 +184,20 @@ exit - 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不能有重复用户,即同一用户不能被多条规则匹配。 + >[!NOTE]说明 + >- 配置中匹配action支持正则表达式。 + >- users不支持正则表达式。 + >- users不能有重复用户,即同一用户不能被多条规则匹配。 5. 配置并更新完之后,客户端配置TLS参数连接容器引擎,即是以受限的权限访问。 - ```bash + ```sh [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)。 - ```bash + ```sh [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 @@ -221,47 +216,47 @@ exit lxcfs-tools命令行格式如下: -```bash +```sh lxcfs-tools [OPTIONS] COMMAND [COMMAND_OPTIONS] ``` -

配置参数

示例

+

示例

说明

+

说明

--authorization-plugin

+

--authorization-plugin

"authorization-plugin": "authz-broker"

+

"authorization-plugin": "authz-broker"

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

+

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

命令

+ - - - - - - - - - - - - - - @@ -288,14 +283,14 @@ lxcfs-tools [OPTIONS] COMMAND [COMMAND_OPTIONS] 1. 首先需要安装lxcfs和lxcfs-tools这两个包,并启动lxcfs服务。 - ```bash + ```sh [root@localhost ~]# yum install lxcfs lxcfs-tools [root@localhost ~]# systemctl start lxcfs ``` 2. 容器启动完成之后查看容器内是否存在lxcfs挂载点。 - ```bash + ```sh [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 @@ -311,7 +306,7 @@ lxcfs-tools [OPTIONS] COMMAND [COMMAND_OPTIONS] 3. 执行update命令更新容器的cpu和mem资源配置,然后查看容器资源。根据如下回显可知,容器资源视图显示的是容器真实资源数据而不是宿主机的数据。 - ```bash + ```sh [root@localhost ~]# isula update --cpuset-cpus 0-1 --memory 1G a8 a8 [root@localhost ~]# isula exec a8 cat /proc/cpuinfo diff --git a/docs/zh/docs/ContainerForm/SystemContainer/shared-memory-channels.md b/docs/zh/docs/container_form/system_container/shared_memory_channels.md similarity index 69% rename from docs/zh/docs/ContainerForm/SystemContainer/shared-memory-channels.md rename to docs/zh/docs/container_form/system_container/shared_memory_channels.md index 3c1dd9464d726a7eb671fd7675dc037e6f2a2e78..68e9a48c29dbd9b465cc74491a4ee6e2f8877c67 100644 --- a/docs/zh/docs/ContainerForm/SystemContainer/shared-memory-channels.md +++ b/docs/zh/docs/container_form/system_container/shared_memory_channels.md @@ -7,19 +7,19 @@ ## 参数说明 -

命令

功能说明

+

功能说明

参数

+

参数

remount

+

remount

将lxcfs重新mount到容器中

+

将lxcfs重新mount到容器中

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

+

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

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

umount

+

umount

将lxcfs从容器中umount掉

+

将lxcfs从容器中umount掉

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

+

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

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

check-lxcfs

+

check-lxcfs

检查lxcfs服务是否运行

+

检查lxcfs服务是否运行

+

prestart

+

prestart

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

+

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

+

命令

+ - - - - -

命令

参数

+

参数

参数指定值说明

+

参数指定值说明

isula create/run

+

isula create/run

--host-channel

+

--host-channel

  • 字符串变量,格式为:
    <host path>:<container path>:<rw/ro>:<size limit>
    +
  • 字符串变量,格式为:
    <host path>:<container path>:<rw/ro>:<size limit>
  • 参数说明如下:

    <host path>:将在宿主机上挂载tmpfs的路径,必须是绝对路径。

    <container path>:将在容器内挂载tmpfs的路径,必须是绝对路径。

    <rw/ro>:在容器内挂载的文件系统的使用权限,只能配置为rw(可读写)或ro(只读),默认为rw。

    @@ -40,7 +40,7 @@ 创建容器时指定\--host-channel参数: -```bash +```sh [root@localhost ~]# isula run --rm -it --host-channel /testdir:/testdir:rw:32M --system-container --external-rootfs /root/myrootfs none init root@3b947668eb54:/# dd if=/dev/zero of=/testdir/test.file bs=1024 count=64K dd: error writing '/testdir/test.file': No space left on device @@ -49,7 +49,7 @@ dd: error writing '/testdir/test.file': No space left on device 33554432 bytes (34 MB, 32 MiB) copied, 0.0766899 s, 438 MB/s ``` -> ![](./public_sys-resources/icon-note.gif) **说明:** +> [!NOTE]说明 > > - 使用--host-channel大小限制时,若在容器内创建共享文件,则会受到容器内的内存配额限制(在容器内存使用达到极限时可能会产生oom)。 > - 若用户在主机端创建共享文件,则不受容器内的内存配额限制。 diff --git a/docs/zh/docs/ContainerForm/SystemContainer/specifying-rootfs-to-create-a-container.md b/docs/zh/docs/container_form/system_container/specifying_rootfs_to_create_a_container.md similarity index 59% rename from docs/zh/docs/ContainerForm/SystemContainer/specifying-rootfs-to-create-a-container.md rename to docs/zh/docs/container_form/system_container/specifying_rootfs_to_create_a_container.md index 2ce5e3086865d5c991e7a644b29c807943757d3c..fff0d4299ac5a1e06a50a407a83e3d4243593a9d 100644 --- a/docs/zh/docs/ContainerForm/SystemContainer/specifying-rootfs-to-create-a-container.md +++ b/docs/zh/docs/container_form/system_container/specifying_rootfs_to_create_a_container.md @@ -7,19 +7,19 @@ ## 参数说明 -

    命令

    + - - - - - @@ -37,9 +37,9 @@ 假设本地rootfs的路径为/root/myrootfs,那么启动一个系统容器的命令如下: -```bash +```sh # isula run -tid --system-container --external-rootfs /root/myrootfs none init ``` ->![](./public_sys-resources/icon-note.gif) **说明:** +>[!NOTE]说明 >rootfs为自定义的文件系统,请用户自行准备。例如容器镜像的tar包解压后,即为一个rootfs。 diff --git a/docs/zh/docs/ContainerForm/SystemContainer/usage-guide.md b/docs/zh/docs/container_form/system_container/usage_guide.md similarity index 93% rename from docs/zh/docs/ContainerForm/SystemContainer/usage-guide.md rename to docs/zh/docs/container_form/system_container/usage_guide.md index 941c53b858e5e08f9f0a886dbd798996f6670365..5ea4272b07a6ef1262c4d2a1ddcaf605f5c7311c 100644 --- a/docs/zh/docs/ContainerForm/SystemContainer/usage-guide.md +++ b/docs/zh/docs/container_form/system_container/usage_guide.md @@ -16,5 +16,5 @@ - COMMAND:系统容器启动后执行的命令。 - ARG:系统容器启动后执行命令对应的参数。 ->![](./public_sys-resources/icon-note.gif) **说明:** +>[!NOTE]说明 >系统容器的使用需要root权限。 diff --git a/docs/zh/docs/ContainerForm/SystemContainer/using-systemd-to-start-a-container.md b/docs/zh/docs/container_form/system_container/using_systemd_to_start_a_container.md similarity index 76% rename from docs/zh/docs/ContainerForm/SystemContainer/using-systemd-to-start-a-container.md rename to docs/zh/docs/container_form/system_container/using_systemd_to_start_a_container.md index 1eb74dae831358246d740739a30009b6a5a2620a..f1532c28c7a6071cfb02126b2d15fde74d331373 100644 --- a/docs/zh/docs/ContainerForm/SystemContainer/using-systemd-to-start-a-container.md +++ b/docs/zh/docs/container_form/system_container/using_systemd_to_start_a_container.md @@ -7,19 +7,19 @@ ## 参数说明 -

    命令

    参数

    +

    参数

    参数指定值说明

    +

    参数指定值说明

    isula create/run

    +

    isula create/run

    --external-rootfs

    +

    --external-rootfs

    • 字符串变量。
    • 容器根文件系统对应的绝对路径,即 rootfs 的路径。
    +
    • 字符串变量。
    • 容器根文件系统对应的绝对路径,即 rootfs 的路径。

    命令

    + - - - - - diff --git a/docs/zh/docs/ContainerForm/SystemContainer/writable-namespace-kernel-parameters.md b/docs/zh/docs/container_form/system_container/writable_namespace_kernel_parameters.md similarity index 81% rename from docs/zh/docs/ContainerForm/SystemContainer/writable-namespace-kernel-parameters.md rename to docs/zh/docs/container_form/system_container/writable_namespace_kernel_parameters.md index 4997867535adbe8d5f938ad1b46c04310c5ace48..3b98553c97c20155a4d7c24d5f707b2e9c83f6d8 100644 --- a/docs/zh/docs/ContainerForm/SystemContainer/writable-namespace-kernel-parameters.md +++ b/docs/zh/docs/container_form/system_container/writable_namespace_kernel_parameters.md @@ -13,19 +13,19 @@ ## 参数说明 -

    命令

    参数

    +

    参数

    参数指定值说明

    +

    参数指定值说明

    isula create/run

    +

    isula create/run

    --system-container

    +

    --system-container

    • 布尔变量,取值为true、false,未指定值时表示true。
    • 指定某个容器类型是否属于系统容器,必须使能。
    +
    • 布尔变量,取值为true、false,未指定值时表示true。
    • 指定某个容器类型是否属于系统容器,必须使能。

    命令

    + - - - - -

    命令

    参数

    +

    参数

    参数指定值说明

    +

    参数指定值说明

    isula create/run

    +

    isula create/run

    --ns-change-opt

    +

    --ns-change-opt

    • 字符串变量。
    • 仅支持配置net、ipc:

      net:支持/proc/sys/net目录下所有namespace化参数。

      +
    • 字符串变量。
    • 仅支持配置net、ipc:

      net:支持/proc/sys/net目录下所有namespace化参数。

      ipc:支持的namespace化参数列表如下:

      /proc/sys/kernel/msgmax

      /proc/sys/kernel/msgmnb

      @@ -54,7 +54,7 @@ 启动容器, 指定--ns-change-opt=net: -```bash +```sh [root@localhost ~]# isula run -tid --ns-change-opt net --system-container --external-rootfs /root/myrootfs none init 4bf44a42b4a14fdaf127616c90defa64b4b532b18efd15b62a71cbf99ebc12d2 [root@localhost ~]# isula exec -it 4b mount | grep /proc/sys @@ -67,7 +67,7 @@ proc on /proc/sys/net type proc (rw,nosuid,nodev,noexec,relatime) 再启动一个容器,指定--ns-change-opt=ipc: -```bash +```sh [root@localhost ~]# isula run -tid --ns-change-opt ipc --system-container --external-rootfs /root/myrootfs none init c62e5e5686d390500dab2fa76b6c44f5f8da383a4cbbeac12cfada1b07d6c47f [root@localhost ~]# isula exec -it c6 mount | grep /proc/sys diff --git a/docs/zh/docs/container_runtime/kuasar/_toc.yaml b/docs/zh/docs/container_runtime/kuasar/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..67cd1259ebcdfe89fae9e99188c79b747827cbd0 --- /dev/null +++ b/docs/zh/docs/container_runtime/kuasar/_toc.yaml @@ -0,0 +1,13 @@ +label: Kuasar多沙箱容器运行时 +isManual: true +description: 一款支持多种类型沙箱统一管理的容器运行时,可同时支持多种业界主流的沙箱隔离技术 +sections: + +- label: 概述 + href: ./overview.md +- label: 安装与配置 + href: ./kuasar_install_config.md +- label: 使用指南 + href: ./kuasar_usage.md +- label: 附录 + href: ./kuasar_appendix.md diff --git a/docs/zh/docs/ContainerRuntime/Kuasar/figures/kuasar_arch.png b/docs/zh/docs/container_runtime/kuasar/figures/kuasar_arch.png similarity index 100% rename from docs/zh/docs/ContainerRuntime/Kuasar/figures/kuasar_arch.png rename to docs/zh/docs/container_runtime/kuasar/figures/kuasar_arch.png diff --git a/docs/zh/docs/ContainerRuntime/Kuasar/kuasar-appendix.md b/docs/zh/docs/container_runtime/kuasar/kuasar_appendix.md similarity index 97% rename from docs/zh/docs/ContainerRuntime/Kuasar/kuasar-appendix.md rename to docs/zh/docs/container_runtime/kuasar/kuasar_appendix.md index 9e55c8a0da674f5e57d92288210185d005560faa..7d44dabaab12d58d1354de4fa6b722ed03f97bc7 100644 --- a/docs/zh/docs/ContainerRuntime/Kuasar/kuasar-appendix.md +++ b/docs/zh/docs/container_runtime/kuasar/kuasar_appendix.md @@ -1,24 +1,24 @@ -# 附录 - - /var/lib/kuasar/config_stratovirt.toml配置文件字段说明: - -```conf -[sandbox] -log_level :指定kuasar日志级别,默认为info - -[hypervisor] -path :指定stratovirt二进制路径 -machine_type :指定模拟芯片类型,ARM架构为virt,x86架构为q35 -kernel_path :指定guest kernel执行路径 -image_path :指定guest image执行路径 -initrd_path :指定guest initrd执行路径,与image二选一 -kernel_params :指定guest内核运行参数 -vcpus :指定每个沙箱的默认vCPU数量,默认为1 -memory_in_mb :指定每个沙箱的默认内存大小,默认为1024 MiB -block_device_driver :指定块设备驱动 -debug :指定是否开启debug模式 -enable_mem_prealloc :指定是否开启内存预占 - -[hypervisor.virtiofsd_conf] -path :指定vhost_user_fs路径 -``` +# 附录 + + /var/lib/kuasar/config_stratovirt.toml配置文件字段说明: + +```conf +[sandbox] +log_level :指定kuasar日志级别,默认为info + +[hypervisor] +path :指定stratovirt二进制路径 +machine_type :指定模拟芯片类型,ARM架构为virt,x86架构为q35 +kernel_path :指定guest kernel执行路径 +image_path :指定guest image执行路径 +initrd_path :指定guest initrd执行路径,与image二选一 +kernel_params :指定guest内核运行参数 +vcpus :指定每个沙箱的默认vCPU数量,默认为1 +memory_in_mb :指定每个沙箱的默认内存大小,默认为1024 MiB +block_device_driver :指定块设备驱动 +debug :指定是否开启debug模式 +enable_mem_prealloc :指定是否开启内存预占 + +[hypervisor.virtiofsd_conf] +path :指定vhost_user_fs路径 +``` diff --git a/docs/zh/docs/ContainerRuntime/Kuasar/kuasar-install-config.md b/docs/zh/docs/container_runtime/kuasar/kuasar_install_config.md similarity index 88% rename from docs/zh/docs/ContainerRuntime/Kuasar/kuasar-install-config.md rename to docs/zh/docs/container_runtime/kuasar/kuasar_install_config.md index da500f8dc682623edbe8298305518de674a1f19e..416800f6387d0b3b71eded88f3957e1f5e2f2e67 100644 --- a/docs/zh/docs/ContainerRuntime/Kuasar/kuasar-install-config.md +++ b/docs/zh/docs/container_runtime/kuasar/kuasar_install_config.md @@ -1,126 +1,126 @@ -# 安装与配置 - -## 安装方法 - -### 前提条件 - -- 为了获取更好的性能体验,kuasar需要运行在裸金属服务器上,**暂不支持kuasar运行在虚拟机内**。 -- kuasar运行依赖以下openEuler组件,请确保环境上已安装所需版本的依赖组件。 - - iSulad(请参考iSula容器引擎的[安装与配置](./安装与配置.md)章节安装iSulad) - - StratoVirt(请参考StratoVirt的[安装](../StratoVirt/安装StratoVirt.md)章节安装StratoVirt) - -### 安装操作 - -1. kuasar发布组件集成在kuasar rpm包中,使用yum命令可以直接安装 - - ```sh - $ yum install kuasar - ``` - -2. 安装启动沙箱及容器需要使用的cri命令行工具crictl - - ```sh - # arm环境 - $ wget https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.25.0/crictl-v1.25.0-linux-arm64.tar.gz - $ tar -zxvf crictl-v1.25.0-linux-arm64.tar.gz -C /usr/local/bin - # x86环境 - $ wget https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.25.0/crictl-v1.25.0-linux-amd64.tar.gz - $ tar -zxvf crictl-v1.25.0-linux-amd64.tar.gz -C /usr/local/bin - ``` - -3. 安装cri配置网络需要使用的cni插件 - - ```sh - $ mkdir -p /opt/cni/bin && mkdir -p /etc/cni/net.d - - # arm环境 - $ wget https://github.com/containernetworking/plugins/releases/download/v1.3.0/cni-plugins-linux-arm64-v1.3.0.tgz - $ tar -zxvf cni-plugins-linux-arm64-v1.3.0.tgz -C /opt/cni/bin/ - # x86环境 - $ wget https://github.com/containernetworking/plugins/releases/download/v1.3.0/cni-plugins-linux-amd64-v1.3.0.tgz - $ tar -zxvf cni-plugins-linux-amd64-v1.3.0.tgz -C /opt/cni/bin/ - ``` - -## 配置方法 - -### iSulad容器引擎的配置 - -修改iSulad容器引擎的配置文件/etc/isulad/daemon.json以支持iSulad容器引擎调用kuasar vmm虚拟机类型的容器运行时,新增如下配置: - -```sh -$ cat /etc/isulad/daemon.json -... - "cri-sandboxers": { - "vmm": { - "name": "vmm", - "address": "/run/vmm-sandboxer.sock" - } - }, - "cri-runtimes": { - "vmm": "io.containerd.vmm.v1" - }, -... -``` - -重新启动iSulad - -```sh -$ systemctl restart isulad -``` - -### crictl的配置 - -修改crictl配置文件/etc/crictl.yaml对接isulad - -```sh -$ cat /etc/crictl.yaml -runtime-endpoint: unix:///var/run/isulad.sock -image-endpoint: unix:///var/run/isulad.sock -timeout: 10 -``` - -### kuasar的配置 - -修改kuasar对接stratovirt配置文件(可使用默认配置,配置文件字段说明详见[附录](./kuasar附录.md )) - -```sh -$ cat /var/lib/kuasar/config_stratovirt.toml -[sandbox] -log_level = "info" - -[hypervisor] -path = "/usr/bin/stratovirt" -machine_type = "virt,mem-share=on" -kernel_path = "/var/lib/kuasar/vmlinux.bin" -image_path = "" -initrd_path = "/var/lib/kuasar/kuasar.initrd" -kernel_params = "task.log_level=debug task.sharefs_type=virtiofs" -vcpus = 1 -memory_in_mb = 1024 -block_device_driver = "virtio-blk" -debug = true -enable_mem_prealloc = false - -[hypervisor.virtiofsd_conf] -path = "/usr/bin/vhost_user_fs" -``` - -启动kuasar-vmm服务 - -```sh -$ systemctl start kuasar-vmm -``` - -确认服务已处于running状态 - -```sh -$ systemctl status kuasar-vmm -● kuasar-vmm.service - Kuasar microVM type sandboxer daemon process - Loaded: loaded (/usr/lib/systemd/system/kuasar-vmm.service; disabled; vendor preset: disabled) - Active: active (running) since Sat 2023-08-26 14:57:08 CST; 1h 25min ago - Main PID: 1000445 (vmm-sandboxer) - Tasks: 99 (limit: 814372) - Memory: 226.4M - CGroup: /system.slice/kuasar-vmm.service - └─ 1000445 /usr/local/bin/vmm-sandboxer --listen /run/vmm-sandboxer.sock --dir /run/kuasar-vmm -``` +# 安装与配置 + +## 安装方法 + +### 前提条件 + +- 为了获取更好的性能体验,kuasar需要运行在裸金属服务器上,**暂不支持kuasar运行在虚拟机内**。 +- kuasar运行依赖以下openEuler组件,请确保环境上已安装所需版本的依赖组件。 + - iSulad(请参考iSula容器引擎的[安装与配置](../../container_engine/isula_container_engine/installation_configuration.md)章节安装iSulad) + - StratoVirt(请参考StratoVirt的[安装](https://docs.openeuler.org/zh/docs/24.03_LTS_SP2/virtualization/virtualization_platform/stratovirt/install_stratovirt.html)章节安装StratoVirt) + +### 安装操作 + +1. kuasar发布组件集成在kuasar rpm包中,使用yum命令可以直接安装 + + ```sh + $ yum install kuasar + ``` + +2. 安装启动沙箱及容器需要使用的cri命令行工具crictl + + ```sh + # arm环境 + $ wget https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.25.0/crictl-v1.25.0-linux-arm64.tar.gz + $ tar -zxvf crictl-v1.25.0-linux-arm64.tar.gz -C /usr/local/bin + # x86环境 + $ wget https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.25.0/crictl-v1.25.0-linux-amd64.tar.gz + $ tar -zxvf crictl-v1.25.0-linux-amd64.tar.gz -C /usr/local/bin + ``` + +3. 安装cri配置网络需要使用的cni插件 + + ```sh + $ mkdir -p /opt/cni/bin && mkdir -p /etc/cni/net.d + + # arm环境 + $ wget https://github.com/containernetworking/plugins/releases/download/v1.3.0/cni-plugins-linux-arm64-v1.3.0.tgz + $ tar -zxvf cni-plugins-linux-arm64-v1.3.0.tgz -C /opt/cni/bin/ + # x86环境 + $ wget https://github.com/containernetworking/plugins/releases/download/v1.3.0/cni-plugins-linux-amd64-v1.3.0.tgz + $ tar -zxvf cni-plugins-linux-amd64-v1.3.0.tgz -C /opt/cni/bin/ + ``` + +## 配置方法 + +### iSulad容器引擎的配置 + +修改iSulad容器引擎的配置文件/etc/isulad/daemon.json以支持iSulad容器引擎调用kuasar vmm虚拟机类型的容器运行时,新增如下配置: + +```sh +$ cat /etc/isulad/daemon.json +... + "cri-sandboxers": { + "vmm": { + "name": "vmm", + "address": "/run/vmm-sandboxer.sock" + } + }, + "cri-runtimes": { + "vmm": "io.containerd.vmm.v1" + }, +... +``` + +重新启动iSulad + +```sh +$ systemctl restart isulad +``` + +### crictl的配置 + +修改crictl配置文件/etc/crictl.yaml对接isulad + +```sh +$ cat /etc/crictl.yaml +runtime-endpoint: unix:///var/run/isulad.sock +image-endpoint: unix:///var/run/isulad.sock +timeout: 10 +``` + +### kuasar的配置 + +修改kuasar对接stratovirt配置文件(可使用默认配置,配置文件字段说明详见[附录](./kuasar_appendix.md)) + +```sh +$ cat /var/lib/kuasar/config_stratovirt.toml +[sandbox] +log_level = "info" + +[hypervisor] +path = "/usr/bin/stratovirt" +machine_type = "virt,mem-share=on" +kernel_path = "/var/lib/kuasar/vmlinux.bin" +image_path = "" +initrd_path = "/var/lib/kuasar/kuasar.initrd" +kernel_params = "task.log_level=debug task.sharefs_type=virtiofs" +vcpus = 1 +memory_in_mb = 1024 +block_device_driver = "virtio-blk" +debug = true +enable_mem_prealloc = false + +[hypervisor.virtiofsd_conf] +path = "/usr/bin/vhost_user_fs" +``` + +启动kuasar-vmm服务 + +```sh +$ systemctl start kuasar-vmm +``` + +确认服务已处于running状态 + +```sh +$ systemctl status kuasar-vmm +● kuasar-vmm.service - Kuasar microVM type sandboxer daemon process + Loaded: loaded (/usr/lib/systemd/system/kuasar-vmm.service; disabled; vendor preset: disabled) + Active: active (running) since Sat 2023-08-26 14:57:08 CST; 1h 25min ago + Main PID: 1000445 (vmm-sandboxer) + Tasks: 99 (limit: 814372) + Memory: 226.4M + CGroup: /system.slice/kuasar-vmm.service + └─ 1000445 /usr/local/bin/vmm-sandboxer --listen /run/vmm-sandboxer.sock --dir /run/kuasar-vmm +``` diff --git a/docs/zh/docs/ContainerRuntime/Kuasar/kuasar-usage.md b/docs/zh/docs/container_runtime/kuasar/kuasar_usage.md similarity index 86% rename from docs/zh/docs/ContainerRuntime/Kuasar/kuasar-usage.md rename to docs/zh/docs/container_runtime/kuasar/kuasar_usage.md index 4f579ecf6cf0b7c3dcab4bb48306b4b5edb5f73f..e0ef3087c491a280e510eab0a91b142fe1b637f7 100644 --- a/docs/zh/docs/ContainerRuntime/Kuasar/kuasar-usage.md +++ b/docs/zh/docs/container_runtime/kuasar/kuasar_usage.md @@ -1,92 +1,92 @@ -# 使用指南 - -启动kuasar沙箱的操作步骤如下: - -1. 确保kuasar及其相关组件已经正确安装配置 - -2. 准备业务容器镜像,假设容器镜像为busybox,使用iSula容器引擎下载容器镜像 - - ```sh - $ isula pull busybox - ``` - -3. 准备pod和container的yaml文件,范例如下: - - ```sh - $ cat podsandbox.yaml - metadata: - name: busybox-sandbox - namespace: default - uid: hdishd83djaidwnduwk28bcsc - log_directory: /tmp - linux: - namespaces: - options: {} - - $ cat pod-container.yaml - metadata: - name: busybox - image: - image: docker.io/library/busybox:latest - command: - - top - log_path: busybox.log - ``` - -4. 启动pod - - ```sh - $ crictl runp --runtime=vmm podsandbox.yaml - 5cbcf744949d8500e7159d6bd1e3894211f475549c0be15d9c60d3c502c7ede3 - ``` - - 查看pod列表,pod为Ready状态 - - ```sh - $ crictl pods - POD ID CREATED STATE NAME NAMESPACE ATTEMPT - 5cbcf744949d8 About a minute ago Ready busybox-sandbox default 1 - ``` - -5. 在pod内创建一个业务容器 - - ```sh - $ crictl create 5cbcf744949d8500e7159d6bd1e3894211f475549c0be15d9c60d3c502c7ede3 pod-container.yaml podsandbox.yaml - c11df540f913e57d1e28372334c028fd6550a2ba73208a3991fbcdb421804a50 - ``` - - 查看容器列表,容器为Created状态 - - ```sh - $ crictl ps -a - CONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID - c11df540f913e docker.io/library/busybox:latest 15 seconds ago Created busybox 0 5cbcf744949d - ``` - -6. 启动业务容器 - - ```sh - $ crictl start c11df540f913e57d1e28372334c028fd6550a2ba73208a3991fbcdb421804a50 - ``` - - 查看容器列表,容器为running状态 - - ```sh - $ crictl ps - CONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID - c11df540f913e docker.io/library/busybox:latest 2 minutes ago Running busybox 0 5cbcf744949d8 - ``` - - > ![](./public_sys-resources/icon-note.gif) **说明:** - > 以上步骤4、5、6也可以通过`crictl run`命令直接启动一个pod以及对应的业务容器 - > - > ```sh - > $ crictl run -r vmm --no-pull container-config.yaml podsandbox-config.yaml - > ``` - -7. 停止并删除容器以及pod - - ```sh - $ crictl rm -f c11df540f913e - $ crictl rmp -f 5cbcf744949d8 - ``` +# 使用指南 + +启动kuasar沙箱的操作步骤如下: + +1. 确保kuasar及其相关组件已经正确安装配置 + +2. 准备业务容器镜像,假设容器镜像为busybox,使用iSula容器引擎下载容器镜像 + + ```sh + $ isula pull busybox + ``` + +3. 准备pod和container的yaml文件,范例如下: + + ```sh + $ cat podsandbox.yaml + metadata: + name: busybox-sandbox + namespace: default + uid: hdishd83djaidwnduwk28bcsc + log_directory: /tmp + linux: + namespaces: + options: {} + + $ cat pod-container.yaml + metadata: + name: busybox + image: + image: docker.io/library/busybox:latest + command: + - top + log_path: busybox.log + ``` + +4. 启动pod + + ```sh + $ crictl runp --runtime=vmm podsandbox.yaml + 5cbcf744949d8500e7159d6bd1e3894211f475549c0be15d9c60d3c502c7ede3 + ``` + + 查看pod列表,pod为Ready状态 + + ```sh + $ crictl pods + POD ID CREATED STATE NAME NAMESPACE ATTEMPT + 5cbcf744949d8 About a minute ago Ready busybox-sandbox default 1 + ``` + +5. 在pod内创建一个业务容器 + + ```sh + $ crictl create 5cbcf744949d8500e7159d6bd1e3894211f475549c0be15d9c60d3c502c7ede3 pod-container.yaml podsandbox.yaml + c11df540f913e57d1e28372334c028fd6550a2ba73208a3991fbcdb421804a50 + ``` + + 查看容器列表,容器为Created状态 + + ```sh + $ crictl ps -a + CONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID + c11df540f913e docker.io/library/busybox:latest 15 seconds ago Created busybox 0 5cbcf744949d + ``` + +6. 启动业务容器 + + ```sh + $ crictl start c11df540f913e57d1e28372334c028fd6550a2ba73208a3991fbcdb421804a50 + ``` + + 查看容器列表,容器为running状态 + + ```sh + $ crictl ps + CONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID + c11df540f913e docker.io/library/busybox:latest 2 minutes ago Running busybox 0 5cbcf744949d8 + ``` + + >[!NOTE]说明 + >以上步骤4、5、6也可以通过`crictl run`命令直接启动一个pod以及对应的业务容器 + > + >```sh + >$ crictl run -r vmm --no-pull container-config.yaml podsandbox-config.yaml + >``` + +7. 停止并删除容器以及pod + + ```sh + $ crictl rm -f c11df540f913e + $ crictl rmp -f 5cbcf744949d8 + ``` diff --git a/docs/zh/docs/ContainerRuntime/Kuasar/kuasar.md b/docs/zh/docs/container_runtime/kuasar/overview.md similarity index 91% rename from docs/zh/docs/ContainerRuntime/Kuasar/kuasar.md rename to docs/zh/docs/container_runtime/kuasar/overview.md index 55510ebb666c319dc1e525d10256cec25b636a47..516a2f518f3ea0b0486e1dc33ee294974be46fe7 100644 --- a/docs/zh/docs/ContainerRuntime/Kuasar/kuasar.md +++ b/docs/zh/docs/container_runtime/kuasar/overview.md @@ -1,12 +1,12 @@ -# Kuasar多沙箱容器运行时 - -## 概述 - -Kuasar是一款支持多种类型沙箱统一管理的容器运行时,可同时支持业界主流的多种沙箱隔离技术,例如包括基于内核的原生容器沙箱、基于轻量级虚拟化技术的microVM沙箱、基于进程级虚拟化的App Kernel沙箱,以及新兴的WebAssembly沙箱。 -openEuler基于Kuasar统一容器运行时并结合已有openEuler生态中iSulad容器引擎和StratoVirt虚拟化引擎技术,打造面向云原生场景轻量级全栈自研的安全容器,构建极低底噪、极速启动的关键竞争力。 - -**图 1** Kuasar多沙箱容器运行时架构 -![](./figures/kuasar_arch.png) - ->![](./public_sys-resources/icon-note.gif) **说明:** ->kuasar的安装和使用需要使用root权限。 +# Kuasar多沙箱容器运行时 + +## 概述 + +Kuasar是一款支持多种类型沙箱统一管理的容器运行时,可同时支持业界主流的多种沙箱隔离技术,例如包括基于内核的原生容器沙箱、基于轻量级虚拟化技术的microVM沙箱、基于进程级虚拟化的App Kernel沙箱,以及新兴的WebAssembly沙箱。 +openEuler基于Kuasar统一容器运行时并结合已有openEuler生态中iSulad容器引擎和StratoVirt虚拟化引擎技术,打造面向云原生场景轻量级全栈自研的安全容器,构建极低底噪、极速启动的关键竞争力。 + +**图 1** Kuasar多沙箱容器运行时架构 +![](./figures/kuasar_arch.png) + +>[!NOTE]说明 +>kuasar的安装和使用需要使用root权限。 diff --git a/docs/zh/docs/hybrid_deployment/oncn_bwm/_toc.yaml b/docs/zh/docs/hybrid_deployment/oncn_bwm/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..99b9aebd47c782de78a20f4496c348a59543dfe9 --- /dev/null +++ b/docs/zh/docs/hybrid_deployment/oncn_bwm/_toc.yaml @@ -0,0 +1,6 @@ +label: oncn-bwm用户指南 +isManual: true +description: 混合业务场景下的Pod带宽管理方案 +sections: + - label: 概述 + href: ./overview.md diff --git a/docs/zh/docs/HybridDeployment/oncn-bwm/overview.md b/docs/zh/docs/hybrid_deployment/oncn_bwm/overview.md similarity index 37% rename from docs/zh/docs/HybridDeployment/oncn-bwm/overview.md rename to docs/zh/docs/hybrid_deployment/oncn_bwm/overview.md index 231dd02e43757868a5f8acdfd1bc047bf6a659ae..0185ed98963eb37fa6af327e490d1bfab24bbb7c 100644 --- a/docs/zh/docs/HybridDeployment/oncn-bwm/overview.md +++ b/docs/zh/docs/hybrid_deployment/oncn_bwm/overview.md @@ -2,94 +2,84 @@ ## 简介 -随着云计算、大数据、人工智能、5G、物联网等技术的迅速发展,数据中心的建设越来越重要。然而,数据中心的服务器资源利用率很低,造成了巨大的资源浪费。为了提高服务器资源利用率,oncn-bwm 应运而生。 +随着云计算、大数据、人工智能、5G、物联网等技术的迅速发展,数据中心的建设越来越重要。然而,数据中心的服务器资源利用率很低,造成了巨大的资源浪费。为了提高服务器资源利用率,oncn-bwm应运而生。 -oncn-bwm 是一款适用于在线、离线业务混合部署场景的 Pod 带宽管理工具,它会根据 QoS 分级对节点内的网络资源进行合理调度,保障在线业务服务体验的同时,大幅提升节点整体的网络带宽利用率。 +oncn-bwm是一款适用于在、离线业务混合部署场景的Pod带宽管理工具,它会根据QoS分级对节点内的网络资源进行合理调度,保障在线业务服务体验的同时,大幅提升节点整体的网络带宽利用率。 -oncn-bwm 工具支持如下功能: +oncn-bwm工具支持如下功能: -- 使能/去除/查询 Pod 带宽管理 -- 设置 Pod 网络优先级 +- 使能/去除/查询Pod带宽管理 +- 设置Pod网络优先级 - 设置离线业务带宽范围和在线业务水线 - 内部统计信息查询 ## 安装 -安装 oncn-bwm 工具需要操作系统为 openEuler 22.09,在配置了 openEuler yum 源的机器直接使用 yum 命令安装,参考命令如下: - -```shell -# yum install oncn-bwm -``` - -此处介绍如何安装 oncn-bwm 工具。 - ### 环境要求 -- 操作系统:openEuler 22.09 +操作系统为openEuler-24.03-LTS,且配置了openEuler-24.03-LTS的yum源。 ### 安装步骤 -安装 oncn-bwm 工具的操作步骤如下: +使用以下命令直接安装: -1. 配置openEuler的yum源,直接使用yum命令安装 - - ```shell - yum install oncn-bwm - ``` +```shell +yum install oncn-bwm +``` ## 使用方法 -oncn-bwm 工具提供了 `bwmcli` 命令行工具来使能 Pod 带宽管理或进行相关配置。`bwmcli` 命令的整体格式如下: +oncn-bwm工具提供了`bwmcli`命令行工具来使能Pod带宽管理或进行相关配置。`bwmcli`命令的整体格式如下: -**bwmcli** < option(s) > +**bwmcli** \< option(s) > > 说明: > -> 使用 `bwmcli` 命令需要 root 权限。 +> 使用`bwmcli`命令需要root权限。 > -> 仅支持节点上出方向(报文从节点内发往其他节点)的 Pod 带宽管理。 +> 仅支持节点上出方向(报文从节点内发往其他节点)的Pod带宽管理。 > -> 已设置 tc qdisc 规则的网卡,不支持使能 Pod 带宽管理。 +> 已设置tc qdisc规则的网卡,不支持使能Pod带宽管理。 > -> 升级 oncn-bwm 包不会影响升级前的使能状态;卸载 oncn-bwm 包会关闭所有网卡的 Pod 带宽管理。 +> 升级oncn-bwm包不会影响升级前的使能状态;卸载oncn-bwm包会关闭所有网卡的Pod带宽管理。 ### 命令接口 -#### Pod 带宽管理 +#### Pod带宽管理 -**命令和功能** +##### 命令和功能 | 命令格式 | 功能 | | --------------------------- | ------------------------------------------------------------ | -| **bwmcli –e** <网卡名称> | 使能指定网卡的 Pod 带宽管理。 | -| **bwmcli -d** <网卡名称> | 去除指定网卡的 Pod 带宽管理。 | -| **bwmcli -p devs** | 查询节点所有网卡的 Pod 带宽管理。 | +| **bwmcli -e** \<网卡名称> | 使能指定网卡的Pod带宽管理。 | +| **bwmcli -d** \<网卡名称> | 去除指定网卡的Pod带宽管理。 | +| **bwmcli -p devs** | 查询节点所有网卡的Pod带宽管理。 | > 说明: > > - 不指定网卡名时,上述命令会对节点上的所有的网卡生效。 > -> - 执行 `bwmcli` 其他命令前需要开启 Pod 带宽管理。 +> - 执行 `bwmcli` 其他命令前需要开启Pod带宽管理。 -**使用示例** +##### 使用示例 -- 使能网卡 eth0 和 eth1 的 Pod 带宽管理 +- 使能网卡eth0和eth1的Pod带宽管理 ```shell - # bwmcli –e eth0 –e eth1 + # bwmcli -e eth0 -e eth1 enable eth0 success enable eth1 success ``` -- 取消网卡 eth0 和 eth1 的 Pod 带宽管理 +- 取消网卡eth0和eth1的Pod带宽管理 ```shell - # bwmcli –d eth0 –d eth1 + # bwmcli -d eth0 -d eth1 disable eth0 success disable eth1 success ``` -- 查询节点所有网卡的 Pod 带宽管理 +- 查询节点所有网卡的Pod带宽管理 ```shell # bwmcli -p devs @@ -100,29 +90,29 @@ oncn-bwm 工具提供了 `bwmcli` 命令行工具来使能 Pod 带宽管理或 lo : disabled ``` -#### Pod 网络优先级 +#### Pod网络优先级 -**命令和功能** +##### 命令和功能 | 命令格式 | 功能 | | ------------------------------------------------------------ | ------------------------------------------------------------ | -| **bwmcli –s** *path* | 设置 Pod 网络优先级。其中 *path* 为 Pod 对应的 cgroup 路径, *prio* 为优先级。*path* 取相对路径或者绝对路径均可。 *prio* 缺省值为 0,可选值为 0 和 -1,0 标识为在线业务,-1 标识为离线业务。 | -| **bwmcli –p** *path* | 查询 Pod 网络优先级。 | +| **bwmcli -s** path \ | 设置Pod网络优先级。其中*path*为Pod对应的cgroup路径,*prio*为优先级。*path*取相对路径或者绝对路径均可。 *prio*默认值为0,可选值为0和-1,0标识为在线业务,-1标识为离线业务。 | +| **bwmcli -p** *path* | 查询Pod网络优先级。 | > 说明: > -> 支持在线或离线两种网络优先级,oncn-bwm 工具会按照网络优先级实时控制 Pod 的带宽,具体策略为:对于在线类型的 Pod ,不会限制其带宽;对于离线类型的 Pod ,会将其带宽限制在离线带宽范围内。 +> 支持在线或离线两种网络优先级,oncn-bwm工具会按照网络优先级实时控制Pod的带宽,具体策略为:对于在线类型的Pod,不会限制其带宽;对于离线类型的Pod,会将其带宽限制在离线带宽范围内。 -**使用示例** +##### 使用示例 -- 设置 cgroup 路径为 /sys/fs/cgroup/net_cls/test_online 的 Pod 的优先级为 0 +- 设置cgroup路径为/sys/fs/cgroup/net_cls/test_online的Pod的优先级为0 ```shell # bwmcli -s /sys/fs/cgroup/net_cls/test_online 0 set prio success ``` -- 查询 cgroup 路径为 /sys/fs/cgroup/net_cls/test_online 的 Pod 的优先级 +- 查询cgroup路径为/sys/fs/cgroup/net_cls/test_online的Pod的优先级 ```shell # bwmcli -p /sys/fs/cgroup/net_cls/test_online @@ -131,22 +121,22 @@ oncn-bwm 工具提供了 `bwmcli` 命令行工具来使能 Pod 带宽管理或 #### 离线业务带宽范围 -| 命令格式 | 功能 | -| ---------------------------------- | ------------------------------------------------------------ | -| **bwmcli –s bandwidth** `` | 设置一个主机/虚拟机的离线带宽。其中 low 表示最低带宽,high 表示最高带宽,其单位可取值为 kb/mb/gb ,有效范围为 [1mb, 9999gb]。 | -| **bwmcli –p bandwidth** | 查询设置一个主机/虚拟机的离线带宽。 | +| 命令格式 | 功能 | +| ------------------------------------ | ------------------------------------------------------------ | +| **bwmcli -s bandwidth** \ | 设置一个主机/虚拟机的离线带宽。其中*low*表示最低带宽,*high*表示最高带宽,其单位可取值为kb/mb/gb,有效范围为[1mb, 9999gb]。| +| **bwmcli -p bandwidth** | 查询设置一个主机/虚拟机的离线带宽。 | > 说明: > -> - 一个主机上所有使能 Pod 带宽管理的网卡在实现内部被当成一个整体看待,也就是共享设置的在线业务水线和离线业务带宽范围。 +> - 一个主机上所有使能Pod带宽管理的网卡在实现内部被当成一个整体看待,也就是共享设置的在线业务水线和离线业务带宽范围。 > -> - 使用 `bwmcli` 设置 Pod 带宽对此节点上所有离线业务生效,所有离线业务的总带宽不能超过离线业务带宽范围。在线业务没有网络带宽限制。 +> - 使用 `bwmcli` 设置Pod带宽对此节点上所有离线业务生效,所有离线业务的总带宽不能超过离线业务带宽范围。在线业务没有网络带宽限制。 > -> - 离线业务带宽范围与在线业务水线共同完成离线业务带宽限制,当在线业务带宽低于设置的水线时,离线业务允许使用设置的最高带宽;当在线业务带宽高于设置的水线时,离线业务允许使用设置的最低带宽。 +> - 离线业务带宽范围与在线业务水线共同完成离线业务带宽限制,当在线业务带宽低于设置的水线时:离线业务允许使用设置的最高带宽;当在线业务带宽高于设置的水线时,离线业务允许使用设置的最低带宽。 -**使用示例** +##### 使用示例 -- 设置离线带宽范围在 30mb 到 100mb +- 设置离线带宽范围在30mb到100mb ```shell # bwmcli -s bandwidth 30mb,100mb @@ -162,21 +152,21 @@ oncn-bwm 工具提供了 `bwmcli` 命令行工具来使能 Pod 带宽管理或 #### 在线业务水线 -**命令和功能** +##### 命令和功能 | 命令格式 | 功能 | | ---------------------------------------------- | ------------------------------------------------------------ | -| **bwmcli –s waterline** | 设置一个主机/虚拟机的在线业务水线,其中 *val* 为水线值,单位可取值为 kb/mb/gb ,有效范围为 [20mb, 9999gb]。 | -| **bwmcli –p waterline** | 查询一个主机/虚拟机的在线业务水线。 | +| **bwmcli -s waterline** \ | 设置一个主机/虚拟机的在线业务水线,其中*val*为水线值,单位可取值为kb/mb/gb ,有效范围为[20mb, 9999gb]。 | +| **bwmcli -p waterline** | 查询一个主机/虚拟机的在线业务水线。 | > 说明: > > - 当一个主机上所有在线业务的总带宽高于水线时,会限制离线业务可以使用的带宽,反之当一个主机上所有在线业务的总带宽低于水线时,会提高离线业务可以使用的带宽。 -> - 判断在线业务的总带宽是否超过/低于设置的水线的时机:每 10 ms 判断一次,根据每个 10 ms 内统计的在线带宽是否高于水线来决定对离线业务采用的带宽限制。 +> - 判断在线业务的总带宽是否超过/低于设置的水线的时机:每10ms判断一次,根据每个10ms内统计的在线带宽是否高于水线来决定对离线业务采用的带宽限制。 -**使用示例** +##### 使用示例 -- 设置在线业务水线为 20mb +- 设置在线业务水线为20mb ```shell # bwmcli -s waterline 20mb @@ -192,25 +182,25 @@ oncn-bwm 工具提供了 `bwmcli` 命令行工具来使能 Pod 带宽管理或 #### 统计信息 -**命令和功能** +##### 命令和功能 | 命令格式 | 功能 | | ------------------- | ------------------ | -| **bwmcli –p stats** | 查询内部统计信息。 | +| **bwmcli -p stats** | 查询内部统计信息。 | > 说明: > > - offline_target_bandwidth 表示离线业务目标带宽 > -> - online_pkts 表示开启 Pod 带宽管理后在线业务总包数 +> - online_pkts 表示开启Pod带宽管理后在线业务总包数 > -> - offline_pkts 表示开启 Pod 带宽管理后离线业务总包数 +> - offline_pkts 表示开启Pod带宽管理后离线业务总包数 > > - online_rate 表示当前在线业务速率 > > - offline_rate 表示当前离线业务速率 -**使用示例** +##### 使用示例 查询内部统计信息 @@ -225,13 +215,26 @@ offline_rate: 0 ### 典型使用案例 -完整配置一个节点上的 Pod 带宽管理可以按照如下步骤顺序操作: +完整配置一个节点上的Pod带宽管理可以按照如下步骤顺序操作: ```shell -bwmcli -p devs # 查询系统当前网卡 Pod 带宽管理状态 -bwmcli -e eth0 # 使能 eth0 的网卡 Pod 带宽管理 -bwmcli -s /sys/fs/cgroup/net_cls/online 0 # 设置在线业务 Pod 的网络优先级为 0 -bwmcli -s /sys/fs/cgroup/net_cls/offline -1 # 设置离线业务 Pod 的网络优先级为 -1 +bwmcli -p devs # 查询系统当前网卡Pod带宽管理状态 +bwmcli -e eth0 # 使能eth0的网卡Pod带宽管理 +bwmcli -s /sys/fs/cgroup/net_cls/online 0 # 设置在线业务Pod的网络优先级为0 +bwmcli -s /sys/fs/cgroup/net_cls/offline -1 # 设置离线业务Pod的网络优先级为-1 bwmcli -s bandwidth 20mb,1gb # 配置离线业务带宽范围 bwmcli -s waterline 30mb # 配置在线业务的水线 ``` + +### 约束限制 + +1. 仅允许root用户执行bwmcli命令行。 +2. 本特性当前仅支持设置两档网络QoS优先级:离线和在线。 +3. 某个网卡上已经设置过tc qdisc规则的情况下,对此网卡使能网络QoS功能会失败。 +4. 网卡被插拔重新恢复后,原来设置的QoS规则会丢失,需要手动重新配置网络QoS功能。 +5. 用一条命令同时使能/去使能多张网卡的时候,如果中间有网卡执行失败,则终止对后面网卡的执行。 +6. 环境上开启SELinux的情况下,未对bwmcli程序配置SELinux策略可能导致部分命令(例如水线,带宽,优先级的设置或查询)失败,可在SELinux日志中确认。此情况可以通过关闭SELinux或对bwmcli程序配置SELinux策略解决。 +7. 升级包不会影响升级前的使能状态,卸载包会关闭对所有设备的使能。 +8. 网卡名仅支持数字、英文字母、中划线“-” 和下划线“_”这四类字符类型,包含其他字符类型的网卡不被识别。 +9. 实际使用过程中,带宽限速有可能造成协议栈内存积压,此时依赖传输层协议自行反压,对于udp等无反压机制的协议场景,可能出现丢包、ENOBUFS、限速有偏差等问题。 +10. 使用bwmcli使能某个网卡的网络Qos功能后,不能再使用tc命令修改该网卡的tc规则,否则可能会影响该网卡的网络Qos功能,导致功能异常。 diff --git a/docs/zh/docs/hybrid_deployment/rubik/_toc.yaml b/docs/zh/docs/hybrid_deployment/rubik/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..7a93bd0b000498990717e7607c173f2edc3f7ace --- /dev/null +++ b/docs/zh/docs/hybrid_deployment/rubik/_toc.yaml @@ -0,0 +1,16 @@ +label: 云原生混合部署rubik用户指南 +isManual: true +description: 在业务混合部署的场景下,根据QoS分级,对资源进行合理调度 +sections: + - label: 概述 + href: ./overview.md + - label: 安装与部署 + href: ./installation_and_deployment.md + - label: 特性介绍 + href: ./feature_introduction.md + - label: 配置文档 + href: configuration.md + - label: ./混部隔离示例 + href: ./example_of_isolation_for_hybrid_deployed_services.md + - label: 附录 + href: ./appendix.md diff --git a/docs/zh/docs/hybrid_deployment/rubik/appendix.md b/docs/zh/docs/hybrid_deployment/rubik/appendix.md new file mode 100644 index 0000000000000000000000000000000000000000..047c30c0d80464d4c9825b83af27a0089355a845 --- /dev/null +++ b/docs/zh/docs/hybrid_deployment/rubik/appendix.md @@ -0,0 +1,252 @@ +# 附录 + +## DaemonSet 配置模板 + +```yaml +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: rubik +rules: + - apiGroups: [""] + resources: ["pods"] + verbs: ["list", "watch"] + - apiGroups: [""] + resources: ["pods/eviction"] + verbs: ["create"] +--- +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: rubik +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: rubik +subjects: + - kind: ServiceAccount + name: rubik + namespace: kube-system +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: rubik + namespace: kube-system +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: rubik-config + namespace: kube-system +data: + config.json: | + { + "agent": { + "logDriver": "stdio", + "logDir": "/var/log/rubik", + "logSize": 1024, + "logLevel": "info", + "cgroupRoot": "/sys/fs/cgroup", + "enabledFeatures": [ + "preemption" + ] + }, + "preemption": { + "resource": [ + "cpu" + ] + } + } +--- +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: rubik-agent + namespace: kube-system + labels: + k8s-app: rubik-agent +spec: + selector: + matchLabels: + name: rubik-agent + template: + metadata: + namespace: kube-system + labels: + name: rubik-agent + spec: + serviceAccountName: rubik + hostPID: true + containers: + - name: rubik-agent + image: hub.oepkgs.net/cloudnative/rubik:latest + imagePullPolicy: IfNotPresent + env: + - name: RUBIK_NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + securityContext: + capabilities: + add: + - SYS_ADMIN + resources: + limits: + memory: 200Mi + requests: + cpu: 100m + memory: 200Mi + volumeMounts: + - name: rubiklog + mountPath: /var/log/rubik + readOnly: false + - name: runrubik + mountPath: /run/rubik + readOnly: false + - name: sysfs + mountPath: /sys/fs + readOnly: false + - name: devfs + mountPath: /dev + readOnly: false + - name: config-volume + mountPath: /var/lib/rubik + terminationGracePeriodSeconds: 30 + volumes: + - name: rubiklog + hostPath: + path: /var/log/rubik + - name: runrubik + hostPath: + path: /run/rubik + - name: sysfs + hostPath: + path: /sys/fs + - name: devfs + hostPath: + path: /dev + - name: config-volume + configMap: + name: rubik-config + items: + - key: config.json + path: config.json +``` + +## Dockerfile 模板 + +```dockerfile +FROM scratch +COPY ./build/rubik /rubik +ENTRYPOINT ["/rubik"] +``` + +## 镜像构建脚本 + +```bash +#!/bin/bash +set -e + +CURRENT_DIR=$(cd "$(dirname "$0")" && pwd) +BINARY_NAME="rubik" + +RUBIK_FILE="${CURRENT_DIR}/build/rubik" +DOCKERFILE="${CURRENT_DIR}/Dockerfile" +YAML_FILE="${CURRENT_DIR}/rubik-daemonset.yaml" + +# Get version and release number of rubik binary +VERSION=$(${RUBIK_FILE} -v | grep ^Version | awk '{print $NF}') +RELEASE=$(${RUBIK_FILE} -v | grep ^Release | awk '{print $NF}') +IMG_TAG="${VERSION}-${RELEASE}" + +# Get rubik image name and tag +IMG_NAME_AND_TAG="${BINARY_NAME}:${IMG_TAG}" + +# Build container image for rubik +docker build -f "${DOCKERFILE}" -t "${IMG_NAME_AND_TAG}" "${CURRENT_DIR}" + +echo -e "\n" +# Check image existence +docker images | grep -E "REPOSITORY|${BINARY_NAME}" + +# Modify rubik-daemonset.yaml file, set rubik image name +sed -i "/image:/s/:.*/: ${IMG_NAME_AND_TAG}/" "${YAML_FILE}" +``` + +## 通信矩阵 + +- rubik 服务进程作为客户端通过 List/Watch 机制与 kubernetes API Server 进行通信,从而获取 Pod 等信息 + +|源IP|源端口|目的IP|目标端口|协议|端口说明|侦听端口是否可更改|认证方式| +|----|----|----|----|----|----|----|----| +|rubik所在节点机器|32768-61000|api-server所在服务器|443|tcp|kubernetes对外提供的访问资源的端口|不可更改|token| + +## 文件与权限 + +- rubik 所有的操作均需要使用 root 权限。 + +- 涉及文件及权限如下表所示: + +|文件路径|文件/文件夹权限|说明| +|----|----|----| +|/var/lib/rubik|750|rpm 安装完成后生成目录,存放 rubik 相关文件| +|/var/lib/rubik/build|550|存放 rubik 二进制文件的目录| +|/var/lib/rubik/build/rubik|550|rubik 二进制文件| +|/var/lib/rubik/rubik-daemonset.yaml|640|rubik daemon set 配置模板,供 k8s 部署使用| +|/var/lib/rubik/Dockerfile|640|Dockerfile 模板| +|/var/lib/rubik/build_rubik_image.sh|550|rubik 容器镜像构建脚本| +|/var/log/rubik|700|rubik 日志存放目录(需开启 logDriver=file 后使能)| +|/var/log/rubik/rubik.log*|600|rubik 日志文件| + +## 约束限制 + +### 规格 + +- 磁盘:1GB+ + +- 内存:100MB+ + +## 运行时 + +- 每个 k8s 节点只能部署一个 rubik,多个 rubik 会冲突 + +- rubik 不接收任何命令行参数,若添加参数启动会报错退出 + +- 如果 rubik 进程进入 T、D 状态,则服务端不可用,此时服务不会响应,需恢复异常状态之后才可继续使用 + +### Pod 优先级设置 + +- 禁止低优先级往高优先级切换。如业务 A 先被设置为低优先级(-1),接着设置为高优先级(0),rubik 报错 + +- 用户添加注解、修改注解、修改 Pod yaml 中的注解并重新 apply 等操作不会触发 Pod 重建。rubik 会通过 List/Watch 机制感知 Pod 注解变化情况 + +- 禁止将任务从在线组迁移到离线组后再迁移回在线组,此操作会导致该任务 QoS 异常 + +- 禁止将重要的系统服务和内核线程加入到离线组中,否则可能导致调度不及时,进而导致系统异常 + +- CPU 和 memory 的在线、离线配置需要统一,否则可能导致两个子系统的 QoS 冲突 + +- 使用混部后,原始的 CPU share 功能存在限制。具体表现为: + - 若当前 CPU 中同时存放在线任务和离线任务,则离线任务的 CPU share 无法生效 + - 若当前 CPU 中只有在线任务或只有离线任务,CPU share 能生效 + - 建议离线业务 Pod 优先级配置为 best effort + +- 用户态的优先级反转、smt、cache、numa 负载均衡、离线任务的负载均衡,当前不支持 + +### 其他 + +禁止用户直接手动修改 Pod 对应 cgroup 或 resctrl 参数,否则可能出现数据不一致情况。 + +- CPU cgroup 目录, 如:`/sys/fs/cgroup/cpu/kubepods/burstable//` + - cpu.qos_level + - cpu.cfs_burst_us + +- memory cgroup 目录,如:`/sys/fs/cgroup/memory/kubepods/burstable//` + - memory.qos_level + - memory.soft_limit_in_bytes + - memory.force_empty + - memory.limit_in_bytes + - memory.high + +- RDT 控制组目录,如:`/sys/fs/resctrl` diff --git a/docs/zh/docs/hybrid_deployment/rubik/configuration.md b/docs/zh/docs/hybrid_deployment/rubik/configuration.md new file mode 100644 index 0000000000000000000000000000000000000000..0ac09bc8bbcecc7d586560b91c5863c922e57ab1 --- /dev/null +++ b/docs/zh/docs/hybrid_deployment/rubik/configuration.md @@ -0,0 +1,228 @@ +# Rubik配置说明 + +rubik执行程序由Go语言实现,并编译为静态可执行文件,以便尽可能与系统依赖解耦。 + +## 命令 + +Rubik仅支持 使用`-v` 参数查询版本信息,不支持其他参数。 +版本信息输出示例如下所示,该信息中的内容和格式可能随着版本发生变化。 + +```bash +$ ./rubik -v +Version: 2.0.1 +Release: 2.oe2403sp1 +Go Version: go1.22.1 +Git Commit: bcaace8 +Built: 2024-12-10 +OS/Arch: linux/amd64 +``` + +## 配置 + +执行rubik二进制时,rubik首先会解析配置文件,配置文件的路径固定为`/var/lib/rubik/config.json`。 + +> [!NOTE]说明 +> +> - 为避免配置混乱,暂不支持指定其他路径。 +> - ubik支持以daemonset形式运行在kubernetes集群中。我们提供了yaml脚本(`hack/rubik-daemonset.yaml`),并定义了`ConfigMap`作为配置。因此,以daemonset形式运行rubik时,应修改`hack/rubik-daemonset.yaml`中的相应配置。 + +配置文件采用json格式,字段键采用驼峰命名规则,且首字母小写。 +配置文件示例内容如下: + +```json +{ + "agent": { + "logDriver": "stdio", + "logDir": "/var/log/rubik", + "logSize": 2048, + "logLevel": "info", + "cgroupRoot": "/sys/fs/cgroup", + "enabledFeatures": [ + "preemption", + "dynCache", + "ioLimit", + "ioCost", + "quotaBurst", + "quotaTurbo", + "psi", + "cpuevict", + "memoryevict" + ] + }, + "preemption": { + "resource": [ + "cpu", + "memory" + ] + }, + "quotaTurbo": { + "highWaterMark": 50, + "syncInterval": 100 + }, + "dynCache": { + "defaultLimitMode": "static", + "adjustInterval": 1000, + "perfDuration": 1000, + "l3Percent": { + "low": 20, + "mid": 30, + "high": 50 + }, + "memBandPercent": { + "low": 10, + "mid": 30, + "high": 50 + } + }, + "ioCost": [ + { + "nodeName": "k8s-single", + "config": [ + { + "dev": "sdb", + "enable": true, + "model": "linear", + "param": { + "rbps": 10000000, + "rseqiops": 10000000, + "rrandiops": 10000000, + "wbps": 10000000, + "wseqiops": 10000000, + "wrandiops": 10000000 + } + } + ] + } + ], + "psi": { + "interval": 10, + "resource": [ + "cpu", + "memory", + "io" + ], + "avg10Threshold": 5.0 + }, + "cpuevict": { + "threshold": 60, + "interval": 1, + "windows": 2, + "cooldown": 20 + }, + "memoryevict": { + "threshold": 60, + "interval": 1, + "cooldown": 4 + } +} +``` + +Rubik配置分为两类:通用配置和特性配置。通用配置由agent关键字标识,用于保存全局的配置。特性配置按服务类型区分,应用于各个子特性。特性配置必须在通用配置的`enabledFeatures`字段中声明方可使用。 + +### agent + +`agent`配置用于记录保存rubik运行的通用配置,例如日志、cgroup挂载点等信息。 + +| 配置键[=默认值] | 类型 | 描述 | 可选值 | +| ------------------------- | ---------- | -------------------------------------- | --------------------------- | +| logDriver=stdio | string | 日志驱动,支持标准输出和文件 | stdio, file | +| logDir=/var/log/rubik | string | 日志保存目录 | 可读可写的目录 | +| logSize=1024 | int | 日志限额,单位MB,仅logDriver=file生效 | [10, $2^{20}$] | +| logLevel=info | string | 输出日志级别 | debug,info,warn,error | +| cgroupRoot=/sys/fs/cgroup | string | 系统cgroup挂载点路径 | 系统cgroup挂载点路径 | +| enabledFeatures=[] | string数组 | 需要使能的rubik特性列表 | rubik支持特性,参见特性介绍 | + +### preemption + +`preemption`字段用于标识绝对抢占特性配置。目前,Preemption特性支持CPU和内存的绝对抢占,用户可以按需配置该字段,单独或组合使用资源的绝对抢占。 + +| 配置键[=默认值] | 类型 | 描述 | 可选值 | +| --------------- | ---------- | -------------------------------- | ----------- | +| resource=[] | string数组 | 资源类型,声明何种资源需要被访问 | cpu, memory | + +### dynCache + +`dynCache`字段用于标识支持Pod访存带宽和LLC限制特性配置。`l3Percent`字段用于标识最后一级缓存(LLC)水位控制线,`memBandPercent`字段用于标识访存带宽(MB)水位控制线。 + +| 配置键[=默认值] | 类型 | 描述 | 可选值 | +| ----------------------- | ------ | ------------------ | --------------- | +| defaultLimitMode=static | string | dynCache的控制模式 | static, dynamic | +| adjustInterval=1000 | int | dynCache动态控制间隔时间,单位ms| [10, 10000] | +| perfDuration=1000 | int | dynCache性能perf执行时长,单位ms | [10, 10000] | +| l3Percent | map | dynCache控制中L3各级别对应水位(%)| / | +| .low=20 | int | L3 Cache低水位组控制线 | [10, 100] | +| .mid=30 | int | L3 Cache中水位组控制线 | [low, 100] | +| .high=50 | int | L3 Cache高水位组控制线 | [mid, 100]| +| memBandPercent | map | dynCache控制中MB各级别对应水位(%)|/| +| .low=10 | int | MB(访存带宽)低水位组控制线 | [10, 100]| +| .mid=30 | int | MB中水位组控制线 | [low, 100] | +| .high=50 | int | MB高水位组控制线 | [mid, 100] | + +### quotaTurbo + +`quotaTurbo`字段用于标识支持弹性限流技术(用户态)配置。 + +| 配置键[=默认值] | 类型 | 描述 | 可选值 | +| ----------------- | ------ | -------------------------------- | -------------------- | +| highWaterMark=60 | int | CPU负载的高水位值 |\[0,警戒水位) | +| alarmWaterMark=80 | int | CPU负载的警戒水位 | (高水位,100\] | +| syncInterval=100 | int | 触发容器quota值更新的间隔(单位:毫秒) | [100,10000] | + +### ioCost + +`ioCost`字段用于标识支持iocost对IO权重控制特性配置。其类型为数组,数组中的每一个元素由节点名称`nodeName`和设备参数数组`config`组成。 + +| 配置键 | 类型 | 描述 | 可选值 | +| ----------------- | ------ | -------------------------------- | -------------------- | +| nodeName | string | 节点名称 | kubernetes中节点名称 | +| config | 数组 | 单个设备的配置信息 | / | + +单个块设备配置`config`参数: + +| 配置键[=默认值] | 类型 | 描述 | 可选值 | +| --------------- | ------ | --------------------------------------------- | -------------- | +| dev | string | 块设备名称,仅支持物理设备 | / | +| model | string | iocost模型名 | linear | +| param | / | 设备参数,根据不同模型有不同参数 | / | + +模型为linear时,`param`字段支持如下参数: + +| 配置键[=默认值] | 类型 | 描述 | 可选值 | +| --------------- | ---- | ---- | ------ | +|rbps | int64 | 块设备最大读带宽 | (0, $2^{63}$) | +| rseqiops | int64 | 块设备最大顺序读iop | (0, $2^{63}$) | +| rrandiops | int64 | 块设备最大随机读iops | (0, $2^{63}$) | +| wbps | int64 | 块设备最大写带宽 | (0, $2^{63}$) | +| wseqiops | int64 | 块设备最大顺序写iops | (0, $2^{63}$) | +| wrandiops | int64 | 块设备最大随机写iops | (0, $2^{63}$) | + +### psi + +`psi`字段用于标识基于psi指标的干扰检测特性配置。目前,psi特性支持监测CPU、内存和I/O资源,用户可以按需配置该字段,单独或组合监测资源的PSI取值。 + +| 配置键[=默认值] | 类型 | 描述 | 可选值 | +| --------------- | ---------- | -------------------------------- | ----------- | +| interval=10 |int|psi指标监测间隔(单位:秒)| [10,30]| +| resource=[] | string数组 | 资源类型,声明何种资源需要被访问 | cpu, memory, io | +| avg10Threshold=5.0 | float | psi some类型资源平均10s内的压制百分比阈值(单位:%),超过该阈值则驱逐离线业务 | [5.0,100]| + +### CPU驱逐水位线控制 + +`cpuevict`字段用于标识CPU驱逐水位线控制特性配置。该特性依照指定采样间隔采集节点CPU利用率,并统计指定窗口内的CPU平均利用率。若CPU平均利用率大于驱逐水位线,则驱逐离线Pod。一旦rubik驱逐离线Pod,则在冷却时间内不再驱逐Pod。 + +| 配置键[=默认值] | 类型 | 描述 | 可选值 | +| --------------- | ---------- | -------------------------------- | ----------- | +| threshold=60 | int | 窗口期内平均CPU利用率的阈值(%),超过该阈值,则驱逐离线Pod | [1,99]| +| interval=1 | int | 节点CPU利用率采集间隔(s) | [1, 3600] | +| windows=2 | int | 节点平均CPU利用率的窗口时间(s)。窗口必须大于interval。若未设置windows,则windows设置为interval的两倍 | [1, 3600]| +| cooldown=20 | int | 冷却时间(s),两次驱逐之间至少需要间隔冷却时间 | [1, 9223372036854775806]| + +### 内存驱逐水位线控制 + +`memoryevict`字段用于标识内存驱逐水位线控制特性配置。该特性依照指定采样间隔采集节点内存利用率。若节点内存利用率大于驱逐水位线,则驱逐离线Pod。一旦rubik驱逐离线Pod,则在冷却时间内不再驱逐Pod。 + +| 配置键[=默认值] | 类型 | 描述 | 可选值 | +| --------------- | ---------- | -------------------------------- | ----------- | +| threshold | int | 内存利用率的阈值(%),超过该阈值,则驱逐离线Pod。若不指定该值,则无法使用本功能。 | [1,99]| +| interval=1 | int | 节点CPU利用率采集间隔(s) | [1, 3600] | +| cooldown=4 | int | 冷却时间(s),两次驱逐之间至少需要间隔冷却时间 | [1, 9223372036854775806]| diff --git a/docs/zh/docs/HybridDeployment/rubik/example-of-isolation-for-hybrid-deployed-services.md b/docs/zh/docs/hybrid_deployment/rubik/example_of_isolation_for_hybrid_deployed_services.md similarity index 39% rename from docs/zh/docs/HybridDeployment/rubik/example-of-isolation-for-hybrid-deployed-services.md rename to docs/zh/docs/hybrid_deployment/rubik/example_of_isolation_for_hybrid_deployed_services.md index fdeb3155d2626780613c3baa5ef60a4d68ed3989..531a3a7b03330bf638ae40dee610cd04191232fe 100644 --- a/docs/zh/docs/HybridDeployment/rubik/example-of-isolation-for-hybrid-deployed-services.md +++ b/docs/zh/docs/hybrid_deployment/rubik/example_of_isolation_for_hybrid_deployed_services.md @@ -1,233 +1,230 @@ -# 混部隔离示例 - -## 环境准备 - -查看内核是否支持混部隔离功能 - -```bash -# 查看/boot/config-系统配置是否开启混部隔离功能 -# 若CONFIG_QOS_SCHED=y则说明使能了混部隔离功能,例如: -cat /boot/config-5.10.0-60.18.0.50.oe2203.x86_64 | grep CONFIG_QOS -CONFIG_QOS_SCHED=y -``` - -安装docker容器引擎 - -```bash -yum install -y docker-engine -docker version -# 如下为docker version显示结果 -Client: - Version: 18.09.0 - EulerVersion: 18.09.0.300 - API version: 1.39 - Go version: go1.17.3 - Git commit: aa1eee8 - Built: Wed Mar 30 05:07:38 2022 - OS/Arch: linux/amd64 - Experimental: false - -Server: - Engine: - Version: 18.09.0 - EulerVersion: 18.09.0.300 - API version: 1.39 (minimum version 1.12) - Go version: go1.17.3 - Git commit: aa1eee8 - Built: Tue Mar 22 00:00:00 2022 - OS/Arch: linux/amd64 - Experimental: false -``` - -## 混部业务 - -**在线业务(clickhouse)** - -使用clickhouse-benchmark测试工具进行性能测试,统计出QPS/P50/P90/P99等相关性能指标,用法参考: - -**离线业务(stress)** - -stress是一个CPU密集型测试工具,可以通过指定--cpu参数启动多个并发CPU密集型任务给系统环境加压 - -## 使用说明 - -1)启动一个clickhouse容器(在线业务)。 - -2)进入容器内执行clickhouse-benchmark命令,设置并发线程数为10个、查询10000次、查询总时间30s。 - -3)同时启动一个stress容器(离线业务),并发执行10个CPU密集型任务对环境进行加压。 - -4)clickhouse-benchmark执行完后输出一个性能测试报告。 - -混部隔离测试脚本(**test_demo.sh**)如下: - -```bash -#!/bin/bash - -with_offline=${1:-no_offline} -enable_isolation=${2:-no_isolation} -stress_num=${3:-10} -concurrency=10 -timeout=30 -output=/tmp/result.json -online_container= -offline_container= - -exec_sql="echo \"SELECT * FROM system.numbers LIMIT 10000000 OFFSET 10000000\" | clickhouse-benchmark -i 10000 -c $concurrency -t $timeout" - -function prepare() -{ - echo "Launch clickhouse container." - online_container=$(docker run -itd \ - -v /tmp:/tmp:rw \ - --ulimit nofile=262144:262144 \ - -p 34424:34424 \ - yandex/clickhouse-server) - - sleep 3 - echo "Clickhouse container lauched." -} - -function clickhouse() -{ - echo "Start clickhouse benchmark test." - docker exec $online_container bash -c "$exec_sql --json $output" - echo "Clickhouse benchmark test done." -} - -function stress() -{ - echo "Launch stress container." - offline_container=$(docker run -itd joedval/stress --cpu $stress_num) - echo "Stress container launched." - - if [ $enable_isolation == "enable_isolation" ]; then - echo "Set stress container qos level to -1." - echo -1 > /sys/fs/cgroup/cpu/docker/$offline_container/cpu.qos_level - fi -} - -function benchmark() -{ - if [ $with_offline == "with_offline" ]; then - stress - sleep 3 - fi - clickhouse - echo "Remove test containers." - docker rm -f $online_container - docker rm -f $offline_container - echo "Finish benchmark test for clickhouse(online) and stress(offline) colocation." - echo "===============================clickhouse benchmark==================================================" - cat $output - echo "===============================clickhouse benchmark==================================================" -} - -prepare -benchmark -``` - -## 测试结果 - -单独执行clickhouse在线业务 - -```bash -sh test_demo.sh no_offline no_isolation -``` - -得到在线业务的QoS(QPS/P50/P90/P99等指标)**基线数据**如下: - -```json -{ -"localhost:9000": { -"statistics": { -"QPS": 1.8853412284364512, -...... -}, -"query_time_percentiles": { -...... -"50": 0.484905256, -"60": 0.519641313, -"70": 0.570876148, -"80": 0.632544937, -"90": 0.728295525, -"95": 0.808700418, -"99": 0.873945121, -...... -} -} -} -``` - -启用stress离线业务,未开启混部隔离功能下,执行test_demo.sh测试脚本 - -```bash -# with_offline参数表示启用stress离线业务 -# no_isolation参数表示未开启混部隔离功能 -sh test_demo.sh with_offline no_isolation -``` - -**未开启混部隔离的情况下**,clickhouse业务QoS数据(QPS/P80/P90/P99等指标)如下: - -```json -{ -"localhost:9000": { -"statistics": { -"QPS": 0.9424028693636205, -...... -}, -"query_time_percentiles": { -...... -"50": 0.840476774, -"60": 1.304607373, -"70": 1.393591017, -"80": 1.41277543, -"90": 1.430316688, -"95": 1.457534764, -"99": 1.555646855, -...... -} -} -``` - -启用stress离线业务,开启混部隔离功能下,执行test_demo.sh测试脚本 - -```bash -# with_offline参数表示启用stress离线业务 -# enable_isolation参数表示开启混部隔离功能 -sh test_demo.sh with_offline enable_isolation -``` - -**开启混部隔离功能的情况下**,clickhouse业务QoS数据(QPS/P80/P90/P99等指标)如下: - -```json -{ -"localhost:9000": { -"statistics": { -"QPS": 1.8825798759270718, -...... -}, -"query_time_percentiles": { -...... -"50": 0.485725185, -"60": 0.512629901, -"70": 0.55656488, -"80": 0.636395956, -"90": 0.734695906, -"95": 0.804118275, -"99": 0.887807409, -...... -} -} -} -``` - -从上面的测试结果整理出一个表格如下: - -| 业务部署方式 | QPS | P50 | P90 | P99 | -| -------------------------------------- | ------------- | ------------- | ------------- | ------------- | -| 单独运行clickhouse在线业务(基线) | 1.885 | 0.485 | 0.728 | 0.874 | -| clickhouse+stress(未开启混部隔离功能) | 0.942(-50%) | 0.840(-42%) | 1.430(-49%) | 1.556(-44%) | -| clickhouse+stress(开启混部隔离功能) | 1.883(-0.11%) | 0.486(-0.21%) | 0.735(-0.96%) | 0.888(-1.58%) | - -在未开启混部隔离功能的情况下,在线业务clickhouse的QPS从1.9下降到0.9,同时业务的响应时延(P90)也从0.7s增大到1.4s,在线业务QoS下降了50%左右;而在开启混部隔离功能的情况下,不管是在线业务的QPS还是响应时延(P50/P90/P99)相比于基线值下降不到2%,在线业务QoS基本没有变化。 +# 混部隔离示例 + +## 环境准备 + +查看内核是否支持混部隔离功能。 + +```bash +# 查看/boot/config-系统配置是否开启混部隔离功能 +# 若 CONFIG_QOS_SCHED=y 则说明使能了混部隔离功能,例如: +cat /boot/config-5.10.0-60.18.0.50.oe2203.x86_64 | grep CONFIG_QOS +CONFIG_QOS_SCHED=y +``` + +安装 docker 容器引擎。 + +```bash +yum install -y docker-engine +docker version +# 如下为 docker version 显示结果 +Client: + Version: 18.09.0 + EulerVersion: 18.09.0.325 + API version: 1.39 + Go version: go1.17.3 + Git commit: ce4ae23 + Built: Mon Jun 26 12:56:54 2023 + OS/Arch: linux/arm64 + Experimental: false + +Server: + Engine: + Version: 18.09.0 + EulerVersion: 18.09.0.325 + API version: 1.39 (minimum version 1.12) + Go version: go1.17.3 + Git commit: ce4ae23 + Built: Mon Jun 26 12:56:10 2023 + OS/Arch: linux/arm64 + Experimental: false +``` + +## 混部业务 + +### 在线业务 (clickhouse) + +使用 clickhouse-benchmark 测试工具进行性能测试,统计出 QPS/P50/P90/P99 等相关性能指标,用法参考: + +### 离线业务 (stress) + +stress 是一个 CPU 密集型测试工具,可以通过指定--cpu 参数启动多个并发 CPU 密集型任务给系统环境加压。 + +## 使用说明 + +1. 启动一个 clickhouse 容器(在线业务)。 + +2. 进入容器内执行 clickhouse-benchmark 命令,设置并发线程数为 10 个、查询 10000 次、查询总时间 30s。 + +3. 同时启动一个 stress 容器(离线业务),并发执行 10 个 CPU 密集型任务对环境进行加压。 + +4. clickhouse-benchmark 执行完后输出一个性能测试报告。 + +混部隔离测试脚本 (**test_demo.sh**) 如下: + +```bash +#!/bin/bash + +with_offline=${1:-no_offline} +enable_isolation=${2:-no_isolation} +stress_num=${3:-10} +concurrency=10 +timeout=30 +output=/tmp/result.json +online_container= +offline_container= + +exec_sql="echo \"SELECT * FROM system.numbers LIMIT 10000000 OFFSET 10000000\" | clickhouse-benchmark -i 10000 -c $concurrency -t $timeout" + +function prepare() { + echo "Launch clickhouse container." + online_container=$(docker run -itd \ + -v /tmp:/tmp:rw \ + --ulimit nofile=262144:262144 \ + -p 34424:34424 \ + yandex/clickhouse-server) + + sleep 3 + echo "Clickhouse container launched." +} + +function clickhouse() { + echo "Start clickhouse benchmark test." + docker exec $online_container bash -c "$exec_sql --json $output" + echo "Clickhouse benchmark test done." +} + +function stress() { + echo "Launch stress container." + offline_container=$(docker run -itd joedval/stress --cpu $stress_num) + echo "Stress container launched." + + if [ $enable_isolation == "enable_isolation" ]; then + echo "Set stress container qos level to -1." + echo -1 > /sys/fs/cgroup/cpu/docker/$offline_container/cpu.qos_level + fi +} + +function benchmark() { + if [ $with_offline == "with_offline" ]; then + stress + sleep 3 + fi + clickhouse + echo "Remove test containers." + docker rm -f $online_container + docker rm -f $offline_container + echo "Finish benchmark test for clickhouse(online) and stress(offline) colocation." + echo "===============================clickhouse benchmark==================================================" + cat $output + echo "===============================clickhouse benchmark==================================================" +} + +prepare +benchmark +``` + +## 测试结果 + +单独执行 clickhouse 在线业务。 + +```bash +sh test_demo.sh no_offline no_isolation +``` + +得到在线业务的 QoS(QPS/P50/P90/P99 等指标)**基线数据**如下: + +```json +{ + "localhost:9000": { + "statistics": { + "QPS": 1.8853412284364512, + ...... + } + }, + "query_time_percentiles": { + ...... + "50": 0.484905256, + "60": 0.519641313, + "70": 0.570876148, + "80": 0.632544937, + "90": 0.728295525, + "95": 0.808700418, + "99": 0.873945121, + ...... + } +} +``` + +启用 stress 离线业务,未开启混部隔离功能下,执行 test_demo.sh 测试脚本。 + +```bash +# with_offline 参数表示启用 stress 离线业务 +# no_isolation 参数表示未开启混部隔离功能 +sh test_demo.sh with_offline no_isolation +``` + +**未开启混部隔离的情况下**,clickhouse 业务 QoS 数据 (QPS/P80/P90/P99 等指标)如下: + +```json +{ + "localhost:9000": { + "statistics": { + "QPS": 0.9424028693636205, + ...... + } + }, + "query_time_percentiles": { + ...... + "50": 0.840476774, + "60": 1.304607373, + "70": 1.393591017, + "80": 1.41277543, + "90": 1.430316688, + "95": 1.457534764, + "99": 1.555646855, + ...... + } +} +``` + +启用 stress 离线业务,开启混部隔离功能下,执行 test_demo.sh 测试脚本。 + +```bash +# with_offline 参数表示启用 stress 离线业务 +# enable_isolation 参数表示开启混部隔离功能 +sh test_demo.sh with_offline enable_isolation +``` + +**开启混部隔离功能的情况下**,clickhouse 业务 QoS 数据 (QPS/P80/P90/P99 等指标)如下: + +```json +{ + "localhost:9000": { + "statistics": { + "QPS": 1.8825798759270718, + ...... + } + }, + "query_time_percentiles": { + ...... + "50": 0.485725185, + "60": 0.512629901, + "70": 0.55656488, + "80": 0.636395956, + "90": 0.734695906, + "95": 0.804118275, + "99": 0.887807409, + ...... + } +} +``` + +从上面的测试结果整理出一个表格如下: + +| 业务部署方式 | QPS | P50 | P90 | P99 | +| -------------------------------------- | ------------- | ------------- | ------------- | ------------- | +| 单独运行 clickhouse 在线业务(基线) | 1.885 | 0.485 | 0.728 | 0.874 | +| clickhouse+stress(未开启混部隔离功能) | 0.942(-50%) | 0.840(-42%) | 1.430(-49%) | 1.556(-44%) | +| clickhouse+stress(开启混部隔离功能) | 1.883(-0.11%) | 0.486(-0.21%) | 0.735(-0.96%) | 0.888(-1.58%) | + +在未开启混部隔离功能的情况下,在线业务 clickhouse 的 QPS 从 1.9 下降到 0.9,同时业务的响应时延 (P90) 也从 0.7s 增大到 1.4s,在线业务 QoS 下降了 50% 左右;而在开启混部隔离功能的情况下,不管是在线业务的 QPS 还是响应时延 (P50/P90/P99) 相比于基线值下降不到 2%,在线业务 QoS 基本没有变化。 diff --git a/docs/zh/docs/hybrid_deployment/rubik/feature_introduction.md b/docs/zh/docs/hybrid_deployment/rubik/feature_introduction.md new file mode 100644 index 0000000000000000000000000000000000000000..07cc3d6453d0fdcc96b29b39a432b250d0728d0b --- /dev/null +++ b/docs/zh/docs/hybrid_deployment/rubik/feature_introduction.md @@ -0,0 +1,510 @@ +# 特性介绍 + +## preemption 绝对抢占 + +rubik支持业务优先级配置,针对在离线业务混合部署的场景,确保在线业务相对离线业务的资源抢占。目前仅支持CPU资源和内存资源。 + +使用该特性,用户需开启rubik的绝对抢占特性。 + +```yaml +... + "agent": { + "enabledFeatures": [ + "preemption" + ] + }, + "preemption": { + "resource": [ + "cpu", + "memory" + ] + } +... +``` + +配置参数详见[配置文档](./configuration.md#preemption)。 + +同时,用户需要在pod的yaml注解中增加`volcano.sh/preemptable`字段来指定业务优先级。业务优先级配置示例如下: + +```yaml +annotations: + volcano.sh/preemptable: true +``` + +> [!NOTE]说明 +> +> 在rubik中,所有特性均通过识别`volcano.sh/preemptable`注解作为业务在离线标志。true代表业务为离线业务,false代表业务为在线业务。 + +### CPU绝对抢占 + +针对在离线业务混合部署的场景,确保在线业务相对离线业务的CPU资源抢占。 + +**前置条件** + +- 内核支持针对cgroup的cpu优先级配置,cpu子系统存在接口`cpu.qos_level`。建议使用内核版本openEuler-22.03+。 + +**内核接口** + +- /sys/fs/cgroup/cpu 目录下容器的 cgroup 中,如`/sys/fs/cgroup/cpu/kubepods/burstable//`目录。 +- cpu.qos_level:开启 CPU 优先级配置,默认值为 0, 有效值为 0 和-1。 + - 0:标识为在线业务。 + - -1:标识为离线业务。 + +### 内存绝对抢占 + +针对在离线业务混合部署的场景,确保系统内存不足时优先杀死离线业务。 + +**前置条件** + +- 内核支持针对cgroup的memory优先级配置,memory子系统存在接口`memory.qos_level`。建议使用内核版本openEuler-22.03+。 +- 开启内存优先级支持: `echo 1 > /proc/sys/vm/memcg_qos_enable` + +**内核接口** + +- /proc/sys/vm/memcg_qos_enable:开启内存优先级特性,默认值为 0,有效值为 0 和 1。开启命令为:`echo 1 > /proc/sys/vm/memcg_qos_enable`。 + - 0:表示关闭特性。 + - 1:表示开启特性。 + +- /sys/fs/cgroup/memory 目录下容器的 cgroup 中,如`/sys/fs/cgroup/memory/kubepods/burstable//`目录 + - memory.qos_level:开启内存优先级配置,默认值为 0,有效值为 0 和-1。 + - 0:标识为在线业务。 + - -1:标识为离线业务。 + +## dynCache 访存带宽和LLC限制 + +rubik 支持业务的 Pod 访存带宽(memory bandwidth)和 LLC(Last Level Cache)限制,通过限制离线业务的访存带宽/LLC 使用,减少其对在线业务的干扰。 + +**前置条件**: + +- cache/访存限制功能仅支持物理机,不支持虚拟机。 + - X86 物理机,需要 OS 支持且开启 intel RDT 的 CAT 和 MBA 功能,内核启动项 cmdline 需要添加`rdt=l3cat,mba` + - ARM 物理机,需要 OS 支持且开启 mpam 功能,内核启动项需要添加`mpam=acpi`。 +- 由于内核限制,RDT mode 当前不支持 pseudo-locksetup 模式。 +- 用户需手动挂载目录`/sys/fs/resctrl`。 rubik 需要读取和设置`/sys/fs/resctrl` 目录下的文件,该目录需在 rubik 启动前挂载,且需保障在 rubik 运行过程中不被卸载。 +- rubik运行依赖SYS_ADMIN权限. 设置主机`/sys/fs/resctrl` 目录下的文件需要 rubik 容器被赋有 SYS_ADMIN 权限。 +- rubik 需要获取业务容器进程在主机上的 pid,所以 rubik 容器需与主机共享 pid namespace。 + +**rubik rdt 控制组**: + +rubik 在 RDT resctrl 目录(默认为 /sys/fs/resctrl)下创建 5 个控制组,分别为 rubik_max、rubik_high、rubik_middle、rubik_low、rubik_dynamic。rubik 启动后,将水位线写入对应控制组的 schemata。其中,low、middle、high 的水位线可在 dynCache 中配置;max 控制组为默认最大值,dynamic 控制组初始水位线和 low 控制组一致。 + +**rubik dynamic 控制组**: + +当存在 level 为 dynamic 的离线 Pod 时,rubik 通过采集当前节点在线业务 Pod 的 cache miss 和 llc miss 指标,调整 rubik_dynamic 控制组的水位线,实现对 dynamic 控制组内离线应用 Pod 的动态控制。 + +### 为Pod设置访存带宽和LLC限制 + +rubik支持两种方式为业务Pod配置访存带宽和LLC控制组: + +- 全局方式 + 用户可在rubik的全局参数中配置`defaultLimitMode`字段,rubik会自动为离线业务Pod(即绝对抢占特性中的注解`volcano.sh/preemptable`)配置控制组。 + - 取值为`static`时,pod将被加入到`rubik_max`控制组。 + - 取值为`dynamic`时,pod将被加入到`rubik_dynamic`控制组。 + +- 手动指定 + 用户可手动通过为业务Pod增加注解`volcano.sh/cache-limit`设置其 cache level, 并被加入到指定的控制组中。如下列配置的pod将被加入rubik_low控制组: + + ```yaml + annotations: + volcano.sh/cache-limit: "low" + ``` + +> [!NOTE]说明 +> +> - cache限制只针对离线业务。 +> +> - 手动指定注解优先于全局方式。即,若用户在rubik的全局参数中配置了`defaultLimitMode`字段,并且在业务 Pod yaml 中指定了cache level,则dynCache限制将以Pod yaml中的注解为准。 + +### dynCache 内核接口 + +- /sys/fs/resctrl: 在该目录下创建 5 个控制组目录,并修改其 schemata 和 tasks 文件。 + +### dynCache 配置详解 + +dynCache 功能相关的配置如下: + +```json +"agent": { + "enabledFeatures": [ + "dynCache" + ] +}, +"dynCache": { + "defaultLimitMode": "static", + "adjustInterval": 1000, + "perfDuration": 1000, + "l3Percent": { + "low": 20, + "mid": 30, + "high": 50 + }, + "memBandPercent": { + "low": 10, + "mid": 30, + "high": 50 + } +} +``` + +配置参数详见[配置文档](./%E9%85%8D%E7%BD%AE%E6%96%87%E6%A1%A3.md#dyncache)。 + +- l3Percent 和 memBandPercent: + + 通过 l3Percent 和 memBandPercent 配置 low, mid, high 控制组的水位线。 + + 比如当环境的`rdt bitmask=fffff, numa=2`时,rubik_low 的控制组将根据 l3Percent low=20 和 memBandPercent low=10 两个参数,将为/sys/fs/resctrl/rubik_low 控制组配置: + + ```bash + L3:0=f;1=f + MB:0=10;1=10 + ``` + +- defaultLimitMode: + + 如果离线 Pod 未指定`volcano.sh/cache-limit`注解,将根据 dynCache 的 defaultLimitMode 来决定 Pod 将被加入哪个控制组。 +- adjustInterval: + + dynCache 动态调整 rubik_dynamic 控制组的间隔时间,单位 ms,默认 1000ms。 +- perfDuration: + + dynCache 性能 perf 执行时长,单位 ms,默认 1000ms。 + +### dynCache 注意事项 + +- dynCache 仅针对离线 Pod,对在线业务不生效。 +- 若业务容器运行过程中被手动重启(容器 ID 不变但容器进程 PID 变化),针对该容器的 dynCache 无法生效。 +- 业务容器启动并已设置 dynCache 级别后,不支持对其限制级别进行修改。 +- 动态限制组的调控灵敏度受到 rubik 配置文件内 adjustInterval、perfDuration 值以及节点在线业务 Pod 数量的影响,每次调整(若干扰检测结果为需要调整)间隔在区间[adjustInterval+perfDuration, adjustInterval+perfDuration*Pod 数量]内波动,用户可根据灵敏度需求调整配置项。 + +## dynMemory 内存异步分级回收 + +rubik 中支持多种内存策略。针对不同场景使用不同的内存分配方案,以解决多场景内存分配。目前仅支持fssr策略。 + +### fssr 策略 + +fssr策略是基于内核 cgroup 的动态水位线快压制慢恢复策略。memory.high 是内核提供的 memcg 级的水位线接口,rubik 动态检测内存压力,动态调整离线应用的 memory.high 上限,实现对离线业务的内存压制,保障在线业务的服务质量。 + +其核心为: + +- rubik启动时计算预留内存,默认为总内存的10%,如果总内存的10%超过10G,则为10G。 +- 配置离线容器的cgroup级别水位线,内核提供`memory.high`和`memory.high_async_ratio`两个接口,分别配置cgroup的软上限和警戒水位线。启动rubik时默认配置`memory.high`为`total_memory`(总内存)`*`80%。 +- 获取剩余内存free_memory。 +- free_memory小于预留内存reserved_memory时降低离线的memory.high,每次降低总内存的10%,total_memory`*`10%。 +- 持续一分钟free_memory>2`*`reserved_memory时提高离线的memory.high,每次提升总内存的1%,total_memory`*`1%。 + +**内核接口** + +- memory.high + +### dynMemory 配置详解 + +rubik 提供 dynMemory 的指定策略,在`dynMemory`中 + +```json +"dynMemory": { + "policy": "fssr" +} +``` + +- policy 为 memory 的策略名称,支持 fssr 选项。 + +## 支持弹性限流 + +为有效解决由业务CPU限流导致QoS下降的问题,rubik容器提供了弹性限流功能,允许容器使用额外的CPU资源,从而保证业务的平稳运行。弹性限流方案包括内核态和用户态配置两种。二者不可同时使用。 + +用户态通过Linux内核提供的`CFS bandwidth control`能力实现,在保障整机负载水位安全稳定及不影响其他业务运行的前提下,通过双水位机制允许业务容器自适应调整CPU限制,缓解CPU资源瓶颈,提高业务的运行性能。 + +内核态通过Linux内核提供的`CPU burst`能力,允许容器短时间内突破其cpu使用限制。内核态配置需要用户手动设置和修改每个pod的burst值的大小,rubik不作自适应调整。 + +### quotaTurbo 用户态解决方案 + +用户手动为需要自适应调整CPU限额的业务Pod指定“volcano.sh/quota-turbo="true"”注解,(仅针对限额Pod生效,即yaml中指定CPULimit)。 +弹性限流用户态策略根据当前整机CPU负载和容器运行情况定时调整白名单容器的CPU quota,并在启停rubik时自动检验并恢复全部容器的quota值 (本节描述的CPU quota指容器当前的cpu.cfs_quota_us参数)。调整策略包括: + +1. 整机CPU负载低于警戒水位时,若白名单容器在当前周期受到CPU压制,则rubik按照压制情况缓慢提升容器CPU quota。单轮容器Quota提升总量最多不超过当前节点总CPU quota的1%。 +2. 整机CPU负载高于高水位时,若白名单容器在当前周期未受到CPU压制,则rubik依据水位慢速回调容器quota值。 +3. 整机CPU负载高于警戒水位时,若白名单容器当前Quota值超过配置值,则rubik快速回落所有容器CPU quota值,尽力保证负载低于警戒水位。 +4. 容器最大可调整CPU quota不超过2倍用户配置值(例如Pod yaml中指定CPUlimit参数),但不应小于用户配置值。 +5. 容器在60个同步间隔时间内的整体CPU利用率不得超过用户配置值。 +6. 若节点在1分钟内整体 CPU 利用率超过10%,则本轮不提升容器配额。 + +**内核接口** + +/sys/fs/cgroup/cpu 目录下容器的 cgroup 中,如`/sys/fs/cgroup/cpu,cpuacct/kubepods/burstable//`目录,涉及下列文件中: + +- cpu.cfs_quota_us +- cpu.cfs_period_us +- cpu.stat + +#### quotaTurbo配置详解 + +quotaTurbo 功能相关的配置如下: + +```json +"agent": { + "enabledFeatures": [ + "quotaTurbo" + ] + }, +"quotaTurbo": { + "highWaterMark": 60, + "alarmWaterMark": 80, + "syncInterval": 100 +} +``` + +配置参数详见[配置文档](./%E9%85%8D%E7%BD%AE%E6%96%87%E6%A1%A3.md#quotaturbo)。 + +- highWaterMark是CPU负载的高水位值。 +- alarmWaterMark是CPU负载的警戒水位值。 +- syncInterval是触发容器quota值更新的间隔(单位:毫秒)。 + +用户手动为需要业务Pod指定`volcano.sh/quota-turbo="true"`注解。示例如下: + +```yaml +metadata: + annotations: + # true表示列入quotaturbo特性的白名单中 + volcano.sh/quota-turbo : "true" +``` + +### quotaBurst 内核态解决方案 + +quotaBurst通过配置容器的`cpu.cfs_burst_us`内核接口,允许容器在其 cpu 使用量低于 quota 时累积 cpu 资源,并在 cpu 使用量超过 quota 时,使用容器累积的 cpu 资源。 + +**内核接口** + +/sys/fs/cgroup/cpu 目录下容器的 cgroup 中,如`/sys/fs/cgroup/cpu/kubepods/burstable//`目录,注解的值将被写入下列文件中: + +- cpu.cfs_burst_us + +> [!NOTE]说明 +> +> 内核态通过内核接口cpu.cfs_burst_us实现。支持内核态配置需要确认cgroup的cpu子系统目录下存在cpu.cfs_burst_us文件,其值约束如下: +> +> - 当cpu.cfs_quota_us的值不为-1时,需满足cfs_burst_us + cfs_quota_us <= $2^{44}$-1 且 cfs_burst_us <= cfs_quota_us。 +> - 当cpu.cfs_quota_us的值为-1时,CPU burst功能不生效,cfs_burst_us默认为0,不支持配置其他任何值。 + +#### quotaBurst配置详解 + +quotaBurst 功能相关的配置如下: + +```json +"agent": { + "enabledFeatures": [ + "quotaBurst" + ] +} +``` + +用户手动为需要业务Pod指定`volcano.sh/quota-burst-time`注解,或者在 Pod 运行期间通过 kubectl annotate 进行动态的修改。 + +- 创建时:在 yaml 文件中 + + ```yaml + metadata: + annotations: + # 默认单位是 microseconds + volcano.sh/quota-burst-time : "2000" + ``` + +- 修改注解: 可通过 kubectl annotate 动态修改,如: + + ```bash + kubectl annotate --overwrite pods volcano.sh/quota-burst-time='3000' + ``` + +### 约束限制 + +- 用户态通过CFS bandwidth control调整cpu.cfs_period_us和cpu.cfs_quota_us参数实现CPU带宽控制。因此用户态约束如下: + - 禁止第三方更改CFS bandwidth control相关参数(包括但不限于cpu.cfs_quota_us、cpu.cfs_period_us等文件),以避免未知错误。 + - 禁止与具有限制CPU资源功能的同类产品同时使用,否则导致用户态功能无法正常使用。 + - 若用户监控CFS bandwidth control相关指标,使用本特性可能会破坏监测指标的一致性。 +- 内核态约束如下: + - 用户应使用k8s接口设置pod的busrt值,禁止用户手动直接修改容器的cpu cgroup目录下的cpu.cfs_burst_us文件。 +- 禁止用户同时使能弹性限流用户态和内核态方案。 + +## ioCost 支持iocost对IO权重控制 + +为了有效解决由离线业务IO占用过高,导致在线业务QoS下降的问题,rubik容器提供了基于cgroup v1 iocost的IO权重控制功能。 +资料参见: +[iocost内核相关功能介绍](https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html#io:~:text=correct%20memory%20ownership.-,IO,-%C2%B6)。 + +**前置条件** + +rubik 支持通过在 cgroup v1 下的 iocost 控制不同 Pod 的 io 权重分配。因此需要内核支持如下特性: + +- 内核支持 cgroup v1 blkcg iocost +- 内核支持 cgroup v1 writeback + +即在 blkcg 根系统文件下存在`blkio.cost.qos`和`blkio.cost.model`两个文件接口。实现方式和接口说明可以访问 openEuler 内核文档。 + +### ioCost实现说明 + +![iocost implement](./figures/iocost.PNG) + +步骤如下: + +- 部署 rubik 时,rubik 解析配置并设置 iocost 相关参数。 +- rubik 注册检测事件到 k8s api-server。 +- Pod 被部署时将 Pod 配置信息等回调到 rubik。 +- rubik 解析 Pod 配置信息,并根据 qos level 配置 Pod iocost 权重。 + +### ioCost配置说明 + +```json +"agent": { + "enabledFeatures": [ + "ioCost" + ] +} +"ioCost": [{ + "nodeName": "k8s-single", + "config": [ + { + "dev": "sdb", + "enable": true, + "model": "linear", + "param": { + "rbps": 10000000, + "rseqiops": 10000000, + "rrandiops": 10000000, + "wbps": 10000000, + "wseqiops": 10000000, + "wrandiops": 10000000 + } + } + ] +}] +``` + +配置参数详见[配置文档](./%E9%85%8D%E7%BD%AE%E6%96%87%E6%A1%A3.md#iocost)。 + +> [!NOTE]说明 +> +> iocost linear 模型相关参数可以通过 iocost_coef_gen.py 脚本获取,可以从[此链接](https://github.com/torvalds/linux/blob/master/tools/cgroup/iocost_coef_gen.py)获得。 + +## PSI 支持基于PSI指标的干扰检测 + +rubik支持观察在线Pod的PSI指标判断当前在线业务的压力,并通过驱逐离线Pod、日志告警等手段预警。rubik以`some avg10`作为指标。它表示任一任务在10s内的平均阻塞时间占比。用户可按需选择对CPU、内存、IO资源进行监测,并设置相应阈值。若阻塞占比超过该阈值,则rubik按照一定策略驱逐离线Pod,释放相应资源。若在线Pod的CPU和内存利用率偏高,rubik会驱逐当前占用CPU资源/内存资源最多的离线业务。若离线业务I/O高,则会选择驱逐CPU资源占用最多的离线业务。 + +在离线业务由注解`volcano.sh/preemptable="true"/"false"`标识。 + +```yaml +annotations: + volcano.sh/preemptable: true +``` + +**前置条件** + +rubik 依赖于 cgroup v1 下的 psi 特性。openEuler 2203及以上版本支持psi cgroup v1接口。 +通过如下方法查看当前内核是否开启cgroup v1的psi接口: + +```bash +cat /proc/cmdline | grep "psi=1 psi_v1=1" +``` + +若无,则为内核启动命令行新增参数: + +```bash +# 查看内核版本号 +uname -a +# 配置内核的boot文件 +grubby --update-kernel="$(grubby --default-kernel)" --args="psi=1 psi_v1=1" +# 重启 +reboot +``` + +**内核接口** + +/sys/fs/cgroup/cpuacct 目录下容器的 cgroup 中,如`/sys/fs/cgroup/cpu,cpuacct/kubepods/burstable//`目录,涉及下列文件中: + +- cpu.pressure +- memory.pressure +- io.pressure + +### psi配置说明 + +```json +"agent": { + "enabledFeatures": [ + "psi" + ] +} +"psi": { + "interval": 10, + "resource": [ + "cpu", + "memory", + "io" + ], + "avg10Threshold": 5.0 +} +``` + +配置参数详见[配置文档](./%E9%85%8D%E7%BD%AE%E6%96%87%E6%A1%A3.md#psi)。 + +## CPU驱逐水位线控制 + +rubik支持通过根据节点CPU利用率驱逐离线Pod从而避免节点CPU资源过载。用户可以配置CPU驱逐水位线,rubik会统计指定窗口期间节点的平均CPU利用率。若窗口期内平均CPU利用率大于CPU驱逐水位线,则rubik则驱逐资源利用率高且运行时间较短的离线Pod,释放相应资源。 + +> [!NOTE]说明 +> +> 在离线业务由注解`volcano.sh/preemptable="true"/"false"`标识。 +> +> ```yaml +> annotations: +> volcano.sh/preemptable: true +> ``` + +**配置说明** + +```json +{ + "agent": { + "enabledFeatures": [ + "cpuevict" + ] + } + "cpuevict": { + "threshold": 60, + "interval": 1, + "windows": 2, + "cooldown": 20 + } +} +``` + +配置参数详见[配置文档](./%E9%85%8D%E7%BD%AE%E6%96%87%E6%A1%A3.md#cpu驱逐水位线控制)。 + +## 内存驱逐水位线控制 + +rubik支持通过根据节点内存利用率驱逐离线Pod从而避免节点内存资源过载。用户可以配置内存驱逐水位线。若节点内存利用率大于内存驱逐水位线,则rubik则驱逐资源利用率高且运行时间较短的离线Pod,释放相应资源。 + +> [!NOTE]说明 +> +> 在离线业务由注解`volcano.sh/preemptable="true"/"false"`标识。 +> +> ```yaml +> annotations: +> volcano.sh/preemptable: true +> ``` + +**配置说明** + +```json +{ + "agent": { + "enabledFeatures": [ + "memoryevict" + ] + } + "memoryevict": { + "threshold": 60, + "interval": 1, + "cooldown": 4 + } +} +``` + +配置参数详见[配置文档](./%E9%85%8D%E7%BD%AE%E6%96%87%E6%A1%A3.md#内存驱逐水位线控制)。 diff --git a/docs/zh/docs/hybrid_deployment/rubik/figures/icon-note.gif b/docs/zh/docs/hybrid_deployment/rubik/figures/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..eebb838c275843dfaf5b402c550e64eb887c1035 Binary files /dev/null and b/docs/zh/docs/hybrid_deployment/rubik/figures/icon-note.gif differ diff --git a/docs/zh/docs/hybrid_deployment/rubik/figures/iocost.PNG b/docs/zh/docs/hybrid_deployment/rubik/figures/iocost.PNG new file mode 100644 index 0000000000000000000000000000000000000000..c3eae863ad15d79d7e36c44799fc4dc946e8ca26 Binary files /dev/null and b/docs/zh/docs/hybrid_deployment/rubik/figures/iocost.PNG differ diff --git a/docs/zh/docs/hybrid_deployment/rubik/installation_and_deployment.md b/docs/zh/docs/hybrid_deployment/rubik/installation_and_deployment.md new file mode 100644 index 0000000000000000000000000000000000000000..ca2514fca6af45dc99952068bdab5fddf0e3215c --- /dev/null +++ b/docs/zh/docs/hybrid_deployment/rubik/installation_and_deployment.md @@ -0,0 +1,156 @@ +# 安装与部署 + +## 概述 + +本章节主要介绍 rubik 组件的安装以及部署方式,以openEuler 24.03-LTS-SP1版本为例进行部署。 + +## 软硬件要求 + +### 硬件要求 + +* 当前仅支持 x86、aarch64 架构。 +* rubik 磁盘使用需求:配额 1GB 及以上。 +* rubik 内存使用需求:配额 100MB 及以上。 + +### 软件要求 + +* 操作系统:openEuler 24.03-LTS-SP1。 +* 内核:openEuler 24.03-LTS-SP1 版本内核。 + +### 环境准备 + +* 安装 openEuler 系统。 +* 安装并部署 kubernetes。 +* 安装 docker 或 containerd 容器引擎。 + +## 安装 rubik + +rubik 以`DaemonSet`形式部署在 k8s 的每一个节点上,故需要在每一个节点上使用以下步骤安装 rubik rpm 包。 + +1. 配置 yum 源:rubik组件位于openEuler EPOL源中,以openEuler 24.03-LTS-SP1版本为例,参考如下: + + ```sh + # openEuler 24.03-LTS-SP1 官方发布源 + name=openEuler24.03-LTS-SP1 + baseurl=https://repo.openeuler.org/openEuler-24.03-LTS-SP1/everything/$basearch/ + enabled=1 + gpgcheck=1 + gpgkey=https://repo.openeuler.org/openEuler-24.03-LTS-SP1/everything/$basearch/RPM-GPG-KEY-openEuler + ``` + + ```sh + # openEuler 24.03-LTS-SP1:Epol 官方发布源 + name=openEuler24.03-LTS-SP1-Epol + baseurl=https://repo.openeuler.org/openEuler-24.03-LTS-SP1/EPOL/$basearch/ + enabled=1 + gpgcheck=1 + gpgkey=https://repo.openeuler.org/openEuler-24.03-LTS-SP1/everything/$basearch/RPM-GPG-KEY-openEuler + ``` + +2. 使用 root 权限安装 rubik: + + ```shell + sudo yum install -y rubik + ``` + +> [!NOTE]说明 +> +> rubik 工具相关文件会安装在/var/lib/rubik 目录下。 + +## 部署 rubik + +rubik 以容器形式运行在混合部署场景下的 k8s 集群中,用于对不同优先级业务进行资源隔离和限制,避免离线业务对在线业务产生干扰,在提高资源总体利用率的同时保障在线业务的服务质量。当前 rubik 支持对 CPU、内存资源进行隔离和限制等特性,需配合 openEuler 24.03-LTS-SP1 版本的内核使用。若用户想要开启内存优先级特性(即针对不同优先级业务实现内存资源的分级),需要通过设置/proc/sys/vm/memcg_qos_enable 开关,有效值为 0 和 1,其中 0 为默认值表示关闭特性,1 表示开启特性。 + +```bash +sudo echo 1 > /proc/sys/vm/memcg_qos_enable +``` + +### 部署 rubik daemonset + +1. 构建rubik镜像:使用`/var/lib/rubik/build_rubik_image.sh`脚本自动构建或者直接使用 docker容器引擎构建 rubik 镜像。由于 rubik 以 daemonSet 形式部署,故每一个节点都需要 rubik 镜像。用户可以在一个节点构建镜像后使用 docker save/load 功能将 rubik 镜像 load 到 k8s 的每一个节点,也可以在各节点上都构建一遍 rubik 镜像。以 docker 为例,其构建命令如下: + + ```sh + docker build -f /var/lib/rubik/Dockerfile -t rubik:2.0.1-2 . + ``` + +2. 在 k8s master 节点,修改`/var/lib/rubik/rubik-daemonset.yaml`文件中的 rubik 镜像名,与上一步构建出来的镜像名保持一致。 + + ```yaml + ... + containers: + - name: rubik-agent + image: rubik_image_name_and_tag # 此处镜像名需与上一步构建的 rubik 镜像名一致 + imagePullPolicy: IfNotPresent + ... + ``` + +3. 在 k8s master 节点,使用 kubectl 命令部署 rubik daemonset,rubik 会自动被部署在 k8s 的所有节点: + + ```sh + kubectl apply -f /var/lib/rubik/rubik-daemonset.yaml + ``` + +4. 使用`kubectl get pods -A`命令查看 rubik 是否已部署到集群每一个节点上(rubik-agent 数量与节点数量相同且均为 Running 状态): + + ```sh + [root@localhost rubik]# kubectl get pods -A | grep rubik + NAMESPACE NAME READY STATUS RESTARTS AGE + ... + kube-system rubik-agent-76ft6 1/1 Running 0 4s + ... + ``` + +## 常用配置说明 + +通过以上方式部署的 rubik 将以默认配置启动,用户可以根据实际需要修改 rubik 配置,可通过修改 rubik-daemonset.yaml 文件中的 config.json 段落内容后重新部署 rubik daemonset 实现。以下介绍几个常见配置,其他配置详见 [配置文档](./configuration.md)。 + +### Pod 绝对抢占特性 + +用户在开启了 rubik 绝对抢占特性后,仅需在部署业务 Pod 时在 yaml 中通过 annotation 指定其优先级。部署后 rubik 会自动感知当前节点 Pod 的创建与更新,并根据用户配置的优先级设置 Pod 优先级。对于已经启动的或者更改注解的Pod, rubik 会自动更正Pod的优先级配置。 + +```yaml +... + "agent": { + "enabledFeatures": [ + "preemption" + ] + }, + "preemption": { + "resource": [ + "cpu", + "memory" + ] + } +... +``` + +> [!NOTE]说明 +> +> 优先级配置仅支持Pod由在线切换为离线,不允许由离线切换为在线。 + +## 在/离线业务配置示例 + +rubik 部署成功后,用户在部署实际业务时,可以根据以下配置示例对业务 yaml 文件进行修改,指定业务的在离线类型,rubik 即可在业务部署后对其优先级进行配置,从而达到资源隔离的目的。 + +以下为部署一个 nginx 在线业务的示例: + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: nginx + namespace: qosexample + annotations: + volcano.sh/preemptable: "false" # volcano.sh/preemptable 为 true 代表业务为离线业务,false 代表业务为在线业务,默认为 false +spec: + containers: + - name: nginx + image: nginx + resources: + limits: + memory: "200Mi" + cpu: "1" + requests: + memory: "200Mi" + cpu: "1" +``` diff --git a/docs/zh/docs/hybrid_deployment/rubik/overview.md b/docs/zh/docs/hybrid_deployment/rubik/overview.md new file mode 100644 index 0000000000000000000000000000000000000000..54229a3f8380690a9e70fdaccc25281e105ddcdc --- /dev/null +++ b/docs/zh/docs/hybrid_deployment/rubik/overview.md @@ -0,0 +1,27 @@ +# rubik 使用指南 + +## 概述 + +如何改善服务器资源利用率低的现状一直是业界公认的难题,随着云原生技术的发展,将在线(高优先级)、离线(低优先级)业务混合部署成为了当下提高资源利用率的有效手段。 + +rubik 容器调度在业务混合部署的场景下,根据 QoS 分级,对资源进行合理调度,从而实现在保障在线业务服务质量的前提下,大幅提升资源利用率。 + +rubik 当前支持如下特性: + +- [preemption 绝对抢占](./modules.md#preemption-绝对抢占) + - [CPU绝对抢占](./modules.md#cpu绝对抢占) + - [内存绝对抢占](./modules.md#内存绝对抢占) +- [dynCache 访存带宽和LLC限制](./modules.md#dyncache-访存带宽和llc限制) +- [dynMemory 内存异步分级回收](./modules.md#dynmemory-内存异步分级回收) +- [支持弹性限流](./modules.md#支持弹性限流) + - [quotaBurst 支持弹性限流内核态解决方案](./modules.md#quotaburst-内核态解决方案) + - [quotaTurbo 支持弹性限流用户态解决方案](./modules.md#quotaturbo-用户态解决方案) +- [ioCost 支持iocost对IO权重控制](./modules.md#iocost-支持iocost对io权重控制) +- [PSI 支持基于PSI指标的干扰检测](./modules.md#psi-支持基于psi指标的干扰检测) +- [CPU驱逐水位线控制](./modules.md#cpu驱逐水位线控制) +- [内存驱逐水位线控制](./modules.md#内存驱逐水位线控制) + +本文档适用于使用 openEuler 系统并希望了解和使用 rubik 的社区开发者、开源爱好者以及相关合作伙伴。使用人员需要具备以下经验和技能: + +- 熟悉 Linux 基本操作 +- 熟悉 kubernetes 和 docker/iSulad 基本操作 diff --git a/docs/zh/docs/image_builder/.DS_Store b/docs/zh/docs/image_builder/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 Binary files /dev/null and b/docs/zh/docs/image_builder/.DS_Store differ diff --git a/docs/zh/docs/image_builder/isula_build/_toc.yaml b/docs/zh/docs/image_builder/isula_build/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..f04f29c2e9abd15e65fd875697c32fd5032cd755 --- /dev/null +++ b/docs/zh/docs/image_builder/isula_build/_toc.yaml @@ -0,0 +1,10 @@ +label: 容器镜像构建 +isManual: true +description: 支持通过Dockerfile文件快速构建容器镜像 +sections: + - label: 概述 + href: ./overview.md + - label: 使用指南 + href: ./isula_build.md + - label: 附录 + href: ./isula_build_appendix.md diff --git a/docs/zh/docs/ImageBuilder/isula-build/figures/isula-build_arch.png b/docs/zh/docs/image_builder/isula_build/figures/isula-build_arch.png similarity index 100% rename from docs/zh/docs/ImageBuilder/isula-build/figures/isula-build_arch.png rename to docs/zh/docs/image_builder/isula_build/figures/isula-build_arch.png diff --git "a/docs/zh/docs/ImageBuilder/isula-build/isula-build\344\275\277\347\224\250\346\214\207\345\215\227.md" b/docs/zh/docs/image_builder/isula_build/isula_build.md similarity index 97% rename from "docs/zh/docs/ImageBuilder/isula-build/isula-build\344\275\277\347\224\250\346\214\207\345\215\227.md" rename to docs/zh/docs/image_builder/isula_build/isula_build.md index 5523acb0b57731a17f37b954d71c24cf408365a5..e85a681fd3b4c914ae0d88db85b2f1997af59792 100644 --- "a/docs/zh/docs/ImageBuilder/isula-build/isula-build\344\275\277\347\224\250\346\214\207\345\215\227.md" +++ b/docs/zh/docs/image_builder/isula_build/isula_build.md @@ -34,9 +34,9 @@ sudo rpm -ivh /home/isula-build-*.rpm ``` -> ![](./public_sys-resources/icon-note.gif) **说明:** +> [!NOTE]说明 > -> 安装完成后,需要手工启动isula-build服务。启动请参见[管理服务](isula-build构建工具.md#管理服务)。 +> 安装完成后,需要手工启动isula-build服务。启动请参见[管理服务](#管理服务)。 # 配置与管理服务 @@ -77,7 +77,7 @@ * /etc/isula-build/policy.json:镜像pull/push策略文件。当前不支持对其进行配置。 -> ![](./public_sys-resources/icon-note.gif) **说明:** +> [!NOTE]说明 > > * isula-build 支持最大 1MiB 的上述配置文件。 > * isula-build 不支持将持久化工作目录 dataroot 配置在内存盘上,比如 tmpfs。 @@ -88,7 +88,7 @@ 目前 openEuler 采用 systemd 管理软件服务,isula-build 软件包已经自带了 systemd 的服务文件,用户安装完 isula-build 软件包之后,可以直接通过 systemd 工具对它进行服务启停等操作。用户同样可以手动启动 isula-build 服务端软件。需要注意的是,同一个节点上不可以同时启动多个 isula-build 服务端软件。 -> ![](./public_sys-resources/icon-note.gif) **说明:** +>[!NOTE]说明 > > 同一个节点上不可以同时启动多个 isula-build 服务端软件。 @@ -133,7 +133,7 @@ sudo systemctl daemon-reload * --group: 设置本地套接字isula_build.sock文件属组使得加入该组的非特权用户可以操作isula-build,默认为“isula”。 * --experimental: 是否开启实验特性,默认为false。 ->![](./public_sys-resources/icon-note.gif) **说明:** +>[!NOTE]说明 > > 当命令行启动参数中传递了与配置文件相同的配置选项时,优先使用命令行参数启动。 @@ -159,7 +159,7 @@ sudo yum install -y docker-runc sudo yum install -y docker-engine ``` ->![](./public_sys-resources/icon-note.gif) **说明:** +>[!NOTE]说明 > > 用户需保证OCI runtime(runc)可执行文件的安全性,避免被恶意替换。 @@ -183,7 +183,7 @@ isula-build 客户端提供了一系列命令用于构建和管理容器镜像 * version,查看isula-build和isula-builder的版本号。 * manifest(实验特性),管理manifest列表。 ->![](./public_sys-resources/icon-note.gif) **说明:** +>[!NOTE]说明 > > * isula-build completion 和 isula-builder completion 命令用于生成bash命令补全脚本。该命令为命令行框架隐式提供,不会显示在help信息中。 > * isula-build客户端不包含配置文件,当用户需要使用isula-build实验特性时,需要在客户端通过命令`export ISULABUILD_CLI_EXPERIMENTAL=enabled`配置环境变量ISULABUILD_CLI_EXPERIMENTAL来开启实验特性。 @@ -362,7 +362,7 @@ isula-build ctr-img build --cap-add ${CAP} sudo isula-build ctr-img build --cap-add CAP_SYS_ADMIN --cap-add CAP_SYS_PTRACE -f Dockerfile ``` -> ![](./public_sys-resources/icon-note.gif) **说明:** +> [!NOTE]说明 > > * isula-build最大支持并发构建100个容器镜像。 > * isula-build支持Dockerfile最大为1MiB。 @@ -394,7 +394,7 @@ localhost:5000/library/alpine latest a24bb4013296 2022-01 --------------------------------------- ----------- ----------------- ------------------------ ------------ ``` -> ![](./public_sys-resources/icon-note.gif) **说明:** +> [!NOTE]说明 > > 通过`isula-build ctr-img images`查看的镜像大小与`docker images`的显示上有一定差异。这是因为统计镜像大小时,isula-build是直接计算每层tar包大小之和,而docker是通过解压tar遍历diff目录计算文件大小之和,因此存在统计上的差异。 @@ -426,7 +426,7 @@ mybusybox latest 173b3cf612f8 2022-01 --------------------------------------- ----------- ----------------- ------------------------ ------------ ``` ->![](./public_sys-resources/icon-note.gif) **说明:** +>[!NOTE]说明 > > isula-build 支持导入最大1GiB的容器基础镜像。 @@ -469,7 +469,7 @@ Storing signatures Loaded image as c07ddb44daa97e9e8d2d68316b296cc9343ab5f3d2babc5e6e03b80cd580478e ``` ->![](./public_sys-resources/icon-note.gif) **说明:** +>[!NOTE]说明 > > * isula-build 支持导入最大50G的容器层叠镜像。 > * isula-build 会自动识别容器层叠镜像的格式并进行导入。 @@ -555,7 +555,7 @@ Storing signatures Save success with image: [busybox:latest nginx:latest] ``` ->![](./public_sys-resources/icon-note.gif) **说明:** +>[!NOTE]说明 > > * save 导出的镜像默认格式为未压缩的tar格式,如有需求,用户可以再save之后手动压缩。 > * 在使用镜像名导出镜像时,需要给出完整的镜像名格式:REPOSITORY:TAG。 @@ -631,7 +631,7 @@ Storing signatures Push success with image: example-registry/library/mybusybox:latest ``` ->![](./public_sys-resources/icon-note.gif) **说明:** +>[!NOTE]说明 > > 推送镜像时,需要先登录对应的镜像仓库 @@ -757,7 +757,7 @@ Server: ## manifest: manifest列表管理 manifest列表包含不同系统架构对应的镜像信息,通过使用manifest列表,用户可以在不同的架构中使用相同的manifest(例如openeuler:latest)获取对应架构的镜像,manifest包含create、annotate、inspect和push子命令。 -> ![](./public_sys-resources/icon-note.gif) **说明:** +> [!NOTE]说明 > > manifest为实验特性,使用时需开启客户端和服务端的实验选项,方式详见客户端总体说明和配置服务章节。 @@ -875,7 +875,7 @@ REPOSITORY TAG IMAGE ID CREATED busybox 2.0 2d414a5cad6d 2020-08-01 06:41:36 5.577 MB ``` -> ![](./public_sys-resources/icon-note.gif) **说明:** +> [!NOTE]说明 > > * 要求isula-build和iSulad在同一节点。 > * 直接导出镜像到iSulad时,isula-build client端需要将构建成功的镜像暂存成 `/var/lib/isula-build/tmp/[buildid]/isula-build-tmp-%v.tar` 再导入至 iSulad,用户需要保证 /var/lib/isula-build/tmp/ 目录有足够磁盘空间;同时如果在导出过程中 isula-build client进程被KILL或Ctrl+C终止,需要依赖用户手动清理 `/var/lib/isula-build/tmp/[buildid]/isula-build-tmp-%v.tar` 文件。 @@ -898,7 +898,7 @@ REPOSITORY TAG IMAGE ID busybox 2.0 2d414a5cad6d 2 months ago 5.22MB ``` -> ![](./public_sys-resources/icon-note.gif) **说明:** +> [!NOTE]说明 > > 要求isula-build和Docker在同一节点。 diff --git "a/docs/zh/docs/ImageBuilder/isula-build/isula-build\351\231\204\345\275\225.md" b/docs/zh/docs/image_builder/isula_build/isula_build_appendix.md similarity index 100% rename from "docs/zh/docs/ImageBuilder/isula-build/isula-build\351\231\204\345\275\225.md" rename to docs/zh/docs/image_builder/isula_build/isula_build_appendix.md diff --git "a/docs/zh/docs/ImageBuilder/isula-build/isula-build\346\236\204\345\273\272\345\267\245\345\205\267.md" b/docs/zh/docs/image_builder/isula_build/overview.md similarity index 94% rename from "docs/zh/docs/ImageBuilder/isula-build/isula-build\346\236\204\345\273\272\345\267\245\345\205\267.md" rename to docs/zh/docs/image_builder/isula_build/overview.md index cae6ba47cf95eca19b13e452e8234294293f0272..8301d42c65af9bac8ea82ae5a573831edb80d2b4 100644 --- "a/docs/zh/docs/ImageBuilder/isula-build/isula-build\346\236\204\345\273\272\345\267\245\345\205\267.md" +++ b/docs/zh/docs/image_builder/isula_build/overview.md @@ -6,6 +6,6 @@ isula-build采用服务端/客户端模式,其中,isula-build为客户端, ![isula-build architecture](./figures/isula-build_arch.png) -> ![](./public_sys-resources/icon-note.gif) **说明:** +> [!NOTE]说明 > > isula-build当前支持OCI镜像格式([OCI Image Format Specification](https://github.com/opencontainers/image-spec/blob/main/spec.md/))以及Docker镜像格式([Image Manifest Version 2, Schema 2](https://docs.docker.com/registry/spec/manifest-v2-2/))。通过命令`export ISULABUILD_CLI_EXPERIMENTAL=enabled`开启实验特性以支持OCI镜像格式。不开启实验特性时,isula-build默认采用Docker镜像格式;当开启实验特性后,将默认采用OCI镜像格式。 diff --git a/docs/zh/docs/kmesh/kmesh/_toc.yaml b/docs/zh/docs/kmesh/kmesh/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..7e1623fa8368c32c205689c5e2cb6023fd9ccf3c --- /dev/null +++ b/docs/zh/docs/kmesh/kmesh/_toc.yaml @@ -0,0 +1,14 @@ +label: Kmesh用户指南 +isManual: true +description: openEuler系统高性能服务网格数据面软件 +sections: + - label: 概述 + href: ./overview.md + - label: 认识Kmesh + href: ./getting_to_know_kmesh.md + - label: 安装与部署 + href: ./installation_and_deployment.md + - label: 使用方法 + href: ./usage.md + - label: 附录 + href: ./appendixes.md diff --git "a/docs/zh/docs/Kmesh/Kmesh/\351\231\204\345\275\225.md" b/docs/zh/docs/kmesh/kmesh/appendixes.md similarity index 100% rename from "docs/zh/docs/Kmesh/Kmesh/\351\231\204\345\275\225.md" rename to docs/zh/docs/kmesh/kmesh/appendixes.md diff --git a/docs/zh/docs/Kmesh/Kmesh/figures/kmesh-arch.png b/docs/zh/docs/kmesh/kmesh/figures/kmesh-arch.png similarity index 100% rename from docs/zh/docs/Kmesh/Kmesh/figures/kmesh-arch.png rename to docs/zh/docs/kmesh/kmesh/figures/kmesh-arch.png diff --git "a/docs/zh/docs/Kmesh/Kmesh/\350\256\244\350\257\206Kmesh.md" b/docs/zh/docs/kmesh/kmesh/getting_to_know_kmesh.md similarity index 100% rename from "docs/zh/docs/Kmesh/Kmesh/\350\256\244\350\257\206Kmesh.md" rename to docs/zh/docs/kmesh/kmesh/getting_to_know_kmesh.md diff --git "a/docs/zh/docs/Kmesh/Kmesh/\345\256\211\350\243\205\344\270\216\351\203\250\347\275\262.md" b/docs/zh/docs/kmesh/kmesh/installation_and_deployment.md similarity index 88% rename from "docs/zh/docs/Kmesh/Kmesh/\345\256\211\350\243\205\344\270\216\351\203\250\347\275\262.md" rename to docs/zh/docs/kmesh/kmesh/installation_and_deployment.md index bd44c25cf09c62aa62791cc6a1c95f244f0dbdb4..1d0c92527965a37d48357f0f7936bceb2a6184f9 100644 --- "a/docs/zh/docs/Kmesh/Kmesh/\345\256\211\350\243\205\344\270\216\351\203\250\347\275\262.md" +++ b/docs/zh/docs/kmesh/kmesh/installation_and_deployment.md @@ -2,7 +2,7 @@ ## 软件要求 -* 操作系统:openEuler 23.09 +* 操作系统:openEuler 24.03 LTS SP1 ## 硬件要求 @@ -10,8 +10,7 @@ ## 环境准备 -* 安装openEuler系统,安装方法参考 《[安装指南](../Installation/installation.md)》。 - +* 安装openEuler系统,安装方法参考 《[安装指南](https://docs.openeuler.org/zh/docs/24.03_LTS_SP2/server/installation_upgrade/installation/installation-on-servers.html)》。 * 安装Kmesh需要使用root权限。 ## 安装Kmesh @@ -82,7 +81,7 @@ ExecStart=/usr/bin/kmesh-daemon -enable-mda -enable-ads=false [root@openEuler ~]# systemctl daemon-reload ``` -Kmesh服务启动时会调用kmesh-daemon程序,具体使用方式可以参考[kmesh-daemon使用](./使用方法.md)。 +Kmesh服务启动时会调用kmesh-daemon程序,具体使用方式可以参考[kmesh-daemon使用](./usage.md)。 ### 启动Kmesh diff --git a/docs/zh/docs/Kmesh/Kmesh/Kmesh.md b/docs/zh/docs/kmesh/kmesh/overview.md similarity index 100% rename from docs/zh/docs/Kmesh/Kmesh/Kmesh.md rename to docs/zh/docs/kmesh/kmesh/overview.md diff --git "a/docs/zh/docs/Kmesh/Kmesh/\344\275\277\347\224\250\346\226\271\346\263\225.md" b/docs/zh/docs/kmesh/kmesh/usage.md similarity index 100% rename from "docs/zh/docs/Kmesh/Kmesh/\344\275\277\347\224\250\346\226\271\346\263\225.md" rename to docs/zh/docs/kmesh/kmesh/usage.md diff --git a/docs/zh/docs/kubeos/.DS_Store b/docs/zh/docs/kubeos/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 Binary files /dev/null and b/docs/zh/docs/kubeos/.DS_Store differ diff --git a/docs/zh/docs/kubeos/kubeos/_toc.yaml b/docs/zh/docs/kubeos/kubeos/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..1a6979dc0ffe805123535c3ebbd854659413bccf --- /dev/null +++ b/docs/zh/docs/kubeos/kubeos/_toc.yaml @@ -0,0 +1,14 @@ +label: 容器OS升级用户指南 +isManual: true +description: KubeOS是专为容器化业务涉及的轻量级操作系统,支持原子化升级,确保版本一致性,降低运维复杂性 +sections: + - label: 概述 + href: ./overview.md + - label: 认识容器OS升级 + href: ./about_kubeos.md + - label: 安装与部署 + href: ./installation_and_deployment.md + - label: 使用方法 + href: ./usage_instructions.md + - label: 容器OS镜像制作指导 + href: ./kubeos_image_creation.md diff --git "a/docs/zh/docs/KubeOS/KubeOS/\350\256\244\350\257\206\345\256\271\345\231\250OS\345\215\207\347\272\247.md" b/docs/zh/docs/kubeos/kubeos/about_kubeos.md similarity index 98% rename from "docs/zh/docs/KubeOS/KubeOS/\350\256\244\350\257\206\345\256\271\345\231\250OS\345\215\207\347\272\247.md" rename to docs/zh/docs/kubeos/kubeos/about_kubeos.md index ae57ffb2d09fb8338cf9e18b9abe1fa061474db2..f70e17fd3aa1cf96cb5c4715adeb6d29d8f2b047 100644 --- "a/docs/zh/docs/KubeOS/KubeOS/\350\256\244\350\257\206\345\256\271\345\231\250OS\345\215\207\347\272\247.md" +++ b/docs/zh/docs/kubeos/kubeos/about_kubeos.md @@ -12,7 +12,7 @@ openEuler 容器 OS 升级工具通过 kubernetes operator 扩展机制控制容 ### 容器 OS 升级架构 -**图1** 容器 OS 升级架构 +**图1** 容器 OS 升级架构 ![](./figures/容器OS架构.png) diff --git "a/docs/zh/docs/KubeOS/KubeOS/figures/\345\256\271\345\231\250OS\346\226\207\344\273\266\345\270\203\345\261\200.png" "b/docs/zh/docs/kubeos/kubeos/figures/\345\256\271\345\231\250OS\346\226\207\344\273\266\345\270\203\345\261\200.png" similarity index 100% rename from "docs/zh/docs/KubeOS/KubeOS/figures/\345\256\271\345\231\250OS\346\226\207\344\273\266\345\270\203\345\261\200.png" rename to "docs/zh/docs/kubeos/kubeos/figures/\345\256\271\345\231\250OS\346\226\207\344\273\266\345\270\203\345\261\200.png" diff --git "a/docs/zh/docs/KubeOS/KubeOS/figures/\345\256\271\345\231\250OS\346\236\266\346\236\204.png" "b/docs/zh/docs/kubeos/kubeos/figures/\345\256\271\345\231\250OS\346\236\266\346\236\204.png" similarity index 100% rename from "docs/zh/docs/KubeOS/KubeOS/figures/\345\256\271\345\231\250OS\346\236\266\346\236\204.png" rename to "docs/zh/docs/kubeos/kubeos/figures/\345\256\271\345\231\250OS\346\236\266\346\236\204.png" diff --git "a/docs/zh/docs/KubeOS/KubeOS/\345\256\211\350\243\205\344\270\216\351\203\250\347\275\262.md" b/docs/zh/docs/kubeos/kubeos/installation_and_deployment.md similarity index 52% rename from "docs/zh/docs/KubeOS/KubeOS/\345\256\211\350\243\205\344\270\216\351\203\250\347\275\262.md" rename to docs/zh/docs/kubeos/kubeos/installation_and_deployment.md index 25406b1e939eccf68b43614ed61698a695cd9c4f..da390b756061cb052efd97d209d0e070c9a6fe9c 100644 --- "a/docs/zh/docs/KubeOS/KubeOS/\345\256\211\350\243\205\344\270\216\351\203\250\347\275\262.md" +++ b/docs/zh/docs/kubeos/kubeos/installation_and_deployment.md @@ -2,63 +2,44 @@ 本章介绍如何安装和部署容器 OS 升级工具。 - - -- [安装与部署](#安装与部署) - - - [软硬件要求](#软硬件要求) - - - [硬件要求](#硬件要求) - - [软件要求](#软件要求) - - [环境准备](#环境准备) - - - [安装容器OS升级工具](#安装容器os升级工具) - - - [部署容器OS升级工具](#部署容器os升级工具) - - - [制作os-operator和os-proxy镜像](#制作os-operator和os-proxy镜像) - - [制作容器OS镜像](#制作容器os镜像) - - [部署CRD,operator和proxy](#部署crd,operator和proxy) - - - ## 软硬件要求 ### 硬件要求 -- 当前仅支持 x86和 AArch64 架构 +* 当前仅支持 x86和 AArch64 架构 ### 软件要求 -- 操作系统:openEuler 24.09 +* 操作系统:openEuler 24.03-LTS-SP1 ### 环境准备 -- 安装 openEuler 系统,安装方法参考《[安装指南](../Installation/installation.md)》 -- 安装 qemu-img,bc,parted,tar,yum,docker,dosfstools +* 安装 openEuler 系统,安装方法参考《[安装指南](https://docs.openeuler.org/zh/docs/24.03_LTS_SP2/server/installation_upgrade/installation/installation-on-servers.html)》 + +* 安装 qemu-img,bc,parted,tar,yum,docker,dosfstools ## 安装容器OS升级工具 安装容器 OS 升级工具的操作步骤如下: -1. 配置 openEuler 24.09 yum 源: +1. 配置 openEuler 24.03-LTS-SP1 yum 源: - ```conf - [openEuler24.09] # openEuler 24.09 官方发布源 - name=openEuler24.09 - baseurl=http://repo.openeuler.org/openEuler-24.09/everything/$basearch/ + ```sh + [openEuler24.03-LTS-SP1] # openEuler 24.03-LTS-SP1 官方发布源 + name=openEuler24.03-LTS-SP1 + baseurl=http://repo.openeuler.org/openEuler-24.03-LTS-SP1/everything/$basearch/ enabled=1 gpgcheck=1 - gpgkey=http://repo.openeuler.org/openEuler-24.09/everything/$basearch/RPM-GPG-KEY-openEuler + gpgkey=http://repo.openeuler.org/openEuler-24.03-LTS-SP1/everything/$basearch/RPM-GPG-KEY-openEuler ``` 2. 使用 root 帐户安装容器 OS 升级工具: ```shell - # yum install KubeOS KubeOS-scripts -y + yum install KubeOS KubeOS-scripts -y ``` -> ![](./public_sys-resources/icon-note.gif)**说明**: +> [!NOTE]说明 > > 容器 OS 升级工具会安装在 /opt/kubeOS 目录下,包括os-operator,os-proxy,os-agent二进制,制作容器 OS 工具及相应配置文件 。 @@ -92,23 +73,23 @@ export IMG_OPERATOR=your_imageRepository/os-operator_imageName:version ``` -4. 请用户自行编写Dockerfile来构建镜像 ,Dockfile编写请注意以下几项 +4. 请用户自行编写Dockerfile来构建镜像 ,Dockfile编写请注意以下几项: - - os-operator和os-proxy镜像需要基于baseimage进行构建,请用户保证baseimage的安全性 - - 需将os-operator和os-proxy二进制文件分别拷贝到对应的镜像中 - - 请确保os-proxy镜像中os-proxy二进制文件件属主和属组为root,文件权限为500 - - 请确保os-operator镜像中os-operator二进制文件属主和属组为容器内运行os-operator进程的用户,文件权限为500 - - os-operator和os-proxy的二进制文件在镜像内的位置和容器启动时运行的命令需与部署的yaml中指定的字段相对应。 + * os-operator和os-proxy镜像需要基于baseimage进行构建,请用户保证baseimage的安全性。 + * 需将os-operator和os-proxy二进制文件分别拷贝到对应的镜像中。 + * 请确保os-proxy镜像中os-proxy二进制文件件属主和属组为root,文件权限为500。 + * 请确保os-operator镜像中os-operator二进制文件属主和属组为容器内运行os-operator进程的用户,文件权限为500。 + * os-operator和os-proxy的二进制文件在镜像内的位置和容器启动时运行的命令需与部署的yaml中指定的字段相对应。 Dockerfile示例如下 - ```shell + ```dockerfile FROM your_baseimage COPY ./bin/proxy /proxy ENTRYPOINT ["/proxy"] ``` - ```shell + ```dockerfile FROM your_baseimage COPY --chown=6552:6552 ./bin/operator /operator ENTRYPOINT ["/operator"] @@ -139,15 +120,15 @@ #### 注意事项 -- 以虚拟机镜像为例,如需进行物理机的镜像制作请见《容器OS镜像制作指导》 -- 制作容器OS 镜像需要使用 root 权限 -- 容器OS 镜像制作工具的 rpm 包源为 openEuler 具体版本的 everything 仓库和 EPOL 仓库。制作镜像时提供的 repo 文件中,yum 源建议同时配置 openEuler 具体版本的 everything 仓库和 EPOL 仓库 -- 使用默认 rpmlist 制作的容器OS虚拟机镜像,默认和制作工具保存在相同路径,该分区至少有 25GiB 的剩余磁盘空间 -- 制作容器 OS 镜像时,不支持用户自定义配置挂载文件 +* 以虚拟机镜像为例,如需进行物理机的镜像制作请见《[容器OS镜像制作指导](./kubeos_image_creation.md)》。 +* 制作容器OS 镜像需要使用 root 权限。 +* 容器OS 镜像制作工具的 rpm 包源为 openEuler 具体版本的 everything 仓库和 EPOL 仓库。制作镜像时提供的 repo 文件中,yum 源建议同时配置 openEuler 具体版本的 everything 仓库和 EPOL 仓库。 +* 使用默认 rpmlist 制作的容器OS虚拟机镜像,默认保存在调用`kbimg`路径下的`scripts-auto`文件夹内,该分区至少有 25GiB 的剩余磁盘空间。 +* 制作容器 OS 镜像时,不支持用户自定义配置挂载文件。 #### 操作步骤 -制作容器OS 虚拟机镜像使用 kbimg.sh 脚本,命令详情请见《容器OS镜像制作指导》 +制作容器OS 虚拟机镜像使用 kbimg,命令详情请见《[容器OS镜像制作指导](./kubeos_image_creation.md)》。 制作容器OS 虚拟机镜像的步骤如下: @@ -157,19 +138,17 @@ cd /opt/kubeOS/scripts ``` -2. 执行 kbming.sh 制作容器OS,参考命令如下: +2. 执行 kbming 制作容器OS,参考命令如下: ```shell - bash kbimg.sh create vm-image -p xxx.repo -v v1 -b ../bin/os-agent -e '''$1$xyz$RdLyKTL32WEvK3lg8CXID0''' + ./kbimg create -f ./kbimg.toml vm-img ``` - 其中 xx.repo 为制作镜像所需要的 yum 源,yum 源建议配置为 openEuler 具体版本的 everything 仓库和 EPOL 仓库。 - - 容器 OS 镜像制作完成后,会在 /opt/kubeOS/scripts 目录下生成: + 容器 OS 镜像制作完成后,会在 /opt/kubeOS/scripts/scripts-auto 目录下生成: - - raw格式的系统镜像system.img,system.img大小默认为20G,支持的根文件系统分区大小<2560MiB,持久化分区<14GB。 - - qcow2 格式的系统镜像 system.qcow2。 - - 可用于升级的根文件系统分区镜像 update.img。 + * raw格式的系统镜像system.img,system.img大小默认为20G,支持的根文件系统分区大小<2560MiB,持久化分区<15GB。 + * qcow2 格式的系统镜像 system.qcow2。 + * 可用于升级的根文件系统 kubeos.tar。 制作出来的容器 OS 虚拟机镜像目前只能用于 CPU 架构为 x86 和 AArch64 的虚拟机场景,不支持 x86 架构的虚拟机使用 legacy 启动模式启动。 @@ -177,12 +156,12 @@ #### 注意事项 -- 请先部署 Kubernetes 集群,部署方法参考《openEuler 24.09 Kubernetes 集群部署指南》 +* 请先部署 Kubernetes 集群,部署方法参考[《openEuler 24.03-LTS-SP1 Kubernetes 集群部署指南》](../../cluster_deployment/kubernetes/overview.md)。 -- 集群中准备进行升级的 Worker 节点的 OS 需要为使用上一节方式制作出来的容器 OS,如不是,请用 system.qcow2重新部署虚拟机,虚拟机部署请见《openEuler 24.09 虚拟化用户指南》,Master节点目前不支持容器 OS 升级,请用openEuler 24.09部署Master节点 -- 部署 OS 的 CRD(CustomResourceDefinition),os-operator,os-proxy 以及 RBAC (Role-based access control) 机制的 YAML 需要用户自行编写。 -- operator 和 proxy 部署在 kubernetes 集群中,operator 应部署为 deployment,proxy 应部署为damonset -- 尽量部署好 kubernetes 的安全措施,如 rbac 机制,pod 的 service account 和 security policy 配置等 +* 集群中准备进行升级的 Worker 节点的 OS 需要为使用上一节方式制作出来的容器 OS,如不是,请用 system.qcow2重新部署虚拟机,虚拟机部署请见[《openEuler 24.03-LTS-SP1 虚拟化用户指南》](https://docs.openeuler.org/zh/docs/24.03_LTS_SP2/virtualization/virtualization_platform/stratovirt/stratovirt_introduction.html),Master节点目前不支持容器 OS 升级,请用openEuler 24.03-LTS-SP1部署Master节点。 +* 部署 OS 的 CRD(CustomResourceDefinition),os-operator,os-proxy 以及 RBAC (Role-based access control) 机制的 YAML 需要用户自行编写。 +* operator 和 proxy 部署在 kubernetes 集群中,operator 应部署为 deployment,proxy 应部署为daemonset。 +* 尽量部署好 kubernetes 的安全措施,如 rbac 机制,pod 的 service account 和 security policy 配置等。 #### 操作步骤 diff --git a/docs/zh/docs/kubeos/kubeos/kubeos_image_creation.md b/docs/zh/docs/kubeos/kubeos/kubeos_image_creation.md new file mode 100644 index 0000000000000000000000000000000000000000..e9b4ce4b4fa2c080c8e1d014c1d0cc73f83349f8 --- /dev/null +++ b/docs/zh/docs/kubeos/kubeos/kubeos_image_creation.md @@ -0,0 +1,505 @@ +# 容器OS镜像制作指导 + +## 简介 + +kbimg是KubeOS部署和升级所需的镜像制作工具,可以使用kbimg制作KubeOS docker,虚拟机和物理机镜像。 + +## 命令介绍 + +### 命令格式 + +kbimg - CLI tool for generating various types of image for KubeOS + +```text +Usage: kbimg [OPTIONS] + +Commands: + create Create a new KubeOS image + help Print this message or the help of the given subcommand(s) + +Options: + -d, --debug Enable debug mode, generate the scripts without execution + -h, --help Print help + -V, --version Print version +``` + +kbimg-create - Create a new KubeOS image + +```text +Usage: kbimg create --file + +Arguments: + [possible values: vm-img, pxe-img, upgrade-img, admin-container] + +Options: + -f, --file Path to the toml configuration file + -h, --help Print help +``` + +### 配置文件说明 + +#### from_repo + +从 repo 创建升级容器镜像、虚拟机镜像或PXE物理机镜像 + + | 参数 | 描述 | + | --- | --- | + | agent_path | os-agent 二进制的路径 | + | legacy_bios | 目前仅支持设置为`false`,即UEFI引导 | + | repo_path | repo 文件的路径,repo 文件中配置制作镜像所需要的 yum 源 | + | root_passwd | root 用户密码,与/etc/shadow文件内密码格式一致,可使用`openssl passwd -6 -salt $(head -c18 /dev/urandom \| openssl base64)`命令生成 | + | version | KubeOS 镜像的版本,将写入/etc/os-release文件内作为OS标识 | + | rpmlist | 期望安装进镜像内的rpm包列表 | + | upgrade_img | [可选项]指定生成的升级容器镜像的镜像名(制作升级容器镜像必需) | + +#### admin_container + +制作admin运维容器 + + | 参数 | 描述 | + | --- | --- | + | hostshell | hostshell二进制路径,可在项目根目录下通过`make hostshell`编译 | + | img_name | 指定生成的容器镜像名 | + +#### pxe_config + +在制作PXE物理机镜像时,配置该参数用于PXE安装。制作PXE物理机镜像时必需。 + + | 参数 | 描述 | + | --- | --- | + | server_ip | 用于下载根文件系统 tar 包的 HTTP 服务器地址 | + | rootfs_name | 放置于 HTTP 服务器的文件系统 tar 包名称 | + | disk | 安装 KubeOS 系统的目标磁盘名 | + | route_ip | 配置目标机器网卡的路由 IP | + | dhcp | [可选项] 是否启用 DHCP 模式配置网络,默认为 false | + | local_ip | [可选项] 配置目标机器网卡的 IP,dhcp 为 false 时必需 | + | net_name | [可选项] 配置目标机器网卡名,dhcp 为 false 时必需 | + | netmask | [可选项] 配置目标机器网卡的子网掩码,dhcp 为 false 时必需 | + +**注意**:`pxe_config`下的配置参数无法进行校验,需要用户自行确认其正确性。 + +#### users + +[可选项] 添加用户 + + | 参数 | 描述 | + | --- | --- | + | name | 用户名 | + | passwd | 密码 | + | primary_groups | [可选项] 用户主组(默认为用户同名组) | + | groups | [可选项] 用户附加组 | + +**注意**:添加用户会默认创建用户同名组,配置用户附加组时,若组不存在会报错失败。若有特殊配置需求,用户可通过[chroot_script](#chroot_script)脚本自行实现。 + +#### copy_files + +[可选项] 拷贝文件到rootfs内指定目录 + + | 参数 | 描述 | + | --- | --- | + | dst | 目标路径 | + | src | 源文件路径 | + | create_dir | [可选项]拷贝前创建文件夹 | + +**注意**:拷贝文件无法保留权限,如果需要特殊权限,可借助[chroot_script](#chroot_script)脚本自行实现。 + +#### grub + +[可选项] grub配置,配置dm-verity时必需 + + | 参数 | 描述 | + | --- | --- | + | passwd | grub 明文密码 | + +#### systemd_service + +[可选项] 配置 systemd 服务开机自启 + + | 参数 | 描述 | + | --- | --- | + | name | systemd 服务名 | + +#### chroot_script + +[可选项] 自定义 chroot 脚本 + + | 参数 | 描述 | + | --- | --- | + | path | 脚本路径 | + | rm | [可选项]执行完毕后是否删除该脚本,配置`true`删除,`false`或空保留 | + +#### disk_partition + +[可选项] 自定义分区大小和镜像大小 + + | 参数 | 描述 | + | --- | --- | + | root | root分区大小, 单位为MiB,默认2560MiB | + | img_size | [可选项]镜像大小,单位为GB,默认20GB | + +#### persist_mkdir + +[可选项] persist 分区新建目录 + + | 参数 | 描述 | + | --- | --- | + | name | 目录名 | + +#### dm_verity + +[可选项] 制作启用dm-verity功能的虚拟机或升级镜像 + + | 参数 | 描述 | + | --- | --- | + | efi_key | efi明文口令 | + | grub_key | grub明文口令 | + | keys_dir |[可选项]可指定密钥文件夹,复用先前制作镜像创建的密钥 | + +## 使用说明 + +### 注意事项 + +* kbimg 执行需要 root 权限。 +* 当前仅支持 x86和 AArch64 架构使用。 +* 不支持并发执行。如果使用脚本`&`连续执行可能会出现异常情况。制作过程中碰到异常掉电或中断后无法清理环境时,可参考[异常退出清理方法](#异常退出清理方法)清理后重新制作。 +* 容器 OS 镜像制作工具的 rpm 包源为 openEuler 具体版本的 everything 仓库和 EPOL 仓库。制作镜像时提供的 repo 文件中,yum 源建议同时配置 openEuler 具体版本的 everything 仓库和 EPOL 仓库。 +* dm-verity使用说明: + * 仅支持虚拟机场景,暂不支持物理机环境。 + * 不支持通过 HTTP/HTTPS 服务器下载升级镜像进行系统升级。仅支持从容器镜像仓库下载升级镜像进行升级。 + * 启动虚拟机时,必须配置使用 virtio 类型设备。 + * 启用dm-verity功能的升级容器镜像不可用于升级未开启dm-verity的容器OS。同理,未启动dm-verity功能的升级容器镜像不可用于升级开启dm-verity功能的容器OS。在集群内,部分节点开启dm-verity功能,部分未开启,需要用户控制下发对应的升级镜像。 + * 制作升级容器镜像和虚拟机镜像时,推荐使用相同的密钥(配置`keys_dir`为先前制作镜像时创建的密钥文件路径。配置`efi_key`或`grub_key`一致不能保证密钥文件是一模一样的)。若密钥不一致,在切换备用分区时可能导致证书校验失败,从而无法启动系统。出现证书校验失败问题时,需要重新导入备用分区证书进行修复。 + +### KubeOS OCI 镜像制作 + +#### 注意事项 + +* 制作出的 OCI 镜像仅用于后续的虚拟机/物理机镜像升级使用,不支持启动容器。 +* 使用默认 rpmlist 进行容器OS镜像制作时所需磁盘空间至少为6G,若使用自定义 rpmlist 可能会超过6G。 + +#### 使用示例 + +* 配置文件示例 + +```toml +[from_repo] +agent_path = "./bin/rust/release/os-agent" +legacy_bios = false +repo_path = "/etc/yum.repos.d/openEuler.repo" +root_passwd = "$1$xyz$RdLyKTL32WEvK3lg8CXID0" # default passwd: openEuler12#$ +rpmlist = [ + "NetworkManager", + "cloud-init", + "conntrack-tools", + "containerd", + "containernetworking-plugins", + "cri-tools", + "dhcp", + "ebtables", + "ethtool", + "iptables", + "kernel", + "kubernetes-kubeadm", + "kubernetes-kubelet", + "openssh-server", + "passwd", + "rsyslog", + "socat", + "tar", + "vi", +] +upgrade_img = "kubeos-upgrade:v1" +version = "v1" +``` + +* 结果说明 + * 制作完成后,通过`docker images`查看制作出来的KubeOS容器镜像 + * update-boot.img/update-root.img/update-hash.img: 仅在dm-verity模式下生成,可忽略。 + +### KubeOS 虚拟机镜像制作 + +#### 注意事项 + +* 制作出来的容器 OS 虚拟机镜像目前只能用于 CPU 架构为 x86 和 AArch64 的虚拟机。 +* 容器 OS 目前不支持 x86 架构的虚拟机使用 legacy 启动模式启动。 +* 默认root密码为openEuler12#$ +* 使用默认rpmlist进行容器OS镜像制作时所需磁盘空间至少为25G,若使用自定义rpmlist可能会超过25G。 + +#### 使用示例 + +* 配置文件示例 + +```toml +[from_repo] +agent_path = "./bin/rust/release/os-agent" +legacy_bios = false +repo_path = "/etc/yum.repos.d/openEuler.repo" +root_passwd = "$1$xyz$RdLyKTL32WEvK3lg8CXID0" # default passwd: openEuler12#$ +rpmlist = [ + "NetworkManager", + "cloud-init", + "conntrack-tools", + "containerd", + "containernetworking-plugins", + "cri-tools", + "dhcp", + "ebtables", + "ethtool", + "iptables", + "kernel", + "kubernetes-kubeadm", + "kubernetes-kubelet", + "openssh-server", + "passwd", + "rsyslog", + "socat", + "tar", + "vi", +] +version = "v1" +``` + +* 结果说明 + +容器 OS 镜像制作完成后,会在 ./scripts-auto 目录下生成 + + * system.qcow2: 用于启动虚拟机的qcow2 格式的系统镜像,大小默认为 20GiB,支持的根文件系统分区大小 < 2560 MiB,持久化分区 < 15GB。 + * system.img: 用于启动虚拟机的img 格式的系统镜像,大小默认为 20GiB,支持的根文件系统分区大小 < 2560 MiB,持久化分区 < 15GB。 + * kubeos.tar: 用于升级的根文件系统tar包。 + * update-boot.img/update-root.img/update-hash.img: 仅在dm-verity模式下生成,可忽略。 + +### KubeOS 物理机安装所需镜像及文件制作 + +#### 注意事项 + +* 制作出来的容器 OS 物理安装所需的镜像目前只能用于 CPU 架构为 x86 和 AArch64 的物理机安装。 +* `pxe_config`配置中指定的ip为安装时使用的临时ip,请在系统安装启动后请参考[《openEuler 24.03-LTS-SP1 管理员指南-配置网络》](https://docs.openeuler.org/zh/docs/24.03_LTS_SP2/server/network/network_config/network-configuration.html)进行网络配置。 +* 不支持多个磁盘都安装KubeOS,可能会造成启动失败或挂载紊乱。 +* 容器OS 目前不支持 x86 架构的物理机使用 legacy 启动模式启动。 +* 使用默认rpmlist进行镜像制作时所需磁盘空间至少为5G,如自已定义 rpmlist 可能会超过5G。 +* PXE物理机镜像制作不支持dm-verity功能 +* 在 PXE 安装阶段,需要从 HTTP 服务器的根目录下载根分区 tar 包(tar包名称为toml配置文件中配置的名称)。请确保机器拥有足够的内存空间以存储根分区 tar 包及临时中间文件。 + +#### 使用示例 + +* 首先需要修改```kbimg.toml```中```pxe_config```的配置,对相关参数进行配置,详细参数可见[参数说明](#pxe_config),ip目前仅支持ipv4,配置示例如下 + + ```toml + [pxe_config] + dhcp = false + # rootfs file name + rootfs_name = "kubeos.tar" + # select the target disk to install kubeOS + disk = "/dev/vda" + # pxe server ip address where stores the rootfs on the http server + server_ip = "192.168.122.50" + # target machine ip + local_ip = "192.168.122.100" + # target machine route + route_ip = "192.168.122.1" + # target machine netmask + netmask = "255.255.255.0" + # target machine netDevice name + net_name = "eth0" + ``` + +* 如需进行DNS配置,请先自定义```resolv.conf```文件,并启用```copy_files```字段将配置文件拷贝到```/etc```目录 + + ```toml + [[copy_files]] + dst = "/etc" + src = "" + ``` + +* KubeOS物理机安装所需镜像制作,及pxe_config配置全示例 + + ```toml + [from_repo] + agent_path = "./bin/rust/release/os-agent" + legacy_bios = false + repo_path = "/etc/yum.repos.d/openEuler.repo" + root_passwd = "$1$xyz$RdLyKTL32WEvK3lg8CXID0" # default passwd: openEuler12#$ + rpmlist = [ + "NetworkManager", + "cloud-init", + "conntrack-tools", + "containerd", + "containernetworking-plugins", + "cri-tools", + "dhcp", + "ebtables", + "ethtool", + "iptables", + "kernel", + "kubernetes-kubeadm", + "kubernetes-kubelet", + "openssh-server", + "passwd", + "rsyslog", + "socat", + "tar", + "vi", + "coreutils", + "dosfstools", + "dracut", + "gawk", + "hwinfo", + "net-tools", + "parted", + ] + version = "v1" + + [pxe_config] + dhcp = true + rootfs_name = "kubeos.tar" + disk = "/dev/vda" + server_ip = "192.168.122.50" + route_ip = "192.168.122.1" + #local_ip = "192.168.1.100" + #netmask = "255.255.255.0" + #net_name = "eth0" + ``` + +* 结果说明 + * initramfs.img: 用于pxe启动用的 initramfs 镜像 + * kubeos.tar: pxe安装所用的根分区文件系统 + +## 附录 + +### 异常退出清理方法 + +1.若在使用`kbimg`制作镜像过程中,异常退出,无法清理环境,可使用如下方法进行清理: + + ```bash + function unmount_dir() { + local dir=$1 + if [ -L "${dir}" ] || [ -f "${dir}" ]; then + echo "${dir} is not a directory, please check it." + return 1 + fi + if [ ! -d "${dir}" ]; then + return 0 + fi + local real_dir=$(readlink -e "${dir}") + local mnts=$(awk '{print $2}' < /proc/mounts | grep "^${real_dir}" | sort -r) + for m in ${mnts}; do + echo "Unmount ${m}" + umount -f "${m}" || true + done + return 0 + } + ls -l ./scripts-auto/test.lock && rm -rf ./scripts-auto/test.lock + unmount_dir ./scripts-auto/rootfs/proc + unmount_dir ./scripts-auto/rootfs/sys + unmount_dir ./scripts-auto/rootfs/dev/pts + unmount_dir ./scripts-auto/rootfs/dev + unmount_dir ./scripts-auto/mnt/boot/grub2 + unmount_dir ./scripts-auto/mnt + rm -rf ./scripts-auto/rootfs ./scripts-auto/mnt + ``` + +2.如果执行以上命令仍然无法删除目录,可尝试先调用如下命令,再重新执行第一步的命令。 + + ```bash + fuser -kvm ./scripts-auto/rootfs + fuser -kvm ./scripts-auto/mnt + ``` + +### 详细toml配置文件示例 + +请根据需求和[配置文件说明](#配置文件说明),修改如下示例配置文件,生成所需镜像。 + +```toml +[from_repo] +agent_path = "./bin/rust/release/os-agent" +legacy_bios = false +repo_path = "/etc/yum.repos.d/openEuler.repo" +root_passwd = "$1$xyz$RdLyKTL32WEvK3lg8CXID0" # default passwd: openEuler12#$, use "openssl passwd -6 -salt $(head -c18 /dev/urandom | openssl base64)" to generate your passwd +rpmlist = [ + "NetworkManager", + "cloud-init", + "conntrack-tools", + "containerd", + "containernetworking-plugins", + "cri-tools", + "dhcp", + "ebtables", + "ethtool", + "iptables", + "kernel", + "kubernetes-kubeadm", + "kubernetes-kubelet", + "openssh-server", + "passwd", + "rsyslog", + "socat", + "tar", + "vi", + # Below packages are required for pxe-image. Uncomment them if you want to generate pxe-image. + # "coreutils", + # "dosfstools", + # "dracut", + # "gawk", + # "hwinfo", + # "net-tools", + # "parted", +] +upgrade_img = "kubeos-upgrade:v1" +version = "v1" + +# [admin_container] +# img_name = "kubeos-admin-container:v1" +# hostshell = "./bin/hostshell" + +# [pxe_config] +# dhcp = false +# disk = "/dev/vda" +# local_ip = "192.168.1.100" +# net_name = "eth0" +# netmask = "255.255.255.0" +# rootfs_name = "kubeos.tar" +# route_ip = "192.168.1.1" +# server_ip = "192.168.1.50" + +# [[users]] +# groups = ["admin", "wheel"] +# name = "foo" +# passwd = "foo" +# primary_group = "foo" + +# [[users]] +# groups = ["example"] +# name = "bar" +# passwd = "bar" + +# [[copy_files]] +# create_dir = "/root/test" +# dst = "/root/test/foo.txt" +# src = "/root/KubeOS/foo.txt" + +# [[copy_files]] +# dst = "/etc/bar.txt" +# src = "../bar.txt" + +# [grub] +# passwd = "foo" + +# [systemd_service] +# name = ["containerd", "kubelet"] + +# [chroot_script] +# path = "./my_chroot.sh" +# rm = true + +# [disk_partition] +# img_size = 30 # GB +# root = 3000 # MiB + +# [persist_mkdir] +# name = ["bar", "foo"] + +# [dm_verity] +# efi_key = "foo" +# grub_key = "bar" +# keys_dir = "./keys" +``` diff --git a/docs/zh/docs/KubeOS/KubeOS/overview.md b/docs/zh/docs/kubeos/kubeos/overview.md similarity index 100% rename from docs/zh/docs/KubeOS/KubeOS/overview.md rename to docs/zh/docs/kubeos/kubeos/overview.md diff --git "a/docs/zh/docs/KubeOS/KubeOS/\344\275\277\347\224\250\346\226\271\346\263\225.md" b/docs/zh/docs/kubeos/kubeos/usage_instructions.md similarity index 48% rename from "docs/zh/docs/KubeOS/KubeOS/\344\275\277\347\224\250\346\226\271\346\263\225.md" rename to docs/zh/docs/kubeos/kubeos/usage_instructions.md index bf55da2fd6ae4fc3e0f6e7eba35428eabd5532ed..1d95780b6ca5eb031443166bc222e2b166419c79 100644 --- "a/docs/zh/docs/KubeOS/KubeOS/\344\275\277\347\224\250\346\226\271\346\263\225.md" +++ b/docs/zh/docs/kubeos/kubeos/usage_instructions.md @@ -1,66 +1,50 @@ # 使用方法 - - -- [使用方法](#使用方法) - - - [注意事项](#注意事项) - - - [升级指导](#升级指导) - - - [回退指导](#回退指导) - - - [使用场景](#使用场景) - - - [手动回退](#手动回退) - - - [工具回退](#工具回退) - - ## 注意事项 -- 公共注意事项 - - 仅支持虚拟机和物理机x86和arm64 UEFI场景。 - - 使用kubectl apply通过YAML创建或更新OS的CR时,不建议并发apply,当并发请求过多时,kube-apiserver会无法处理请求导致失败。 - - 如用户配置了容器镜像仓的证书或密钥,请用户保证证书或密钥文件的权限最小。 -- 升级注意事项 - - 升级为所有软件包原子升级,默认不提供单包升级能力。 - - 升级为双区升级的方式,不支持更多分区数量。 - - 当前暂不支持跨大版本升级。 - - 单节点的升级过程的日志可在节点的 /var/log/messages 文件查看。 - - 请严格按照提供的升级和回退流程进行操作,异常调用顺序可能会导致系统无法升级或回退。 - - 节点上containerd如需配置ctr使用的私有镜像,请将配置文件host.toml按照ctr指导放在/etc/containerd/certs.d目录下。 - - 使用OCI 镜像升级和mtls双向认证仅支持 openEuler 22.09 及之后的版本 - - nodeselector、executionmode、timewindow和timeinterval 仅支持openEuler 24.09及之后版本 - - KubeOS 24.09 版本与历史版本不兼容 - -- 配置注意事项 - - 用户自行指定配置内容,用户需保证配置内容安全可靠 ,尤其是持久化配置(kernel.sysctl.persist、grub.cmdline.current、grub.cmdline.next),KubeOS不对参数有效性进行检验。 - - opstype=config时,若osversion与当前集群节点的OS版本不一致,配置不会进行。 - - 当前仅支持kernel参数临时配置(kernel.sysctl)、持久化配置(kernel.sysctl.persist)和grub cmdline配置(grub.cmdline.current和grub.cmdline.next)。 - - 持久化配置会写入persist持久化分区,升级重启后配置保留;kernel参数临时配置重启后不保留。 - - 配置grub.cmdline.current或grub.cmdline.next时,如为单个参数(非key=value格式参数),请指定key为该参数,value为空。 - - 进行配置删除(operation=delete)时,key=value形式的配置需保证key、value和实际配置一致。 - - 配置不支持回退,如需回退,请修改配置版本和配置内容,重新下发配置。 - - 配置出现错误,节点状态陷入config时,请将配置版本恢复成上一版本并重新下发配置,从而使节点恢复至idel状态。 但是请注意:出现错误前已经配置完成的参数无法恢复。 - - 在配置grub.cmdline.current或grub.cmdline.next时,若需要将已存在的“key=value”格式的参数更新为只有key无value格式,比如将“rd.info=0”更新成rd.info,需要先删除“key=value”,然后在下一次配置时,添加key。不支持直接更新或者更新删除动作在同一次完成。 +* 公共注意事项 + * 仅支持虚拟机和物理机x86和arm64 UEFI场景。 + * 使用kubectl apply通过YAML创建或更新OS的CR时,不建议并发apply,当并发请求过多时,kube-apiserver会无法处理请求导致失败。 + * 如用户配置了容器镜像仓的证书或密钥,请用户保证证书或密钥文件的权限最小。 +* 升级注意事项 + * 升级为所有软件包原子升级,默认不提供单包升级能力。 + * 升级为双区升级的方式,不支持更多分区数量。 + * 当前暂不支持跨大版本升级。 + * 单节点的升级过程的日志可在节点的 /var/log/messages 文件查看。 + * 请严格按照提供的升级和回退流程进行操作,异常调用顺序可能会导致系统无法升级或回退。 + * 节点上containerd如需配置ctr使用的私有镜像,请将配置文件host.toml按照ctr指导放在/etc/containerd/certs.d目录下。 + * 使用OCI 镜像升级和mtls双向认证仅支持 openEuler 22.09 及之后的版本。 + * nodeselector、executionmode、timewindow和timeinterval 仅支持openEuler 24.09及之后版本。 + * KubeOS 24.03-LTS-SP1 版本与历史版本不兼容。 + * 使用从http/https服务器下载升级镜像功能需要同步使用对应版本镜像制作工具。 + +* 配置注意事项 + * 用户自行指定配置内容,用户需保证配置内容安全可靠 ,尤其是持久化配置(kernel.sysctl.persist、grub.cmdline.current、grub.cmdline.next、kubernetes.kubelet、container.containerd、pam.limits),KubeOS不对参数有效性进行检验。 + * opstype=config时,若osversion与当前集群节点的OS版本不一致,配置不会进行。 + * 当前仅支持kernel参数临时配置(kernel.sysctl)、持久化配置(kernel.sysctl.persist)和grub cmdline配置(grub.cmdline.current和grub.cmdline.next)、kubelet配置(kubernetes.kubelet)、containerd配置(container.containerd)和pam limits配置(pam.limits)。 + * 持久化配置会写入persist持久化分区,升级重启后配置保留;kernel参数临时配置重启后不保留。 + * 配置grub.cmdline.current或grub.cmdline.next时,如为单个参数(非key=value格式参数),请指定key为该参数,value为空。 + * 进行配置删除(operation=delete)时,key=value形式的配置需保证key、value和实际配置一致。 + * 配置不支持回退,如需回退,请修改配置版本和配置内容,重新下发配置。 + * 配置出现错误,节点状态陷入config时,请将配置版本恢复成上一版本并重新下发配置,从而使节点恢复至idle状态。 但是请注意:出现错误前已经配置完成的参数无法恢复。 + * 在配置grub.cmdline.current或grub.cmdline.next时,若需要将已存在的“key=value”格式的参数更新为只有key无value格式,比如将“rd.info=0”更新成rd.info,需要先删除“key=value”,然后在下一次配置时,添加key。不支持直接更新或者更新删除动作在同一次完成。 ## OS CR参数说明 -在集群中创建类别为OS的定制对象,设置相应字段。类别OS来自于安装和部署章节创建的CRD对象,字段及说明如下: - -- imageurl指定的地址里包含协议,只支持http或https协议。imageurl为https协议时为安全传输,imageurl为http地址时,需指定flagSafe为true,即用户明确该地址为安全时,才会下载镜像。如imageurl为http地址且没有指定flagSafe为true,默认该地址不安全,不会下载镜像并且在升级节点的日志中提示用户该地址不安全。 -- 对于imageurl,推荐使用https协议,使用https协议需要升级的机器已安装相应证书。如果镜像服务器由用户自己维护,需要用户自己进行签名,并保证升级节点已安装对应证书。用户需要将证书放在容器OS```/etc/KubeOS/certs```目录下。地址由管理员传入,管理员应该保证网址的安全性,推荐采用内网地址。 -- 容器OS镜像的合法性检查需要由容器OS镜像服务提供者做合法性检查,确保下载的容器OS镜像来源可靠。 -- 集群存在多OS版本即存在多个OS的实例时,OS的nodeselector字段需要与其他OS不同,即通过label区分的一类node只能对应一个OS实例: - - 当有OS的nodeselector为all-label时,集群只能存在这一个OS的有效实例(有效实例为存在与这个OS对应的节点)。 - - nodeselector不配置的OS也只能有一个,因为nodeselector不配置时认为是对没有label的节点进行操作。 -- timewinterval参数说明: - - 参数不设置时默认为15s。 - - 参数设置为0时,由于k8s controller-runtime的rate limit限制,operator下发任务的时间间隔会逐渐增加直至1000s。 - - 并行时为每批次operator下发升级/配置的时间间隔。 - - 在串行时为每批次节点串行升级完毕后与下次升级/配置下发的时间间隔,批次内部的时间间隔为15s。 - - OS的实例字段进行更新会立刻触发operator。 +在集群中创建类别为OS的定制对象,设置相应字段。类别OS来自于[安装和部署章节](./installation_and_deployment.md)创建的CRD对象,字段及说明如下: + +* imageurl指定的地址里包含协议,只支持http或https协议。imageurl为https协议时为安全传输,imageurl为http地址时,需指定flagSafe为true,即用户明确该地址为安全时,才会下载镜像。如imageurl为http地址且没有指定flagSafe为true,默认该地址不安全,不会下载镜像并且在升级节点的日志中提示用户该地址不安全。 +* 对于imageurl,推荐使用https协议,使用https协议需要升级的机器已安装相应证书。如果镜像服务器由用户自己维护,需要用户自己进行签名,并保证升级节点已安装对应证书。用户需要将证书放在容器OS```/etc/KubeOS/certs```目录下。地址由管理员传入,管理员应该保证网址的安全性,推荐采用内网地址。 +* 容器OS镜像的合法性检查需要由容器OS镜像服务提供者做合法性检查,确保下载的容器OS镜像来源可靠。 +* 集群存在多OS版本即存在多个OS的实例时,OS的nodeselector字段需要与其他OS不同,即通过label区分的一类node只能对应一个OS实例: + * 当有OS的nodeselector为all-label时,集群只能存在这一个OS的有效实例(有效实例为存在与这个OS对应的节点)。 + * nodeselector不配置的OS也只能有一个,因为nodeselector不配置时认为是对没有label的节点进行操作。 +* timewinterval参数说明: + * 参数不设置时默认为15s。 + * 参数设置为0时,由于k8s controller-runtime的rate limit限制,operator下发任务的时间间隔会逐渐增加直至1000s。 + * 并行时为每批次operator下发升级/配置的时间间隔。 + * 在串行时为每批次节点串行升级完毕后与下次升级/配置下发的时间间隔,批次内部的时间间隔为15s。 + * OS的实例字段进行更新会立刻触发operator。 | 参数 |参数类型 | 参数说明 | 使用说明 | 是否必选 | | -------------- | ------ | ------------------------------------------------------------ | ----- | ---------------- | @@ -80,7 +64,7 @@ | sysconfigs | / | 配置设置 | 1. “opstype=config”时只进行配置。
      2.“opstype=upgrade/rollback”时,代表升级/回退后配置,即在升级/回退重启后进行配置,详细字段说明请见[配置(Settings)指导](#配置settings指导) | “opstype=config”时必选 | | upgradeconfigs | / | 升级前配置设置 | 在升级或者回退时有效,在升级或者回退操作之前起效,详细字段说明请见[配置(Settings)指导](#配置settings指导)| 可选 | | nodeselector | string | 需要进行升级/配置/回滚操作的节点label | 用于只对具有某些特定label的节点而不是集群所有worker节点进行运维的场景,需要进行运维操作的节点需要包含key为upgrade.openeuler.org/node-selector的label,nodeselector为该label的value值。
      注意事项:
      1.此参数不配置时,或者配置为“no-label”时对没有upgrade.openeuler.org/node-selector的节点进行操作
      2.此参数为“”时,对具有upgrade.openeuler.org/node-selector=“”的节点进行操作
      3.如需忽略label,对所有节点进行操作,需指定此参数为all-label| 可选 | - | timewindow | / | 升级/配置/回滚操作的时间窗口 |1.指定时间窗口时starttime和endtime都需指定,即二者需要同时为空或者同时不为空
      2.starttime和endtime类型为string,需要为YYYY-MM-DD HH:MM:SS格式或者HH:MM:SS格式,且二者格式需一致
      3.为HH:MM:SS格式时,starttime < endtime认为starttime是下一天的该时间
      4.timewindow不配置时默认为不存在时间窗限制| 可选 | + | timewindow | / | 升级/配置/回滚操作的时间窗口 |1.指定时间窗口时starttime和endtime都需指定,即二者需要同时为空或者同时不为空
      2.starttime和endtime类型为string,需要为YYYY-MM-DD HH:MM:SS格式或者HH:MM:SS格式,且二者格式需一致
      3.为HH:MM:SS格式时,starttime 小于endtime认为starttime是下一天的该时间
      4.timewindow不配置时默认为不存在时间窗限制| 可选 | | timeinterval | int | 升级/配置/回滚操作每批次任务下发的时间间隔 |参数单位为秒,时间间隔为operator下发任务的时间间隔,如k8s集群繁忙无法立即响应operator请求,实际时间间隔可能会大于指定时间| 可选 | | executionmode | string | 升级/配置/回滚操作执行的方式 |仅支持serial或者parallel,即串行或者并行,当次参数不设置时,默认采用并行的方式| 可选 | @@ -88,187 +72,189 @@ 1. 编写YAML文件,在集群中部署 OS 的cr实例,用于部署cr实例的YAML示例如下,假定将上面的YAML保存到upgrade_v1alpha1_os.yaml; - - 使用磁盘镜像进行升级 - - ```yaml - apiVersion: upgrade.openeuler.org/v1alpha1 - kind: OS - metadata: - name: os-sample - spec: - imagetype: disk - opstype: upgrade - osversion: edit.os.version - maxunavailable: edit.node.upgrade.number - containerimage: "" - evictpodforce: true/false - imageurl: edit.image.url - checksum: image.checksum - flagSafe: imageurl.safety - mtls: imageurl use mtls or not - cacert: ca certificate - clientcert: client certificate - clientkey: client certificate key - ``` - - - 使用容器镜像进行升级 - - 使用容器镜像进行升级前请先制作升级所需的容器镜像,制作方式请见[《容器OS镜像制作指导》](./容器OS镜像制作指导.md)中 [KubeOS OCI 镜像制作](./容器OS镜像制作指导.md#kubeos-oci-镜像制作) - - 节点容器引擎为docker - - ```shell - apiVersion: upgrade.openeuler.org/v1alpha1 - kind: OS - metadata: - name: os-sample - spec: - imagetype: docker - opstype: upgrade - osversion: edit.os.version - maxunavailable: edit.node.upgrade.number - containerimage: container image like repository/name:tag - evictpodforce: true/false - imageurl: "" - checksum: container image digests - flagSafe: false - mtls: true - ``` - - - 节点容器引擎为containerd - - ```yaml - apiVersion: upgrade.openeuler.org/v1alpha1 - kind: OS - metadata: - name: os-sample - spec: - imagetype: containerd - opstype: upgrade - osversion: edit.os.version - maxunavailable: edit.node.upgrade.number - containerimage: container image like repository/name:tag - evictpodforce: true/false - imageurl: "" - checksum: container image digests - flagSafe: false - mtls: true - ``` - - - 升级并且进行配置的示例如下 - - 以节点容器引擎为containerd为例,升级方式对配置无影响,upgradeconfigs在升级前起效,sysconfigs在升级后起效,配置参数说明请见[配置(Settings)指导](#配置settings指导) - - 升级并且配置时opstype字段需为upgrade - - upgradeconfig为升级之前执行的配置,sysconfigs为升级机器重启后执行的配置,用户可按需进行配置 + * 使用磁盘镜像进行升级 + + ```yaml + apiVersion: upgrade.openeuler.org/v1alpha1 + kind: OS + metadata: + name: os-sample + spec: + imagetype: disk + opstype: upgrade + osversion: edit.os.version + maxunavailable: edit.node.upgrade.number + containerimage: "" + evictpodforce: true/false + imageurl: edit.image.url + checksum: image.checksum + flagSafe: imageurl.safety + mtls: imageurl use mtls or not + cacert: ca certificate + clientcert: client certificate + clientkey: client certificate key + ``` + + * 使用容器镜像进行升级 + + * 使用容器镜像进行升级前请先制作升级所需的容器镜像,制作方式请见[《容器OS镜像制作指导》](./kubeos_image_creation.md)中 [KubeOS OCI 镜像制作](./kubeos_image_creation.md#kubeos-oci-镜像制作)。 + + * 节点容器引擎为docker + + ``` yaml + apiVersion: upgrade.openeuler.org/v1alpha1 + kind: OS + metadata: + name: os-sample + spec: + imagetype: docker + opstype: upgrade + osversion: edit.os.version + maxunavailable: edit.node.upgrade.number + containerimage: container image like repository/name:tag + evictpodforce: true/false + imageurl: "" + checksum: container image digests + flagSafe: false + mtls: true + ``` + + * 节点容器引擎为containerd + + ```yaml + apiVersion: upgrade.openeuler.org/v1alpha1 + kind: OS + metadata: + name: os-sample + spec: + imagetype: containerd + opstype: upgrade + osversion: edit.os.version + maxunavailable: edit.node.upgrade.number + containerimage: container image like repository/name:tag + evictpodforce: true/false + imageurl: "" + checksum: container image digests + flagSafe: false + mtls: true + ``` + + * 升级并且进行配置的示例如下: + + * 以节点容器引擎为containerd为例,升级方式对配置无影响,upgradeconfigs在升级前起效,sysconfigs在升级后起效,配置参数说明请见[配置(Settings)指导](#配置settings指导)。 + * 升级并且配置时opstype字段需为upgrade。 + * upgradeconfig为升级之前执行的配置,sysconfigs为升级机器重启后执行的配置,用户可按需进行配置。 + + ```yaml + apiVersion: upgrade.openeuler.org/v1alpha1 + kind: OS + metadata: + name: os-sample + spec: + imagetype: "" + opstype: upgrade + osversion: edit.os.version + maxunavailable: edit.node.upgrade.number + containerimage: "" + evictpodforce: true/false + imageurl: "" + checksum: container image digests + flagSafe: false + mtls: false + sysconfigs: + version: edit.os.version + configs: + - model: kernel.sysctl + contents: + - key: kernel param key1 + value: kernel param value1 + - key: kernel param key2 + value: kernel param value2 + - model: kernel.sysctl.persist + configpath: persist file path + contents: + - key: kernel param key3 + value: kernel param value3 + - key: "" + value: "" + upgradeconfigs: + version: 1.0.0 + configs: + - model: kernel.sysctl + contents: + - key: kernel param key4 + value: kernel param value4 + ``` + + * 设置nodeselector、timewindow、timeinterval、executionmode升级部分节点示例如下: + + * 以节点容器引擎为containerd为例,升级方式对节点筛选无影响。 + * 需要进行升级的节点需包含key为`upgrade.openeuler.org/node-selector`的label,nodeselector的值为该label的value,即假定nodeselector值为kubeos,则只对包含`upgrade.openeuler.org/node-selector=kubeos`的label的worker节点进行升级。 + * nodeselector、timewindow、timeinterval、executionmode对配置和回滚同样有效。 + * 节点添加label、修改label、删除label和查看label命令示例如下: + + ```shell + # 为节点kubeos-node1增加label + kubectl label nodes kubeos-node1 upgrade.openeuler.org/node-selector=kubeos-v1 + # 修改节点kubeos-node1的label + kubectl label --overwrite nodes kubeos-node1 upgrade.openeuler.org/node-selector=kubeos-v2 + # 删除节点kubeos-node1的label + kubectl label nodes kubeos-node1 upgrade.openeuler.org/node-selector- + # 查看节点的label + kubectl get nodes --show-labels + ``` + + * yaml示例如下: ```yaml apiVersion: upgrade.openeuler.org/v1alpha1 kind: OS metadata: - name: os-sample + name: os-sample spec: - imagetype: "" - opstype: upgrade - osversion: edit.os.version - maxunavailable: edit.node.upgrade.number - containerimage: "" - evictpodforce: true/false - imageurl: "" - checksum: container image digests - flagSafe: false - mtls: false - sysconfigs: - version: edit.os.version - configs: - - model: kernel.sysctl - contents: - - key: kernel param key1 - value: kernel param value1 - - key: kernel param key2 - value: kernel param value2 - - model: kernel.sysctl.persist - configpath: persist file path - contents: - - key: kernel param key3 - value: kernel param value3 - - key: "" - value: "" - upgradeconfigs: - version: 1.0.0 - configs: - - model: kernel.sysctl - contents: - - key: kernel param key4 - value: kernel param value4 + imagetype: containerd + opstype: upgrade + osversion: edit.os.version + maxunavailable: edit.node.upgrade.number + containerimage: container image like repository/name:tag + evictpodforce: true/false + imageurl: "" + checksum: container image digests + flagSafe: false + mtls: true + nodeselector: edit.node.label.key + timewindow: + starttime: "HH::MM::SS/YYYY-MM-DD HH::MM::SS" + endtime: "HH::MM::SS/YYYY-MM-DD HH::MM::SS" + timeinterval: time intervel like 30 + executionmode: serial/parallel ``` - - 设置nodeselector、timewindow、timeinterval、executionmode升级部分节点示例如下 - - 以节点容器引擎为containerd为例,升级方式对节点筛选无影响 - - 需要进行升级的节点需包含key为upgrade.openeuler.org/node-selector的label,nodeselector的值为该label的value,即假定nodeselector值为kubeos,则只对包含upgrade.openeuler.org/node-selector=kubeos的label的worker节点进行升级 - - nodeselector、timewindow、timeinterval、executionmode对配置和回滚同样有效 - - 节点添加label、修改label、删除label和查看label命令示例如下: - - ```shell - # 为节点kubeos-node1增加label - kubectl label nodes kubeos-node1 upgrade.openeuler.org/node-selector=kubeos-v1 - # 修改节点kubeos-node1的label - kubectl label --overwrite nodes kubeos-node1 upgrade.openeuler.org/node-selector=kubeos-v2 - # 删除节点kubeos-node1的label - kubectl label nodes kubeos-node1 upgrade.openeuler.org/node-selector- - # 查看节点的label - kubectl get nodes --show-labels - ``` - - - yaml示例如下: - - ```yaml - apiVersion: upgrade.openeuler.org/v1alpha1 - kind: OS - metadata: - name: os-sample - spec: - imagetype: containerd - opstype: upgrade - osversion: edit.os.version - maxunavailable: edit.node.upgrade.number - containerimage: container image like repository/name:tag - evictpodforce: true/false - imageurl: "" - checksum: container image digests - flagSafe: false - mtls: true - nodeselector: edit.node.label.key - timewindow: - starttime: "HH::MM::SS/YYYY-MM-DD HH::MM::SS" - endtime: "HH::MM::SS/YYYY-MM-DD HH::MM::SS" - timeinterval: time intervel like 30 - executionmode: serial/parallel - ``` - -2. 查看未升级的节点的 OS 版本 - - ```shell - kubectl get nodes -o custom-columns='NAME:.metadata.name,OS:.status.nodeInfo.osImage' - ``` +2.查看未升级的节点的 OS 版本。 -3. 执行命令,在集群中部署cr实例后,节点会根据配置的参数信息进行升级。 + ```shell + kubectl get nodes -o custom-columns='NAME:.metadata.name,OS:.status.nodeInfo.osImage' + ``` - ```shell - kubectl apply -f upgrade_v1alpha1_os.yaml - ``` +3.执行命令,在集群中部署cr实例后,节点会根据配置的参数信息进行升级。 -4. 再次查看节点的 OS 版本来确认节点是否升级完成 + ```shell + kubectl apply -f upgrade_v1alpha1_os.yaml + ``` - ```shell - kubectl get nodes -o custom-columns='NAME:.metadata.name,OS:.status.nodeInfo.osImage' - ``` +4.再次查看节点的 OS 版本来确认节点是否升级完成。 -5. 如果后续需要再次升级,与上面相同,对upgrade_v1alpha1_os.yaml的相应字段进行修改 + ```shell + kubectl get nodes -o custom-columns='NAME:.metadata.name,OS:.status.nodeInfo.osImage' + ``` -> ![](./public_sys-resources/icon-note.gif)**说明**: +> [!NOTE]说明 > -> 如果后续需要再次升级,与上面相同对 upgrade_v1alpha1_os.yaml 的 imageurl ,osversion,checksum,maxunavailable,flagSafe 或者dockerimage字段进行相应修改。 +> 如果后续需要再次升级,与上面相同对 upgrade_v1alpha1_os.yaml 的 相应字段进行相应修改。 ## 配置(Settings)指导 -- Settings参数说明: +* Settings参数说明: 基于示例YAML对配置的参数进行说明,示例YAML如下,配置的格式(缩进)需和示例保持一致: @@ -331,119 +317,128 @@ | value | string | 参数值 | key=value形式的参数中,value不能为空,不建议配置含空格、tab键的字符串,具体请看附录下的[Settings列表](#setting-列表)中对每种配置类型对value的说明。 | key=value形式的参数必选 | | operation | string | 对参数进行的操作 | 仅对kernel.sysctl.persist、grub.cmdline.current、grub.cmdline.next类型的参数生效。默认为添加或更新。仅支持配置为delete,代表删除已存在的参数(key=value需完全一致才能删除)。 | 否 | - - upgradeconfigs与sysconfigs参数相同,upgradeconfigs为升级/回退前进行的配置,仅在upgrade/rollback场景起效,sysconfigs既支持只进行配置,也支持在升级/回退重启后进行配置 + * upgradeconfigs与sysconfigs参数相同,upgradeconfigs为升级/回退前进行的配置,仅在upgrade/rollback场景起效,sysconfigs既支持只进行配置,也支持在升级/回退重启后进行配置。 -- 使用说明 +* 使用说明 - - 编写YAML文件,在集群中部署 OS 的cr实例,用于部署cr实例的YAML示例如上,假定将上面的YAML保存到upgrade_v1alpha1_os.yaml + * 编写YAML文件,在集群中部署 OS 的cr实例,用于部署cr实例的YAML示例如上,假定将上面的YAML保存到upgrade_v1alpha1_os.yaml。 - - 查看配置之前的节点的配置的版本和节点状态(NODESTATUS状态为idle) + * 查看配置之前的节点的配置的版本和节点状态(NODESTATUS状态为idle)。 ```shell kubectl get osinstances -o custom-columns='NAME:.metadata.name,NODESTATUS:.spec.nodestatus,SYSCONFIG:status.sysconfigs.version,UPGRADECONFIG:status.upgradeconfigs.version' ``` - - 执行命令,在集群中部署cr实例后,节点会根据配置的参数信息进行配置,再次查看节点状态(NODESTATUS变成config) + * 执行命令,在集群中部署cr实例后,节点会根据配置的参数信息进行配置,再次查看节点状态(NODESTATUS变成config)。 ```shell kubectl apply -f upgrade_v1alpha1_os.yaml kubectl get osinstances -o custom-columns='NAME:.metadata.name,NODESTATUS:.spec.nodestatus,SYSCONFIG:status.sysconfigs.version,UPGRADECONFIG:status.upgradeconfigs.version' ``` - - 再次查看节点的配置的版本确认节点是否配置完成(NODESTATUS恢复为idle) + * 再次查看节点的配置的版本确认节点是否配置完成(NODESTATUS恢复为idle)。 ```shell kubectl get osinstances -o custom-columns='NAME:.metadata.name,NODESTATUS:.spec.nodestatus,SYSCONFIG:status.sysconfigs.version,UPGRADECONFIG:status.upgradeconfigs.version' ``` -- 如果后续需要再次配置,与上面相同对 upgrade_v1alpha1_os.yaml 的相应字段进行相应修改。 +* 如果后续需要再次配置,与上面相同对 upgrade_v1alpha1_os.yaml 的相应字段进行相应修改。 ## 回退指导 -- 回退场景 - - 虚拟机无法正常启动时,可在grub启动项页面手动切换启动项,使系统回退至上一版本(即手动回退)。 - - 虚拟机能够正常启动并且进入系统时,支持工具回退和手动回退,建议使用工具回退。 - - 工具回退有两种方式: - 1. rollback模式直接回退至上一版本。 - 2. upgrade模式重新升级至上一版本。 -- 手动回退指导 - - 手动重启虚拟机,进入启动项页面后,选择第二启动项进行回退,手动回退仅支持回退到上一个版本。 -- 工具回退指导 - - 回退至任意版本 - 1. 修改 OS 的cr实例的YAML 配置文件(例如 upgrade_v1alpha1_os.yaml),设置相应字段为期望回退的老版本镜像信息。类别OS来自于安装和部署章节创建的CRD对象,字段说明及示例请见上一节升级指导。 - 2. YAML修改完成后执行更新命令,在集群中更新定制对象后,节点会根据配置的字段信息进行回退 - - ```bash - kubectl apply -f upgrade_v1alpha1_os.yaml - ``` - - - 回退至上一版本 - - OS回退至上一版本:修改upgrade_v1alpha1_os.yaml,设置osversion为上一版本,opstype为rollback,回退至上一版本(即切换至上一分区)。YAML示例如下: +### 使用场景 - ```yaml - apiVersion: upgrade.openeuler.org/v1alpha1 - kind: OS - metadata: - name: os-sample - spec: - imagetype: "" - opstype: rollback - osversion: KubeOS previous version - maxunavailable: 2 - containerimage: "" - evictpodforce: true/false - imageurl: "" - checksum: "" - flagSafe: false - mtls: true - ``` +* 虚拟机无法正常启动时,可在grub启动项页面手动切换启动项,使系统回退至上一版本(即手动回退)。 +* 虚拟机能够正常启动并且进入系统时,支持工具回退和手动回退,建议使用工具回退。 +* 工具回退有两种方式: + + 1. rollback模式直接回退至上一版本。 + 2. upgrade模式重新升级至上一版本。 + +### 手动回退指导 + +* 手动重启虚拟机,进入启动项页面后,选择第二启动项进行回退,手动回退仅支持回退到上一个版本。 + +### 工具回退指导 - - 配置回退至上一版本:修改upgrade_v1alpha1_os.yaml,设置sysconfigs/upgradeconfigs的version为上一版本,回退至上一版本(已配置的参数无法回退)。YAML示例如下: +* 回退至任意版本 + + 1. 修改 OS 的cr实例的YAML 配置文件(例如 upgrade_v1alpha1_os.yaml),设置相应字段为期望回退的老版本镜像信息。类别OS来自于安装和部署章节创建的CRD对象,字段说明及示例请见上一节升级指导。 + + 2. YAML修改完成后执行更新命令,在集群中更新定制对象后,节点会根据配置的字段信息进行回退 + + ```shell + kubectl apply -f upgrade_v1alpha1_os.yaml + ``` + +* 回退至上一版本 + + * OS回退至上一版本:修改upgrade_v1alpha1_os.yaml,设置osversion为上一版本,opstype为rollback,回退至上一版本(即切换至上一分区)。YAML示例如下: ```yaml apiVersion: upgrade.openeuler.org/v1alpha1 kind: OS metadata: - name: os-sample + name: os-sample spec: - imagetype: "" - opstype: config - osversion: edit.os.version - maxunavailable: edit.node.config.number - containerimage: "" - evictpodforce: true/false - imageurl: "" - checksum: "" - flagSafe: false - mtls: false - sysconfigs: - version: previous config version - configs: - - model: kernel.sysctl - contents: - - key: kernel param key1 - value: kernel param value1 - - key: kernel param key2 - value: kernel param value2 - - model: kernel.sysctl.persist - configpath: persist file path - contents: - - key: kernel param key3 - value: kernel param value3 + imagetype: "" + opstype: rollback + osversion: KubeOS previous version + maxunavailable: 2 + containerimage: "" + evictpodforce: true/false + imageurl: "" + checksum: "" + flagSafe: false + mtls: true ``` - - YAML修改完成后执行更新命令,在集群中更新定制对象后,节点会根据配置的字段信息进行回退 + * 配置回退至上一版本:修改upgrade_v1alpha1_os.yaml,设置sysconfigs/upgradeconfigs的version为上一版本,回退至上一版本(已配置的参数无法回退)。YAML示例如下: - ```shell - kubectl apply -f upgrade_v1alpha1_os.yaml + ```yaml + apiVersion: upgrade.openeuler.org/v1alpha1 + kind: OS + metadata: + name: os-sample + spec: + imagetype: "" + opstype: config + osversion: edit.os.version + maxunavailable: edit.node.config.number + containerimage: "" + evictpodforce: true/false + imageurl: "" + checksum: "" + flagSafe: false + mtls: false + sysconfigs: + version: previous config version + configs: + - model: kernel.sysctl + contents: + - key: kernel param key1 + value: kernel param value1 + - key: kernel param key2 + value: kernel param value2 + - model: kernel.sysctl.persist + configpath: persist file path + contents: + - key: kernel param key3 + value: kernel param value3 ``` - 更新完成后,节点会根据配置信息回退容器 OS。 - - 查看节点容器 OS 版本(回退OS版本)或节点config版本&节点状态为idle(回退config版本),确认回退是否成功。 +* YAML修改完成后执行更新命令,在集群中更新定制对象后,节点会根据配置的字段信息进行回退。 - ```shell - kubectl get osinstances -o custom-columns='NAME:.metadata.name,NODESTATUS:.spec.nodestatus,SYSCONFIG:status.sysconfigs.version,UPGRADECONFIG:status.upgradeconfigs.version' - ``` + ```shell + kubectl apply -f upgrade_v1alpha1_os.yaml + ``` + + 更新完成后,节点会根据配置信息回退容器 OS。 +* 查看节点容器 OS 版本(回退OS版本)或节点config版本&节点状态为idle(回退config版本),确认回退是否成功。 + + ```shell + kubectl get osinstances -o custom-columns='NAME:.metadata.name,NODESTATUS:.spec.nodestatus,SYSCONFIG:status.sysconfigs.version,UPGRADECONFIG:status.upgradeconfigs.version' + ``` ## 附录 @@ -451,7 +446,7 @@ #### kernel Settings -- kernel.sysctl:临时设置内核参数,重启后无效,key/value 表示内核参数的 key/value, key与value均不能为空且key不能包含“=”,该参数不支持删除操作(operation=delete)示例如下: +* kernel.sysctl:临时设置内核参数,重启后无效,key/value 表示内核参数的 key/value, key与value均不能为空且key不能包含“=”,该参数不支持删除操作(operation=delete)示例如下: ```yaml configs: @@ -464,7 +459,7 @@ operation: delete ``` -- kernel.sysctl.persist: 设置持久化内核参数,key/value表示内核参数的key/value,key与value均不能为空且key不能包含“=”, configpath为配置文件路径,支持新建(需保证父目录存在),如不指定configpath默认修改/etc/sysctl.conf,示例如下: +* kernel.sysctl.persist: 设置持久化内核参数,key/value表示内核参数的key/value,key与value均不能为空且key不能包含“=”, configpath为配置文件路径,支持新建(需保证父目录存在),如不指定configpath默认修改/etc/sysctl.conf,示例如下: ```yaml configs: @@ -480,20 +475,22 @@ #### Grub Settings -- grub.cmdline.current/next: 设置grub.cfg文件中的内核引导参数,该行参数在grub.cfg文件中类似如下示例: +* grub.cmdline.current/next: 设置grub.cfg文件中的内核引导参数,该行参数在grub.cfg文件中类似如下示例: ```shell linux /boot/vmlinuz root=/dev/sda2 ro rootfstype=ext4 nomodeset quiet oops=panic softlockup_panic=1 nmi_watchdog=1 rd.shell=0 selinux=0 crashkernel=256M panic=3 ``` - - KubeOS使用双分区,grub.cmdline.current/next支持对当前分区或下一分区进行配置: + * 在dm-verity模式下,grub.cmdline配置下发无效。 + + * KubeOS使用双分区,grub.cmdline.current/next支持对当前分区或下一分区进行配置: - - grub.cmdline.current:对当前分区的启动项参数进行配置。 - - grub.cmdline.next:对下一分区的启动项参数进行配置。 + * grub.cmdline.current:对当前分区的启动项参数进行配置。 + * grub.cmdline.next:对下一分区的启动项参数进行配置。 - - 注意:升级/回退前后的配置,始终基于升级/回退操作下发时的分区位置进行current/next的区分。假设当前分区为A分区,下发升级操作并在sysconfigs(升级重启后配置)中配置grub.cmdline.current,重启后进行配置时仍修改A分区对应的grub cmdline。 + * 注意:升级/回退前后的配置,始终基于升级/回退操作下发时的分区位置进行current/next的区分。假设当前分区为A分区,下发升级操作并在sysconfigs(升级重启后配置)中配置grub.cmdline.current,重启后进行配置时仍修改A分区对应的grub cmdline。 - - grub.cmdline.current/next支持“key=value”(value不能为空),也支持单key。若value中有“=”,例如“root=UUID=some-uuid”,key应设置为第一个“=”前的所有字符,value为第一个“=”后的所有字符。 配置方法示例如下: + * grub.cmdline.current/next支持“key=value”(value不能为空),也支持单key。若value中有“=”,例如“root=UUID=some-uuid”,key应设置为第一个“=”前的所有字符,value为第一个“=”后的所有字符。 配置方法示例如下: ```yaml configs: @@ -518,3 +515,87 @@ operation: delete - key: crash_kexec_post_notifiers ``` + +#### kubelet配置 + +* kubernetes.kubelet: 配置节点kubelet的配置文件中的参数,参数说明和约束如下: + * 仅支持```KubeletConfiguration```中的配置参数。 + * 节点kubelet配置文件需要为yaml格式的文件。 + * 如不指定configpath,默认配置文件路径为```/var/lib/kubelet/config.yaml```,并且需要注意的是配置文件的路径需要与kubelet启动时的```-- config```参数指定的路径一致才能生效,用户需保证配置文件路径有效。 + * kubelet配置的value参数类型支持为空/null、int、float、string、boolean和数组。当为数组时,数组元素允许重复,数组参数进行更新时会追加到已有数组中。如需修改数组中的元素,需要先删除数组,再新增数组来完成修改。 + * 如配置存在嵌套,则通过```'.'```连接嵌套的key值,例如如果修改如下yaml示例中```cacheAuthorizedTTL```参数为1s。 + + ```yaml + authorization: + mode: Webhook + webhook: + cacheAuthorizedTTL: 0s + ``` + + 参数配置示例如下: + + ```yaml + configs: + - model: kubernetes.kubelet + configpath: /etc/test.yaml + contents: + - key: authorization.webhook.cacheAuthorizedTTL + value: 1s + ``` + + * kubernetes.kubelet进行删除时,不对value与配置文件中的值进行比较。 + +#### containerd配置 + +* container.containerd: 配置节点上containerd的配置文件中的参数,参数说明和约束如下: + * containerd需要配置文件为toml格式,所以key为toml中该参数的表头.键名,例如希望修改如下toml示例中```no_shim```为true。 + + ```toml + [plugins."io.containerd.runtime.v1.linux"] + no_shim=false + runtime="runc" + runtime_root=" + ``` + + 参数配置示例如下: + + ```yaml + configs: + - model: container.containerd + configpath: /etc/test.toml + contents: + - key: plugins."io.containerd.runtime.v1.linux".no_shim + value: true + ``` + + * toml使用```.```分割键,os-agent识别时与toml保持一致,所以当键名中包含```.```时,该键名需要使用```""```,例如上例中的```"io.containerd.runtime.v1.linux"```为一个键 + * 如不指定configpath,默认配置文件路径为```/etc/containerd/config.toml```,用户需要保证配置文件路径有效。 + * container.conatainerd配置的key和value均不能为空,value参数类型支持int、float、string、boolean和数组。当为数组时,数组元素允许重复,数组参数进行更新时会追加到已有数组中。如需修改数组中的元素,需要先删除数组,再新增数组来完成修改。 + * container.containerd进行删除时,不对value与配置文件中的值进行比较。 + +#### Pam Limits配置 + +* pam.limits:配置节点上/etc/security/limits.conf文件 + * key为domain值,value的格式需要为type.item.value(limits.conf文件要求每行格式为:\ \ \ \),例如: + + ```yaml + configs: + - model: pam.limits + contents: + - key: ftp + value: soft.core.0 + ``` + + * 更新时,如不需要对type/item/value更新时,可以使用```_```,忽略对此参数的更新,但value必须为点隔的三段式,例如: + + ```yaml + configs: + - model: pam.limits + contents: + - key: ftp + value: hard._.1 + ``` + + * pam.limits新增时,value中不允许包含```_``` + * pam.limits删除时,会对value进行校验,当value与配置文件中的值不同时,删除失败 + * pam.limits配置的key和value均不能为空 diff --git a/docs/zh/docs/nestos/nestos/_toc.yaml b/docs/zh/docs/nestos/nestos/_toc.yaml new file mode 100644 index 0000000000000000000000000000000000000000..76699de8b271ef76f55fca6553f57aef17a831aa --- /dev/null +++ b/docs/zh/docs/nestos/nestos/_toc.yaml @@ -0,0 +1,10 @@ +label: NestOS用户指南 +isManual: true +description: NestOS是为容器化设计的轻量级操作系统,采用双分区院子更新,确保安全可靠 +sections: + - label: 概述 + href: ./overview.md + - label: NestOS For Container用户指南 + href: ./nestos_for_container.md + - label: 功能特性描述 + href: ./feature_description.md diff --git "a/docs/zh/docs/NestOS/NestOS/\345\212\237\350\203\275\347\211\271\346\200\247\346\217\217\350\277\260.md" b/docs/zh/docs/nestos/nestos/feature_description.md similarity index 97% rename from "docs/zh/docs/NestOS/NestOS/\345\212\237\350\203\275\347\211\271\346\200\247\346\217\217\350\277\260.md" rename to docs/zh/docs/nestos/nestos/feature_description.md index d916f2ba5f73096ca4faa328532f378040d77a0f..15b8ad381ec9890fb16879e5abb7b8beab4f01f0 100644 --- "a/docs/zh/docs/NestOS/NestOS/\345\212\237\350\203\275\347\211\271\346\200\247\346\217\217\350\277\260.md" +++ b/docs/zh/docs/nestos/nestos/feature_description.md @@ -44,7 +44,7 @@ nestos-installer是一个帮助安装Nestos的程序,它可以执行以下操 ## zincati -Zincati是NestOS⾃动更新的代理,它作为Cincinnati服务的客户端,负责监听NestOS版本变化并调用rpn-ostree进行⾃动更新。Zincati有如下特点: +Zincati是NestOS⾃动更新的代理,它作为Cincinnati服务的客户端,负责监听NestOS版本变化并调用rpm-ostree进行⾃动更新。Zincati有如下特点: (1)支持自动更新代理,支持分阶段推出 @@ -74,7 +74,7 @@ Ignition 旨在用作配置工具,而不是配置管理工具。 Ignition 鼓 (2)Ignition不是在任何情况下都可以完成配置 -Ignition 执行它需要的操作,使系统与 Ignition 配置中描述的状态相匹配。 如果由于任何原因 Ignition 无法提供配置要求的确切机器,Ignition 会阻止机器成功启动。例如,如果用户想要获取托管在 的文档并将其写入磁盘,如果无法解析给定的 URL,Ignition 将阻止机器启动。 +Ignition 执行它需要的操作,使系统与 Ignition 配置中描述的状态相匹配。 如果由于任何原因 Ignition 无法提供配置要求的确切机器,Ignition 会阻止机器成功启动。例如,如果用户想要获取托管在[foo.conf](https://example.com/foo.conf)的文档并将其写入磁盘,如果无法解析给定的 URL,Ignition 将阻止机器启动。 (3)Ignition只是声明性配置 diff --git a/docs/zh/docs/nestos/nestos/figures/figure1.png b/docs/zh/docs/nestos/nestos/figures/figure1.png new file mode 100644 index 0000000000000000000000000000000000000000..388a038273b5bb428c2f961d4241754fc2edc982 Binary files /dev/null and b/docs/zh/docs/nestos/nestos/figures/figure1.png differ diff --git a/docs/zh/docs/nestos/nestos/figures/figure2.png b/docs/zh/docs/nestos/nestos/figures/figure2.png new file mode 100644 index 0000000000000000000000000000000000000000..8e1bbf940a46234f75229611f706cf9ffd54b73a Binary files /dev/null and b/docs/zh/docs/nestos/nestos/figures/figure2.png differ diff --git "a/docs/zh/docs/NestOS/NestOS/NestOS For Container\347\224\250\346\210\267\346\214\207\345\215\227.md" b/docs/zh/docs/nestos/nestos/nestos_for_container.md similarity index 98% rename from "docs/zh/docs/NestOS/NestOS/NestOS For Container\347\224\250\346\210\267\346\214\207\345\215\227.md" rename to docs/zh/docs/nestos/nestos/nestos_for_container.md index a0db1051493afe313e30614964e50e9b11ef7f1a..7f2cefd000f51e6f10aab32b328e472ff65e424d 100644 --- "a/docs/zh/docs/NestOS/NestOS/NestOS For Container\347\224\250\346\210\267\346\214\207\345\215\227.md" +++ b/docs/zh/docs/nestos/nestos/nestos_for_container.md @@ -51,13 +51,13 @@ NestOS 适合作为以容器化应用为主的云场景基础运行环境,解 推荐使用基于openEuler的base镜像,更多说明请参考6.1 -```bash +```sh docker pull hub.oepkgs.net/nestos/nestos-assembler:24.03-LTS.20240903.0-aarch64 ``` 2)编写名为nosa的脚本并存放至/usr/local/bin,并赋予可执行权限 -```bash +```sh #!/bin/bash sudo docker run --rm -it --security-opt label=disable --privileged --user=root \ @@ -75,7 +75,7 @@ sudo docker run --rm -it --security-opt label=disable --privileged --user=root 使用nosa init 初始化构建工作目录,拉取构建配置,创建工作目录nestos-build,在该目录下执行如下命令 -```bash +```sh nosa init https://gitee.com/openeuler/nestos-config ``` @@ -85,7 +85,7 @@ nestos-config提供默认构建配置,无需额外操作。如需调整,请 5)NestOS镜像构建 -```bash +```sh # 拉取构建配置、更新缓存 nosa fetch # 生成根文件系统、qcow2及OCI镜像 @@ -102,7 +102,7 @@ nosa buildextend-live 以NestOS ISO镜像为例,启动进入live环境后,执行如下命令根据向导提示完成安装: -```bash +```sh sudo installnestos ``` @@ -162,7 +162,7 @@ nestos-config的仓库地址为 1)在配置目录编辑repo文件,将内容修改为期望的软件仓库 -```bash +```sh $ vim nestos-pool.repo [repo_name_1] Name=xxx @@ -179,7 +179,7 @@ enabled = 1 注:仓库名称为repo文件中[]内的内容,不是name字段内容 -```bash +```sh $ vim manifests/rpmlist.yaml 修改lockfile-repo字段内容为 lockfile-repos: @@ -193,7 +193,7 @@ lockfile-repos: 如下所示,在package字段中添加了nano,构建安装后系统中会有nano 。 -```bash +```sh $ vim manifests/rpmlist.yaml packages: - bootupd @@ -212,7 +212,7 @@ packages-x86_64: 修改yaml文件中的releasever及rolij.name 字段,这些字段分别控制镜像的版本号及名称。 -```bash +```sh $ vim manifest.yaml releasever: "1.0" @@ -228,7 +228,7 @@ rojig: 正常release信息是由我们集成的release包(如openeuler-release)提供的,但是我们也可以通过添加postprocess脚本对/etc/os-release文件进行重写操作。 -```bash +```sh $ vim manifests/ system-configuration.yaml 在postprocess添加如下内容,若已存在相关内容,则只需修改对应release信息即可 postprocess: @@ -246,14 +246,14 @@ postprocess: 在overlay.d目录下每个目录进行自定义文件的添加和修改,这种操作可以实现构建镜像内容的自定义。 -```bash +```sh mkdir -p overlay.d/15nestos/etc/test/test.txt echo "This is a test message !" > overlay.d/15nestos/etc/test/test.txt ``` 使用如上配置进行镜像构建,启动构建出的镜像,查看系统中对应文件内容即为我们上述自定义添加的内容。 -```bash +```sh [root@nosa-devsh ~]# cat /etc/test/test.txt This is a test message ! ``` @@ -276,13 +276,13 @@ NestOS-assembler容器镜像需要基于支持yum/dnf软件包管理器的base 安装必备依赖docker -```bash +```sh dnf install -y docker ``` 3)克隆nestos-assembler源代码仓库 -```bash +```sh git clone --depth=1 --single-branch https://gitee.com/openeuler/nestos-assembler.git ``` @@ -290,7 +290,7 @@ git clone --depth=1 --single-branch https://gitee.com/openeuler/nestos-assembler 使用openEuler容器镜像作为base镜像,使用以下指令构建: -```bash +```sh cd nestos-assembler/ docker build -f Dockerfile . -t nestos-assembler:your_tag ``` @@ -347,7 +347,7 @@ NestOS构建环境需要独立的空文件夹作为工作目录,且支持多 进入待初始化工作目录,执行如下命令即可初始化构建环境: -```bash +```sh nosa init https://gitee.com/openeuler/nestos-config ``` @@ -383,7 +383,7 @@ NestOS构建主要步骤及参考命令如下: 初始化构建环境后,执行如下命令更新构建配置及缓存: -```bash +```sh nosa fetch ``` @@ -391,7 +391,7 @@ nosa fetch 当构建配置发生较大变更,希望清空本地缓存重新拉取时,需执行如下命令: -```bash +```sh nosa clean --all ``` @@ -399,13 +399,13 @@ nosa clean --all NestOS不可变操作系统的核心是基于ostree技术的不可变根文件系统,执行如下步骤构建ostree文件系统: -```bash +```sh nosa build ``` build命令默认会生成ostree文件系统和OCI归档文件,您也可以在执行命令时同步添加qemu、metal、metal4k中的一个或多个,同步构建发布件,等效于后续继续执行buildextend-qemu、buildextend-metal和buildextend-metal4k命令。 -```bash +```sh nosa build qemu metal metal4k ``` @@ -417,13 +417,13 @@ build命令执行完毕后,可继续执行buildextend-XXX命令用于构建各 - 构建qcow2镜像 -```bash +```sh nosa buildextend-qemu ``` - 构建带live环境的ISO镜像或PXE启动组件 -```bash +```sh nosa buildextend-metal nosa buildextend-metal4k nosa buildextend-live @@ -431,7 +431,7 @@ nosa buildextend-live - 构建适用于openstack环境的qcow2镜像 -```bash +```sh nosa buildextend-openstack ``` @@ -439,13 +439,13 @@ nosa buildextend-openstack 执行nosa build命令构建ostree文件系统时,会同时生成ociarchive格式镜像,该镜像可直接执行如下命令推送到本地或远程镜像仓库,无需执行其他构建步骤。 -```bash +```sh nosa push-container [container-image-name] ``` 远程镜像仓库地址需附加到推送容器镜像名称中,且除隔离镜像tag外,不得出现":"。如未检测到":",该命令会自动生成{latest_build}-{arch}格式的tag。示例如下: -```bash +```sh nosa push-container registry.example.com/nestos:1.0.20240903.0-x86_64 ``` @@ -471,25 +471,25 @@ nosa push-container registry.example.com/nestos:1.0.20240903.0-x86_64 构建完毕后,发布件均生成于构建环境中如下路径: -```bash +```sh builds/{version}/{arch}/ ``` 如您仅关心最新构建版本或通过CI/CD调用,提供latest目录软链接至最新版本目录,即: -```bash +```sh builds/latest/{arch}/ ``` 为方便传输,您可以调用如下命令,压缩发布件体积: -```bash +```sh nosa compress ``` 压缩后原文件会被移除,会导致部分调试命令无法使用,可以调用解压命令恢复原文件: -```bash +```sh nosa uncompress ``` @@ -501,25 +501,25 @@ nosa uncompress 可以通过以下命令清理历史版本构建: -```bash +```sh nosa prune ``` 也可删除当前构建环境中的全部发布件: -```bash +```sh nosa clean ``` 如构建配置更换过软件源或历史缓存无保留价值,可彻底清理当前构建环境缓存: -```bash +```sh nosa clean --all ``` #### 6.6.2 临时运行构建版本实例,用于调试或确认构建正确 -```bash +```sh nosa run ``` @@ -529,13 +529,13 @@ nosa run #### 6.6.3 运行自动化测试 -```bash +```sh nosa kola run ``` 该命令会执行预设的测试用例,也可在其后追加测试用例名称,单独执行单条用例。 -```bash +```sh nosa kola testiso ``` @@ -543,7 +543,7 @@ nosa kola testiso #### 6.6.4 调试验证构建工具(NestOS-assembler) -```bash +```sh nosa shell ``` @@ -567,13 +567,13 @@ NestOS对Butane进行了适配修改,新增nestos变体支持和配置规范 安装butane软件包 -```bash +```sh dnf install butane ``` 编辑example.yaml并执行以下指令将其转换为点火文件example.ign,其中关于yaml文件的编写,将在后续展开: -```bash +```sh butane example.yaml -o example.ign -p ``` @@ -720,13 +720,13 @@ nestos-installer iso customize --dest-device /dev/sda --dest-ignition example.ig 为了方便用户使用,nestos-installer也支持从ISO镜像中提取PXE组件的功能,执行如下指令,其中xxx.iso为保存至本地的NestOS ISO镜像: -```bash +```sh nestos-installer iso extract pxe xxx.iso ``` 得到如下输出件: -```text +```txt xxx-initrd.img xxx-rootfs.img xxx-vmlinuz @@ -734,7 +734,7 @@ xxx-vmlinuz 执行如下指令嵌入点火文件并指定目标磁盘位置: -```bash +```conf nestos-installer pxe customize --dest-device /dev/sda --dest-ignition example.ign xxx-initrd.img --output custom-initrd.img ``` @@ -752,7 +752,7 @@ NestOS支持多种部署平台及常见部署方式,当前主要支持qcow2、 准备NestOS的qcow2镜像及相应点火文件(详见第7章),终端执行如下步骤: -```conf +```sh IGNITION_CONFIG="/path/to/example.ign" IMAGE="/path/to/image.qcow2" IGNITION_DEVICE_ARG="-fw_cfg name=opt/com.coreos/config,file=${IGNITION_CONFIG}" @@ -762,13 +762,13 @@ qemu-img create -f qcow2 -F qcow2 -b ${IMAGE} my-nestos-vm.qcow2 aarch64环境执行如下命令: -```bash +```sh qemu-kvm -m 2048 -M virt -cpu host -nographic -drive if=virtio,file=my-nestos-vm.qcow2 ${IGNITION_DEVICE_ARG} -nic user,model=virtio,hostfwd=tcp::2222-:22 -bios /usr/share/edk2/aarch64/QEMU_EFI-pflash.raw ``` x86_64环境执行如下命令: -```bash +```sh qemu-kvm -m 2048 -M pc -cpu host -nographic -drive if=virtio,file=my-nestos-vm.qcow2 ${IGNITION_DEVICE_ARG} -nic user,model=virtio,hostfwd=tcp::2222-:22 ``` @@ -778,7 +778,7 @@ qemu-kvm -m 2048 -M pc -cpu host -nographic -drive if=virtio,file=my-nestos-vm.q 准备NestOS的qcow2镜像及相应点火文件(详见第7章),终端执行如下步骤: -```conf +```con IGNITION_CONFIG="/path/to/example.ign" IMAGE="/path/to/image.qcow2" VM_NAME="nestos" @@ -792,7 +792,7 @@ IGNITION_DEVICE_ARG=(--qemu-commandline="-fw_cfg name=opt/com.coreos/config,file 执行如下命令创建实例: -```bash +```sh virt-install --connect="qemu:///system" --name="${VM_NAME}" --vcpus="${VCPUS}" --memory="${RAM_MB}" --os-variant="kylin-hostos10.0" --import --graphics=none --disk="size=${DISK_GB},backing_store=${IMAGE}" --network bridge=virbr0 "${IGNITION_DEVICE_ARG[@]} ``` @@ -804,7 +804,7 @@ virt-install --connect="qemu:///system" --name="${VM_NAME}" --vcpus="${VCPUS}" - 1)在NestOS的Live环境中,根据首次进入的打印提示,可输入以下指令,即可自动生成一份简易的点火文件并自动安装重启 -```bash +```sh sudo installnestos ``` @@ -822,13 +822,13 @@ sudo installnestos 2)根据首次进入NestOS的Live环境打印的提示,输入以下指令开始安装: -```bash +```sh sudo nestos-installer install /dev/sda --ignition-file example.ign ``` 如具备网络条件,点火文件也可通过网络获取,如: -```bash +```sh sudo nestos-installer install /dev/sda --ignition-file http://www.example.com/example.ign ``` @@ -842,13 +842,13 @@ NestOS的PXE安装组件包括kernel、initramfs.img和rootfs.img。这些组件 1)使用PXELINUX 的kernel命令行指定内核,简单示例如下: -```bash +```sh KERNEL nestos-live-kernel-x86_64 ``` 2)使用PXELINUX 的append命令行指定initrd和rootfs,简单示例如下: -```bash +```sh APPEND initrd=nestos-live-initramfs.x86_64.img,nestos-live-rootfs.x86_64.img ``` @@ -856,13 +856,13 @@ APPEND initrd=nestos-live-initramfs.x86_64.img,nestos-live-rootfs.x86_64.img 3)指定安装位置,以/dev/sda为例,在APPEND后追加,示例如下: -```bash +```sh nestosos.inst.install_dev=/dev/sda ``` 4)指定点火文件,需通过网络获取,在APPEND后追加相应地址,示例如下: -```bash +```sh nestos.inst.ignition_url=http://www.example.com/example.ign ``` @@ -882,13 +882,13 @@ NestOS通过密钥进行SSH连接的方法与openEuler一致,如果用户需 1)编辑ssh服务附加配置文件 -```bash +```sh vi /etc/ssh/sshd_config.d/40-disable-passwords.conf ``` 2)修改默认配置PasswordAuthentication为如下内容: -```conf +```sh PasswordAuthentication yes ``` @@ -900,19 +900,19 @@ PasswordAuthentication yes NestOS不支持常规的包管理器dnf/yum,而是通过rpm-ostree来管理系统更新和软件包安装。rpm-ostree结合了镜像和包管理的优势,允许用户在基础系统之上分层安装和管理rpm包,并且不会破环初始系统的结构。使用以下命令安装rpm包: -```bash +```sh rpm-ostree install ``` 安装完成后,重新启动操作系统,可以看到引导加载菜单出现了两个分支,默认第一个分支为最新的分支 -```bash +```sh systemctl reboot ``` -重启进入系统,查看系统包分层状态,可看到当前版本已安装 +重启进入系统,查看系统包分层状态,可看到当前版本已安装\ -```bash +```sh rpm-ostree status -v ``` @@ -924,7 +924,7 @@ rpm-ostree status -v 要临时回滚到之前的OS部署,在系统启动过程中按住shift键,当引导加载菜单出现时,在菜单中选择相应的分支(默认有两个,选择另外一个即可)。在此之前,可以使用以下指令查看当前环境中已存在的两个版本分支: -```bash +```sh rpm-ostree status ``` @@ -932,13 +932,13 @@ rpm-ostree status 要永久回滚到之前的操作系统部署,用户需在当前版本中运行如下指令,此操作将使用之前版本的系统部署作为默认部署。 -```bash +```sh rpm-ostree rollback ``` 重新启动以生效,引导加载菜单的默认部署选项已经改变,无需用户手动切换。 -```bash +```sh systemctl reboot ``` @@ -960,7 +960,7 @@ NestOS作为基于不可变基础设施思想的容器云底座操作系统, (2) 编写Containerfile(Dockerfile)示例如下: -```conf +```sh FROM registry.example.com/nestos:1.0.20240603.0-x86_64 # 执行自定义构建步骤,例如安装软件或拷贝自构建组件 @@ -986,7 +986,7 @@ RUN rpm-ostree install strace && rm -rf /var/cache && ostree container commit 在已部署NestOS的环境中执行如下命令: -```bash +```sh sudo rpm-ostree rebase ostree-unverified-registry:registry.example.com/nestos:1.0.20240903.0-x86_64 ``` diff --git a/docs/zh/docs/NestOS/NestOS/overview.md b/docs/zh/docs/nestos/nestos/overview.md similarity index 93% rename from docs/zh/docs/NestOS/NestOS/overview.md rename to docs/zh/docs/nestos/nestos/overview.md index 1d744c820ca42dca9441b53db275b9d72cddaa21..c9a7de872d5173cbba6f413b66277b6c884622ac 100644 --- a/docs/zh/docs/NestOS/NestOS/overview.md +++ b/docs/zh/docs/nestos/nestos/overview.md @@ -1,4 +1,4 @@ # NestOS云底座操作系统 本文介绍云底座操作系统NestOS For Container(下称NestOS)的安装部署与各个特性说明和使用方法,使用户能够快速了解并使用NestOS。NestOS For Virt的使用方法与通用操作系统使用方法一致,可参考欧拉官方文档。 -Nestos搭载了docker、iSulad、podman、cri-o等常见容器引擎,将ignition配置、rpm-ostree、OCI支持、SElinux强化等技术集成在一起,采用基于双系统分区、容器技术和集群架构的设计思路,可以适配云场景下多种基础运行环境。同时NestOS针对Kubernetes进行优化,在IaaS生态构建方面,针对openStack、oVirt等平台提供支持;在PaaS生态构建方面,针对OKD、Rancher等平台提供支持,使系统具备十分便捷的集群组建能力,可以更安全的运行大规模的容器化工作负载。镜像下载地址详见[NestOS官网](https://nestos.openeuler.org/)。 +NestOS搭载了docker、iSulad、podman、cri-o等常见容器引擎,将ignition配置、rpm-ostree、OCI支持、SElinux强化等技术集成在一起,采用基于双系统分区、容器技术和集群架构的设计思路,可以适配云场景下多种基础运行环境。同时NestOS针对Kubernetes进行优化,在IaaS生态构建方面,针对openStack、oVirt等平台提供支持;在PaaS生态构建方面,针对OKD、Rancher等平台提供支持,使系统具备十分便捷的集群组建能力,可以更安全的运行大规模的容器化工作负载。镜像下载地址详见[NestOS官网](https://nestos.openeuler.org/)。