diff --git a/docs/OCS/AdministratorGuide/Resource_Control_Management/cgroup_guide.md b/docs/OCS/AdministratorGuide/Resource_Control_Management/cgroup_guide.md index f1f18b7663b487d5b5579393e96665a0207b8c9c..72b40e1e44aebdd86ad7023ecff44adbf1d003e8 100644 --- a/docs/OCS/AdministratorGuide/Resource_Control_Management/cgroup_guide.md +++ b/docs/OCS/AdministratorGuide/Resource_Control_Management/cgroup_guide.md @@ -1,6 +1,3 @@ -[[toc]] - - # 1 cgroup 介绍 ## 1.1 什么是 cgroup @@ -94,7 +91,7 @@ blkio cpuacct cpuset freezer memory net_cls net_prio pids cpu cpu,cpuacct devices hugetlb misc net_cls,net_prio perf_event rdma unified ``` -**注:考虑到我们默认支持 v2,因此本文接下来的使用都围绕 v2 展开来讲** +**注:考虑到当前默认支持 v2,因此本文接下来的使用都围绕 v2 展开来讲** @@ -348,7 +345,7 @@ cat /mnt/cgroups/freezer/childgroup/tasks 这里通过 cgroup 的 memory 系统来举例说明 -1. 编辑 demo 如下,我们构造一个内存缓慢泄漏的场景,正常情况下,这个进程运行很久才会由于 oom 被 kill 掉 +1 编辑 demo 如下,我们构造一个内存缓慢泄漏的场景,正常情况下,这个进程运行很久才会由于 oom 被 kill 掉 ``` #include @@ -371,13 +368,13 @@ cat /mnt/cgroups/freezer/childgroup/tasks } ``` -2. 通过 `systemd-run` 命令拉起服务 +2 通过 `systemd-run` 命令拉起服务 ``` systemd-run --unit=my_malloc --slice=test ./my_malloc ``` -3. 服务拉起后可以通过 `systemd-cgls` 命令查到服务 +3 服务拉起后可以通过 `systemd-cgls` 命令查到服务 ``` systemd-cgls @@ -420,7 +417,7 @@ cat /mnt/cgroups/freezer/childgroup/tasks │ └─2146 /home/./my_malloc ``` -4. 服务拉起后,cgroup 根目录下可以查到 my_malloc 这个服务的信息 +4 服务拉起后,cgroup 根目录下可以查到 my_malloc 这个服务的信息 ``` ls /sys/fs/cgroup/test.slice/my_malloc.service @@ -436,7 +433,7 @@ cat /mnt/cgroups/freezer/childgroup/tasks cgroup.subtree_control memory.high memory.swap.current ``` -5. `memory.max` 默认是 max,我们通过 `systemctl` 设置其为 10k +5 `memory.max` 默认是 max,我们通过 `systemctl` 设置其为 10k ``` cat memory.max @@ -445,7 +442,7 @@ cat /mnt/cgroups/freezer/childgroup/tasks systemctl set-property my_malloc.service MemoryMax=10K ``` -6. 可以发现服务由于 omm 提前退出 +6 可以发现服务由于 omm 提前退出 ``` systemctl status my_malloc @@ -472,14 +469,14 @@ cat /mnt/cgroups/freezer/childgroup/tasks 除了使用 systemd 的命令,用户也可以直接操作 `/sys/fs/cgroup` ,本节仍使用上文的 demo 做说明 -1. 列出 controllers 支持的子系统 +1 列出 controllers 支持的子系统 ``` cat /sys/fs/cgroup/cgroup.subtree_control cpuset cpu io memory pids ``` -2. 启用 memory 子系统 +2 启用 memory 子系统 ``` echo "+memory" >> /sys/fs/cgroup/cgroup.subtree_control @@ -491,7 +488,7 @@ cat /mnt/cgroups/freezer/childgroup/tasks man 7 cgroups ``` -3. 创建 `/sys/fs/cgroup/Example/` 目录 +3 创建 `/sys/fs/cgroup/Example/` 目录 ``` mkdir /sys/fs/cgroup/Example/ @@ -520,7 +517,7 @@ cat /mnt/cgroups/freezer/childgroup/tasks cat /sys/fs/cgroup/Example/cgroup.subtree_control ``` -4. 启用 Example 的 memory 子系统 +4 启用 Example 的 memory 子系统 ``` echo "+memory" >> /sys/fs/cgroup/Example/cgroup.subtree_control @@ -528,13 +525,13 @@ cat /mnt/cgroups/freezer/childgroup/tasks memory ``` -5. 创建 `/sys/fs/cgroup/Example/tasks/` 目录: +5 创建 `/sys/fs/cgroup/Example/tasks/` 目录: ``` mkdir /sys/fs/cgroup/Example/tasks/ ``` -6. 此时 tasks 目录下就只有 memory 子系统相关的文件 +6 此时 tasks 目录下就只有 memory 子系统相关的文件 ``` ls /sys/fs/cgroup/Example/tasks/ @@ -547,7 +544,7 @@ cat /mnt/cgroups/freezer/childgroup/tasks cgroup.pressure cpu.stat memory.low memory.reclaim memory.zswap.max ``` -7. 设置 memory 最大值 +7 设置 memory 最大值 ``` cat /sys/fs/cgroup/Example/tasks/memory.max @@ -559,20 +556,20 @@ cat /mnt/cgroups/freezer/childgroup/tasks 需要注意的是,`echo` 的是 10k,但是显示的是 8k,说明是按照 4k 对齐的。 -8. 获取 demo 的 pid +8 获取 demo 的 pid ``` ./my_malloc & [1] 2475 ``` -9. 将该进程加入 cgroup 中 +9 将该进程加入 cgroup 中 ``` echo "2475" > /sys/fs/cgroup/Example/tasks/cgroup.procs ``` -10. 执行后 demo 就被系统 `kill` 掉了 +10 执行后 demo 就被系统 `kill` 掉了 ``` [1]+ Killed ./my_malloc @@ -584,7 +581,7 @@ cat /mnt/cgroups/freezer/childgroup/tasks libcgroup-tools 提供了 cgconfig.service 这个服务帮助用户简便地添加和删除层级,该服务默认关闭,用户在编辑 `/etc/cgconfig.conf` 后使能服务即可完成对层级的操作,下面举例说明: -1. 显示当前支持的子系统 +1 显示当前支持的子系统 ``` cat /proc/cgroups @@ -605,7 +602,7 @@ libcgroup-tools 提供了 cgconfig.service 这个服务帮助用户简便地添 misc 0 90 1 ``` -2. 确定需要挂载的子系统没有被占用,以 freezer 为例,执行如下命令,确保子系统未被占用 +2 确定需要挂载的子系统没有被占用,以 freezer 为例,执行如下命令,确保子系统未被占用 ``` lscgroup | grep freezer @@ -631,7 +628,7 @@ libcgroup-tools 提供了 cgconfig.service 这个服务帮助用户简便地添 May 23 20:53:49 controller systemd[1]: Failed to start cgconfig.service - Control Group configuration service. ``` -3. 创建挂载条目 +3 创建挂载条目 编辑 `/etc/cgconfig.conf` 输入如下内容: @@ -641,7 +638,7 @@ libcgroup-tools 提供了 cgconfig.service 这个服务帮助用户简便地添 } ``` -4. 重启 cgconfig 服务 +4 重启 cgconfig 服务 ``` systemctl restart cgconfig @@ -653,7 +650,7 @@ libcgroup-tools 提供了 cgconfig.service 这个服务帮助用户简便地添 systemctl enable cgconfig ``` -5. 此时指定的 `/mnt/cgroups/freezer` 目录下就会有子系统文件 +5 此时指定的 `/mnt/cgroups/freezer` 目录下就会有子系统文件 ``` ls /mnt/cgroups/freezer/ @@ -687,12 +684,12 @@ man cgconfig.conf # 5 参考 -Maximizing Resource Utilization with cgroup2 +- Maximizing Resource Utilization with cgroup2 https://facebookmicrosites.github.io/cgroup2/docs/overview.html -Control Groups v2 +- Control Groups v2 -https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html \ No newline at end of file +https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html diff --git a/docs/OCS/AdministratorGuide/Software_Management.md b/docs/OCS/AdministratorGuide/Software_Management.md index 92536082e0fe137ea3646dd99fbeb71200bcb21a..467c7b002ca353a4e698b78f8fbde1daa5b8225d 100644 --- a/docs/OCS/AdministratorGuide/Software_Management.md +++ b/docs/OCS/AdministratorGuide/Software_Management.md @@ -1,5 +1,3 @@ -[[toc]] - # 1 软件包管理介绍 包括本系统在内的 Linux 发行版本质上都是由包括 kernel 在内的软件包 (package) 通过一定的组织形式构成的。软件包管理工具的作用就是安全高效地管理这些软件包。 @@ -73,13 +71,13 @@ dnf install -y opencloudos-stream-epol-repos 除了使用官方的在线源之外,对于需要离线使用软件源的场景,用户可以自己搭建本地软件源,具体步骤如下: -1. 创建目录 +1 创建目录 ``` mkdir -p /mnt/myiso # 创建放置 iso 的目录,位置随意,确保存储空间充足 mkdir -p /mnt/my_yum # 创建挂载 iso 的目录,位置随意,确保存储空间充足 ``` -2. 下载 iso,以 x86_64 为例,需要注意的是 everything iso 是包最为充足的,因此建议现在此 iso。 +2 下载 iso,以 x86_64 为例,需要注意的是 everything iso 是包最为充足的,因此建议现在此 iso。 ``` cd /mnt/myiso @@ -88,13 +86,13 @@ dnf install -y opencloudos-stream-epol-repos **注:示例中的版本号仅作为演示,用户需要按需填写自己的版本的路径** -3. 挂载 iso +3 挂载 iso ``` # mount -o loop /mnt/myiso/OpenCloudOS-Stream-23-20230301-x86_64-everything.iso /mnt/my_yum/ mount: /mnt/my_yum: WARNING: source write-protected, mounted read-only. ``` -4. 此时就可以通过 `/mnt/my_yum` 目录 访问 iso 中的rpm包了 +4 此时就可以通过 `/mnt/my_yum` 目录 访问 iso 中的rpm包了 ``` cd /mnt/my_yum/ @@ -118,7 +116,7 @@ dnf install -y opencloudos-stream-epol-repos 12 directories, 3 files ``` -5. 配置本地 repo 源,可以参考如下: +5 配置本地 repo 源,可以参考如下: ``` cat /etc/yum.repos.d/local.repo @@ -134,35 +132,37 @@ dnf install -y opencloudos-stream-epol-repos priority=1 enabled=1 ``` -6. 验证,可以尝试安装一个软件包,或者查询源中的软件包 +6 验证 + +可以尝试安装一个软件包,或者查询源中的软件包 ## 2.3 搭建临时本地源 除了使用我们官方提供的 iso 搭建本地源之外,用户也可以自行准备 rpm 包,将指定目录制作为临时的本地源,具体步骤如下: -1. 创建目录 +1 创建目录 ``` mkdir -p /mnt/local_repo/x86_64/Packages # 目录位置随意,确保存储空间足够即可 ``` -2. 安装 createrepo 工具 +2 安装 createrepo 工具 ``` dnf install -y createrepo ``` -3. 将 rpm 包拷贝到本地源目录 +3 将 rpm 包拷贝到本地源目录 ``` cp *.rpm /mnt/local_repo/x86_64/Packages ``` -4. 创建 repodata +4 创建 repodata ``` createrepo /mnt/local_repo/x86_64 ``` 这一步执行完后会在 `/mnt/local_repo/x86_64` 目录下创建 repodata -5. 配置本地 repo 源,可以参考如下: +5 配置本地 repo 源,可以参考如下: ``` cat /etc/yum.repos.d/local.repo @@ -172,7 +172,7 @@ dnf install -y opencloudos-stream-epol-repos priority=1 enabled=1 ``` -6. 验证,可以尝试安装一个软件包,或者查询源中的软件包进行验证。 +6 验证,可以尝试安装一个软件包,或者查询源中的软件包进行验证。 # 3 包管理配置 @@ -329,17 +329,17 @@ error: cannot open Packages database in /var/lib/rpm 多见于强制结束 yum 导致 rpm 数据库损坏,处理策略为: -1. 删除损坏的 rpmdb 文件 +1 删除损坏的 rpmdb 文件 ``` rm -f /var/lib/rpm/__** ``` -2. 重建 rpm 数据库 +2 重建 rpm 数据库 ``` rpm --rebuilddb ``` -3. 清除所有 yum 缓存 +3 清除所有 yum 缓存 ``` yum clean all diff --git a/docs/OCS/DevelopGuide/GO_guide.md b/docs/OCS/DevelopGuide/GO_guide.md index 3a0d5398c571e02e05aa067e22557284a2f98485..71511b57e1c4fe00a289a541a55cfbe6ea6279ed 100644 --- a/docs/OCS/DevelopGuide/GO_guide.md +++ b/docs/OCS/DevelopGuide/GO_guide.md @@ -1,5 +1,3 @@ -[[toc]] - # Go 使用指南 # 1 Go 简介 @@ -27,26 +25,26 @@ go version go1.19 linux/amd64 如果用户想自定义安装,可以参考如下步骤使用官网提供的二进制文件 -1. 下载官方二进制,本例使用的是与 2.1 小节相同的版本,用户也可以按需选择 +1 下载官方二进制,本例使用的是与 2.1 小节相同的版本,用户也可以按需选择 ``` wget https://go.dev/dl/go1.19.linux-amd64.tar.gz sha256sum go1.19.linux-amd64.tar.gz ``` -2. 提取下载的 tarball 文件到自定义目录: +2 提取下载的 tarball 文件到自定义目录: ``` mkdir -p /usr/local/my_go/ tar -C /usr/local/my_go/ -xzf go1.19.linux-amd64.tar.gz ``` -3. 添加到 `PATH` 环境变量中 +3 添加到 `PATH` 环境变量中 ``` echo "export PATH=$PATH:/usr/local/my_go/go/bin" >> ~/.bashrc source ~/.bashrc ``` -4. 验证 Go 语言是否安装成功 +4 验证 Go 语言是否安装成功 ``` go version diff --git a/docs/OCS/DevelopGuide/QT_guide.md b/docs/OCS/DevelopGuide/QT_guide.md index d5a242d041586369556189944cb6540c6ac10b86..cbed7b5b4a7fc7e14a6a6b115467171418813cd1 100644 --- a/docs/OCS/DevelopGuide/QT_guide.md +++ b/docs/OCS/DevelopGuide/QT_guide.md @@ -20,18 +20,18 @@ dnf install -y qt5-qtbase qt5-qtbase-devel 如果用户期望自定义安装,可以参考如下步骤,从 Qt 官网获取 online 安装器进行安装: -1. 预装安装器的依赖包 +1 预装安装器的依赖包 ``` dnf install -y xcb-util-wm xcb-util-image xcb-util-keysyms xcb-util-renderutil ``` -2. 到 Qt 官网下载安装器,用户可自行选择安装器的版本 +2 到 Qt 官网下载安装器,用户可自行选择安装器的版本 ``` wget https://download.qt.io/archive/online_installers/4.5/qt-unified-linux-x64-4.5.2-online.run chmod +x qt-unified-linux-x64-4.5.2-online.run ``` -3. 点开图形化界面的 Terminal 工具,在此直接执行安装器 +3 点开图形化界面的 Terminal 工具,在此直接执行安装器 ``` ./qt-unified-linux-x64-4.5.2-online.run diff --git a/docs/OCS/Virtualization_and_Containers_Guide/Docker_guide.md b/docs/OCS/Virtualization_and_Containers_Guide/Docker_guide.md index 2b0a6f376c67247cb93c88bf896e3491c70ea4c0..91d79b000420fc602fb477c29354a029965161ea 100644 --- a/docs/OCS/Virtualization_and_Containers_Guide/Docker_guide.md +++ b/docs/OCS/Virtualization_and_Containers_Guide/Docker_guide.md @@ -2,11 +2,11 @@ 容器技术是一种虚拟化技术,它可以将应用程序及其依赖项打包到一个独立的运行环境中,以便于在不同的计算机上运行。容器技术可以提供更高的资源利用率、更快的应用程序启动时间和更好的可移植性。 -**容器技术主要由以下组成部分组成:** +容器技术主要由以下组成部分组成: -* **容器镜像:容器镜像是一个只读的文件系统,包含了应用程序及其依赖项和运行时环境等。** -* **容器运行时:容器运行时是一个负责启动和管理容器的软件,可以提供容器隔离、容器网络和容器存储等功能。** -* **容器编排工具:容器编排工具是一个负责管理多个容器的软件,可以提供容器自动化部署、容器扩展和容器负载均衡等功能。** +* 容器镜像:容器镜像是一个只读的文件系统,包含了应用程序及其依赖项和运行时环境等。 +* 容器运行时:容器运行时是一个负责启动和管理容器的软件,可以提供容器隔离、容器网络和容器存储等功能。 +* 容器编排工具:容器编排工具是一个负责管理多个容器的软件,可以提供容器自动化部署、容器扩展和容器负载均衡等功能。 # 2. 安装容器 @@ -34,35 +34,35 @@ docker 是 moby 提供的能力,因此安装 moby 包即可 # 3. 配置容器 -**通常情况下,通过daemon.json文件来配置docker守护进程。Docker守护进程是Docker的核心组件,负责管理Docker容器、镜像、网络等资源,以及提供Docker API接口供其他程序调用。在Docker守护进程启动时,会读取daemon.json文件中的配置信息,并根据配置信息来初始化Docker守护进程。通过修改daemon.json文件中的配置信息,可以改变Docker守护进程的行为,例如配置镜像加速器、设置日志级别、配置存储驱动等。** +通常情况下,通过daemon.json文件来配置docker守护进程。Docker守护进程是Docker的核心组件,负责管理Docker容器、镜像、网络等资源,以及提供Docker API接口供其他程序调用。在Docker守护进程启动时,会读取daemon.json文件中的配置信息,并根据配置信息来初始化Docker守护进程。通过修改daemon.json文件中的配置信息,可以改变Docker守护进程的行为,例如配置镜像加速器、设置日志级别、配置存储驱动等。 -**常用参数如下:** +常用参数如下: -**registry-mirrors** +- registry-mirrors -**作用:配置Docker镜像加速器地址,加速镜像下载速度。** +作用:配置Docker镜像加速器地址,加速镜像下载速度。 -**示例:** +示例: ``` "registry-mirrors": ["https://mirror.ccs.tencentyun.com"] ``` -**log-driver** +- log-driver -**作用:配置Docker容器的日志驱动,用于将容器的日志输出到文件或者标准输出中。** +作用:配置Docker容器的日志驱动,用于将容器的日志输出到文件或者标准输出中。 -**示例:** +示例: ``` "log-driver": "json-file" ``` -**log-opts** +- log-opts -**作用:配置Docker容器的日志选项,例如日志文件的最大大小、最多保留的日志文件数等。** +作用:配置Docker容器的日志选项,例如日志文件的最大大小、最多保留的日志文件数等。 -**示例:** +示例: ``` "log-opts": { @@ -71,61 +71,61 @@ docker 是 moby 提供的能力,因此安装 moby 包即可 } ``` -**storage-driver** +- storage-driver -**作用:配置Docker容器的存储驱动,用于管理容器的文件系统。** +作用:配置Docker容器的存储驱动,用于管理容器的文件系统。 -**示例:** +示例: ``` "storage-driver": "overlay2" ``` -**bip** +- bip -**作用:配置Docker网桥的IP地址,用于容器之间的通信。** +作用:配置Docker网桥的IP地址,用于容器之间的通信。 -**示例:** +示例: ``` "bip": "172.16.0.1/24" ``` -**fixed-cidr** +- fixed-cidr -**作用:配置Docker网桥的子网地址,用于容器之间的通信。** +作用:配置Docker网桥的子网地址,用于容器之间的通信。 -**示例:** +示例: ``` "fixed-cidr": "172.16.0.0/24" ``` -**mtu** +- mtu -**作用:配置Docker网桥的MTU值,用于容器之间的通信。** +作用:配置Docker网桥的MTU值,用于容器之间的通信。 -**示例:** +示例: ``` "mtu": 1500 ``` -**live-restore** +- live-restore -**作用:配置Docker是否启用容器的实时恢复功能,用于在Docker守护进程崩溃或重启时自动恢复容器。** +作用:配置Docker是否启用容器的实时恢复功能,用于在Docker守护进程崩溃或重启时自动恢复容器。 -**示例:** +示例: ``` "live-restore": true ``` -**default-ulimits** +- default-ulimits -**作用:配置Docker容器的默认资源限制,例如CPU、内存、文件描述符等。** +作用:配置Docker容器的默认资源限制,例如CPU、内存、文件描述符等。 -**示例:** +示例: ``` "default-ulimits": { @@ -137,7 +137,7 @@ docker 是 moby 提供的能力,因此安装 moby 包即可 } ``` -**完整示例** +完整示例 ``` # cat /etc/docker/daemon.json @@ -171,18 +171,18 @@ docker 是 moby 提供的能力,因此安装 moby 包即可 # docker pull busybox ``` -用户可以直接通过 **docker run** 命令运行一个容器,如下: +用户可以直接通过 `docker run` 命令运行一个容器,如下: ``` # docker run busybox /bin/echo "Hello world" Hello world ``` -其中 busybox 为镜像名,**/bin/echo "Hello world"** 即容器执行的命令 +其中 busybox 为镜像名,`/bin/echo "Hello world"` 即容器执行的命令 ### 4.1.2 创建交互式容器 -此外,用户可以使用 **-it** 选项来创建一个交互式的容器,在交互界面执行命令,如下 +此外,用户可以使用 `-it` 选项来创建一个交互式的容器,在交互界面执行命令,如下 ``` # docker run -it busybox /bin/sh @@ -200,7 +200,7 @@ Hello world ### 4.1.3 后台运行容器 -用户可以通过 **-d** 选项在后台运行容器,命令如下: +用户可以通过 `-d` 选项在后台运行容器,命令如下: ``` # docker run -d --name=my_container busybox /bin/sh -c "while true;do echo Hello world;sleep 1;done" @@ -228,9 +228,11 @@ Hello world ## 4.2 容器信息查询 -**Docker提供了多种查询相关的命令,可以用于查询Docker容器、镜像、网络等信息。以下是一些常用的Docker查询命令及其作用:** +Docker提供了多种查询相关的命令,可以用于查询Docker容器、镜像、网络等信息。以下是一些常用的Docker查询命令及其作用: -**docker ps命令用于列出当前正在运行的Docker容器。使用docker ps命令可以查看容器的名称、ID、状态、端口映射等信息。** +- docker ps + +用于列出当前正在运行的Docker容器, 查看容器的名称、ID、状态、端口映射等信息。 ``` # docker ps @@ -238,7 +240,9 @@ CONTAINER ID IMAGE COMMAND CREATED STATUS cb3435ac0f78 busybox "/bin/sh -c 'while t…" 7 seconds ago Up 5 seconds my_container ``` -docker logs命令用于查看Docker容器的日志信息。使用docker logs命令可以查看容器的标准输出和标准错误输出等信息。 +- docker logs + +用于查看Docker容器的日志信息。 ``` # # docker logs cb3435ac0f78 @@ -248,7 +252,9 @@ Hello world Hello world ``` -docker network ls命令用于列出当前的Docker网络。使用docker network ls命令可以查看网络的名称、ID、驱动程序等信息。 +- docker network ls + +查看网络的名称、ID、驱动程序等信息。 ``` # docker network ls @@ -258,13 +264,17 @@ NETWORK ID NAME DRIVER SCOPE 020a952b0758 none null local ``` -**docker volume ls命令用于列出当前的Docker卷。使用docker volume ls命令可以查看卷的名称、驱动程序、挂载点等信息。** +- docker volume ls + +查看卷的名称、驱动程序、挂载点等信息。 ``` # docker volume ls ``` -**docker stats命令用于实时监控Docker容器的资源使用情况。使用docker stats命令可以查看容器的CPU、内存、网络、磁盘等资源使用情况。** +- docker stats + +查看容器的CPU、内存、网络、磁盘等资源使用情况。 ``` # docker stats @@ -276,41 +286,41 @@ cb3435ac0f78 my_container 0.00% 496KiB / 3.552GiB 0.01% 1.97kB / 0 docker提供了多种命令,用于修改Docker容器: -**修改容器配置** +- 修改容器配置 -**使用docker update命令可以修改容器的配置,例如修改容器的CPU和内存限制、添加或删除容器的网络配置等。例如,以下命令可以将容器的CPU限制设置为1个核心:** +使用 `docker update` 命令可以修改容器的配置,例如修改容器的CPU和内存限制、添加或删除容器的网络配置等。例如,以下命令可以将容器的CPU限制设置为1个核心: ``` # docker update --cpus 1 ``` -**修改容器文件系统** +- 修改容器文件系统 -**使用docker cp命令可以将文件复制到容器中,从而修改容器的文件系统。例如,以下命令可以将本地的文件复制到容器的/tmp目录中:** +使用 `docker cp` 命令可以将文件复制到容器中,从而修改容器的文件系统。例如,以下命令可以将本地的文件复制到容器的/tmp目录中: ``` # docker cp :/tmp/ ``` -**修改镜像标签** +- 修改镜像标签 -**使用docker tag命令可以为镜像添加或修改标签。例如,以下命令可以将镜像的标签修改为latest:** +使用 `docker tag` 命令可以为镜像添加或修改标签。例如,以下命令可以将镜像的标签修改为latest: ``` # docker tag : :latest ``` -**修改镜像元数据** +- 修改镜像元数据 -**使用docker commit命令可以修改镜像的元数据,例如修改镜像的作者、描述等。例如,以下命令可以为镜像添加作者信息:** +使用 `docker commit` 命令可以修改镜像的元数据,例如修改镜像的作者、描述等。例如,以下命令可以为镜像添加作者信息: ``` # docker commit --author "John Doe" ``` -**修改Docker配置** +- 修改Docker配置 -**使用docker config命令可以修改Docker的配置,例如修改Docker的日志级别、修改Docker的存储驱动等。例如,以下命令可以修改Docker的日志级别为debug:** +使用 `docker config` 命令可以修改Docker的配置,例如修改Docker的日志级别、修改Docker的存储驱动等。例如,以下命令可以修改Docker的日志级别为debug: ``` # docker config set log-level debug @@ -381,7 +391,8 @@ root Docker提供了多种命令,用于管理Docker镜像,包括增加、删除、修改和查询等操作。以下是一些常用的Docker镜像管理命令及其功能: -**docker images** +- docker images + docker images命令用于列出本地的Docker镜像。使用docker images命令可以查看镜像的名称、标签、大小等信息。 ``` @@ -390,53 +401,60 @@ REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest 7cfbbec8963d 7 weeks ago 4.86MB ``` -**docker pull** +- docker pull + docker pull命令用于从Docker镜像仓库中拉取一个新的Docker镜像。使用docker pull命令可以指定镜像的名称、标签等参数。 -**docker push** +- docker push + docker push命令用于将一个本地的Docker镜像推送到Docker镜像仓库中。以下是其使用场景: -**首先,需要在 Docker Hub 或其他 Docker 镜像仓库中创建一个新的仓库,用于存储 Docker 镜像。假设用户已创建了一个名为 mywork 的账户,并在账户中创建了一个 myimage 的仓库。** +首先,需要在 Docker Hub 或其他 Docker 镜像仓库中创建一个新的仓库,用于存储 Docker 镜像。假设用户已创建了一个名为 mywork 的账户,并在账户中创建了一个 myimage 的仓库。 -**接下来,需要使用 docker tag 命令为本地的 Docker 镜像添加标签,以便将其推送到 Docker 镜像仓库中,格式如下:** +接下来,需要使用 docker tag 命令为本地的 Docker 镜像添加标签,以便将其推送到 Docker 镜像仓库中,格式如下: ``` # docker tag : mywork/: ``` -**其中,是本地的Docker镜像名称,``是本地的Docker镜像标签。** +其中,是本地的Docker镜像名称,``是本地的Docker镜像标签。 -**例如,以下命令可以为本地的Docker镜像添加 myrepo 的标签:** +例如,以下命令可以为本地的Docker镜像添加 myrepo 的标签: ``` # docker tag busybox mywork/myimage:1.0 ``` -**然后,需要使用docker login命令登录到Docker镜像仓库中。例如,以下命令可以登录到Docker Hub中:** +然后,需要使用docker login命令登录到Docker镜像仓库中。例如,以下命令可以登录到Docker Hub中: ``` # docker login ``` -**最后,使用docker push命令将本地的Docker镜像推送到Docker镜像仓库中。例如,以下命令可以将本地的Docker镜像推送到 mywork 仓库中:** +最后,使用docker push命令将本地的Docker镜像推送到Docker镜像仓库中。例如,以下命令可以将本地的Docker镜像推送到 mywork 仓库中: ``` # docker push mywork/myimage:1.0 ``` -**docker build** +- docker build + docker build命令用于从Dockerfile构建一个新的Docker镜像。使用docker build命令可以指定Dockerfile的路径、镜像的名称、标签等参数。 -**docker tag** +- docker tag + docker tag命令用于为一个本地的Docker镜像添加或修改标签。使用docker tag命令可以指定镜像的名称、标签等参数。 -**docker rmi** +- docker rmi + docker rmi命令用于删除一个本地的Docker镜像。使用docker rmi命令可以删除镜像的文件系统、元数据等资源。 -**docker inspect** +- docker inspect + docker inspect命令用于查看Docker镜像的详细信息。使用docker inspect命令可以查看镜像的元数据、配置、状态等信息。 -**docker history** +- docker history + docker history命令用于查看Docker镜像的历史记录。使用docker history命令可以查看镜像的每一层的构建信息、大小等信息。 ``` @@ -448,13 +466,13 @@ IMAGE CREATED CREATED BY SIZ ## 6.2 Dockerfile配置 -**Docker镜像构建是指通过Dockerfile文件定义Docker镜像的构建过程和配置信息,然后使用docker build命令将Dockerfile文件构建成一个Docker镜像。Dockerfile文件是Docker镜像构建的核心文件,用于定义Docker镜像的构建过程和配置信息。Dockerfile文件是一个文本文件,其中包含了一系列的指令和参数,用于指定Docker镜像的构建过程和配置信息。** +Docker镜像构建是指通过Dockerfile文件定义Docker镜像的构建过程和配置信息,然后使用docker build命令将Dockerfile文件构建成一个Docker镜像。Dockerfile文件是Docker镜像构建的核心文件,用于定义Docker镜像的构建过程和配置信息。Dockerfile文件是一个文本文件,其中包含了一系列的指令和参数,用于指定Docker镜像的构建过程和配置信息。 -**以下是Docker镜像构建的基本流程:** +以下是Docker镜像构建的基本流程: -* **编写Dockerfile文件** +* 编写Dockerfile文件 -**以下为一个示例:** +以下为一个示例: ``` # 使用腾讯云镜像源 @@ -474,136 +492,136 @@ EXPOSE 80 CMD ["nginx", "-g", "daemon off;"] ``` -* **构建Docker镜像** +* 构建Docker镜像 -**使用docker build命令构建Docker镜像。在构建Docker镜像时,Docker会根据Dockerfile文件中的指令和参数,自动执行一系列的操作,包括下载基础镜像、安装软件包、配置环境变量、添加文件等操作,最终生成一个完整的Docker镜像。** +使用docker build命令构建Docker镜像。在构建Docker镜像时,Docker会根据Dockerfile文件中的指令和参数,自动执行一系列的操作,包括下载基础镜像、安装软件包、配置环境变量、添加文件等操作,最终生成一个完整的Docker镜像。 -**以下是一个示例docker build命令:** +以下是一个示例docker build命令: ``` # docker build -t myimage:latest . ``` -**在这个命令中,-t参数指定了镜像的名称为myimage,:latest表示使用最新版本的标签,.表示Dockerfile文件所在的目录。** +在这个命令中,-t参数指定了镜像的名称为myimage,:latest表示使用最新版本的标签,.表示Dockerfile文件所在的目录。 -* **上传Docker镜像** +* 上传Docker镜像 -**使用docker push命令将Docker镜像上传到Docker Hub或者其他的Docker镜像仓库中,以便其他人可以使用该镜像。** +使用docker push命令将Docker镜像上传到Docker Hub或者其他的Docker镜像仓库中,以便其他人可以使用该镜像。 -**以下是一个示例docker push命令:** +以下是一个示例docker push命令: ``` # docker push myimage:latest ``` -**在这个命令中,myimage:latest是要上传的镜像名称。** +在这个命令中,myimage:latest是要上传的镜像名称。 # 7. 维护 ## 7.1 容器的备份和恢复 -**在Docker中,容器的备份和恢复是非常重要的操作,可以快速地恢复容器的状态,避免数据丢失和应用程序中断。** +在Docker中,容器的备份和恢复是非常重要的操作,可以快速地恢复容器的状态,避免数据丢失和应用程序中断。 -* **备份容器** +* 备份容器 -**要备份一个Docker容器,可以使用docker export命令将容器导出为一个tar文件。以下是备份容器的命令:** +要备份一个Docker容器,可以使用docker export命令将容器导出为一个tar文件。以下是备份容器的命令: ``` # docker export > .tar ``` -**其中,是要备份的容器名称,是备份文件的名称。** +其中,是要备份的容器名称,是备份文件的名称。 -* **恢复容器** +* 恢复容器 -**要恢复一个Docker容器,可以使用docker import命令将备份文件导入为一个新的Docker镜像。然后使用docker run命令启动一个新的容器。以下是恢复容器的命令:** +要恢复一个Docker容器,可以使用docker import命令将备份文件导入为一个新的Docker镜像。然后使用docker run命令启动一个新的容器。以下是恢复容器的命令: ``` # docker import .tar : # docker run -it --name : ``` -**其中,是备份文件的名称,是新的Docker镜像名称,``是新的Docker镜像标签,是新的容器名称。** +其中,是备份文件的名称,是新的Docker镜像名称,``是新的Docker镜像标签,是新的容器名称。 -**需要注意的是,恢复容器时需要先将备份文件导入为一个新的Docker镜像,然后再使用docker run命令启动一个新的容器。** +需要注意的是,恢复容器时需要先将备份文件导入为一个新的Docker镜像,然后再使用docker run命令启动一个新的容器。 ## 7.2 容器的监控和日志管理 -**在Docker中,容器的监控和日志管理是非常重要的操作,可以实时监控容器的状态,及时发现和解决问题。以下一些基础的维测命令:** +在Docker中,容器的监控和日志管理是非常重要的操作,可以实时监控容器的状态,及时发现和解决问题。以下一些基础的维测命令: -* **监控容器** +* 监控容器 -**要监控一个Docker容器,可以使用docker stats命令查看容器的实时资源使用情况。以下是监控容器的命令:** +要监控一个Docker容器,可以使用docker stats命令查看容器的实时资源使用情况。以下是监控容器的命令: ``` # docker stats ``` -**其中,是要监控的容器名称。** +其中,是要监控的容器名称。 -* **查看容器日志** +* 查看容器日志 -**要查看一个Docker容器的日志,可以使用docker logs命令查看容器的标准输出和标准错误输出。以下是查看容器日志的命令:** +要查看一个Docker容器的日志,可以使用docker logs命令查看容器的标准输出和标准错误输出。以下是查看容器日志的命令: ``` # docker logs ``` -**其中,是要查看日志的容器名称。** +其中,是要查看日志的容器名称。 -* **导出容器日志** +* 导出容器日志 -**要导出一个Docker容器的日志,可以使用docker cp命令将容器的日志文件复制到本地文件系统中。以下是导出容器日志的命令:** +要导出一个Docker容器的日志,可以使用docker cp命令将容器的日志文件复制到本地文件系统中。以下是导出容器日志的命令: ``` # docker cp :/var/log/ ``` -**其中,是要导出日志的容器名称,是要导出的日志文件名称,是本地文件系统中的路径。** +其中,是要导出日志的容器名称,是要导出的日志文件名称,是本地文件系统中的路径。 ## 7.3 容器安全和权限管理 -**在Docker中,容器的安全和权限管理是非常重要的操作,可以保护容器和应用程序的安全性。以下是一个使用场景示例:** +在Docker中,容器的安全和权限管理是非常重要的操作,可以保护容器和应用程序的安全性。以下是一个使用场景示例: -* **创建用户组** +* 创建用户组 -**要创建一个Docker容器的用户组,可以使用groupadd命令创建一个新的用户组。以下是创建用户组的命令:** +要创建一个Docker容器的用户组,可以使用groupadd命令创建一个新的用户组。以下是创建用户组的命令: ``` # groupadd ``` -**其中,是要创建的用户组名称。** +其中,是要创建的用户组名称。 -* **创建用户** +* 创建用户 -**要创建一个Docker容器的用户,可以使用useradd命令创建一个新的用户,并将其添加到用户组中。以下是创建用户的命令:** +要创建一个Docker容器的用户,可以使用useradd命令创建一个新的用户,并将其添加到用户组中。以下是创建用户的命令: ``` # useradd -g ``` -**其中,是要添加到的用户组名称,是要创建的用户名称。** +其中,是要添加到的用户组名称,是要创建的用户名称。 -* **启动容器时指定用户** +* 启动容器时指定用户 -**要在启动一个Docker容器时指定用户,可以使用--user选项指定容器的用户和用户组。以下是启动容器时指定用户的命令:** +要在启动一个Docker容器时指定用户,可以使用--user选项指定容器的用户和用户组。以下是启动容器时指定用户的命令: ``` # docker run -it --user : --cap-add --cap-drop ``` -**其中,是要指定的用户名称,是要指定的用户组名称,是要启动的Docker镜像名称,``指用来控制容器权限的能力集。** +其中,是要指定的用户名称,是要指定的用户组名称,是要启动的Docker镜像名称,``指用来控制容器权限的能力集。 -**默认情况 Docker 容器内的进程将以 root 用户运行的,因此指定用户可以提高容器安全性。** +默认情况 Docker 容器内的进程将以 root 用户运行的,因此指定用户可以提高容器安全性。 -**关于能力集可以使用如下命令查询** +关于能力集可以使用如下命令查询 ``` # man capabilities ``` -**以下是一些常见的capabilities及其作用:** +以下是一些常见的capabilities及其作用: ``` CAP_CHOWN @@ -639,11 +657,11 @@ CAP_SYS_RESOURCE ## 7.4 容器配置健康检查 -**目前原生的容器已经支持健康检查的功能,需要用户通过编写 Dockerfile 文件进行设置,本文提供了将分布举例说明** +目前原生的容器已经支持健康检查的功能,需要用户通过编写 Dockerfile 文件进行设置,本文提供了将分布举例说明 -**1、编写Dockerfile文件** +1、编写Dockerfile文件 -**编写一个Dockerfile文件,用于构建一个包含健康检查脚本的镜像。以下是一个示例Dockerfile文件:** +编写一个Dockerfile文件,用于构建一个包含健康检查脚本的镜像。以下是一个示例Dockerfile文件: ``` FROM ccr.ccs.tencentyun.com/library/opencloudos:latest @@ -655,13 +673,13 @@ HEALTHCHECK --interval=5s --timeout=3s \ CMD /usr/local/bin/healthcheck.sh || exit 1 ``` -**在这个Dockerfile文件中,使用COPY指令将健康检查脚本healthcheck.sh复制到镜像中,并使用RUN指令给脚本添加可执行权限。** +在这个Dockerfile文件中,使用COPY指令将健康检查脚本healthcheck.sh复制到镜像中,并使用RUN指令给脚本添加可执行权限。 -**最后使用HEALTHCHECK指令定义了一个健康检查命令,该命令会每5秒执行一次,超时时间为3秒,如果脚本返回非0状态码,则认为容器不健康。** +最后使用HEALTHCHECK指令定义了一个健康检查命令,该命令会每5秒执行一次,超时时间为3秒,如果脚本返回非0状态码,则认为容器不健康。 -**2、编写健康检查脚本** +2、编写健康检查脚本 -**接下来,需要编写一个健康检查脚本,用于检查容器的健康状态。以下是一个示例健康检查脚本:** +接下来,需要编写一个健康检查脚本,用于检查容器的健康状态。以下是一个示例健康检查脚本: ``` #!/bin/bash @@ -673,43 +691,43 @@ else fi ``` -**在这个健康检查脚本中,使用curl命令访问容器中的一个健康检查接口,如果接口返回的内容包含OK,则认为容器健康,否则认为容器不健康。** +在这个健康检查脚本中,使用curl命令访问容器中的一个健康检查接口,如果接口返回的内容包含OK,则认为容器健康,否则认为容器不健康。 -**3、构建镜像** +3、构建镜像 -**使用以下命令构建镜像:** +使用以下命令构建镜像: ``` # docker build -t myimage:latest ./Dockerfile ``` -**在这个命令中,-t参数指定了镜像的名称为myimage,:latest表示使用最新版本的标签。** +在这个命令中,-t参数指定了镜像的名称为myimage,:latest表示使用最新版本的标签。 -**4、启动容器** +4、启动容器 -**使用以下命令启动容器:** +使用以下命令启动容器: ``` # docker run -d --name mycontainer -p 8080:8080 myimage:latest ``` -**在这个命令中,-d参数表示以后台模式启动容器,--name参数指定容器的名称为mycontainer,-p参数指定容器的端口映射,myimage:latest表示使用myimage镜像的最新版本启动容器。** +在这个命令中,-d参数表示以后台模式启动容器,--name参数指定容器的名称为mycontainer,-p参数指定容器的端口映射,myimage:latest表示使用myimage镜像的最新版本启动容器。 -**5、检查容器健康状态** +5、检查容器健康状态 -**使用以下命令检查容器的健康状态:** +使用以下命令检查容器的健康状态: ``` # docker inspect --format='{{json .State.Health}}' mycontainer ``` -**在这个命令中,--format参数指定了输出格式为JSON,mycontainer是容器的名称。** +在这个命令中,--format参数指定了输出格式为JSON,mycontainer是容器的名称。 ## 7.5 hook-spec -**Docker容器的hook-spec是一种在容器生命周期中执行脚本的机制,可以在容器的不同阶段执行脚本,例如在容器启动前、启动后、停止前、停止后等,本文将分部举例说明:** +Docker容器的hook-spec是一种在容器生命周期中执行脚本的机制,可以在容器的不同阶段执行脚本,例如在容器启动前、启动后、停止前、停止后等,本文将分部举例说明: -**1、创建hook-spec脚本** +1、创建hook-spec脚本 可以在容器中创建一个脚本文件,并将其保存在/etc/docker/目录下,如: ``` @@ -718,25 +736,25 @@ fi echo "Container hello_tencent is starting..." ``` -**2、设置hook-spec脚本权限** +2、设置hook-spec脚本权限 要使hook-spec脚本可以执行,需要设置脚本的执行权限。 ``` # chmod +x /etc/docker/hook_name.sh ``` -3、**配置hook-spec** +3、配置hook-spec 使用 --add-host 选项将hook-spec脚本添加到容器中。以下是配置hook-spec的命令: ``` # docker run -it --add-host : ``` -**其中,是hook-spec脚本名称,是hook-spec脚本路径,是要启动的Docker镜像名称。** +其中,是hook-spec脚本名称,是hook-spec脚本路径,是要启动的Docker镜像名称。 -**需要注意的是,hook-spec脚本的执行顺序是按照文件名的字母顺序执行的。** +需要注意的是,hook-spec脚本的执行顺序是按照文件名的字母顺序执行的。 -**同时,hook-spec脚本的执行结果会被记录在容器的日志中。如果hook-spec脚本执行失败,容器将无法启动或停止。因此,在编写hook-spec脚本时,需要谨慎考虑脚本的执行逻辑和错误处理机制。** +同时,hook-spec脚本的执行结果会被记录在容器的日志中。如果hook-spec脚本执行失败,容器将无法启动或停止。因此,在编写hook-spec脚本时,需要谨慎考虑脚本的执行逻辑和错误处理机制。 # 8. 具体问题场景介绍 @@ -749,4 +767,4 @@ echo "Container hello_tencent is starting..." glibc在2.34版本新增了clone3系统调用,如果clone3失败且返回ENOSYS则会重新走到旧的clone调用。然而docker 20.10.9之前的版本对于不识别的clone3,会返回EPERM而非glibc期望的ENOSYS,因此会导致clone失败 -**使用本系统上的 docker 不会存在问题,避免使用 docker 20.10.9 之前的旧版本环境部署本系统的容器镜像。** +使用本系统上的 docker 不会存在问题,避免使用 docker 20.10.9 之前的旧版本环境部署本系统的容器镜像。 diff --git a/docs/OCS/Virtualization_and_Containers_Guide/OpenStack_UserGuide.md b/docs/OCS/Virtualization_and_Containers_Guide/OpenStack_UserGuide.md index 22fdfaafa27ec54c1713b1c7bead35fa3c0ce479..746177bfe126960a9369bfa022a08afa836471f6 100644 --- a/docs/OCS/Virtualization_and_Containers_Guide/OpenStack_UserGuide.md +++ b/docs/OCS/Virtualization_and_Containers_Guide/OpenStack_UserGuide.md @@ -1,6 +1,3 @@ -[[toc]] - - # 1 简介 OpenStack 是一个开源的云计算平台,提供基础设施即服务(IaaS)的解决方案。它由一系列组件组成,包括计算、存储、网络、身份认证、编排、计量、告警和数据库等。OpenStack可以帮助用户构建和管理私有云、公有云和混合云等多种云计算环境。 @@ -25,6 +22,7 @@ storage: 192.168.0.4 ``` 各个节点涉及的组件如下: + | 节点名 | 涉及的组件| | :--- | :---: | | controller | 所有组件 | @@ -47,19 +45,19 @@ dnf install -y opencloudos-stream-epol-repos 分别在三台节点执行如下命令: -1. controller 节点 +1 controller 节点 ``` hostnamectl set-hostname controller ``` -2. compute 节点 +2 compute 节点 ``` hostnamectl set-hostname compute ``` -3. storage 节点 +3 storage 节点 ``` hostnamectl set-hostname storage @@ -83,36 +81,36 @@ vim /etc/hosts ### 2.4.1 controller 节点 -1. 安装服务 +1 安装服务 - ``` +``` dnf install -y chrony - ``` +``` -2. 修改 `/etc/chrony.conf` 文件,**追加**如下内容: +2 修改 `/etc/chrony.conf` 文件,**追加**如下内容: - ``` +``` # 表示允许哪些IP从本节点同步时钟 # ip需要根据具体环境修改 allow 192.168.0.0/24 - ``` +``` -4. 重启服务 +4 重启服务 - ``` +``` systemctl restart chronyd - ``` +``` ### 2.4.2 其它节点 -1. 安装服务 +1 安装服务 - ``` +``` dnf install -y chrony - ``` +``` -2. 修改 `/etc/chrony.conf` 文件,**追加**如下内容: +2 修改 `/etc/chrony.conf` 文件,**追加**如下内容: ``` # 表示允许哪些IP从本节点同步时钟 @@ -121,7 +119,7 @@ vim /etc/hosts server controller iburst ``` -3. 重启服务 +3 重启服务 ``` systemctl restart chronyd @@ -151,13 +149,13 @@ OpenStack 中的许多服务都需要使用数据库来存储和管理数据, MariaDB 数据库安装在 **controller 节点**,具体步骤如下: -1. 安装软件包 +1 安装软件包 ``` dnf install -y mariadb mariadb-server python3-PyMySQL ``` -2. **新增** `/etc/my.cnf.d/openstack.cnf` 配置文件,内容如下: +2 **新增** `/etc/my.cnf.d/openstack.cnf` 配置文件,内容如下: ``` [mysqld] @@ -169,14 +167,14 @@ collation-server = utf8_general_ci character-set-server = utf8 ``` -3. 设置开机启动,并开启服务 +3 设置开机启动,并开启服务 ``` systemctl enable mariadb.service systemctl start mariadb.service ``` -4. 初始化数据库(可选) +4 初始化数据库(可选) 这一步的目的是为数据库设置密码等,也可以不设置,此时密码为空,回车即可 @@ -192,20 +190,20 @@ OpenStack 使用消息队列在各个服务之间传递和处理消息,一般 RabbitMQ 消息队列安装在 **controller 节点**,具体步骤如下: -1. 安装软件包 +1 安装软件包 ``` dnf install -y rabbitmq-server ``` -2. 设置开机启动,并开启服务 +2 设置开机启动,并开启服务 ``` systemctl enable rabbitmq-server.service systemctl start rabbitmq-server.service ``` -3. 配置 OpenStack 用户 +3 配置 OpenStack 用户 ``` rabbitmqctl add_user openstack RABBIT_PASS @@ -213,7 +211,7 @@ rabbitmqctl add_user openstack RABBIT_PASS 其中,`RABBIT_PASS` 是 OpenStack 服务登录消息队列的密码,下文各个服务几乎都会用到,**务必要保持一致**。 -4. 设置 OpenStack 用户权限,允许进行配置、写、读: +4 设置 OpenStack 用户权限,允许进行配置、写、读: ``` rabbitmqctl set_permissions openstack ".*" ".*" ".*" @@ -227,13 +225,13 @@ rabbitmqctl set_permissions openstack ".*" ".*" ".*" Memcached 服务安装在 **controller 节点**,具体步骤如下: -1. 安装软件包 +1 安装软件包 ``` dnf install -y memcached python3-memcached ``` -2. 编辑 `/etc/sysconfig/memcached` 配置文件,可用下文**替换** +2 编辑 `/etc/sysconfig/memcached` 配置文件,可用下文**替换** ``` PORT="11211" @@ -243,14 +241,14 @@ CACHESIZE="64" OPTIONS="-l 127.0.0.1,::1,controller" ``` -3. 设置开机启动,并开启服务 +3 设置开机启动,并开启服务 ``` systemctl enable memcached.service systemctl start memcached.service ``` -4. 验证服务,由于上文已经设置了 `/etc/hosts` ,因此可以直接使用 controller +4 验证服务,由于上文已经设置了 `/etc/hosts` ,因此可以直接使用 controller ``` memcached-tool controller stats @@ -266,14 +264,14 @@ Keystone 是 OpenStack 核心组件,用于身份认证和授权。它提供了 **Keystone 必须安装,部署在 controller 节点**,具体步骤如下: -1. 安装软件包 +1 安装软件包 ``` dnf install -y openstack-keystone httpd mod_wsgi dnf install -y python3-openstackclient ``` -2. 创建 Keystone 数据库并授权,其中 `KEYSTONE_DBPASS` 为 Keystone 数据库密码 +2 创建 Keystone 数据库并授权,其中 `KEYSTONE_DBPASS` 为 Keystone 数据库密码 ``` mysql -u root -p @@ -284,7 +282,7 @@ MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIE MariaDB [(none)]> exit ``` -3. 配置 Keystone,在 `/etc/keystone/keystone.conf` 中**替换**内容如下: +3 配置 Keystone,在 `/etc/keystone/keystone.conf` 中**替换**内容如下: ``` [database] @@ -296,20 +294,20 @@ provider = fernet **注: 替换 `KEYSTONE_DBPASS`** -4. 同步数据库 +4 同步数据库 ``` su -s /bin/sh -c "keystone-manage db_sync" keystone ``` -5. 初始化Fernet密钥仓库 +5 初始化Fernet密钥仓库 ``` keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone keystone-manage credential_setup --keystone-user keystone --keystone-group keystone - ``` +``` -6. 启动服务,**需要替换 `ADMIN_PASS`**,为 admin 用户设置密码 +6 启动服务,**需要替换 `ADMIN_PASS`**,为 admin 用户设置密码 ``` keystone-manage bootstrap --bootstrap-password ADMIN_PASS \ @@ -319,7 +317,7 @@ keystone-manage bootstrap --bootstrap-password ADMIN_PASS \ --bootstrap-region-id RegionOne ``` -7. 配置 HTTP server,编辑 `/etc/httpd/conf/httpd.conf`,**替换或追加**如下项: +7 配置 HTTP server,编辑 `/etc/httpd/conf/httpd.conf`,**替换或追加**如下项: ``` cat /etc/httpd/conf/httpd.conf @@ -329,20 +327,20 @@ ServerName controller ... ``` -8. 创建软连接 +8 创建软连接 ``` ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/ ``` -9. 设置开机启动,并开启服务 +9 设置开机启动,并开启服务 ``` systemctl enable httpd.service systemctl start httpd.service ``` -10. 创建环境变量配置,**替换 `ADMIN_PASS` 为 admin 用户的密码** +10 创建环境变量配置,**替换 `ADMIN_PASS` 为 admin 用户的密码** ``` cat << EOF >> ~/.admin-openrc @@ -355,31 +353,31 @@ export OS_AUTH_URL=http://controller:5000/v3 export OS_IDENTITY_API_VERSION=3 export OS_IMAGE_API_VERSION=2 EOF - ``` +``` -11. 依次创建 domain, projects, users, roles +11 依次创建 domain, projects, users, roles - - 导入环境变量 +- 导入环境变量 ``` source ~/.admin-openrc ``` - **注:后续执行 OpenStack 命令显示密码错误多是因为没有执行这一步导致的** +**注:后续执行 OpenStack 命令显示密码错误多是因为没有执行这一步导致的** - - 试着创建一个名为 example 的 domain +- 试着创建一个名为 example 的 domain ``` openstack domain create --description "An Example Domain" example ``` - - 如果上面的命令正常,可以开始创建名为 service 的 project +- 如果上面的命令正常,可以开始创建名为 service 的 project ``` openstack project create --domain default --description "Service Project" service ``` - - 创建(non-admin)project `myproject`,user `myuser` 和 role `myrole`,为 `myproject` 和 `myuser` 添加角色`myrole` +- 创建(non-admin)project `myproject`,user `myuser` 和 role `myrole`,为 `myproject` 和 `myuser` 添加角色`myrole` ``` openstack project create --domain default --description "Demo Project" myproject @@ -388,18 +386,18 @@ openstack role create myrole openstack role add --project myproject --user myuser myrole ``` - **注:包括下文中遇到 `--password-prompt` 的步骤都是需要用户来设置密码,部署过程一定要保证这些密码与配置文件中的一致。** +**注:包括下文中遇到 `--password-prompt` 的步骤都是需要用户来设置密码,部署过程一定要保证这些密码与配置文件中的一致。** -12. 验证 +12 验证 - - 取消临时环境变量OS_AUTH_URL和OS_PASSWORD: +- 取消临时环境变量OS_AUTH_URL和OS_PASSWORD: ``` source ~/.admin-openrc unset OS_AUTH_URL OS_PASSWORD ``` - - 为admin用户请求token: +- 为admin用户请求token: ``` openstack --os-auth-url http://controller:5000/v3 \ @@ -407,7 +405,7 @@ openstack --os-auth-url http://controller:5000/v3 \ --os-project-name admin --os-username admin token issue ``` - - 为myuser用户请求token: +- 为myuser用户请求token: ``` openstack --os-auth-url http://controller:5000/v3 \ @@ -423,13 +421,13 @@ Glance 是 OpenStack 的一个组件,提供了一个中央镜像管理系统 **Glance 必须安装,部署在 controller 节点**,具体步骤如下: -1. 安装软件包 +1 安装软件包 ``` dnf install -y openstack-glance ``` -2. 创建 Glance 数据库并授权,**需要替换 `GLANCE_DBPASS` 为 Glance 数据库设置密码** +2 创建 Glance 数据库并授权,**需要替换 `GLANCE_DBPASS` 为 Glance 数据库设置密码** ``` mysql -u root -p @@ -440,7 +438,7 @@ MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY MariaDB [(none)]> exit ``` -3. 创建用户,这一阶段会提示设置 `GLANCE_PASS` 密码 +3 创建用户,这一阶段会提示设置 `GLANCE_PASS` 密码 ``` source ~/.admin-openrc @@ -449,19 +447,19 @@ User Password: Repeat User Password: ``` -4. 添加 Glance 用户到 service project 并指定 admin 的 role: +4 添加 Glance 用户到 service project 并指定 admin 的 role: ``` openstack role add --project service --user glance admin ``` -5. 创建 Glance 服务实体: +5 创建 Glance 服务实体: ``` openstack service create --name glance --description "OpenStack Image" image ``` -6. 创建镜像服务API端点: +6 创建镜像服务API端点: ``` openstack endpoint create --region RegionOne image public http://controller:9292 @@ -469,7 +467,7 @@ openstack endpoint create --region RegionOne image internal http://controller:92 openstack endpoint create --region RegionOne image admin http://controller:9292 ``` -7. 编辑 Glance 配置文件,直接在 `/etc/glance/glance-api.conf` 文件中输入如下内容 +7 编辑 Glance 配置文件,直接在 `/etc/glance/glance-api.conf` 文件中输入如下内容 **需要替换 `GLANCE_DBPASS` 为 Glance 数据库密码** @@ -499,22 +497,22 @@ default_store = file filesystem_store_datadir = /var/lib/glance/images/ ``` -8. 同步数据库 +8 同步数据库 ``` su -s /bin/sh -c "glance-manage db_sync" glance ``` -9. 使能并启动服务 +9 使能并启动服务 ``` systemctl enable openstack-glance-api.service systemctl start openstack-glance-api.service ``` -10. 验证 +10 验证 - - 下载镜像 +- 下载镜像 ``` x86镜像下载: @@ -524,7 +522,7 @@ arm镜像下载: wget http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-aarch64-disk.img ``` - - 向Image服务上传镜像: +- 向Image服务上传镜像: ``` source ~/.admin-openrc @@ -532,7 +530,7 @@ openstack image create --disk-format qcow2 --container-format bare \ --file cirros-0.4.0-x86_64-disk.img --public cirros ``` - - 确认镜像上传并验证属性: +- 确认镜像上传并验证属性: ``` openstack image list @@ -546,13 +544,13 @@ Placement 是 OpenStack 的一个组件,它提供了一个中央资源管理 **Placement 部署在 controller 节点**,具体步骤如下: -1. 安装软件包 +1 安装软件包 ``` dnf install -y openstack-placement-api ``` -2. 创建 Placement 数据库,**需要替换 `PLACEMENT_DBPASS` 为 Placement 数据库设置密码** +2 创建 Placement 数据库,**需要替换 `PLACEMENT_DBPASS` 为 Placement 数据库设置密码** ``` mysql -u root -p @@ -563,7 +561,7 @@ MariaDB [(none)]> GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' IDENTIF MariaDB [(none)]> exit ``` -3. 创建用户,这一阶段会提示设置 `PLACEMENT_PASS` 密码 +3 创建用户,这一阶段会提示设置 `PLACEMENT_PASS` 密码 ``` source ~/.admin-openrc @@ -572,19 +570,19 @@ User Password: Repeat User Password: ``` -4. 添加 Placement 用户到 service project 并指定 admin 的 role: +4 添加 Placement 用户到 service project 并指定 admin 的 role: ``` openstack role add --project service --user placement admin ``` -5. 创建 Placement 服务实体: +5 创建 Placement 服务实体: ``` openstack service create --name placement --description "Placement API" placement ``` -6. 创建 Placement 服务 API 端点: +6 创建 Placement 服务 API 端点: ``` openstack endpoint create --region RegionOne placement public http://controller:8778 @@ -592,7 +590,7 @@ openstack endpoint create --region RegionOne placement internal http://controlle openstack endpoint create --region RegionOne placement admin http://controller:8778 ``` -7. 编辑 Placement 配置文件,直接在 `/etc/placement/placement.conf` 文件中输入如下内容 +7 编辑 Placement 配置文件,直接在 `/etc/placement/placement.conf` 文件中输入如下内容 **需要替换 `PLACEMENT_DBPASS` 为 Placement 数据库密码** @@ -616,36 +614,36 @@ username = placement password = PLACEMENT_PASS ``` -8. 同步数据库 +8 同步数据库 ``` su -s /bin/sh -c "placement-manage db sync" placement ``` -9. 重启 httpd 服务 +9 重启 httpd 服务 ``` systemctl restart httpd ``` -10. 验证 +10 验证 - - 执行状态检查: +- 执行状态检查: - ``` +``` source ~/.admin-openrc placement-status upgrade check - ``` +``` - - 验证 Placement API 运行命令: +- 验证 Placement API 运行命令: - - 安装osc-placement插件: +安装osc-placement插件: ``` dnf install -y python3-osc-placement ``` - - 列出可用的资源类别及特性: +列出可用的资源类别及特性: ``` openstack --os-placement-api-version 1.2 resource class list --sort-column name @@ -662,14 +660,14 @@ Nova 是 OpenStack 的一个组件,提供了一个中央计算管理系统, ### 3.4.1 controller 节点 -1. 安装软件包 +1 安装软件包 ``` dnf install -y openstack-nova-api openstack-nova-conductor \ openstack-nova-novncproxy openstack-nova-scheduler ``` -2. 创建 Nova 数据库并授权,**需要替换 `NOVA_DBPASS` 为 Nova 数据库设置密码** +2 创建 Nova 数据库并授权,**需要替换 `NOVA_DBPASS` 为 Nova 数据库设置密码** ``` mysql -u root -p @@ -687,7 +685,7 @@ MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED MariaDB [(none)]> exit ``` -3. 创建用户,这一阶段会提示设置 `NOVA_PASS` 密码 +3 创建用户,这一阶段会提示设置 `NOVA_PASS` 密码 ``` source ~/.admin-openrc @@ -696,19 +694,19 @@ User Password: Repeat User Password: ``` -4. 添加 Nova 用户到 service project 并指定 admin 的 role: +4 添加 Nova 用户到 service project 并指定 admin 的 role: ``` openstack role add --project service --user nova admin ``` -5. 创建 Nova 服务实体: +5 创建 Nova 服务实体: ``` openstack service create --name nova --description "OpenStack Compute" compute ``` -6. 创建 Nova 服务 API 端点: +6 创建 Nova 服务 API 端点: ``` openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1 @@ -716,7 +714,7 @@ openstack endpoint create --region RegionOne compute internal http://controller: openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1 ``` -7. 编辑 Nova 配置文件,直接在 `/etc/nova/nova.conf` 文件中输入如下内容 +7 编辑 Nova 配置文件,直接在 `/etc/nova/nova.conf` 文件中输入如下内容 **注:** @@ -776,7 +774,7 @@ username = placement password = PLACEMENT_PASS ``` -8. 数据库同步 +8 数据库同步 - 同步 nova-api 数据库: @@ -810,7 +808,7 @@ su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova -9. 使能并启动服务 +9 使能并启动服务 ``` systemctl enable \ @@ -830,13 +828,13 @@ systemctl start \ ### 3.4.2 compute 节点 -1. 安装软件包 +1 安装软件包 ``` dnf install -y openstack-nova-compute ``` -2. 编辑 Nova 配置文件,直接在 `/etc/nova/nova.conf` 文件中输入如下内容 +2 编辑 Nova 配置文件,直接在 `/etc/nova/nova.conf` 文件中输入如下内容 **注:** @@ -894,7 +892,7 @@ password = PLACEMENT_PASS virt_type = qemu ``` -3. 使能并启动服务 +3 使能并启动服务 ``` systemctl enable libvirtd.service openstack-nova-compute.service @@ -907,7 +905,7 @@ systemctl start libvirtd.service openstack-nova-compute.service 验证过程在 **controller 节点**,执行如下步骤: -1. 添加计算节点到 OpenStack 集群 +1 添加计算节点到 OpenStack 集群 - 确认nova-compute服务已识别到数据库中: @@ -922,25 +920,25 @@ openstack compute service list --service nova-compute su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova ``` -2. 列出服务组件,验证每个流程都成功启动和注册: +2 列出服务组件,验证每个流程都成功启动和注册: ``` openstack compute service list ``` -3. 列出身份服务中的API端点,验证与身份服务的连接: +3 列出身份服务中的API端点,验证与身份服务的连接: ``` openstack catalog list ``` -4. 列出镜像服务中的镜像,验证与镜像服务的连接: +4 列出镜像服务中的镜像,验证与镜像服务的连接: ``` openstack image list ``` -5. 检查cells是否运作成功 +5 检查cells是否运作成功 ``` nova-status upgrade check @@ -956,14 +954,14 @@ Neutron 是 OpenStack 的一个组件,提供了一个中央网络管理系统 ### 3.5.1 controller 节点 -1. 安装软件包 +1 安装软件包 ``` dnf install -y openstack-neutron openstack-neutron-linuxbridge \ iptables-nft ipset openstack-neutron-ml2 ``` -2. 创建 Neutron 数据库并授权,**需要替换 `NEUTRON_DBPASS` 为 Neutron 数据库设置密码** +2 创建 Neutron 数据库并授权,**需要替换 `NEUTRON_DBPASS` 为 Neutron 数据库设置密码** ``` mysql -u root -p @@ -974,7 +972,7 @@ MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED MariaDB [(none)]> exit ``` -3. 创建用户,这一阶段会提示设置 `Neutron_PASS` 密码 +3 创建用户,这一阶段会提示设置 `Neutron_PASS` 密码 ``` source ~/.admin-openrc @@ -983,19 +981,19 @@ User Password: Repeat User Password: ``` -4. 添加 Neutron 用户到 service project 并指定 admin 的 role: +4 添加 Neutron 用户到 service project 并指定 admin 的 role: ``` openstack role add --project service --user neutron admin ``` -5. 创建 Neutron 服务实体: +5 创建 Neutron 服务实体: ``` openstack service create --name neutron --description "OpenStack Networking" network ``` -6. 创建服务 API 端点: +6 创建服务 API 端点: ``` openstack endpoint create --region RegionOne network public http://controller:9696 @@ -1003,7 +1001,7 @@ openstack endpoint create --region RegionOne network internal http://controller: openstack endpoint create --region RegionOne network admin http://controller:9696 ``` -7. 编辑 Neutron 配置文件,直接在 `/etc/neutron/neutron.conf` 文件中输入如下内容 +7 编辑 Neutron 配置文件,直接在 `/etc/neutron/neutron.conf` 文件中输入如下内容 **需要替换 `NEUTRON_PASS` 为 Neutron 用户密码** @@ -1051,7 +1049,7 @@ password = NOVA_PASS lock_path = /var/lib/neutron/tmp ``` -8. 配置 ML2,编辑 `/etc/neutron/plugins/ml2/ml2_conf.ini` 文件,**直接输入**如下内容 +8 配置 ML2,编辑 `/etc/neutron/plugins/ml2/ml2_conf.ini` 文件,**直接输入**如下内容 ``` [ml2] @@ -1070,7 +1068,7 @@ vni_ranges = 1:1000 enable_ipset = true ``` -9. 配置 `/etc/neutron/plugins/ml2/linuxbridge_agent.ini` 文件,**直接输入**如下内容 +9 配置 `/etc/neutron/plugins/ml2/linuxbridge_agent.ini` 文件,**直接输入**如下内容 **`physical_interface_mappings` 需要替换成当前环境上物理网络接口的名称** @@ -1088,14 +1086,14 @@ enable_security_group = true firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver ``` -10. 配置 Layer-3 代理,编辑 `/etc/neutron/l3_agent.ini` 文件,**直接输入**如下内容: +10 配置 Layer-3 代理,编辑 `/etc/neutron/l3_agent.ini` 文件,**直接输入**如下内容: - ``` +``` [DEFAULT] interface_driver = linuxbridge - ``` +``` -11. 配置 DHCP 代理,编辑 `/etc/neutron/dhcp_agent.ini` 文件,**直接输入**如下内容: +11 配置 DHCP 代理,编辑 `/etc/neutron/dhcp_agent.ini` 文件,**直接输入**如下内容: ``` [DEFAULT] @@ -1104,7 +1102,7 @@ dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq enable_isolated_metadata = true ``` -12. 配置 metadata 代理,编辑 `/etc/neutron/metadata_agent.ini` 文件,**直接输入**如下内容: +12 配置 metadata 代理,编辑 `/etc/neutron/metadata_agent.ini` 文件,**直接输入**如下内容: ``` [DEFAULT] @@ -1119,7 +1117,7 @@ openssl rand -hex 10 866069bfa4940c7b892a ``` -13. 配置 Nova 服务,在 `/etc/nova/nova.conf` 文件中**追加**如下内容: +13 配置 Nova 服务,在 `/etc/nova/nova.conf` 文件中**追加**如下内容: **其中,`METADATA_SECRET` 与上一步的相同** @@ -1141,26 +1139,26 @@ service_metadata_proxy = true metadata_proxy_shared_secret = METADATA_SECRET ``` -14. 创建 `/etc/neutron/plugin.ini` 的符号链接 +14 创建 `/etc/neutron/plugin.ini` 的符号链接 ``` ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini ``` -15. 同步数据库 +15 同步数据库 ``` su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf \ --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron ``` -16. 重新启动 Nova api 服务 +16 重新启动 Nova api 服务 ``` systemctl restart openstack-nova-api.service ``` -17. 启动网络服务 +17 启动网络服务 ``` systemctl enable neutron-server.service neutron-linuxbridge-agent.service \ @@ -1174,13 +1172,13 @@ systemctl start neutron-server.service neutron-linuxbridge-agent.service \ ### 3.5.2 compute 节点 -1. 安装软件包 +1 安装软件包 ``` dnf install -y openstack-neutron-linuxbridge ebtables ipset ``` -2. 编辑 Neutron 配置文件,直接在 `/etc/neutron/neutron.conf` 文件中输入如下内容 +2 编辑 Neutron 配置文件,直接在 `/etc/neutron/neutron.conf` 文件中输入如下内容 **需要替换 `NEUTRON_PASS` 为 Neutron 用户密码** @@ -1206,7 +1204,7 @@ password = NEUTRON_PASS lock_path = /var/lib/neutron/tmp ``` -3. 编辑 `/etc/neutron/plugins/ml2/linuxbridge_agent.ini` 文件,**直接输入**如下内容 +3 编辑 `/etc/neutron/plugins/ml2/linuxbridge_agent.ini` 文件,**直接输入**如下内容 **`physical_interface_mappings` 需要替换成当前环境上物理网络接口的名称** @@ -1224,7 +1222,7 @@ enable_security_group = true firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver ``` -4. 配置 Nova 服务,在 `/etc/nova/nova.conf` 文件中**追加**如下内容: +4 配置 Nova 服务,在 `/etc/nova/nova.conf` 文件中**追加**如下内容: **需要替换 `NEUTRON_PASS` 为 Neutron 用户密码** @@ -1242,13 +1240,13 @@ username = neutron password = NEUTRON_PASS ``` -5. 重启 nova-compute 服务 +5 重启 nova-compute 服务 ``` systemctl restart openstack-nova-compute.service ``` -6. 使能并启动 Neutron linuxbridge agent 服务 +6 使能并启动 Neutron linuxbridge agent 服务 ``` systemctl enable neutron-linuxbridge-agent @@ -1275,13 +1273,13 @@ Cinder 提供了一个中央块存储管理系统,用于管理 OpenStack 中 ### 3.6.1 controller 节点 -1. 安装软件包 +1 安装软件包 ``` dnf install openstack-cinder-api openstack-cinder-scheduler -y ``` -2. 创建 Cinder 数据库并授权,**需要替换 `CINDER_DBPASS` 为 Cinder 数据库设置密码** +2 创建 Cinder 数据库并授权,**需要替换 `CINDER_DBPASS` 为 Cinder 数据库设置密码** ``` mysql -u root -p @@ -1292,7 +1290,7 @@ MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' IDENTIFIED BY MariaDB [(none)]> exit ``` -3. 创建用户,这一阶段会提示设置 `CINDER_PASS` 密码 +3 创建用户,这一阶段会提示设置 `CINDER_PASS` 密码 ``` source ~/.admin-openrc @@ -1301,19 +1299,19 @@ User Password: Repeat User Password: ``` -4. 添加 Cinder 用户到 service project 并指定 admin 的 role: +4 添加 Cinder 用户到 service project 并指定 admin 的 role: ``` openstack role add --project service --user cinder admin ``` -5. 创建 Cinder 服务实体: +5 创建 Cinder 服务实体: ``` openstack service create --name cinderv3 --description "OpenStack Block Storage" volumev3 ``` -6. 创建服务 API 端点: +6 创建服务 API 端点: ``` openstack endpoint create --region RegionOne volumev3 public http://controller:8776/v3/%\(project_id\)s @@ -1321,7 +1319,7 @@ openstack endpoint create --region RegionOne volumev3 internal http://controller openstack endpoint create --region RegionOne volumev3 admin http://controller:8776/v3/%\(project_id\)s ``` -7. 编辑 Cinder 配置文件,直接在 `/etc/cinder/cinder.conf` 文件中输入如下内容 +7 编辑 Cinder 配置文件,直接在 `/etc/cinder/cinder.conf` 文件中输入如下内容 **需要替换 `RABBIT_PASS` 为 RabbitMQ 服务密码** @@ -1353,13 +1351,13 @@ password = CINDER_PASS lock_path = /var/lib/cinder/tmp ``` -8. 数据库同步 +8 数据库同步 ``` su -s /bin/sh -c "cinder-manage db sync" cinder ``` -9. 配置 Nova 服务,在 `/etc/nova/nova.conf` 文件中**追加**如下内容: +9 配置 Nova 服务,在 `/etc/nova/nova.conf` 文件中**追加**如下内容: ``` ... @@ -1368,7 +1366,7 @@ su -s /bin/sh -c "cinder-manage db sync" cinder os_region_name = RegionOne ``` -10. 重启 nova-api 服务,并启动 Cinder 相关服务 +10 重启 nova-api 服务,并启动 Cinder 相关服务 ``` systemctl restart openstack-nova-api @@ -1383,21 +1381,21 @@ Storage 节点要提前准备至少一块硬盘,作为 Cinder 的存储后端 Cinder支持很多类型的后端存储,本指导使用最简单的 lvm 为参考。 -1. 安装软件包 +1 安装软件包 ``` dnf install lvm2 device-mapper-persistent-data scsi-target-utils \ rpcbind nfs-utils openstack-cinder-volume openstack-cinder-backup -y ``` -2. 配置lvm卷组 +2 配置lvm卷组 ``` pvcreate /dev/sdb vgcreate cinder-volumes /dev/sdb ``` -3. 编辑 Cinder 配置文件,直接在 `/etc/cinder/cinder.conf` 文件中输入如下内容 +3 编辑 Cinder 配置文件,直接在 `/etc/cinder/cinder.conf` 文件中输入如下内容 **需要替换 `RABBIT_PASS` 为 RabbitMQ 服务密码** @@ -1437,7 +1435,7 @@ target_helper = lioadm lock_path = /var/lib/cinder/tmp ``` -4. 启动服务 +4 启动服务 ``` systemctl start openstack-cinder-volume target @@ -1462,13 +1460,13 @@ Horizon 提供了一个易于使用的Web界面,用于管理 OpenStack 中的 **Horizon 部署在 controller 节点** -1. 安装软件包 +1 安装软件包 ``` dnf install -y openstack-dashboard ``` -2. 编辑 Horizon 配置文件,直接在 `/etc/openstack-dashboard/local_settings` 文件中输入如下内容 +2 编辑 Horizon 配置文件,直接在 `/etc/openstack-dashboard/local_settings` 文件中输入如下内容 ``` OPENSTACK_HOST = "controller" @@ -1494,13 +1492,13 @@ OPENSTACK_API_VERSIONS = { } ``` -3. 重启服务 +3 重启服务 ``` systemctl restart httpd ``` -4. 验证 +4 验证 打开浏览器,输入 `http://192.168.0.2/dashboard`,打开 Horizon 登录页面。 @@ -1529,13 +1527,13 @@ Trove 提供数据库即服务(DBaaS)用于管理和查询数据库资源, **Trove 部署在 controller 节点** -1. 安装软件包 +1 安装软件包 ``` dnf install -y openstack-trove python-troveclient ``` -2. 创建 Trove 数据库并授权,**需要替换 `TROVE_DBPASS` 为 Trove 数据库设置密码** +2 创建 Trove 数据库并授权,**需要替换 `TROVE_DBPASS` 为 Trove 数据库设置密码** ``` mysql -u root -p @@ -1546,7 +1544,7 @@ MariaDB [(none)]> GRANT ALL PRIVILEGES ON trove.* TO 'trove'@'%' IDENTIFIED BY ' MariaDB [(none)]> exit ``` -3. 创建用户,这一阶段会提示设置 `TROVE_PASS` 密码 +3 创建用户,这一阶段会提示设置 `TROVE_PASS` 密码 ``` source ~/.admin-openrc @@ -1555,19 +1553,19 @@ User Password: Repeat User Password: ``` -4. 添加 Trove 用户到 service project 并指定 admin 的 role: +4 添加 Trove 用户到 service project 并指定 admin 的 role: ``` openstack role add --project service --user trove admin ``` -5. 创建 Trove 服务实体: +5 创建 Trove 服务实体: ``` openstack service create --name trove --description "Database service" database ``` -6. 创建服务 API 端点: +6 创建服务 API 端点: **`openstack endpoint` 命令会自动解析 `tenant_id` 字符串,因此无需替换** @@ -1577,7 +1575,7 @@ openstack endpoint create --region RegionOne database internal http://controller openstack endpoint create --region RegionOne database admin http://controller:8779/v1.0/%\(tenant_id\)s ``` -7. 编辑 Trove 配置文件,直接在 `/etc/trove/trove.conf` 文件中输入如下内容 +7 编辑 Trove 配置文件,直接在 `/etc/trove/trove.conf` 文件中输入如下内容 **需要替换 `TROVE_DBPASS` 为 Trove 数据库密码** @@ -1636,7 +1634,7 @@ tcp_ports = 3306 tcp_ports = 5432 ``` -8. 编辑 `/etc/trove/trove-guestagent.conf` 文件,**直接输入**如下内容 +8 编辑 `/etc/trove/trove-guestagent.conf` 文件,**直接输入**如下内容 **需要替换 `TROVE_PASS` 为 Trove 账户密码** @@ -1668,13 +1666,13 @@ docker_image = your-registry/your-repo/mysql backup_docker_image = your-registry/your-repo/db-backup-mysql:1.1.0 ``` -9. 数据库同步 +9 数据库同步 ``` su -s /bin/sh -c "trove-manage db_sync" trove ``` -10. 使能并启动服务 +10 使能并启动服务 ``` systemctl enable openstack-trove-api.service openstack-trove-taskmanager.service \ @@ -1694,33 +1692,33 @@ Swift 提供了一个高度可扩展的对象存储系统,用于提供对象 ### 3.10.1 controller 节点 -1. 安装软件包 +1 安装软件包 ``` dnf install -y openstack-swift-proxy python3-swiftclient \ python3-keystoneclient python3-keystonemiddleware memcached ``` -2. 创建用户,这一阶段会提示设置 `SIIFT_PASS` 密码 +2 创建用户,这一阶段会提示设置 `SIIFT_PASS` 密码 ``` source ~/.admin-openrc openstack user create --domain default --password-prompt swift ``` -3. 添加 Swift 用户到 service project 并指定 admin 的 role: +3 添加 Swift 用户到 service project 并指定 admin 的 role: ``` openstack role add --project service --user swift admin ``` -4. 创建 Swift 服务实体: +4 创建 Swift 服务实体: ``` openstack service create --name swift --description "OpenStack Object Storage" object-store ``` -5. 创建服务 API 端点: +5 创建服务 API 端点: ``` openstack endpoint create --region RegionOne object-store public http://controller:8080/v1/AUTH_%\(project_id\)s @@ -1728,7 +1726,7 @@ openstack endpoint create --region RegionOne object-store internal http://contro openstack endpoint create --region RegionOne object-store admin http://controller:8080/v1 ``` -6. 配置proxy,编辑 `/etc/swift/proxy-server.conf` 文件,替换其中两项即可 +6 配置proxy,编辑 `/etc/swift/proxy-server.conf` 文件,替换其中两项即可 **需要替换 `SWIFT_PASS` 为 Swift 用户密码** @@ -1743,28 +1741,28 @@ password = SWIFT_PASS Storage 节点要提前准备至少两块硬盘提供对象存储的能力,本文设备名称为 `/dev/sdc` 和 `/dev/sdd`,用户在配置过程中,请按需替换。 -1. 安装软件包 +1 安装软件包 ``` dnf install -y openstack-swift-account openstack-swift-container \ openstack-swift-object xfsprogs rsync-daemon ``` -2. 将设备 `/dev/sdbc` 和 `/dev/sdd` 格式化为 XFS +2 将设备 `/dev/sdbc` 和 `/dev/sdd` 格式化为 XFS ``` mkfs.xfs /dev/sdc mkfs.xfs /dev/sdd ``` -3. 创建挂载点目录 +3 创建挂载点目录 ``` mkdir -p /srv/node/sdc mkdir -p /srv/node/sdd ``` -4. 编辑 `/etc/fstab` 文件并将以下内容追加到其中 +4 编辑 `/etc/fstab` 文件并将以下内容追加到其中 ``` UUID="" /srv/node/sdc xfs noatime 0 2 @@ -1777,14 +1775,14 @@ UUID="" /srv/node/sdd xfs noatime 0 2 blkid ``` -5. 挂载设备 +5 挂载设备 ``` mount /srv/node/sdc mount /srv/node/sdd ``` -6. 编辑 `/etc/rsyncd.conf` 文件直接输入如下内容: +6 编辑 `/etc/rsyncd.conf` 文件直接输入如下内容: ``` [DEFAULT] @@ -1813,14 +1811,14 @@ read only = False lock file = /var/lock/object.lock ``` -7. 使能 rsyncd 服务并启动 +7 使能 rsyncd 服务并启动 ``` systemctl enable rsyncd.service systemctl start rsyncd.service ``` -8. 配置存储节点 +8 配置存储节点 编辑 `/etc/swift` 目录的 `account-server.conf`、`container-server.conf` 和 `object-server.conf` 文件,替换 `bind_ip` 为存储节点上的 IP 地址。 @@ -1855,14 +1853,14 @@ Swift 使用环来实现高可用性和可扩展性。Swift 中的环是指一 账号环用于存储账号信息,包括账号的元数据和访问控制信息,配置步骤如下: - 1. 创建基础 `account.builder` 文件 + 1 创建基础 `account.builder` 文件 ``` cd /etc/swift swift-ring-builder account.builder create 10 1 1 ``` - 2. 将**每个存储节点**添加到环中 + 2 将**每个存储节点**添加到环中 **注:需要对每个存储节点上的每个存储设备重复此命令** @@ -1878,13 +1876,13 @@ swift-ring-builder account.builder add --region 1 --zone 1 \ --weight 100 ``` - 3. 验证账号环内容 + 3 验证账号环内容 ``` swift-ring-builder account.builder ``` - 4. 重新平衡账号环 + 4 重新平衡账号环 ``` swift-ring-builder account.builder rebalance @@ -1896,14 +1894,14 @@ swift-ring-builder account.builder rebalance 容器环用于存储容器信息,包括容器的元数据和访问控制信息。配置步骤如下: - 1. 创建基础 `container.builder` 文件 + 1 创建基础 `container.builder` 文件 ``` cd /etc/swift swift-ring-builder container.builder create 10 1 1 ``` - 2. 将**每个存储节点**添加到环中 + 2 将**每个存储节点**添加到环中 **注:需要对每个存储节点上的每个存储设备重复此命令** @@ -1919,13 +1917,13 @@ swift-ring-builder container.builder add --region 1 --zone 1 \ --weight 100 ``` - 3. 验证容器环内容 + 3 验证容器环内容 ``` swift-ring-builder container.builder ``` - 4. 重新平衡容器环 + 4 重新平衡容器环 ``` swift-ring-builder container.builder rebalance @@ -1935,14 +1933,14 @@ swift-ring-builder container.builder rebalance - 对象环 - 1. 创建基础 `object.builder` 文件 + 1 创建基础 `object.builder` 文件 ``` cd /etc/swift swift-ring-builder object.builder create 10 1 1 ``` - 2. 将**每个存储节点**添加到环中 + 2 将**每个存储节点**添加到环中 **注:需要对每个存储节点上的每个存储设备重复此命令** @@ -1958,13 +1956,13 @@ swift-ring-builder object.builder add --region 1 --zone 1 \ --weight 100 ``` - 3. 验证对象环内容 + 3 验证对象环内容 ``` swift-ring-builder object.builder ``` - 4. 重新平衡对象环 + 4 重新平衡对象环 ``` swift-ring-builder object.builder rebalance @@ -1974,7 +1972,7 @@ swift-ring-builder object.builder rebalance 完成环创建后执行如下步骤: -1. 分发环配置文件 +1 分发环配置文件 将 `account.ring.gz`,`container.ring.gz` 以及 `object.ring.gz` 文件复制到每个storage 节点和运行代理服务的任何其他节点上的 `/etc/swift` 目录,本文不涉及代理服务器,复制到 storage 节点即可 @@ -1982,7 +1980,7 @@ swift-ring-builder object.builder rebalance scp account.ring.gz container.ring.gz object.ring.gz root@192.168.0.4:/etc/swift ``` -2. 编辑 `/etc/swift/swift.conf` 配置文件,直接输入如下内容: +2 编辑 `/etc/swift/swift.conf` 配置文件,直接输入如下内容: ``` [swift-hash] @@ -2001,13 +1999,13 @@ openssl rand -hex 10 facd504f41922f136af8 ``` -3. 将 `swift.conf` 文件复制到 `/etc/swift` **每个**storage 节点和运行代理服务的任何其他节点上的目录,本文不涉及代理服务器,复制到 storage 节点即可 +3 将 `swift.conf` 文件复制到 `/etc/swift` **每个**storage 节点和运行代理服务的任何其他节点上的目录,本文不涉及代理服务器,复制到 storage 节点即可 ``` scp /etc/swift/swift.conf root@192.168.0.4:/etc/swift ``` -4. 在**所有**节点上,确保配置目录的正确所有权,因此要注意这一步**不止**要设置 controller 节点 +4 在**所有**节点上,确保配置目录的正确所有权,因此要注意这一步**不止**要设置 controller 节点 ``` chown -R root:swift /etc/swift @@ -2066,13 +2064,13 @@ Cyborg 用于管理和查询包括 FPGA、GPU 和 ASIC 在内的加速器资源 **Cyborg 部署在 controller 节点** -1. 安装软件包 +1 安装软件包 ``` dnf install -y openstack-cyborg ``` -2. 创建 Cyborg 数据库并授权,**需要替换 `CYBORG_DBPASS` 为 Cyborg 数据库设置密码** +2 创建 Cyborg 数据库并授权,**需要替换 `CYBORG_DBPASS` 为 Cyborg 数据库设置密码** ``` mysql -u root -p @@ -2083,7 +2081,7 @@ MariaDB [(none)]> GRANT ALL PRIVILEGES ON cyborg.* TO 'cyborg'@'%' IDENTIFIED BY MariaDB [(none)]> exit ``` -3. 创建用户,这一阶段会提示设置 `CYBORG_PASS` 密码 +3 创建用户,这一阶段会提示设置 `CYBORG_PASS` 密码 ``` source ~/.admin-openrc @@ -2092,19 +2090,19 @@ User Password: Repeat User Password: ``` -4. 添加 Cyborg 用户到 service project 并指定 admin 的 role: +4 添加 Cyborg 用户到 service project 并指定 admin 的 role: ``` openstack role add --project service --user cyborg admin ``` -5. 创建 Cyborg 服务实体: +5 创建 Cyborg 服务实体: ``` openstack service create --name cyborg --description "Acceleration Service" accelerator ``` -6. 创建服务 API 端点: +6 创建服务 API 端点: ``` openstack endpoint create --region RegionOne accelerator public http://controller:6666/v1 @@ -2112,7 +2110,7 @@ openstack endpoint create --region RegionOne accelerator internal http://control openstack endpoint create --region RegionOne accelerator admin http://controller:6666/v1 ``` -7. 编辑 Cyborg 配置文件,直接在 `/etc/cyborg/cyborg.conf` 文件中输入如下内容 +7 编辑 Cyborg 配置文件,直接在 `/etc/cyborg/cyborg.conf` 文件中输入如下内容 **需要替换 `RABBIT_PASS` 为 RabbitMQ 服务密码** @@ -2161,13 +2159,13 @@ auth_url = http://controller:5000 auth_type = password ``` -8. 同步数据库 +8 同步数据库 ``` cyborg-dbsync --config-file /etc/cyborg/cyborg.conf upgrade ``` -9. 使能并启动服务 +9 使能并启动服务 ``` systemctl enable openstack-cyborg-api openstack-cyborg-conductor openstack-cyborg-agent @@ -2182,7 +2180,7 @@ Aodh 提供了告警服务,可以帮助用户监控 OpenStack 中的各种资 **Aodh 部署在 controller 节点** -1. 安装软件包 +1 安装软件包 ``` dnf install -y openstack-aodh-api openstack-aodh-evaluator \ @@ -2190,7 +2188,7 @@ dnf install -y openstack-aodh-api openstack-aodh-evaluator \ openstack-aodh-expirer python3-aodhclient ``` -2. 创建 Aodh 数据库并授权,**需要替换 `AODH_DBPASS` 为 Aodh 数据库设置密码** +2 创建 Aodh 数据库并授权,**需要替换 `AODH_DBPASS` 为 Aodh 数据库设置密码** ``` mysql -u root -p @@ -2201,7 +2199,7 @@ MariaDB [(none)]> GRANT ALL PRIVILEGES ON aodh.* TO 'aodh'@'%' IDENTIFIED BY 'AO MariaDB [(none)]> exit ``` -3. 创建用户,这一阶段会提示设置 `AODH_PASS` 密码 +3 创建用户,这一阶段会提示设置 `AODH_PASS` 密码 ``` source ~/.admin-openrc @@ -2210,19 +2208,19 @@ User Password: Repeat User Password: ``` -4. 添加 Aodh 用户到 service project 并指定 admin 的 role: +4 添加 Aodh 用户到 service project 并指定 admin 的 role: ``` openstack role add --project service --user aodh admin ``` -5. 创建 Aodh 服务实体: +5 创建 Aodh 服务实体: ``` openstack service create --name aodh --description "Telemetry" alarming ``` -6. 创建服务 API 端点: +6 创建服务 API 端点: ``` openstack endpoint create --region RegionOne alarming public http://controller:8042 @@ -2230,7 +2228,7 @@ openstack endpoint create --region RegionOne alarming internal http://controller openstack endpoint create --region RegionOne alarming admin http://controller:8042 ``` -7. 编辑 Aodh 配置文件,直接在 `/etc/aodh/aodh.conf` 文件中输入如下内容 +7 编辑 Aodh 配置文件,直接在 `/etc/aodh/aodh.conf` 文件中输入如下内容 **需要替换 `AODH_DBPASS` 为 Aodh 数据库密码** @@ -2269,13 +2267,13 @@ interface = internalURL region_name = RegionOne ``` -8. 同步数据库 +8 同步数据库 ``` aodh-dbsync ``` -9. 使能并启动服务 +9 使能并启动服务 ``` systemctl enable openstack-aodh-api.service \ @@ -2297,14 +2295,14 @@ Gnocchi 提供度量即服务(Metric-as-a-Service),可以帮助用户更 **Gnocchi 部署在 controller 节点** -1. 安装软件包 +1 安装软件包 ``` dnf install -y openstack-gnocchi-api \ openstack-gnocchi-metricd python3-gnocchiclient ``` -2. 创建 Gnocchi 数据库并授权,**需要替换 `GNOCCHI_DBPASS` 为 Gnocchi 数据库设置密码** +2 创建 Gnocchi 数据库并授权,**需要替换 `GNOCCHI_DBPASS` 为 Gnocchi 数据库设置密码** ``` mysql -u root -p @@ -2315,7 +2313,7 @@ MariaDB [(none)]> GRANT ALL PRIVILEGES ON gnocchi.* TO 'gnocchi'@'%' IDENTIFIED MariaDB [(none)]> exit ``` -3. 创建用户,这一阶段会提示设置 `GNOCCHI_PASS` 密码 +3 创建用户,这一阶段会提示设置 `GNOCCHI_PASS` 密码 ``` source ~/.admin-openrc @@ -2324,19 +2322,19 @@ User Password: Repeat User Password: ``` -4. 添加 Gnocchi 用户到 service project 并指定 admin 的 role: +4 添加 Gnocchi 用户到 service project 并指定 admin 的 role: ``` openstack role add --project service --user gnocchi admin ``` -5. 创建 Gnocchi 服务实体: +5 创建 Gnocchi 服务实体: ``` openstack service create --name gnocchi --description "Metric Service" metric ``` -6. 创建服务 API 端点: +6 创建服务 API 端点: ``` openstack endpoint create --region RegionOne metric public http://controller:8041 @@ -2344,7 +2342,7 @@ openstack endpoint create --region RegionOne metric internal http://controller:8 openstack endpoint create --region RegionOne metric admin http://controller:8041 ``` -7. 编辑 Gnocchi 配置文件,直接在 `/etc/gnocchi/gnocchi.conf` 文件中输入如下内容 +7 编辑 Gnocchi 配置文件,直接在 `/etc/gnocchi/gnocchi.conf` 文件中输入如下内容 **需要替换 `GNOCCHI_PASS` 为 Gnocchi 用户密码** @@ -2378,13 +2376,13 @@ file_basepath = /var/lib/gnocchi driver = file ``` -8. 同步数据库 +8 同步数据库 ``` gnocchi-upgrade ``` -9. 使能并启动服务 +9 使能并启动服务 ``` systemctl enable openstack-gnocchi-api.service openstack-gnocchi-metricd.service @@ -2401,13 +2399,13 @@ Ceilometer 提供计量即服务(Metering-as-a-Service)可以帮助用户更 ### 3.14.1 controller 节点 -1. 安装软件包 +1 安装软件包 ``` dnf install -y openstack-ceilometer-notification openstack-ceilometer-central ``` -2. 创建用户,这一阶段会提示设置 `CEILOMETER_PASS` 密码 +2 创建用户,这一阶段会提示设置 `CEILOMETER_PASS` 密码 ``` source ~/.admin-openrc @@ -2416,19 +2414,19 @@ User Password: Repeat User Password: ``` -3. 添加 Ceilometer 用户到 service project 并指定 admin 的 role: +3 添加 Ceilometer 用户到 service project 并指定 admin 的 role: ``` openstack role add --project service --user ceilometer admin ``` -4. 创建 Ceilometer 服务实体: +4 创建 Ceilometer 服务实体: ``` openstack service create --name ceilometer --description "Telemetry" metering ``` -5. 编辑配置文件 `/etc/ceilometer/pipeline.yaml`,**替换**如下内容: +5 编辑配置文件 `/etc/ceilometer/pipeline.yaml`,**替换**如下内容: ``` publishers: @@ -2438,7 +2436,7 @@ publishers: - gnocchi://?filter_project=service&archive_policy=low ``` -6. 编辑配置文件 `/etc/ceilometer/ceilometer.conf`,直接输入如下内容: +6 编辑配置文件 `/etc/ceilometer/ceilometer.conf`,直接输入如下内容: **需要替换 `RABBIT_PASS` 为 RabbitMQ 服务密码** @@ -2460,13 +2458,13 @@ interface = internalURL region_name = RegionOne ``` -7. 数据库同步 +7 数据库同步 ``` ceilometer-upgrade ``` -8. 启动并使能服务 +8 启动并使能服务 ``` systemctl enable openstack-ceilometer-notification.service openstack-ceilometer-central.service @@ -2477,13 +2475,13 @@ systemctl start openstack-ceilometer-notification.service openstack-ceilometer-c ### 3.14.2 compute 节点 -1. 安装软件包 +1 安装软件包 ``` dnf install -y openstack-ceilometer-compute ``` -2. 编辑配置文件 `/etc/ceilometer/ceilometer.conf`,直接输入如下内容: +2 编辑配置文件 `/etc/ceilometer/ceilometer.conf`,直接输入如下内容: **需要替换 `RABBIT_PASS` 为 RabbitMQ 服务密码** @@ -2505,7 +2503,7 @@ interface = internalURL region_name = RegionOne ``` -3. 编辑配置文件 `/etc/nova/nova.conf`,**追加**如下内容: +3 编辑配置文件 `/etc/nova/nova.conf`,**追加**如下内容: ``` [DEFAULT] @@ -2519,14 +2517,14 @@ notify_on_state_change = vm_and_task_state driver = messagingv2 ``` -4. 使能并启动服务 +4 使能并启动服务 ``` systemctl enable openstack-ceilometer-compute.service systemctl start openstack-ceilometer-compute.service ``` -5. 重启 nova-compute 服务 +5 重启 nova-compute 服务 ``` systemctl restart openstack-nova-compute.service @@ -2540,13 +2538,13 @@ Heat 提供基础设施即服务(IaaS)的编排服务,通过一组 API 和 **Heat 部署在 controller 节点** -1. 安装软件包 +1 安装软件包 ``` dnf install -y openstack-heat-api openstack-heat-api-cfn openstack-heat-engine ``` -2. 创建 Heat 数据库并授权,**需要替换 `HEAT_DBPASS` 为 Heat 数据库设置密码** +2 创建 Heat 数据库并授权,**需要替换 `HEAT_DBPASS` 为 Heat 数据库设置密码** ``` mysql -u root -p @@ -2557,7 +2555,7 @@ MariaDB [(none)]> GRANT ALL PRIVILEGES ON heat.* TO 'heat'@'%' IDENTIFIED BY 'HE MariaDB [(none)]> exit ``` -3. 创建用户,这一阶段会提示设置 `HEAT_PASS` 密码 +3 创建用户,这一阶段会提示设置 `HEAT_PASS` 密码 ``` source ~/.admin-openrc @@ -2566,20 +2564,20 @@ User Password: Repeat User Password: ``` -4. 添加 Heat 用户到 service project 并指定 admin 的 role: +4 添加 Heat 用户到 service project 并指定 admin 的 role: ``` openstack role add --project service --user heat admin ``` -5. 创建 heat 和 heat-cfn 服务 +5 创建 heat 和 heat-cfn 服务 ``` openstack service create --name heat --description "Orchestration" orchestration openstack service create --name heat-cfn --description "Orchestration" cloudformation ``` -6. 创建服务 API 端点: +6 创建服务 API 端点: ``` openstack endpoint create --region RegionOne orchestration public http://controller:8004/v1/%\(tenant_id\)s @@ -2590,7 +2588,7 @@ openstack endpoint create --region RegionOne cloudformation internal http://cont openstack endpoint create --region RegionOne cloudformation admin http://controller:8000/v1 ``` -7. 创建 stack 管理的账户,包括 heatdomain 及其对应 domain 的 admin 用户 heat_domain_admin, heat_stack_owner 角色,heat_stack_user 角色 +7 创建 stack 管理的账户,包括 heatdomain 及其对应 domain 的 admin 用户 heat_domain_admin, heat_stack_owner 角色,heat_stack_user 角色 ``` # 这一步会提示设置 HEAT_DOMAIN_PASS 密码 @@ -2601,7 +2599,7 @@ openstack role create heat_stack_owner openstack role create heat_stack_user ``` -8. 编辑配置文件 `/etc/heat/heat.conf`,直接输入如下内容: +8 编辑配置文件 `/etc/heat/heat.conf`,直接输入如下内容: **需要替换 `RABBIT_PASS` 为 RabbitMQ 服务密码** @@ -2645,18 +2643,18 @@ user_domain_name = default auth_uri = http://controller:5000 ``` -9. 同步数据库 +9 同步数据库 ``` su -s /bin/sh -c "heat-manage db_sync" heat ``` -10. 使能并启动服务 +10 使能并启动服务 - ``` +``` systemctl enable openstack-heat-api.service openstack-heat-api-cfn.service openstack-heat-engine.service systemctl start openstack-heat-api.service openstack-heat-api-cfn.service openstack-heat-engine.service - ``` +``` @@ -2667,7 +2665,7 @@ su -s /bin/sh -c "heat-manage db_sync" heat 此报错大概是防火墙导致的nova服务异常,用户可以使用 `curl ip:prot` 命令确认,如果确实是端口无法访问,可以考虑设置防火墙白名单,步骤如下: -1. 将其它节点加入白名单 +1 将其它节点加入白名单 ``` firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address=192.168.0.3 accept' @@ -2675,7 +2673,7 @@ firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address=192. firewall-cmd --reload ``` -2. 确认添加成功 +2 确认添加成功 ``` firewall-cmd --list-all