前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用 Cloud-init 将节点添加到你的私有云中

使用 Cloud-init 将节点添加到你的私有云中

作者头像
用户1880875
修改于 2021-10-11 06:40:09
修改于 2021-10-11 06:40:09
2K00
代码可运行
举报
运行总次数:0
代码可运行

Cloud-init是一种广泛使用的行业标准方法,用于初始化云实例。云提供商使用 Cloud-init 来定制实例的网络配置、实例信息,甚至用户提供的配置指令。它也是一个可以在你的“家庭私有云”中使用的很好的工具,可以为你的家庭实验室的虚拟机和物理机的初始设置和配置添加一点自动化 —— 并了解更多关于大型云提供商是如何工作的信息。关于更多的细节和背景,请看我之前的文章《在你的树莓派家庭实验室中使用 Cloud-init》。

运行 Cloud-init 的 Linux 服务器的启动过程(Chris Collins,CC BY-SA 4.0)

诚然,Cloud-init 对于为许多不同客户配置机器的云提供商来说,比对于由单个系统管理员运行的家庭实验室更有用,而且 Cloud-init 解决的许多问题对于家庭实验室来说可能有点多余。然而,设置它并了解它的工作原理是了解更多关于这种云技术的好方法,更不用说它是首次启动时配置设备的好方法。

本教程使用 Cloud-init 的 NoCloud 数据源,它允许 Cloud-init 在传统的云提供商环境之外使用。本文将向你展示如何在客户端设备上安装 Cloud-init,并设置一个运行 Web 服务的容器来响应客户端的请求。你还将学习如何审查客户端从 Web 服务中请求的内容,并修改 Web 服务的容器,以提供基本的、静态的 Cloud-init 服务。

在现有系统上设置 Cloud-init

Cloud-init 可能在新系统首次启动时最有用,它可以查询配置数据,并根据指令对系统进行定制。它可以包含在树莓派和单板计算机的磁盘镜像中,也可以添加到用于 配给(provision)虚拟机的镜像中。对于测试用途来说,无论是在现有系统上安装并运行 Cloud-init,还是安装一个新系统,然后设置 Cloud-init,都是很容易的。

作为大多数云提供商使用的主要服务,大多数 Linux 发行版都支持 Cloud-init。在这个例子中,我将使用 Fedora 31 Server 来安装树莓派,但在 RaspbianUbuntuCentOS 和大多数其他发行版上也可以用同样的方式来完成。

安装并启用云计算初始服务

在你想作为 Cloud-init 客户端的系统上,安装 Cloud-init 包。如果你使用的是 Fedora:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Install the cloud-init package
dnf install -y cloud-init

Cloud-init 实际上是四个不同的服务(至少在 systemd 下是这样),这些服务负责检索配置数据,并在启动过程的不同阶段进行配置更改,这使得可以做的事情更加灵活。虽然你不太可能直接与这些服务进行太多交互,但在你需要排除一些故障时,知道它们是什么还是很有用的。它们是:

  • cloud-init-local.service
  • cloud-init.service
  • cloud-config.service
  • cloud-final.service

启用所有四个服务:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Enable the four cloud-init services
systemctl enable cloud-init-local.service
systemctl enable cloud-init.service
systemctl enable cloud-config.service
systemctl enable cloud-final.service

配置数据源以查询

启用服务后,请配置数据源,客户端将从该数据源查询配置数据。有许多数据源类型,而且大多数都是为特定的云提供商配置的。对于你的家庭实验室,请使用 NoCloud 数据源,(如上所述)它是为在没有云提供商的情况下使用 Cloud-init 而设计的。

NoCloud 允许以多种方式包含配置信息:以内核参数中的键/值对,用于在启动时挂载的 CD(或虚拟机中的虚拟 CD);包含在文件系统中的文件中;或者像本例中一样,通过 HTTP 从指定的 URL(“NoCloud Net” 选项)获取配置信息。

数据源配置可以通过内核参数提供,也可以在 Cloud-init 配置文件 /etc/cloud/cloud.cfg 中进行设置。该配置文件对于使用自定义磁盘镜像设置 Cloud-init 或在现有主机上进行测试非常方便。

Cloud-init 还会合并在 /etc/cloud/cloud.cfg.d/ 中找到的任何 *.cfg 文件中的配置数据,因此为了保持整洁,请在 /etc/cloud/cloud.cfg.d/10_datasource.cfg 中配置数据源。Cloud-init 可以通过使用以下语法从 seedfrom 键指向的 HTTP 数据源中读取数据。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
seedfrom: http://ip_address:port/

IP 地址和端口是你将在本文后面创建的 Web 服务。我使用了我的笔记本电脑的 IP 和 8080 端口。这也可以是 DNS 名称。

创建 /etc/cloud/cloud.cfg.d/10_datasource.cfg 文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Add the datasource:
# /etc/cloud/cloud.cfg.d/10_datasource.cfg

# NOTE THE TRAILING SLASH HERE!
datasource:
  NoCloud:
    seedfrom: http://ip_address:port/

客户端设置就是这样。现在,重新启动客户端后,它将尝试从你在 seedfrom 键中输入的 URL 检索配置数据,并进行必要的任何配置更改。

下一步是设置一个 Web 服务器来侦听客户端请求,以便你确定需要提供的服务。

设置网络服务器以审查客户请求

你可以使用 Podman 或其他容器编排工具(如 DockerKubernetes)快速创建和运行 Web 服务器。这个例子使用的是 Podman,但同样的命令也适用于 Docker。

要开始,请使用 fedora:31 容器镜像并创建一个容器文件(对于 Docker 来说,这会是一个 Dockerfile)来安装和配置 Nginx。从该容器文件中,你可以构建一个自定义镜像,并在你希望提供 Cloud-init 服务的主机上运行它。

创建一个包含以下内容的容器文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FROM fedora:31

ENV NGINX_CONF_DIR "/etc/nginx/default.d"
ENV NGINX_LOG_DIR "/var/log/nginx"
ENV NGINX_CONF "/etc/nginx/nginx.conf"
ENV WWW_DIR "/usr/share/nginx/html"

# Install Nginx and clear the yum cache
RUN dnf install -y nginx \
      && dnf clean all \
      && rm -rf /var/cache/yum

# forward request and error logs to docker log collector
RUN ln -sf /dev/stdout ${NGINX_LOG_DIR}/access.log \
    && ln -sf /dev/stderr ${NGINX_LOG_DIR}/error.log

# Listen on port 8080, so root privileges are not required for podman
RUN sed -i -E 's/(listen)([[:space:]]*)(\[\:\:\]\:)?80;$/\1\2\38080 default_server;/' $NGINX_CONF
EXPOSE 8080

# Allow Nginx PID to be managed by non-root user
RUN sed -i '/user nginx;/d' $NGINX_CONF
RUN sed -i 's/pid \/run\/nginx.pid;/pid \/tmp\/nginx.pid;/' $NGINX_CONF

# Run as an unprivileged user
USER 1001

CMD ["nginx", "-g", "daemon off;"]

注:本例中使用的容器文件和其他文件可以在本项目的 GitHub 仓库中找到。

上面容器文件中最重要的部分是改变日志存储方式的部分(写到 STDOUT 而不是文件),这样你就可以在容器日志中看到进入该服务器的请求。其他的一些改变使你可以在没有 root 权限的情况下使用 Podman 运行容器,也可以在没有 root 权限的情况下运行容器中的进程。

在 Web 服务器上的第一个测试并不提供任何 Cloud-init 数据;只是用它来查看 Cloud-init 客户端的请求。

创建容器文件后,使用 Podman 构建并运行 Web 服务器镜像:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Build the container image
$ podman build -f Containerfile -t cloud-init:01 .

# Create a container from the new image, and run it
# It will listen on port 8080
$ podman run --rm -p 8080:8080 -it cloud-init:01

这会运行一个容器,让你的终端连接到一个伪 TTY。一开始看起来什么都没有发生,但是对主机 8080 端口的请求会被路由到容器内的 Nginx 服务器,并且在终端窗口中会出现一条日志信息。这一点可以用主机上的 curl 命令进行测试。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Use curl to send an HTTP request to the Nginx container
$ curl http://localhost:8080

运行该 curl 命令后,你应该会在终端窗口中看到类似这样的日志信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
127.0.0.1 - - [09/May/2020:19:25:10 +0000] "GET / HTTP/1.1" 200 5564 "-" "curl/7.66.0" "-"

现在,有趣的部分来了:重启 Cloud-init 客户端,并观察 Nginx 日志,看看当客户端启动时, Cloud-init 向 Web 服务器发出了什么请求。

当客户端完成其启动过程时,你应该会看到类似的日志消息。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
2020/05/09 22:44:28 [error] 2#0: *4 open() "/usr/share/nginx/html/meta-data" failed (2: No such file or directory), client: 127.0.0.1, server: _, request: "GET /meta-data HTTP/1.1", host: "instance-data:8080"
127.0.0.1 - - [09/May/2020:22:44:28 +0000] "GET /meta-data HTTP/1.1" 404 3650 "-" "Cloud-Init/17.1" "-"

注:使用 Ctrl+C 停止正在运行的容器。

你可以看到请求是针对 /meta-data 路径的,即 http://ip_address_of_the_webserver:8080/meta-data。这只是一个 GET 请求 —— Cloud-init 并没有向 Web 服务器发送任何数据。它只是盲目地从数据源 URL 中请求文件,所以要由数据源来识别主机的要求。这个简单的例子只是向任何客户端发送通用数据,但一个更大的家庭实验室应该需要更复杂的服务。

在这里,Cloud-init 请求的是实例元数据信息。这个文件可以包含很多关于实例本身的信息,例如实例 ID、分配实例的主机名、云 ID,甚至网络信息。

创建一个包含实例 ID 和主机名的基本元数据文件,并尝试将其提供给 Cloud-init 客户端。

首先,创建一个可复制到容器镜像中的 meta-data 文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
instance-id: iid-local01
local-hostname: raspberry
hostname: raspberry

实例 ID(instance-id)可以是任何东西。但是,如果你在 Cloud-init 运行后更改实例 ID,并且文件被送达客户端,就会触发 Cloud-init 再次运行。你可以使用这种机制来更新实例配置,但你应该意识到它是这种工作方式。

local-hostnamehostname 键正如其名,它们会在 Cloud-init 运行时为客户端设置主机名信息。

在容器文件中添加以下行以将 meta-data 文件复制到新镜像中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Copy the meta-data file into the image for Nginx to serve it
COPY meta-data ${WWW_DIR}/meta-data

现在,用元数据文件重建镜像(使用一个新的标签以方便故障排除),并用 Podman 创建并运行一个新的容器。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Build a new image named cloud-init:02
podman build -f Containerfile -t cloud-init:02 .

# Run a new container with this new meta-data file
podman run --rm -p 8080:8080 -it cloud-init:02

新容器运行后,重启 Cloud-init 客户端,再次观察 Nginx 日志。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
127.0.0.1 - - [09/May/2020:22:54:32 +0000] "GET /meta-data HTTP/1.1" 200 63 "-" "Cloud-Init/17.1" "-"
2020/05/09 22:54:32 [error] 2#0: *2 open() "/usr/share/nginx/html/user-data" failed (2: No such file or directory), client: 127.0.0.1, server: _, request: "GET /user-data HTTP/1.1", host: "instance-data:8080"
127.0.0.1 - - [09/May/2020:22:54:32 +0000] "GET /user-data HTTP/1.1" 404 3650 "-" "Cloud-Init/17.1" "-"

你看,这次 /meta-data 路径被提供给了客户端。成功了!

然而,客户端接着在 /user-data 路径上寻找第二个文件。该文件包含实例所有者提供的配置数据,而不是来自云提供商的数据。对于一个家庭实验室来说,这两个都是你自己提供的。

你可以使用许多 user-data 模块来配置你的实例。对于这个例子,只需使用 write_files 模块在客户端创建一些测试文件,并验证 Cloud-init 是否工作。

创建一个包含以下内容的用户数据文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#cloud-config

# Create two files with example content using the write_files module
write_files:
 - content: |
    "Does cloud-init work?"
   owner: root:root
   permissions: '0644'
   path: /srv/foo
 - content: |
   "IT SURE DOES!"
   owner: root:root
   permissions: '0644'
   path: /srv/bar

除了使用 Cloud-init 提供的 user-data 模块制作 YAML 文件外,你还可以将其制作成一个可执行脚本供 Cloud-init 运行。

创建 user-data 文件后,在容器文件中添加以下行,以便在重建映像时将其复制到镜像中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Copy the user-data file into the container image
COPY user-data ${WWW_DIR}/user-data

重建镜像,并创建和运行一个新的容器,这次使用用户数据信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Build a new image named cloud-init:03
podman build -f Containerfile -t cloud-init:03 .

# Run a new container with this new user-data file
podman run --rm -p 8080:8080 -it cloud-init:03

现在,重启 Cloud-init 客户端,观察 Web 服务器上的 Nginx 日志:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
127.0.0.1 - - [09/May/2020:23:01:51 +0000] "GET /meta-data HTTP/1.1" 200 63 "-" "Cloud-Init/17.1" "-"
127.0.0.1 - - [09/May/2020:23:01:51 +0000] "GET /user-data HTTP/1.1" 200 298 "-" "Cloud-Init/17.1" "-

成功了!这一次,元数据和用户数据文件都被送到了 Cloud-init 客户端。

验证 Cloud-init 已运行

从上面的日志中,你知道 Cloud-init 在客户端主机上运行并请求元数据和用户数据文件,但它用它们做了什么?你可以在 write_files 部分验证 Cloud-init 是否写入了你在用户数据文件中添加的文件。

在 Cloud-init 客户端上,检查 /srv/foo/srv/bar 文件的内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# cd /srv/ && ls
bar foo
# cat foo
"Does cloud-init work?"
# cat bar
"IT SURE DOES!"

成功了!文件已经写好了,并且有你期望的内容。

如上所述,还有很多其他模块可以用来配置主机。例如,用户数据文件可以配置成用 apt 添加包、复制 SSH 的 authorized_keys、创建用户和组、配置和运行配置管理工具等等。我在家里的私有云中使用它来复制我的 authorized_keys、创建一个本地用户和组,并设置 sudo 权限。

你接下来可以做什么

Cloud-init 在家庭实验室中很有用,尤其是专注于云技术的实验室。本文所演示的简单服务对于家庭实验室来说可能并不是超级有用,但现在你已经知道 Cloud-init 是如何工作的了,你可以继续创建一个动态服务,可以用自定义数据配置每台主机,让家里的私有云更类似于主流云提供商提供的服务。

在数据源稍显复杂的情况下,将新的物理(或虚拟)机器添加到家中的私有云中,可以像插入它们并打开它们一样简单。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
在本地KVM中安装使用Cloud-init
Cloud-init是一个Linux虚拟机的初始化工具,被广泛应用在AWS和OpenStack等云平台中,用于在新建的虚拟机中进行时间设置、密码设置、扩展分区、安装软件包等初始化设置。本文主要研究在本地KVM虚拟机,也就是没有云平台的情况下,如何使用cloud-init进行初始化工作。示例虚拟机的操作系统是CentOS 7.1。
星哥玩云
2022/07/13
1.8K0
云实例初始化的行业标准:Cloud-Init
Cloud-Init1 是跨平台云实例初始化的行业标准。它得到了所有主要公共云提供商的支持,适用于私有云基础设施的配置系统以及裸机安装。Cloud-Init 将在启动时识别其运行所在的云环境,读取来自云端提供的任何元数据,并据此初始化系统。这可能涉及设置网络和存储设备,配置 SSH 访问密钥以及系统的许多其他方面。之后,Cloud-Init 还将解析并处理传递给该实例的任何可选用户或供应商数据。在你想要创建自定义的 Linux 部署镜像时或者每次部署一个新的 Linux 服务器时,有很多事情需要初始化并且进行自动化处理。Cloud-Init 可以帮助我们实现这些自动化任务。
用户10807116
2024/06/06
3010
OpenStack实践(十):Cloud Init+Config Drive定制实例
openstack安装详见:OpenStack实践(一):Ubuntu16.04下DevStack方式搭建p版OpenStack
loong576
2019/09/10
5.8K0
OpenStack实践(十):Cloud Init+Config Drive定制实例
kvm-初始化cloud-init(二)
作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
运维小路
2024/11/08
1910
kvm-初始化cloud-init(二)
16-cloud-init
cloud-init是linux的一个工具,当云主机启动系统,cloud-init可从nova metadata服务或者config drive中获取metadata,用于初始化云主机的操作。
小朋友呢
2020/01/07
2.9K0
玩转CVM之Cloud-Init排障
Cloud-Init 是一个纯开源的工具,它是虚拟机内部的一个服务,在开机启动的时候会被执行,非常驻服务,执行完就会退出。腾讯云的 Linux 公有镜像都预安装了 Cloud-Init 服务,主要用于实现对 CVM 实例的初始化操作,以及执行一些用户在创建 CVM 实例的时候指定首次开机启动要执行的自定义脚本。
苏欣
2019/07/16
6.7K0
KubeVirt macvtap虚拟机创建过程 手动实验
MACVTAP 的实现基于传统的 MACVLAN。该实验中会起两个libvirt容器,一个作为客户端去测试连接虚拟机,也就是左边这个。右边会在容器中起虚拟机,容器的eth0做一个macvtap给虚拟机用,macvtap0会把收到的包都发给虚拟机的eth0
后端云
2022/06/09
1.7K0
KubeVirt macvtap虚拟机创建过程 手动实验
Cloud-init 概述及 PVE 下创建步骤说明
Cloud-init 是一个程序,它在启动时在客户机上运行,是用于 跨平台云实例初始化 的行业标准多分发方法。它支持所有主要的 公共云提供商、私有云基础设施的供应系统和裸机安装。
宋天伦
2023/10/18
2.5K0
virtlet是什么?virtlet如何管理虚拟机?
随着Docker和Kubernetes生态圈的发展,云计算领域对容器的兴趣达到了狂热的程度。容器技术为应用程序提供了隔离的运行空间,每个容器内都包含一个独享的完整用户环境空间,容器内的变动不会影响其他容器的运行环境。因为容器之间共享同一个系统内核,当同一个库被多个容器使用时,内存的使用效率会得到提升。基于物理主机操作系统内核的,那就意味着对于不同内核或者操作系统需求的应用是不可能部署在一起的。
谐云
2021/08/18
9170
virtlet是什么?virtlet如何管理虚拟机?
kvm-初始化cloud-init(一)
虚拟化,简单来说就是把一台服务器/PC电脑,虚拟成多台独立的虚拟机,每台虚拟机之间相互隔离,每个虚拟机都有自己独立的操作系统,磁盘,网络资源。虚拟化是一个很庞大的系统,我的介绍主要是帮助你入门,让你了解基本技术原理,具备搭建操作虚拟化的能力。由于涉及到内容较多,这里的目录就只是以简单分类介绍和说明,不再针对单个小节进行目录列出,主要涉及的分类包括以下几个方面:
运维小路
2024/11/07
1720
kvm-初始化cloud-init(一)
KVM--cloud-init 初始化虚拟机(十三)
cloud-init是云平台为Linux操作系统的虚拟机做系统初始化配置的开源服务软件。阿里云、AWS、Azure和OpenStack等主流云平台均支持cloud-init。cloud-init系统启动阶段完成系统初始化配置。包括但不限于下面的定制化工作
Kevin song
2022/11/19
2.2K0
蓝军技巧之SSRF利用方法
SSRF漏洞在互联网公司中应该是除了越权之外最普遍的漏洞了。关于漏洞的原理,绕过,传统的扫端口、各种探测等利用方式等就不再赘述,这里分享下自己作为企业蓝军中常用的一些SSRF的利用途径。
瓦都剋
2022/03/30
2.3K0
再见了 VMware,一款更轻量级的虚拟机!
Multipass是一个轻量虚拟机管理器,是由 Ubuntu 运营公司 Canonical 所推出的开源项目。运行环境支持 Linux、Windows、macOS。在不同的操作系统上,使用的是不同的虚拟化技术。在 Linux 上使用的是 KVM、Window 上使用 Hyper-V、macOS 中使用 HyperKit 以最小开销运行VM,支持在笔记本模拟小型云。
终码一生
2022/04/15
1.3K0
再见了 VMware,一款更轻量级的虚拟机!
非云环境中Kubernetes的配置和运行:技术栈
本文将详细介绍相关技术栈的构成组件,包括 HAProxy、Corosync、Pacemaker、dnsmasq、cloud-init、LVM、Gluster、Docker 等概念。
深度学习与Python
2020/09/28
7520
非云环境中Kubernetes的配置和运行:技术栈
在DigitalOcean的服务器上用官方Kali镜像构建系统
DigitalOcean是一家类似于AWS,Microsoft Azure,Google Cloud Platform等的云提供商。他们提供不同的Linux发行版实例,这些实例被称之为“droplets”。与AWS类似,DigitalOcean在世界各地都有数据中心,甚至在有的国家拥有多个数据中心。
FB客服
2019/07/29
1.7K0
教你快速搭建Docker私有仓库
Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境内的Registry也是非常必要的。Harbor
ruochen
2021/11/21
5840
PVE Cloud-INIT 模板配置
Cloud-init是开源的云初始化程序,能够对新创建弹性云服务器中指定的自定义信息(主机名、密钥和用户数据等)进行初始化配置。通过Cloud-init进行弹性云服务器的初始化配置,将对您使用弹性云服务器、镜像服务和弹性伸缩产生影响。简单地讲,cloud-init是一个Linux虚拟机的初始化工具,被广泛应用在AWS和OpenStack等云平台中,用于在新建的虚拟机中进行时间设置、密码设置、扩展分区、安装软件包等初始化设置。
小陈运维
2023/04/06
1.5K0
NextCloud私有云盘安装部署记录
描述:由于个人家里的NAS以及公司团队对私有网盘的进行日常工作文件同步以及协同办公的需求,所以有了这篇文章,讲解记录从选项到安装以及同步使用等相关操作;
全栈工程师修炼指南
2022/09/29
26.1K0
NextCloud私有云盘安装部署记录
CentOS安装Docker
Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月),EE 即企业版,强调安全,付费使用,支持周期 24 个月。
不吃紫菜
2023/02/13
8.6K0
CentOS安装Docker
网站-全套服务-从0到1
onephone 作者:史文峰(richiewfshi)腾讯工程师,现主要从事大数据研发和后台开发,喜欢捣鼓技术、动漫、跑马。 01. 这样开始的... 朋友“搞事情”,自己有偿帮忙搭了一套线上服务,包括官网、小程序后台、文档集站点、个人博客站点等。 初期,流量小,节约资金,一切从简,后期,流量大了,再考虑扩容或迁移服务(目前完全能 hold 住)。 基于一台腾讯云服务器搭建了全套服务,站点均在同一个二级域名下。 依赖的服务 1、腾讯云服务 云服务器 CVM 对象存储 COS 网站备案 域名管理,SS
腾讯云DNSPod团队
2020/06/28
1.3K0
相关推荐
在本地KVM中安装使用Cloud-init
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验