这次发考证券快多了,直接考完6个
这是我的AFF链接,如果看完觉得有帮助,请帮个忙:云原生认证集证有礼活动-含AFF
理论考试偏技术性问题,直接全部问gemini 2.5pro
能一遍过,因此就不放理论考试题目了
开虚拟机或者远程桌面或者scrcpy连接手机防切屏检测,推荐搭配chrome插件:超级复制,直接就能复制,省的ocr题目
实验考试
操作就是docker
kubectl
那些命令,不会也能问gemini,下面放了题目,如果有不懂的直接扔给ai让生成命令就行
前5个认证都有实验考试,不过实验考试证书不会生成,38的微认证应该都没有实验考试
有些槽点:
-
实验考试的云服务器默认安全组没开22端口,要先去安全组放行,建议直接
一键放通常用端口
,省事 -
容器拉不下来,要配置镜像地址
华为云控制台
-容器镜像服务 SWR
-镜像资源
-镜像中心
-镜像加速器
可直接复制命令配置华为源
但是华为源有的镜像还没有,我用的1panel
的镜像源:
sudo vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://docker.1panel.live"]
}
sudo systemctl daemon-reload
sudo systemctl restart docker
docker info
kubectl
配置文件可以这样上传:
user@sandbox:~/Downloads$ ls
cce-k8s-kubeconfig.yaml
user@sandbox:~/Downloads$ realpath cce-k8s-kubeconfig.yaml
/home/Downloads/cce-k8s-kubeconfig.yaml
user@sandbox:~/Downloads$ scp /home/Downloads/cce-k8s-kubeconfig.yaml [email protected]:/home
- 云数据库RDS安全组也没放开,记得放端口,还有绑定弹性IP
- 不知道官方故意还是写错了,写的镜像niginx:1.7.9,不过不影响考试步骤,就按niginx:1.7.9来吧
- 如果你对
云容器引擎 CCE
云服务的购买不熟悉,可以看看华为云官方的步骤:在CCE集群中部署NGINX无状态工作负载
附实验考试题目和AI答案(人工进行了订正,如有错误请再问AI详细的命令):
云原生基础设施之容器入门
任务1:dockerfile构建容器镜像
得分点:能正确创建名为httpd:v1的镜像,并正常运行。
其中dockerfile的部分参数如下:
① 基础镜像:httpd
② 维护者:[email protected]
③ 端口:80
④ 运行命令:echo "dockerfile test"> /usr/local/apache2/htdocs/index.html
⑤ 以下为dockerfile模板,可根据此模板修改内容:
FROM centos:centos7
MAINTAINER [email protected]
EXPOSE 80
RUN yum install -y httpd vi && yum clean all
使用docker run以该镜像运行容器,并借助-p参数指定访问端口为80。在浏览器内输入http://EIP:80。出现dockerdile test
文字则证明任务完成。
本任务中需注意以下内容:
(1)使用错误的命名不得分
(2)多或者少开放端口不得分
任务1步骤:
-
创建
vim Dockerfile
文件(无后缀名),内容如下:
FROM httpd MAINTAINER [email protected] EXPOSE 80 RUN echo "dockerfile test" > /usr/local/apache2/htdocs/index.html
-
在
Dockerfile
文件所在目录,执行构建命令:
docker build -t httpd:v1 .
-
运行容器:
docker run -d -p 80:80 httpd:v1
-
验证:在浏览器内输入
http://宿主机EIP:80
(宿主机EIP指运行Docker的机器的公网IP)。如果显示 “dockerfile test” 则成功。
任务2:搭建私有镜像仓库
得分点:成功创建私有镜像仓库并且成功上传镜像.
1.搭建私有镜像仓库,私有镜像仓库服务监听端口为5000。修改容器httpd:v1
的镜像名称后,将该容器上传至私有镜像仓库。
2.在终端输入curl -X GET http://localhost:5000/v2/httpd/tags/list
命令查看仓库镜像信息。出现{"name":"httpd","tags":["v1"]}
结果,任务完成。
本任务中需注意以下内容:
(1)使用错误的镜像仓库监听端口不得分
(2)使用错误的镜像名称不得分
任务2步骤:
-
运行私有镜像仓库容器 (registry):
docker run -d -p 5000:5000 --restart=always --name registry registry:2
-
标记
httpd:v1
镜像以上传到私有仓库 (假设私有仓库地址为localhost:5000,如果Docker宿主机本身无法解析localhost作为仓库地址,可能需要使用宿主机实际IP;对于某些Docker版本,可能需要配置insecure-registries):
docker tag httpd:v1 localhost:5000/httpd:v1
注意:如果Docker守护进程未配置信任
localhost:5000
为非安全仓库,推送会失败。您可能需要修改Docker的daemon.json
文件,例如在/etc/docker/daemon.json
中添加{"insecure-registries" : ["localhost:5000"]}
并重启Docker服务。 -
上传镜像到私有仓库:
docker push localhost:5000/httpd:v1
-
验证仓库中的镜像信息:
curl -X GET http://localhost:5000/v2/httpd/tags/list
预期输出:
{"name":"httpd","tags":["v1"]}
任务3:容器生命周期管理
得分点:成功完成生命周期管理任务。
对httpd:v1容器及镜像执行暂停、恢复、停止、重启、删除镜像、删除镜像的操作。
输入:docker rmi httpd:v1命令,出现:Untagged: httpd:v1则证明任务完成
本任务中需注意以下内容:
(1)输入至错误文件、输入非要求内容不得分
任务3步骤:
-
首先确保有一个基于
httpd:v1
运行的容器(如果上一步骤中已运行,请获取其容器ID或名称;如果未运行,则先运行):
docker run -d --name my_httpd_v1 httpd:v1
假设容器名称为
my_httpd_v1
暂停容器:
docker pause my_httpd_v1
-
恢复容器:
docker unpause my_httpd_v1
-
停止容器:
docker stop my_httpd_v1
-
重启容器 (此步骤中容器处于停止状态,重启会使其重新运行;如果想演示对运行中容器的重启,可以先
docker start my_httpd_v1
再
docker restart my_httpd_v1
-
停止并删除容器(删除镜像前必须先删除使用该镜像的容器,或者先停止容器):
docker stop my_httpd_v1 docker rm my_httpd_v1
如果还有其他基于
httpd:v1
或localhost:5000/httpd:v1
的容器,也需要先停止并删除它们。 -
删除本地的私有仓库镜像标签 (如果任务2已执行):
docker rmi localhost:5000/httpd:v1
-
删除
httpd:v1
镜像:
docker rmi httpd:v1
预期输出包含:
Untagged: httpd:v1
云原生基础设施之容器进阶
任务1:使用cgroup实现资源限制
得分点:能对容器实现CPU限制。
运行压力测试容器progrium/stress,限制CPU使用率为70%(可输入top命令验证结果)。
在终端/sys/fs/cgroup/cpu/docker/
容器ID/文件夹下,输入命令cat cpu.cfs_quota_us
。
显示70000则证明成功。
本任务中需注意以下内容:
(1)使用错误的限额比例不得分
(2)输入非cat cpu.cfs_quota_us
的错误命令不得分
任务1步骤:
-
拉取progrium/stress压力测试镜像:(注意镜像源配置)
docker pull progrium/stress
-
运行容器,限制CPU使用率 (例如,分配70%的一个核心):
docker run -d --name my_stress --cpu-period=100000 --cpu-quota=70000 progrium/stress --cpu 1
-
获取容器的完整ID:
docker ps --no-trunc | grep my_stress # 或者 docker inspect --format='{{.Id}}' my_stress
记下输出的完整容器ID。
-
验证CPU使用率(可选): 在一个终端中运行
docker stats my_stress
或top
(在宿主机上,然后找到容器进程) 来观察CPU使用率。 -
进入cgroup目录并查看
cpu.cfs_quota_us
的值 (将
[容器完整ID]
替换为上一步获取到的ID):
Bash
cat /sys/fs/cgroup/cpu/docker/[容器完整ID]/cpu.cfs_quota_us
预期输出:
70000
任务2:搭建容器bridge网络
得分点:成功搭建bridge网络并达成容器网络互通。
1.创建用户自定义网桥,指定子网为173.18.0.0/16,网关为173.18.0.1。
2.运行两个centos容器并挂载到自定义网桥。
3.进入任意一个容器,在容器内ping另一个容器的ip地址。出现以下结果,任务完成。
输入:ping 173.18.0.2命令(此命令可以多输几次),返回下图内容
本任务中需注意以下内容:
(1)建议提前拉取centos镜像
任务2步骤:
-
提前拉取centos镜像 (如果未拉取):
docker pull centos:latest
-
创建用户自定义网桥:
docker network create --subnet=173.18.0.0/16 --gateway=173.18.0.1 my_bridge_network
-
运行第一个centos容器并连接到自定义网桥,指定IP(可选,Docker会自动分配,但为了方便测试可以指定,确保IP在子网范围内且未被占用):
docker run -dit --name container1 --network my_bridge_network --ip 173.18.0.2 centos:latest /bin/bash
-
运行第二个centos容器并连接到自定义网桥,指定IP:
docker run -dit --name container2 --network my_bridge_network --ip 173.18.0.3 centos:latest /bin/bash
-
进入第一个容器
container1
docker exec -it container1 /bin/bash
-
在
container1
内部,ping
container2
的IP地址 (173.18.0.3)。首先需要安装ping工具(如果CentOS最小镜像不包含):
# 在container1的shell中 yum install -y iputils ping 173.18.0.3
预期会看到ping通的回复。按
Ctrl+C
停止ping。然后输入
exit
退出容器。
如果题目要求ping 173.18.0.2,那应该是从另一个容器(比如173.18.0.3)ping它,或者宿主机上如果有对应路由的话。根据题目“ping另一个容器的ip地址”和“输入:ping 173.18.0.2命令”,假设我们运行了两个容器,一个IP是173.18.0.2,另一个是173.18.0.X,然后从173.18.0.X ping 173.18.0.2。 若第一个容器IP为
173.18.0.2
,第二个为173.18.0.3
,则: 进入container2
(docker exec -it container2 /bin/bash
),安装iputils
后执行ping 173.18.0.2
。
任务3:容器挂载存储卷
得分点:成功挂载volume并实现持久化存储。
使用docker managed volume挂载到容器,在容器内输入echo "this is page from docker managed volume. " > index.html。删除该容器。
在宿主机挂载原路径中通过cat index.html命令查看文件内容,出现“this is page from docker managed volume.”则任务完成。
本任务中需注意以下内容:
(1)可使用任意镜像完成该实验,如httpd、centos镜像等
任务3步骤:
-
创建一个Docker managed volume:
docker volume create my_volume
-
运行一个容器 例如使用
centos
并将
my_volume
挂载到容器内的某个路径 例如
/appdata
docker run -d --name volume_test_container -v my_volume:/appdata centos:latest tail -f /dev/null
tail -f /dev/null
是为了让容器保持运行状态,方便执行
exec
-
在容器内创建文件并写入内容:
docker exec volume_test_container bash -c 'echo "this is page from docker managed volume." > /appdata/index.html'
-
删除容器:
docker stop volume_test_container docker rm volume_test_container
-
查看Docker managed volume在宿主机上的实际存储路径(此步骤是为了理解,通常不直接操作此路径,但题目要求“在宿主机挂载原路径中”):
docker volume inspect my_volume
记下
Mountpoint
字段的值,例如
/var/lib/docker/volumes/my_volume/_data
-
在宿主机上,查看该路径下的文件内容 (将
[Mountpoint路径]
替换为上一步获取到的路径):
cd /var/lib/docker/volumes/my_volume/_data/ cat index.html
预期输出:
this is page from docker managed volume.
云容器快速搭建网站
任务1:创建RDS数据库
得分点:能正确创建RDS for MySQL数据库服务。
部分参数请参考以下内容:
计费模式:按需计费
区域:华北-北京四
实例名称:rds-web(请使用该名称,否则影响任务得分)
数据库引擎:MySQL
数据库版本:5.7
实例类型:单机
存储类型:默认
可用区:默认
性能规格:通用型|2核|4GB
存储空间:40GB
虚拟私有云:选择已预置的虚拟私有云
所在子网:选择已预置的子网
安全组:选择已预置的安全组
本任务中需注意以下内容:
(1) 创建了错误的规格,不得分
(2) RDS创建成功后,需自行创建一个新的数据库、账号、密码,并完成授权,作为后续实验的环境变量使用
任务1步骤:
没什么好说的,按要求创建服务就行,记得放行端口号,可以绑个弹性IP,省的内网可能访问不到数据库
任务2:完成CCE集群的创建,并成功添加Node节点。
得分点:成功添加指定规格的Node节点。
创建CCE集群部分参数请参考以下内容:
计费模式:按需计费
区域:华北-北京四
集群名称:test(请使用该名称,否则影响任务得分)
版本:选择最新版即可
集群管理规模:50节点
高可用:否
虚拟私有云:选择已创建的虚拟私有云,如myvpc
所在子网:选择已创建的子网,如subnet-myvpc
网络模型:容器隧道网络
容器网段:自动选择
IPV4服务网段:使用默认网段
高级配置:暂不配置
插件配置:取消“容器监控”及“业务日志”
创建节点,设置参数参考如下:
计费方式:按需计费
当前区域:华北-北京四
可用区:默认
节点类型:弹性云服务器-虚拟机
容器引擎:默认
节点规格:通用型|s6.xlarge.2|4核|8GB
操作系统:EulerOS 2.9
节点名称:test-node
登录方式:密码(自行设置复杂密码)
存储配置:高IO,其余保持默认
虚拟私有云:选择已预置的vpc和子网
节点IP:随机分配
弹性公网IP:自动创建
计费方式:按流量计费,带宽5M
节点购买数量:1台
其余设置保持默认
本任务中需注意以下内容:
(1) 在新版CCE界面下执行操作任务
(2) 错误的节点规格不得分
任务1步骤:
没什么好说的,按要求创建服务就行,以下是AI生成的步骤
此任务通过华为云CCE(云容器引擎)控制台完成。
-
登录华为云控制台。
-
导航到“云容器引擎 CCE”服务。
-
创建集群 :
- 点击“购买Kubernetes集群”。
- 计费模式:按需计费
- 区域:华北-北京四
- 集群名称:test
- 版本:选择最新版
- 集群管理规模:50节点
- 高可用:否
- 虚拟私有云(VPC):选择已创建的虚拟私有云 (如myvpc)
- 所在子网:选择已创建的子网 (如subnet-myvpc)
- 网络模型:容器隧道网络
- 容器网段:自动选择
- IPV4服务网段:使用默认网段
- 高级配置:暂不配置
- 插件配置:取消勾选“容器监控”和“业务日志”
- 确认配置并创建集群骨架(控制面)。
-
等待集群控制面创建成功。
-
创建节点
(在集群管理界面,选择对应集群,点击“节点管理” → “创建节点”):
-
计费方式:按需计费
-
当前区域:华北-北京四
-
可用区:默认 (或根据实际情况选择)
-
节点类型:弹性云服务器-虚拟机
-
容器引擎:默认
-
节点规格:通用型 | s6.xlarge.2 | 4核 | 8GB
-
操作系统:EulerOS 2.9
-
节点名称:test-node
-
登录方式:密码 (自行设置复杂密码)
-
系统盘/数据盘存储配置:系统盘通常为高IO,大小默认或按需;数据盘根据需要(题目中为高IO,其余默认)。
-
虚拟私有云:选择已预置的VPC和子网 (应与集群VPC一致)
-
节点IP:随机分配
-
弹性公网IP
:自动创建
- 计费方式:按流量计费
- 带宽:5Mbit/s
-
节点购买数量:1台
-
其余设置保持默认。
-
-
确认配置并创建节点。等待节点成功添加到集群。
任务3:通过华为云镜像中心部署无状态工作负载WordPress,并通过外网访问WordPress页面。
得分点:能通过http://ip:端口号成功访问网站登录页面。
WordPress无状态工作负载的创建参数如下:
负载名称:wordpress
实例数量:1
镜像版本:php7.3
WordPress访问类型:LoadBalancer
访问端口:80
容器端口:80
此外需要设置环境变量,此处一共需要设置四个环境变量:
WORDPRESS_DB_HOST:数据库内网IP地址:端口号
WORDPRESS_DB_USER:(与前面mysql创建的账号名称一致)
WORDPRESS_DB_PASSWORD:(与前面mysql创建的账号时设置的密码一致)
WORDPRESS_DB_NAME:(与前面mysql创建的数据库名称一致)
任务3步骤:
-
确保CCE集群(名为
test
)和RDS数据库(名为rds-web
)已按前述任务要求创建并准备就绪。获取任务1中创建的RDS数据库的内网IP地址、端口号、数据库名、用户名和密码。 -
在CCE控制台,选择
test
集群。 -
导航到“工作负载” → “无状态负载 (Deployments)”,点击“使用镜像创建”。
- 或者,部分控制台可能直接有“通过镜像仓库创建”或市场应用。题目指明“通过华为云镜像中心部署”,具体路径可能为 “应用市场” → 搜索 “WordPress”,然后选择部署到CCE。如果直接创建工作负载:
-
配置工作负载:
-
负载名称:wordpress
-
实例数量:1
-
容器配置 :
- 点击“选择镜像”。
- 镜像来源选择“华为云SWR镜像”(或公共镜像,搜索WordPress)。题目指定“镜像版本:php7.3”,需要找到对应的WordPress镜像,例如
wordpress:php7.3
。 - 容器端口:80
-
环境变量
(非常重要):
- 添加以下四个环境变量:(注意安全组放行3306)
WORDPRESS_DB_HOST
=[RDS数据库内网IP地址]:[RDS端口号]
(例如192.168.1.10:3306
)WORDPRESS_DB_USER
=[任务1中创建的RDS用户名]
WORDPRESS_DB_PASSWORD
=[任务1中创建的RDS用户密码]
WORDPRESS_DB_NAME
=[任务1中创建的RDS数据库名]
- 添加以下四个环境变量:(注意安全组放行3306)
-
访问设置 (服务):
- 访问类型:LoadBalancer ,即负载均衡(弹性公网IP)
- 协议:TCP
- 容器端口:80
- 访问端口 (服务端口):80
-
-
检查其他配置,然后点击“创建负载”。
-
等待工作负载和LoadBalancer类型的服务创建完成。服务创建完成后,在“服务发现与负载均衡 (Services)”或“网络” → “服务 (Services)”部分找到名为
wordpress
(或类似)的服务。 -
获取该服务的外部IP地址(弹性公网IP)。
-
在浏览器中输入
http://[外部IP地址]:80
。应能看到WordPress的安装或登录页面。
CCE网络与存储实战
任务1:创建CCE集群
得分点:能按要求成功配置CCE集群
提示:集群创建预计需要10分钟左右,可以单击“返回集群管理”进行其它操作或单击“查看集群事件列表”后查看集群详情。为节约时间,可在集群创建期间进入任务2,进行kubectl的安装操作。
- CCE集群的配置参数如下: 计费模式: 按需付费 区域:华为-北京四 集群名称: cce-k8s 自定义版本: V1.21 集群管理规模: 50节点 网络模型: 容器隧道网络 虚拟私有云: vpc-cce(已预置) 控制节点子网: subnet-cce(已预置) 容器网段: 勾选"自动选择" 服务网段: 使用默认网段 其余参数: 保持默认
- CCE集群下创建节点: 计费模式: 按需付费 节点规格:c6s.xlarge.2 4核|8GB 操作系统:选择公共 镜像EulerOS 2.5 节点名称:cce-k8s-node-01 登录方式:选择“密码”,此处建议使用:Huawei@1234 系统盘/数据盘:高IO,40G 虚拟私有云所在子网,选择默认子网 弹性公网IP:选择“自动创建” 规格:全动态BGP 计费模式:按流量计费, 带宽大小 :5M 其余参数保持默认即可 任务中需注意以下内容: (1)按需购买资源,并按指导参数配置CCE集群,否则不得分。 (2)若规定节点规格有售罄情况,请选择相近规格ECS作为集群Node节点。
任务1步骤:
此任务通过华为云CCE控制台完成。
-
登录华为云控制台。
-
导航到“云容器引擎 CCE”服务。
-
创建集群控制面 :
- 点击“购买Kubernetes集群”或“创建集群”。
- 计费模式: 按需付费
- 区域: 华为-北京四
- 集群名称: cce-k8s
- 版本: 自定义版本 V1.21 (若控制台界面有变,选择最接近的或指定版本)
- 集群管理规模: 50节点
- 网络模型: 容器隧道网络
- 虚拟私有云(VPC): vpc-cce (选择已预置)
- 控制节点子网: subnet-cce (选择已预置)
- 容器网段: 勾选 “自动选择”
- 服务网段: 使用默认网段
- 其余参数: 保持默认
- 确认并创建集群控制面。
-
等待集群控制面创建成功。
-
创建节点
(在集群管理界面,选择
cce-k8s
集群,点击“节点管理” → “创建节点”或“添加节点”):
-
计费模式: 按需付费
-
节点规格:c6s.xlarge.2 (4核 | 8GB)
-
操作系统:选择公共镜像 EulerOS 2.5
-
节点名称:cce-k8s-node-01
-
登录方式:选择“密码”,密码设置为
Huawei@1234
-
系统盘: 高IO,40G
-
数据盘: 高IO,40G (题目中系统盘/数据盘一起描述,通常指系统盘40G,数据盘也设置为40G高IO,或根据界面具体选项调整)
-
虚拟私有云所在子网:选择默认子网 (应为
vpc-cce
下的可用子网) -
弹性公网IP
:选择“自动创建”
- 规格:全动态BGP
- 计费模式:按流量计费
- 带宽大小:5Mbit/s
-
其余参数: 保持默认
-
-
确认配置并创建节点。等待节点成功加入集群。
任务2:安装并配置kubectl
得分点:能在ecs-terminal中正确安装kubectl客户端
提示:kubectl具体的安装步骤以及配置文件的下载路径可参考:“CCE集群 > 集群信息 > 连接信息 > kubectl>点击查看 ”
提示:下载的json文件默认放置在以下路径: /home/user/Downloads/kubeconfig.json
kubectl客户端(v1.19.10)的下载链接如下: https://dl.k8s.io/v1.19.10/kubernetes-client-linux-amd64.tar.gz
kubectl安装并配置完成后,使用以下命令验证其安装结果:
kubectl get node
若回显如下,则表示安装配置成功:
任务中需注意以下内容:
(1)kubectl应配置于ecs-terminal,否则不得分
(2)使用kubectl get node 后若不返回node节点信息则不得分
任务2步骤:
此任务在 ecs-terminal (通常指预置的或用户自行准备的用于管理集群的ECS/Linux环境) 中执行。
-
登录到
ecs-terminal
。 -
下载kubectl客户端 (v1.19.10):
Bash
wget https://dl.k8s.io/v1.19.10/kubernetes-client-linux-amd64.tar.gz
-
解压下载的压缩包:
Bash
tar -zxvf kubernetes-client-linux-amd64.tar.gz
-
将kubectl二进制文件移动到系统路径下,例如
/usr/local/bin
sudo mv kubernetes/client/bin/kubectl /usr/local/bin/ sudo chmod +x /usr/local/bin/kubectl
-
验证kubectl版本:
kubectl version --client
-
配置kubectl连接集群
-
在华为云CCE控制台,选择
cce-k8s
集群。 -
导航到 “集群信息” → “连接信息” → “kubectl”,点击“点击查看”。
-
按照指引下载
kubeconfig.json
文件。用scp命令传到服务器上user@sandbox:~/Downloads$ ls cce-k8s-kubeconfig.yaml user@sandbox:~/Downloads$ realpath cce-k8s-kubeconfig.yaml /home/Downloads/cce-k8s-kubeconfig.yaml user@sandbox:~/Downloads$ scp /home/Downloads/cce-k8s-kubeconfig.yaml [email protected]:/home
之后按连接信息给的命令继续就行,这里我忘了复制官方的命令,考试时候自己看吧
-
-
验证kubectl配置和节点连接:
kubectl get node
预期会显示
cce-k8s-node-01
节点的信息及其状态 ,例如
Ready
任务3:创建Deployment
得分点:按照指示在执行机上查看创建后的Deployment
于CCE集群cce-k8s创建如下Deployment工作负载:
创建Service实1验使用的目录:labfile/servicefile
后端nginx Deployment: nginx-deploy.yaml
nginx-deploy.yaml代码如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
提示:
kubectl命令语法:kubectl [command] [TYPE] [NAME] [flags]
Command:指定希望进行的操作,如create,get,describe,delete等。
TYPE:指定操作对象的类型,如deployment,pod,service等。
NAME:指定对象的名字。
flags: 可选的标志位。如–namespace=xxx, --image=xxx等。
任务3步骤:
在 ecs-terminal (已配置好kubectl) 中执行。
-
创建目录 (如果题目明确要求在此目录下操作):
mkdir -p labfile/servicefile cd labfile/servicefile
-
创建
nginx-deploy.yaml
文件,内容如下:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx # 默认使用nginx:latest ports: - containerPort: 80
-
使用kubectl应用该YAML文件创建Deployment:
kubectl apply -f nginx-deploy.yaml
-
查看创建的Deployment:
kubectl get deployment nginx # 或者查看pod状态 # kubectl get pods -l app=nginx
预期会看到名为
nginx
的Deployment,并且有3个副本正在创建或已运行。
任务4:创建service服务
得分点:在CCE控制台-服务发现-服务中查看到nginx-svc
创建nginx-service.yaml
创建service
查看service中的endpoints
nginx-service.yaml代码如下:
apiVersion: v1
kind: Service
metadata:
name: nginx-svc
spec:
selector:
app: nginx
ports:
protocol: TCP port: 8080 targetPort: 80
任务4答案:
在 ecs-terminal (已配置好kubectl,建议在 labfile/servicefile 目录下) 中执行。
-
创建
nginx-service.yaml
文件,内容如下:
apiVersion: v1 kind: Service metadata: name: nginx-svc spec: selector: app: nginx # 这个selector要匹配上一步Deployment中Pod的label ports: - protocol: TCP port: 8080 # Service暴露的端口 targetPort: 80 # Pod内容器实际监听的端口 # type: ClusterIP # 默认为ClusterIP,如果需要外部访问,可以改为NodePort或LoadBalancer,但题目未指定
-
使用kubectl应用该YAML文件创建Service:
kubectl apply -f nginx-service.yaml
-
查看创建的Service:
kubectl get service nginx-svc
-
查看Service的Endpoints (这会显示Service关联到的Pod的IP和端口):
kubectl get endpoints nginx-svc
预期会看到与
nginx
Deployment中3个Pod对应的IP地址和端口。
-
验证:登录华为云CCE控制台,进入
cce-k8s
集群,在“服务发现”或“网络” → “服务 (Services)”中应能查看到名为nginx-svc
的服务。
基于CCE Kubernetes编排实战
实验一:创建CCE集群及创建节点
任务1:创建CCE集群及创建节点
得分点:能按要求成功配置CCE集群
提示:集群创建预计需要10分钟左右,可以单击 “查看集群事件列表”后查看集群详情。为节约时间,可在集群创建期间进入实验二,进行kubectl的安装操作。
- CCE集群的配置参数如下,其余参数请保持默认。 计费模式: 按需付费 区域:华为-北京四 集群名称: 请命名为cce-k8s,否则无法进行验证 集群版本: 选择推荐的版本 集群管理规模: 50节点 集群Master数:单节点 虚拟私有云: vpc-cce(实验已预置) 网络模型: 容器隧道网络 容器网段: 选择“自动设置网段” 服务网段: 使用默认网段 插件选择:关闭云原生监控插件 其余参数: 保持默认
- 节点配置参数如下,其余参数请保持默认。 计费模式:按需付费 可用区:选择“随机分配” 节点名称:自定义节点名称,建议使用cce-k8s-node-01 节点规格:c6s.xlarge.2,4核|8GB 容器引擎:Containerd 操作系统:选择“公共镜像EulerOS 2.9” 系统盘:高IO,40GiB 数据盘:高IO,100GiB 虚拟私有云所在子网:选择默认子网 弹性IP:选择“自动创建” 规格:全动态BGP 计费模式:按流量计费 带宽大小 :5M 登录方式:选择“密码”,自定义登录密码 本任务中需注意按需购买资源,并按指导参数配置CCE集群,否则不得分。
任务1步骤:
略,以下AI生成
此任务通过华为云CCE控制台完成。
-
登录华为云控制台。
-
导航到“云容器引擎 CCE”服务。
-
创建集群控制面
- 点击“购买Kubernetes集群”或“创建集群”。
- 计费模式: 按需付费
- 区域: 华为-北京四
- 集群名称: cce-k8s (务必使用此名称)
- 集群版本: 选择推荐的版本
- 集群管理规模: 50节点
- 集群Master数: 单节点
- 虚拟私有云(VPC): vpc-cce (选择实验已预置)
- 网络模型: 容器隧道网络
- 容器网段: 选择“自动设置网段”
- 服务网段: 使用默认网段
- 插件选择: 关闭云原生监控插件
- 其余参数: 保持默认
- 确认并创建集群控制面。
-
等待集群控制面创建成功。
-
创建节点
(在集群管理界面,选择
cce-k8s
集群,点击“节点管理” → “创建节点”或“添加节点”):
-
计费模式: 按需付费
-
可用区: 选择“随机分配”
-
节点名称: 自定义,建议
cce-k8s-node-01
-
节点规格: c6s.xlarge.2 (4核 | 8GB)
-
容器引擎: Containerd
-
操作系统: 选择“公共镜像 EulerOS 2.9”
-
系统盘: 高IO,40GiB
-
数据盘: 高IO,100GiB
-
虚拟私有云所在子网: 选择默认子网 (应为
vpc-cce
下的可用子网) -
弹性公网IP
: 选择“自动创建”
- 规格: 全动态BGP
- 计费模式: 按流量计费
- 带宽大小: 5Mbit/s
-
登录方式: 选择“密码”,自定义登录密码。
-
其余参数: 保持默认
-
-
确认配置并创建节点。等待节点成功加入集群。
实验二:使用kubectl操作CCE集群
任务1:安装并配置kubectl
得分点:能在ecs-terminal中正确安装kubectl客户端。
提示信息如下:
- kubectl具体的安装步骤以及配置文件的下载路径可参考:“CCE控制台 > 集群管理 > 集群cce-k8s > 连接信息 > kubectl”
- kubectl客户端安装完成后,其配置文件所在路径:kubernetes/client/bin/kubectl (此为kubectl二进制文件路径,配置文件通常是kubeconfig)
- kubectl客户端的下载链接如下: https://sandbox-experiment-files.obs.cn-north-4.myhuaweicloud.com/1993/kubernetes-client-linux-amd64.tar.gz
- kubectl安装并配置完成后,使用以下命令验证其安装结果: kubectl get node 若回显如下,则表示安装配置成功: 本任务中需注意以下内容: kubectl应配置于ecs-terminal,否则不得分 使用kubectl get node 后若不返回node节点信息则不得分
任务2步骤:
此任务在 ecs-terminal (预置的或用户自行准备的用于管理集群的ECS/Linux环境) 中执行。
-
登录到
ecs-terminal
。 -
下载kubectl客户端:
wget https://sandbox-experiment-files.obs.cn-north-4.myhuaweicloud.com/1993/kubernetes-client-linux-amd64.tar.gz
-
解压下载的压缩包:
tar -zxvf kubernetes-client-linux-amd64.tar.gz
-
将kubectl二进制文件移动到系统路径下 (例如
/usr/local/bin
) 并赋予执行权限:
# 解压后,kubectl通常在 kubernetes/client/bin/ 目录下 sudo mv kubernetes/client/bin/kubectl /usr/local/bin/ sudo chmod +x /usr/local/bin/kubectl
-
验证kubectl版本(可选):
kubectl version --client
-
配置kubectl连接集群:
- 在华为云CCE控制台,选择
cce-k8s
集群。 - 导航到 “集群管理” → 选择
cce-k8s
集群 → “连接信息” → “kubectl”。 - 按照指引下载
kubeconfig
文件(通常是一个JSON文件或YAML文件)。将其下载到ecs-terminal
。 - 略,连接信息有命令提示
- 在华为云CCE控制台,选择
-
验证kubectl配置和节点连接:
kubectl get node
预期会显示
cce-k8s-node-01
(或您自定义的节点名称) 的信息及其状态
Ready
任务2:创建并使用名为“production”的namespace
得分点:于预制CCE集群创建指定namespace
于CCE集群cce-k8s创建namespace,命名为production
本任务中需注意:namespace命名不匹配不得分
任务2步骤:
在 ecs-terminal (已配置好kubectl) 中执行。
-
创建名为
production
的namespace:
kubectl create namespace production
-
验证创建(可选):
kubectl get namespace production
预期输出:
NAME STATUS AGE
production Active ...s
任务3:创建并使用名为“testing”的namespace
得分点:于预制CCE集群创建指定namespace
于CCE集群cce-k8s创建namespace命名为testing
本任务中需注意:namespace命名不匹配不得分
任务3步骤:
在 ecs-terminal (已配置好kubectl) 中执行。
-
创建名为
testing
的namespace:
kubectl create namespace testing
-
验证创建(可选):
kubectl get namespace testing
预期输出:
NAME STATUS AGE
testing Active ...s
实验三:在CCE集群中部署Deployment工作负载
任务1:使用Deployment部署Nginx
得分点:按照要求成功创建Deployment负载
提示信息如下:
kubectl命令语法:kubectl [command] [TYPE] [NAME] [flags]
Command:指定希望进行的操作,如create,get,describe,delete等。
TYPE:指定操作对象的类型,如deployment,pod,service等。
NAME:指定对象的名字。
flags: 可选的标志位。如–namespace=xxx, --image=xxx等。
于CCE集群cce-k8s创建如下Deployment工作负载:
名称:nginx
命名空间:production
副本数:2
镜像:niginx:1.7.9 (注意:此处可能是笔误,通常为 nginx)
本任务中需注意:名称、命名空间、副本、镜像版本若不匹配均不得分。
任务1步骤:
在 ecs-terminal (已配置好kubectl) 中执行。
-
使用kubectl命令直接创建Deployment: (假设 “niginx” 为笔误,实际应为 “nginx”。如果题目严格要求 “niginx”,则使用 “niginx”)
kubectl create deployment nginx --image=nginx:1.7.9 --replicas=2 --namespace=production
如果严格按照题目中的 “niginx”:
kubectl create deployment nginx --image=niginx:1.7.9 --replicas=2 --namespace=production
-
验证Deployment是否成功创建并在指定命名空间中:
kubectl get deployment nginx --namespace=production
预期输出应显示名为
nginx
的Deployment,DESIRED为2,CURRENT为2 (可能需要一点时间达到),READY为2。
-
查看Pod状态:
kubectl get pods --namespace=production -l app=nginx # kubectl create deployment 会自动给pod打上 app=nginx 的标签
预期会看到两个Pod正在运行或创建中。
任务2:更新Deployment
得分点:按照要求更新任务1已创建的Deployment负载
提示:以下命令可用于Deployment的更新
$ kubectl edit deployment
$ kubectl scale deployment
$ kubectl set image deployment
按照以下要求更新已创建的Deployment:
副本数:2 → 3
镜像:niginx:1.7.9 → niginx:1.9.1 (注意:此处可能是笔误,通常为 nginx)
本任务中需注意:若Deployment负载的副本数、镜像版本未按要求更新则不得分。
任务2步骤:
在 ecs-terminal (已配置好kubectl) 中执行。
-
更新副本数从2到3 (针对名为
nginx
的Deployment,在production
命名空间):kubectl scale deployment nginx --replicas=3 --namespace=production
-
更新镜像版本从 nginx:1.7.9 (或 niginx:1.7.9) 到 nginx:1.9.1 (或 niginx:1.9.1):
不知道官方故意还是写错了,写的镜像niginx:1.7.9,不过不影响考试步骤,就按niginx:1.7.9来吧,看你喜欢哪个命令
(假设 “niginx” 为笔误,实际应为 “nginx”。如果题目严格要求 “niginx”,则使用 “niginx”)
kubectl set image deployment/nginx nginx=nginx:1.9.1 --namespace=production # 如果Deployment中的容器名不是nginx,而是例如 my-nginx-container,则用 my-nginx-container=nginx:1.9.1 # 通常 kubectl create deployment nginx 会创建一个名为 nginx 的容器
如果严格按照题目中的 “niginx”:
kubectl set image deployment/nginx nginx=niginx:1.9.1 --namespace=production # 这里的 nginx= 是指容器的名字,如果创建时容器名不同,需要相应修改
为了确保容器名正确,可以先
kubectl describe deployment nginx -n production
查看容器名。通常kubectl create deployment <name>
会创建一个名为<name>
的容器。 -
验证更新后的Deployment状态:
kubectl get deployment nginx --namespace=production
预期输出应显示
nginx
Deployment,DESIRED为3,CURRENT为3,READY为3 (可能需要一点时间完成更新)。 -
验证Pod的镜像版本 (可以抽查一个Pod):
kubectl describe pod [pod名称] --namespace=production | grep Image: # 先用 kubectl get pods -n production 获取一个新创建的Pod名称
预期Image字段显示为
nginx:1.9.1
(或niginx:1.9.1
)。
注:我这里镜像没拉成功,但还是100分通过了,这个镜像名称是nginx:1.9.1应该没影响