云环境下Linux部署与管理全解析
1. 为云部署创建LXD Linux镜像
在手动安装Linux系统时,我们会设置root密码、创建普通用户账户和密码、定义网络接口等,这些信息会成为操作系统的永久部分。而使用预构建的云镜像作为Linux系统时,可借助cloud-init来创建可运行的Linux系统。cloud-init(www.cloud-init.io)能让通用虚拟机实例按我们的需求运行,无需冗长的安装过程。
我们可以手动创建一些用户数据,并将其与可引导的Linux云镜像结合。在镜像启动时,它会根据我们的数据进行配置。这种在运行时结合数据的方式,能让我们在每次启动前按需修改镜像,而非将数据永久嵌入镜像本身。建议将此过程作为LXD容器运行,与之前创建容器的方式类似,但这里会使用cloud-init脚本来定义容器的状态。
2. 使用LXD配置文件
新LXD容器的许多环境设置来自默认配置文件,但我们并不局限于此。可以使用cloud-init文档定义一个全新的配置文件,并将其导入新配置文件。
首先查看LXD机器上已有的配置文件:
# lxc profile list
+---------+---------+
| NAME | USED BY |
+---------+---------+
| default | 1 |
+---------+---------+
使用
lxc profile show
命令以YAML语法显示默认配置文件的详细信息:
# lxc profile show default
description: Default LXD profile
devices:
eth0:
name: eth0
nictype: bridged
parent: lxdbr0
type: nic
root:
path: /
pool: pool1
type: disk
name: default
used_by:
- /1.0/containers/base
- /1.0/containers/debian
- /1.0/containers/opensuse
- /1.0/containers/ansible1
- /1.0/containers/centos8
- /1.0/containers/packages
- /1.0/containers/wordpress
- /1.0/containers/cf2
- /1.0/containers/twenty
由于直接编辑默认配置文件可能会给现有容器带来问题,我们可以复制默认配置文件并进行修改:
# lxc profile copy default mytest
将新配置文件的设置导出为YAML文件:
# lxc profile show mytest > lxd-profile-mytest.yaml
使用喜欢的文本编辑器编辑该文件,要注意cloud-init和LXD对YAML语法要求严格,建议使用在线YAML语法验证器。以下是新配置文件的示例:
config:
environment.TZ: ""
user.user-data: |
#cloud-config
package_upgrade: true
packages:
- apache2
locale: en_CA.UTF-8
timezone: America/Toronto
runcmd:
- [wget, "https://bootstrap-it.com", -O, /var/www/html/index.html]
- [touch, /home/ubuntu/stuff]
description: New default LXD profile
devices:
eth0:
name: eth0
network: lxdbr0
type: nic
root:
path: /
pool: default
type: disk
name: devprofile
used_by: []
该配置文件中的
config
部分包含用户数据,会在容器启动时升级已安装的软件包、安装Apache、设置区域和时区,并运行两个命令。第一个命令会下载
www.bootstrap-it.com
的
index.html
文件并保存到
/var/www/html/
目录,第二个命令会在
ubuntu
用户的主目录下创建一个空文件。
使用新的配置文件覆盖LXD中现有的配置文件:
# lxc profile edit mytest < lxd-profile-mytest.yaml
可以使用
lxc profile show mytest
命令确认LXD是否正确读取了配置文件。
假设一切顺利,就可以使用新配置文件启动新容器:
# lxc launch --profile mytest ubuntu:20.04 mytest
使用
exec
命令在容器中打开新的shell会话:
# lxc exec mytest /bin/bash
启动容器后,需要等待几分钟让所有更改生效。可以检查
/var/www/html/index.html
文件的内容是否与源网站匹配,以及
/home/ubuntu/stuff
文件是否存在。如果出现问题,可以查看
/var/log/cloud-init-output.log
文件获取详细信息。
3. 使用LXD镜像
当拥有理想的cloud-init文档后,只需复制该文档并在不同平台上调用,就可以在任何地方部署相同的容器,这些平台可以是数据中心的服务器或私有云。
也可以导出镜像本身。首先列出系统上的所有镜像以显示其指纹:
# lxc image list
使用镜像指纹输出镜像的环境信息:
# lxc image info a740503f4fc2
Fingerprint:
a740503f4fc298cfce3975c4538c85963e478d0e8bf0efa827a21e0ecc8e86df
Size: 443.98MB
Architecture: x86_64
Type: container
Public: yes
Timestamps:
Uploaded: 2020/05/04 15:39 UTC
Expires: never
Last used: never
Properties:
Aliases:
Cached: no
Auto update: disabled
Profiles:
- default
使用
image export
命令将镜像导出为tar归档文件:
# lxc image export a740503f4fc2 newimage
将导出的镜像复制到远程LXD服务器并导入其镜像集合:
# lxc image import newimage.tar.gz
需要注意的是,LXD容器不能导出为非LXD镜像格式,如Open Virtualization Format (OVF) 或ISO镜像。若需要此类格式,可使用其他虚拟化平台,如Oracle的VirtualBox、OpenStack或公共云提供商(如Amazon Web Services)。
4. 使用OpenStack部署云镜像
OpenStack是一个不断发展的平台,可用于管理物理云计算基础设施及其上运行的虚拟系统,支持部署私有云或公共云。尝试使用OpenStack有以下几种方式:
-
Linux发行版
:Ubuntu等发行版提供免费的OpenStack版本,可自行部署。Ubuntu版本的相关信息可在www.ubuntu.com/openstack查询。设置较为复杂,需要至少16GB内存的强大服务器。部分一体化设置可在单台机器上运行,但建议使用三台物理机器:一个控制节点和两个虚拟机管理程序。
-
公共OpenStack云
:在各种公共OpenStack云上试用很方便,成本也不高。公共OpenStack云列表可在OpenStack项目网站(www.openstack.org/marketplace/public-clouds/)获取。
-
托管解决方案
:像Canonical这样的大型服务提供商可以根据特定需求构建OpenStack解决方案,类似于专业的AWS云。
OpenStack将其服务分解为几十个独立的模块,管理员只需安装组织所需的模块。以下是一些常见模块及其简要说明:
| 模块名称 | 描述 |
| — | — |
| Horizon(控制台) | 提供基于浏览器的界面,管理员和用户可通过该界面直观管理OpenStack部署所需的所有操作。控制台可扩展且高度可定制。此外,OpenStack还可通过功能齐全的命令行界面客户端OpenStackClient进行管理,其命令语法与类似平台(如AWS CLI)相似。完整的CLI文档可在docs.openstack.org/python-openstackclient/latest/cli/command-list.html查看。 |
| Nova(计算) | 虚拟机通常被视为云部署的核心,Nova用于定义、配置、启动和控制虚拟机的整个生命周期。但Nova的运行依赖于多个外部资源,如Keystone的身份服务、Glance的镜像管理、Neutron的网络工具以及Placement API服务的资源关系跟踪。 |
| Neutron(网络) | 虚拟网络使用软件复制复杂且高效的物理网络,Neutron负责保持OpenStack基础设施的连接和高效运行。它允许定义OpenStack资源和外部用户访问基础设施的方式,还包含许多传统网络功能,如动态主机配置协议(DHCP)、浮动IP地址、负载均衡、虚拟专用网络(VPN)和入侵检测系统。 |
| Cinder(块存储) | 服务器需要附加存储驱动器才能运行操作系统,Cinder管理大型物理块存储设备,划分出较小的虚拟驱动器以支持多个虚拟机。为使虚拟系统正常运行,块存储管理需要高可用性、容错性,并与尽可能多的物理存储平台兼容。 |
| Keystone(身份) | 当多个基于不同框架的组件运行时,特别是为本地安全网络内外的用户提供服务时,需要一种方式来验证和授权访问。Keystone使用凭据控制谁可以访问每个OpenStack资源以及访问后可以执行的操作。 |
| Glance(镜像) | 虚拟机使用的基础操作系统堆栈称为镜像,通常通过某种元数据进行标识。OpenStack实例上的镜像通过Glance进行管理。 |
| Swift(对象存储) | 块存储用于组织物理和虚拟驱动器上的数据,而对象存储适用于不需要按此方式组织的数据。对象存储服务提供灵活性和高速读写能力,OpenStack的Swift支持快速分布式对象存储,可扩展并提供高并发访问,特别适用于非结构化数据集(如NoSQL数据库)。 |
5. 使用Amazon EC2部署云镜像
Amazon Web Services (AWS) 平台在全球市场占据主导地位,几乎成为云计算的代名词。虽然还有其他公共云平台(如Microsoft的Azure)和开源云基础设施平台(如OpenStack),但很难与AWS不断推出的服务升级、新服务和全新云计算模型相竞争。
好消息是,在Amazon的弹性云计算EC2服务上启动的实例中,超过90%运行Linux,其中超过三分之一由Ubuntu提供支持。Ubuntu在Microsoft的Azure云上也有很强的影响力,超过一半的虚拟机基于Linux。
公共云受欢迎的原因在于其可管理的可扩展性。AWS抽象了其庞大服务器基础设施的硬件、安全和网络管理,根据用户需求提供所需的基础设施资源:
- 若要启动一个电子商务网站,根据需求动态调整服务器数量,部署在安全组和负载均衡器之后,并使用异地复制数据库,EC2(和Amazon的关系数据库服务)可以提供所需的精确资源。
- 若只需临时搭建一个店面服务器来处理库存,EC2可以按天出租,费用只需几美元。
- 若需要在不可预测的时间进行几秒钟的计算,AWS Lambda函数可以自动启动EC2服务器,使用完毕后自动关闭,成本通常只需几美分。
下面介绍如何使用活跃的AWS账户启动Ubuntu实例,并在启动过程中安装与之前LXD中相同的Apache Web服务器软件。
虽然可以通过基于浏览器的AWS管理控制台完成所有操作,但使用AWS CLI是更好的选择,原因如下:
- 管理控制台的设计经常变化,书中描述的操作步骤可能很快过时,容易导致混淆。
- 管理控制台适合熟悉AWS服务的工作原理,但对于实际工作负载来说不是最佳工具,点击操作繁琐。尽早熟悉AWS CLI可以提高工作效率。
- GUI工具不太符合Linux的使用习惯。
6. 安装AWS CLI
如果尚未在本地Ubuntu机器上安装AWS CLI,可以参考Amazon的文档(docs.aws.amazon.com/cli/latest/userguide/install-cliv2-linux.html)进行安装。假设没有安装旧版本的CLI,安装步骤如下:
$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
$ unzip awscliv2.zip
# ./aws/install
curl
命令从互联网下载最新版本的Linux CLI并保存为
awscliv2.zip
文件,
unzip
命令解压该文件,最后执行安装脚本。
安装完成后,可以使用
aws --version
命令确认安装是否成功,然后使用
aws configure
命令输入安全凭证,以便CLI可以连接到AWS账户资源。需要访问管理控制台,从控制台顶部的下拉菜单中选择“My Security Credentials”。
configure
脚本还会询问首选的默认区域,本文示例使用
us-east-1
区域。最后,会询问命令输出的首选格式,可使用默认设置。
使用以下命令快速测试配置是否成功:
$ aws s3 ls
2019-11-03 13:16:59 athena5605
2014-07-01 18:52:32 elasticbeanstalk-ap-northeast-1-446497495012
2014-08-28 16:57:49 elasticbeanstalk-us-east-1-486497493272
2019-05-04 22:17:50 ltest235
2019-03-31 17:46:40 nextcloud3228
即使当前账户中没有S3存储桶,也可以确认连接是否成功。
云环境下Linux部署与管理全解析
7. 启动EC2实例并安装Apache
在成功安装并配置好AWS CLI后,我们就可以着手启动EC2实例并安装Apache服务器了。以下是详细的操作步骤:
7.1 创建安全组
安全组用于控制进出EC2实例的网络流量。我们需要创建一个安全组,允许HTTP(端口80)和SSH(端口22)流量。
# 创建安全组
$ aws ec2 create-security-group --group-name my-ec2-sg --description "Security group for EC2 instance"
# 允许SSH流量(端口22)
$ aws ec2 authorize-security-group-ingress --group-name my-ec2-sg --protocol tcp --port 22 --cidr 0.0.0.0/0
# 允许HTTP流量(端口80)
$ aws ec2 authorize-security-group-ingress --group-name my-ec2-sg --protocol tcp --port 80 --cidr 0.0.0.0/0
7.2 查找Ubuntu AMI
AMI(Amazon Machine Image)是用于启动EC2实例的模板。我们需要查找合适的Ubuntu AMI。
# 查找Ubuntu 20.04 AMI
$ aws ec2 describe-images --owners 099720109477 --filters "Name=name,Values=ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-*" --query 'Images[*].[ImageId]' --output text
7.3 启动EC2实例
使用找到的AMI和创建的安全组启动EC2实例。
# 启动EC2实例
$ aws ec2 run-instances --image-id <AMI-ID> --count 1 --instance-type t2.micro --key-name <YOUR-KEY-PAIR> --security-groups my-ec2-sg
请将
<AMI-ID>
替换为上一步中找到的Ubuntu AMI ID,将
<YOUR-KEY-PAIR>
替换为你自己的密钥对名称。
7.4 连接到EC2实例
使用SSH连接到启动的EC2实例。
$ ssh -i <YOUR-KEY-PAIR>.pem ubuntu@<PUBLIC-IP>
请将
<YOUR-KEY-PAIR>.pem
替换为你的密钥对文件,将
<PUBLIC-IP>
替换为EC2实例的公共IP地址。
7.5 安装Apache
在连接到EC2实例后,安装Apache服务器。
# 更新软件包列表
$ sudo apt update
# 安装Apache
$ sudo apt install -y apache2
7.6 验证Apache安装
安装完成后,通过浏览器访问EC2实例的公共IP地址,如果看到Apache的默认页面,则说明安装成功。
8. 云部署的总结与建议
通过前面的介绍,我们了解了如何使用LXD、OpenStack和AWS EC2进行云部署。以下是一些总结和建议:
- LXD :适合在本地环境中快速创建和管理容器,结合cloud-init可以方便地定制容器的配置。
- OpenStack :适用于构建自己的私有云或公共云,提供了丰富的服务模块,但安装和配置较为复杂。
- AWS EC2 :全球市场占有率高,提供了强大的可扩展性和丰富的服务,适合大规模的云部署。
在选择云部署方案时,需要根据自己的需求和技术能力进行综合考虑。如果是初学者,建议先从LXD开始,熟悉容器的创建和管理;如果需要构建自己的云基础设施,可以尝试OpenStack;如果追求简单和高效的云服务,AWS EC2是一个不错的选择。
9. 云部署的未来趋势
随着云计算技术的不断发展,云部署也呈现出一些新的趋势:
- 混合云 :将公有云和私有云结合使用,充分发挥两者的优势,满足不同的业务需求。
- 容器编排 :如Kubernetes等容器编排工具的使用越来越广泛,能够更高效地管理大规模的容器集群。
- 无服务器计算 :像AWS Lambda这样的无服务器计算服务,让开发者无需管理服务器,只需关注业务逻辑,降低了开发和运维成本。
以下是云部署未来趋势的mermaid流程图:
graph LR
A[云部署] --> B[混合云]
A --> C[容器编排]
A --> D[无服务器计算]
总之,云部署是一个不断发展和变化的领域,我们需要持续学习和关注新技术,以适应不断变化的市场需求。通过合理选择云部署方案和利用新兴技术,我们可以更高效地构建和管理云计算环境。
超级会员免费看
4

被折叠的 条评论
为什么被折叠?



