Google Cloud 虚拟机器与 Kubernetes 集群使用指南

1. 虚拟机器登录安全:两步验证

1.1 问题

希望通过两步验证过程来保护虚拟机操作系统的登录安全。

1.2 解决方案

计算引擎支持通过两步验证过程来保护虚拟机登录。以下是具体步骤:
1. 确保在计算引擎上运行一个 Linux 虚拟机。
2. 在网页浏览器中为你的 Google 账户启用两步验证。
3. 登录 Google 云控制台。
4. 在主菜单中,导航到“计算”并点击“计算引擎”。
5. 从菜单中选择“虚拟机实例”,并选择要启用两步验证的实例。
6. 点击“编辑”。
7. 在“自定义元数据”部分,添加以下键值对:

enable-oslogin: TRUE
enable-oslogin-2fa: TRUE
  1. 点击“保存”。
  2. 为要授予虚拟机访问权限的用户账户添加“计算操作系统管理员登录”或“计算操作系统登录”角色。
  3. 使用云 SSH 浏览器连接到实例。
  4. 此时会提示进行两步验证。
  5. 做出选择后,会收到一个代码,将其输入到两步验证中。
  6. 验证完成后,即可访问 Linux 虚拟机。

1.3 讨论

通过实施两步验证,进一步加强了对 Google 云中运行的虚拟机的访问安全。启用两步验证后,需要访问实例的用户必须输入代码或使用其他物理密钥方法才能访问实例。该两步验证过程在 Google 账户上设置。

2. 运行启动脚本安装 NGINX

2.1 问题

想在云中安装 NGINX 网络服务器,并能够多次复制此过程以部署更多实例。

2.2 解决方案

使用 Google 云控制台在 Google 云计算引擎上创建一个 Linux 虚拟机,并创建一个启动脚本来自动安装 NGINX,以便快速部署更多实例。具体步骤如下:
1. 登录 Google 云控制台。
2. 在主菜单中,导航到“计算”并点击“计算引擎”。
3. 从菜单中选择“虚拟机实例”,然后点击“创建”。
4. 为实例选择一个名称。
5. 选择此虚拟机的托管区域和可用区。
6. 选择机器配置或根据需求进行自定义。
7. 将启动磁盘设置为 Debian GNU/Linux 10 (buster)。
8. 选择允许 HTTP 流量访问实例。
9. 在“启动脚本”文本输入框中,输入以下命令:

#! /bin/bash 
apt-get update 
apt-get install -y nginx 
service nginx start 
sed -i -- 's/nginx/Google Cloud Cookbook - '"$HOSTNAME"'/' 
/var/www/html/index.nginx-debian.html
  1. 点击“创建”。
  2. 实例创建完成并设置公共 IP 地址后,在互联网浏览器中打开该实例的公共 IP 地址,即可看到 NGINX 运行界面。

2.3 讨论

计算引擎允许为虚拟机创建启动和关闭脚本。通过此方法,可以使用启动脚本来自动安装软件,从而实现大量 Web 服务器的自动化部署。

3. 使用托管实例组创建 NGINX Web 服务器组

3.1 问题

需要使用 NGINX 托管一个高可用性的 Web 服务器,当一台服务器出现故障时,Web 应用程序要能够容忍主机故障。

3.2 解决方案

使用托管实例组(MIGs)在 Google 云计算引擎上创建一组 Linux 虚拟机,并创建网络负载均衡器来在虚拟机之间分配流量。具体步骤如下:
1. 登录 Google 云控制台并启动云 Shell。
2. 在云 Shell 中,创建一个名为 nginx-startup.sh 的启动脚本,内容如下:

#! /bin/bash 
apt-get update 
apt-get install -y nginx 
service nginx start 
sed -i -- 's/nginx/Google Cloud Cookbook - '"$HOSTNAME"'/' 
/var/www/html/index.nginx-debian.html
  1. 使用 gCloud 命令创建一个新的实例模板,并将启动脚本参数定义为步骤 2 中创建的文件:
gcloud compute instance-templates create nginx-template \ 
--metadata-from-file startup-script=nginx-startup.txt
  1. 创建一个目标池,以便有一个单一的负载均衡访问点:
gcloud compute target-pools create nginx-pool
  1. 运行以下命令创建一个实例组:
gcloud compute instance-groups managed create nginx-group \ 
         --base-instance-name nginx \ 
         --size 2 \ 
         --template nginx-template \ 
        --target-pool nginx-pool
  1. 打开云控制台并导航到“虚拟机实例”,可以看到通过步骤 5 命令创建的两个新实例。
  2. 为新创建的实例组创建一个网络负载均衡器:
gcloud compute forwarding-rules create nginx-lb \ 
    --ports 80 \ 
    --target-pool nginx-pool
  1. 提示选择区域时,选择实例组所在的区域,例如 us-east1
  2. 运行以下命令允许 HTTP 访问实例组:
gcloud compute firewall-rules create allow-80 --allow tcp:80
  1. 运行以下命令获取区域负载均衡器的 IP 地址:
gcloud compute forwarding-rules list
  1. 在浏览器中访问该 IP 地址,即可看到 NGINX 运行界面。

3.3 讨论

此方案引入了托管实例组和实例模板。实例模板是部署需要相同设置的实例的好方法,例如为集群创建 Web 服务器。使用实例模板创建实例组后,部署了负载均衡器来将流量分配到实例组中的虚拟实例。如果一个实例出现故障,应用程序仍可运行,因为实例组中还有其他实例。

4. 向托管实例组部署容器

4.1 问题

需要将应用程序作为容器运行,希望在计算引擎上开始使用,并将 NGINX 作为容器运行,同时希望获得 Kubernetes 提供的自动扩展、自动修复和滚动更新等优势。

4.2 解决方案

创建一个新的 Docker 容器,然后将其部署到一个实例组中,该实例组将为应用程序提供自动扩展、自动修复和滚动更新功能。具体步骤如下:
1. 登录 Google 云控制台并启动云 Shell。
2. 创建一个新的实例模板,并将其与一个公共可访问的容器映像关联,在云 Shell 中运行以下命令:

gcloud compute instance-templates create-with-container 
nginx-template \ 
           --container-image gcr.io/cloud-
marketplace/google/nginx1:1.15 \ 
           --tags http-server
  1. 创建一个目标池,以便有一个单一的负载均衡访问点:
gcloud compute target-pools create nginx-pool
  1. 运行以下命令基于新创建的模板创建一个实例组:
gcloud compute instance-groups managed create nginx-group \ 
    --base-instance-name nginx-vm \ 
    --size 2 \ 
    --template nginx-template \ 
    --target-pool nginx-pool
  1. 在云控制台中,导航到实例组,可以看到列出的实例组。
  2. 为新创建的实例组创建一个区域负载均衡器:
gcloud compute forwarding-rules create nginx-lb \ 
    --ports 80 \ 
    --target-pool nginx-pool
  1. 提示选择区域时,选择实例组所在的区域,例如 us-east1
  2. 运行以下命令获取区域负载均衡器的 IP 地址:
gcloud compute forwarding-rules list
  1. 将输出的 IP 地址复制并粘贴到 Web 浏览器中。
  2. 在浏览器中访问该 IP 地址,即可看到 NGINX 运行界面。

4.3 讨论

此方案展示了如何将容器部署到计算引擎,这是开始使用容器的好方法。建议在 Google Kubernetes Engine 上运行容器作为微服务的编排引擎。部署容器后,使用 --tags http-server 标志公开它们,并创建负载均衡器来在多个虚拟机上运行的容器之间分配流量。

5. 向虚拟机传输文件

5.1 问题

有一个在计算引擎上运行的 Linux 虚拟机,需要将文件传输到该实例。

5.2 解决方案

使用两种方法将文件传输到 Linux 虚拟机,一种使用 gcloud 命令行工具,另一种使用网页浏览器中的 SSH。具体步骤如下:
1. 确保在计算引擎上运行一个 Linux 虚拟机。
2. 登录 Google 云控制台并启动云 Shell。
3. 在云 Shell 中,运行以下命令创建一个文件:

touch myfile-one.txt
  1. 运行以下命令复制新创建的文件,将 -instance-name 替换为你的实例名称:
gcloud compute scp myfile-one.txt instance-name:~
  1. 使用云控制台 SSH 浏览器连接到 Linux 虚拟机。
  2. 在 Linux 终端中,使用 ls 命令列出文件,验证文件是否已复制。
  3. 要使用 SSH 浏览器上传文件,点击设置图标并选择“上传文件”。
  4. 从本地工作站上传一个示例文件。

5.3 讨论

Google 云提供了多种将文件传输到虚拟机的方法,这里介绍了通过 gcloud 命令(可在本地机器上运行)和通过网页浏览器两种方法。

6. 使用 VM 管理器进行补丁管理

6.1 问题

在计算引擎上托管虚拟机,需要一种方法同时对所有操作系统进行补丁更新。

6.2 解决方案

使用 VM 管理器进行操作系统补丁管理,创建一个补丁作业来更新 Linux 虚拟机群。具体步骤如下:
1. 确保在计算引擎上至少运行一个 Linux 虚拟机。
2. 登录 Google 云控制台并启动云 Shell。
3. 要让计算引擎管理操作系统,需要安装并配置 VM 管理器,运行以下命令为所有虚拟机启用操作系统管理,将 PROJECT_ID 替换为你的 Google 云项目 ID:

gcloud compute project-info add-metadata \ 
  --project PROJECT_ID \ 
  --metadata=enable-osconfig=TRUE 

gcloud compute project-info add-metadata \ 
  --project PROJECT_ID \ 
--metadata=enable-guest-attributes=TRUE,enable-osconfig=TRUE
  1. 使用云 Shell SSH 浏览器连接到其中一个实例,验证是否安装了 OS 配置代理,运行以下命令:
sudo systemctl status google-osconfig-agent
  1. 如果代理正在运行,输出中应显示 active (running)
  2. 在 Google 云控制台中,导航到“计算引擎”>“VM 管理器”>“操作系统补丁管理”。
  3. 点击“启用 VM 管理器”。
  4. 点击“新补丁部署”。
  5. 选择虚拟机的目标区域。
  6. 点击“下一步”。
  7. 输入部署名称。
  8. 点击“下一步”。
  9. 选择调度、推出选项和高级选项的默认设置。
  10. 点击“部署”。
  11. 补丁作业将自动启动,并显示类似的状态。作业完成后,会显示状态窗口。

6.3 讨论

管理单个虚拟机时,执行补丁更新相对容易,但运行大量虚拟机时,若不使用复杂脚本或第三方工具,对所有实例进行补丁更新会很困难。借助 VM 管理器和操作系统补丁管理,Google 云提供了多种分发补丁更新的工具,包括滚动更新和限制更新到特定区域的功能。

7. 备份虚拟机

7.1 问题

有一个在计算引擎上运行的 Linux 虚拟机,这是业务的关键应用程序,希望对分配给虚拟机的持久磁盘进行备份,以便在出现问题时恢复实例。

7.2 解决方案

使用计算引擎的持久磁盘快照,为虚拟机的持久磁盘创建一个快照,以便在发生意外时作为磁盘的恢复点。具体步骤如下:
1. 确保在计算引擎上运行一个 Linux 虚拟机。
2. 登录 Google 云控制台。
3. 导航到“计算”>“计算引擎”>“快照”。
4. 点击“创建快照”。
5. 输入快照名称并选择虚拟机的源磁盘。
6. 点击“创建”。
完成后,会看到列出的快照,现在可以基于此快照创建一个新的虚拟机。

7.3 讨论

使用快照是保护数据的好方法,它可以创建持久磁盘的时间点副本。除了作为恢复点,还可以基于快照创建虚拟机,以便进行文件级恢复和测试应用程序或操作系统的更改。

8. 创建区域集群

8.1 问题

希望在 Kubernetes 上运行应用程序,但只在一个区域内的单个可用区中运行,并且希望能够快速创建和升级 Kubernetes 集群。

8.2 解决方案

在区域 Kubernetes 集群上运行应用程序。由于单个控制平面管理 Kubernetes 集群,因此可以快速入门。具体步骤如下:
1. 确保启用了 Kubernetes 引擎 API。
2. 登录 Google 云控制台。
3. 在主菜单中,导航到“计算”并点击“Kubernetes 引擎”。
4. 点击屏幕顶部的“创建”按钮。
5. 点击“标准”选项旁边的“配置”。
6. 在“集群基础信息”部分:
- 为集群选择一个名称。
- 在“位置类型”中,选择“区域”。
- 在“区域”中,选择任意区域。
- 其余设置保持默认。
7. 左侧导航窗格中有其他选项可以设置,但为了本方案的目的,保持默认设置。
8. 点击屏幕底部的“创建”。
9. 会被导航回“集群”屏幕,看到集群正在启动,此过程可能需要一分钟以上才能完成。
10. 完成后,集群名称旁边会出现一个绿色对勾图标,此时集群已准备好部署应用程序。

8.3 讨论

创建区域 GKE 集群是使用 Kubernetes 的快速简便方法,相比尝试启动自管理的 Kubernetes 集群,GCP 管理 Kubernetes 控制平面,无需担心管理它带来的运营开销。除了本方案,还应查看 GKE 的配置选项,它提供了大量的灵活性和关于节点池、自动化、网络、安全、元数据等方面的额外配置。

9. 创建多区域集群

9.1 问题

希望在 Kubernetes 上运行应用程序,但要跨一个区域内的两个或更多可用区运行,更看重应用程序的可用性,而非区域 Kubernetes 集群可能带来的灵活性。

9.2 解决方案

在多区域 Kubernetes 集群上运行应用程序。多区域集群具有更高的可用性、容错能力和无停机升级功能,使应用程序更具弹性,并分布在单个区域内的多个可用区。具体步骤如下:
1. 登录 Google 云控制台。
2. 在主菜单中,导航到“计算”并点击“Kubernetes 引擎”。
3. 点击屏幕顶部的“创建”按钮。
4. 点击“标准”选项旁边的“配置”。
5. 在“集群基础信息”部分:
- 为集群选择一个名称。
- 在“位置类型”中,选择“多区域”。
- 在“区域”中,选择任意区域。
- 其余设置保持默认。
6. 左侧导航窗格中有其他选项可以设置,但为了本方案的目的,保持默认设置。

9.3 讨论

多区域集群适合对应用程序可用性要求较高的场景,通过分布在多个可用区,提高了应用程序的容错能力和稳定性。

10. 各项操作总结与对比

10.1 操作类型总结

为了更清晰地了解前面介绍的各项操作,下面通过表格进行总结:
| 操作类型 | 主要目的 | 关键步骤 |
| — | — | — |
| 虚拟机器登录安全:两步验证 | 保护虚拟机操作系统登录安全 | 启用 Google 账户两步验证,在虚拟机自定义元数据添加相关键值对 |
| 运行启动脚本安装 NGINX | 自动安装 NGINX 并部署更多实例 | 创建 Linux 虚拟机,在启动脚本输入安装和启动 NGINX 的命令 |
| 使用托管实例组创建 NGINX Web 服务器组 | 托管高可用性 Web 服务器,容忍主机故障 | 创建启动脚本、实例模板、目标池、实例组和负载均衡器 |
| 向托管实例组部署容器 | 以容器形式运行应用程序,获得自动扩展等优势 | 创建实例模板关联容器映像,部署实例组和负载均衡器 |
| 向虚拟机传输文件 | 将文件传输到 Linux 虚拟机 | 使用 gcloud 命令或 SSH 浏览器上传文件 |
| 使用 VM 管理器进行补丁管理 | 对虚拟机操作系统进行补丁更新 | 安装配置 VM 管理器,创建补丁作业 |
| 备份虚拟机 | 备份虚拟机持久磁盘,以便恢复实例 | 创建持久磁盘快照 |
| 创建区域集群 | 在单个区域的单个可用区运行应用程序,快速创建和升级集群 | 启用 Kubernetes 引擎 API,配置集群基础信息 |
| 创建多区域集群 | 跨区域多个可用区运行应用程序,提高可用性 | 配置集群基础信息,选择多区域位置类型 |

10.2 操作流程对比

下面通过 mermaid 格式流程图展示部分操作的流程对比:

graph LR
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px

    A(虚拟机器登录安全:两步验证):::process --> B(启用 Google 账户两步验证):::process
    B --> C(登录云控制台,编辑虚拟机元数据):::process
    C --> D(添加键值对,保存):::process

    E(运行启动脚本安装 NGINX):::process --> F(登录云控制台,创建虚拟机):::process
    F --> G(输入启动脚本命令):::process
    G --> H(创建虚拟机,访问公共 IP):::process

    I(使用托管实例组创建 NGINX Web 服务器组):::process --> J(登录云控制台,启动云 Shell):::process
    J --> K(创建启动脚本和实例模板):::process
    K --> L(创建目标池、实例组和负载均衡器):::process

11. 不同场景下的最佳实践

11.1 安全场景

在安全方面,对于虚拟机登录,建议始终启用两步验证。如果需要对大量虚拟机进行安全管理,可以结合 VM 管理器进行补丁管理,确保操作系统及时更新,减少安全漏洞。例如,对于金融行业的应用程序,其数据安全性要求极高,通过两步验证和定期的补丁更新,可以有效防止非法入侵和数据泄露。

11.2 应用部署场景

当需要快速部署大量相同配置的 Web 服务器时,使用托管实例组和实例模板是最佳选择。通过创建启动脚本,可以实现自动化安装软件,提高部署效率。如果应用程序需要以容器形式运行,并获得自动扩展、自动修复和滚动更新等优势,可以向托管实例组部署容器。例如,电商平台在促销活动期间,需要快速部署大量 Web 服务器来应对高并发访问,此时使用托管实例组就可以满足需求。

11.3 数据管理场景

对于重要的虚拟机,定期进行持久磁盘快照备份是必不可少的。这样在出现意外情况时,可以快速恢复实例。同时,在需要将文件传输到虚拟机时,可以根据实际情况选择 gcloud 命令或 SSH 浏览器上传文件。例如,对于企业的核心业务系统,定期备份可以保证数据的安全性和可恢复性。

12. 未来发展趋势

随着云计算和容器技术的不断发展,Google Cloud 的功能也会不断完善。未来,可能会有更智能化的自动化部署和管理工具出现,进一步提高运维效率。例如,基于人工智能的自动故障诊断和修复功能,能够在虚拟机或集群出现故障时,自动进行诊断和修复,减少人工干预。同时,容器技术也会更加成熟,为应用程序的部署和运行提供更强大的支持。另外,对于多区域集群,可能会提供更灵活的配置选项,以满足不同用户的需求。

总之,通过合理运用 Google Cloud 提供的各种功能和工具,可以满足不同用户在不同场景下的需求,提高应用程序的安全性、可用性和运维效率。在实际使用过程中,用户可以根据自身的业务需求和技术能力,选择合适的操作方法,并不断探索和尝试新的功能,以适应不断变化的技术环境。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐