华为云用户手册

  • 前提条件 已购买一台绑定EIP的云手机服务器。 已购买一台绑定EIP的弹性云服务器。 云手机服务器和弹性云服务器参考以下规格,具体规格可结合业务场景决定。 云手机服务器规格为:physical.kg1.4xlarge.cp | kg1.cp.c60.d16SSD.e1v1 弹性云服务器规格为:通用计算型 | s6.large.2 | 2vCPUs | 4GiB | Ubuntu 18.04 server 64bit(40GB)
  • 操作场景 本实践指导用户通过配置VPC对等连接和云连接实例,实现多个区域的同业务VPC互通。 云连接实例支持区域,请参见云连接实例支持区域。 如图1所示,在本场景中,上海一和广州区域各有3个VPC,分为生产业务VPC、办公业务VPC、中转VPC,通过配置对等连接和云连接实例最终需要实现以下几点: 上海一的生产业务VPC与广州的生产业务VPC互通。 上海一的办公业务VPC与广州的办公业务VPC互通。 生产业务VPC和办公业务VPC不能互通。 图1 逻辑互联示意图 表1 涉及服务应用场景 云产品 应用场景 描述 相关操作 对等连接 同区域的VPC互连 对于同一区域的VPC,可以通过对等连接进行互连,同一账号与不同账号的连接方式略有差异。 创建同一账户下的对等连接 创建不同账户下的对等连接 云连接实例 跨区域的VPC互连 对于不同区域的VPC,不区分是否同一账号,都可以互连,跨区域连接实现全球云上网络。 通过云连接实例实现跨区域VPC互通 配置云连接实例、对等连接时,通过云连接实例、对等连接实现跨区域互通的各个VPC,其子网的IP编址不能重叠或冲突。
  • 配置验证 查看上海一TransitVPC的路由表: 图10 上海一TransitVPC的路由表 查看上海一生产业务VPC的路由表: 图11 上海一生产业务VPC的路由表 查看上海一办公业务VPC的路由表: 图12 上海一办公业务VPC的路由表 查看广州TransitVPC的路由表: 图13 广州TransitVPC的路由表 查看广州生产业务VPC的路由表: 图14 广州生产业务VPC的路由表 查看广州办公业务VPC的路由表: 图15 广州办公业务VPC的路由表 从上海一生产VPC的E CS 去ping广州生产VPC的ECS。 图16 海一生产VPC的ECS ping广州生产VPC的ECS 从上海一办公VPC的ECS去ping广州办公VPC的ECS。 图17 上海一办公VPC的ECS ping广州办公VPC的ECS
  • 操作步骤 调用应用中创建组件API在某个应用下创建组件,请求示例如下: curl -k -H "Content-Type:application/json;charset=utf8" -H "X-Auth-Token:$token" -X POST "https://{servicestage_endpoint}/v3/{project_id}/cas/applications/{application_id}/components" -d ' { "name": "test-component", "description": "", "labels": [], "version": "2023.0712.09204", "environment_id": "21a43958-f64f-4077-8ae3-3a03bf0111c7", "application_id": "2c458700-c8e0-4651-a73b-5219b70a6572", "enterprise_project_id": "0", "runtime_stack": { "name": "Docker", "version": "", "type": "Docker", "deploy_mode": "container" }, "source": { "kind": "image", "storage": "swr", "url": "swr.cn-north-4.myhuaweicloud.com/servicestage-demo/test_02:v1", "version": "v1" }, "tomcat_opts": { "server_xml": "" }, "refer_resources": [ { "id": "1d3091a2-1ecf-11ee-ae69-0255ac1001ba", "type": "cce", "parameters": { "namespace": "default", "type": "VirtualMachine" } } ], "replica": 2, "config_mode": "ui", "limit_cpu": 0.25, "limit_memory": 0.5, "request_cpu": 0.25, "request_memory": 0.5, "external_accesses": [], "storages": [], "logs": [], "affinity": { "az": [], "node": [], "component": [] }, "anti_affinity": { "az": [], "node": [], "component": [] }, "update_strategy": { "type": "RollingUpdate", "max_surge": 0, "max_unavailable": 1 }, "command": { "args": [], "command": [] }, "custom_metric": {} }' 返回结果: { "job_id": "JOB870e9ffe-227e-43a9-9c84-20a7ad02e77c", "component_id": "f3f6cb89-831d-4579-8bbc-664487889e38" } 记录返回结果中加粗显示的job_id、component_id的值,用于替换后续示例中的{job_id}、{component_id}。 调用获取部署任务详细信息API查询创建组件任务是否成功,请求示例如下: curl -k -H "Content-Type:application/json;charset=utf8" -H "X-Auth-Token:$Token" -X GET "https://{servicestage_endpoint}/v3/{project_id}/cas/jobs/{job_id}" 返回结果: { "job": { "JOB_ID": "JOB870e9ffe-227e-43a9-9c84-20a7ad02e77c", "JOB_NAME": "provision/provMain", "JOB_TYPE": "PROVISION", "SERVICE_INSTANCE_ID": "429a35a0-dee8-4648-86f6-d1f8bc74ba52", "PROJECT_ID": "063a3158b1a34710b36ad208b9497d00", "ORDER_ID": "", "JOB_DESC": "provision/provMain", "EXECUTION_STATUS": "SUCCEEDED", "CREATED_BY": "585cc5c16cda4954b28d4eb460f06261" }, "tasks": [ { "MESSAGES": "{}", "TASK_ID": "Task-bc64b46c-1688-4787-b7ff-87cb53b346ea", "TASK_TYPE": "echo", "TASK_INDEX": 1, "TASK_NAME": "SEPARATOR_PREPARE_RESOUR CES ", "TASK_STATUS": "SUCCEEDED", "LAST_HEALTH_CHECK": "2020-02-04T04:01:03.344Z", "CREATED_AT": "2020-02-04T04:01:03.344Z", "OWNER_ID": "cas-mgr-69bb87d7c-wpqwb:30114" }, { "MESSAGES": "{}", "TASK_ID": "Task-15ec252f-bca0-401e-ae5b-798a639df92e", "TASK_TYPE": "echo", "TASK_INDEX": 4, "TASK_NAME": "SEPARATOR_BUILDING", "TASK_STATUS": "SUCCEEDED", "LAST_HEALTH_CHECK": "2020-02-04T04:01:03.346Z", "CREATED_AT": "2020-02-04T04:01:03.345Z", "OWNER_ID": "cas-mgr-69bb87d7c-wpqwb:30114" }, { "MESSAGES": "{}", "TASK_ID": "Task-52a5d1ae-2c54-46ec-8134-53e7b6a45fb7", "TASK_TYPE": "restful", "TASK_INDEX": 6, "TASK_NAME": "TN00091", "TASK_STATUS": "SUCCEEDED", "LAST_HEALTH_CHECK": "2020-02-04T04:01:08.924Z", "CREATED_AT": "2020-02-04T04:01:03.346Z", "OWNER_ID": "cas-mgr-69bb87d7c-wpqwb:30114" }, { "MESSAGES": "{}", "TASK_ID": "Task-a149b585-d31b-4c72-a665-d820efcb0bf9", "TASK_TYPE": "restful", "TASK_INDEX": 7, "TASK_NAME": "TN00094", "TASK_STATUS": "SUCCEEDED", "LAST_HEALTH_CHECK": "2020-02-04T04:01:08.961Z", "CREATED_AT": "2020-02-04T04:01:08.925Z", "OWNER_ID": "cas-mgr-69bb87d7c-wpqwb:30114" }, { "MESSAGES": "", "TASK_ID": "Task-a72fe8d8-8cc1-42b5-a097-0cf9e29692a7", "TASK_TYPE": "restful", "TASK_INDEX": 9, "TASK_NAME": "TN00097", "TASK_STATUS": "SUCCEEDED", "LAST_HEALTH_CHECK": "2020-02-04T04:01:38.975Z", "CREATED_AT": "2020-02-04T04:01:08.962Z", "OWNER_ID": "cas-mgr-69bb87d7c-wpqwb:30114" } ], "task_count": 5 } 调用根据组件ID修改组件信息API升级组件,请求示例如下: curl -k -H "Content-Type:application/json;charset=utf8" -H "X-Auth-Token:$token" -X PUT "https://{servicestage_endpoint}/v3/{project_id}/cas/applications/{application_id}/components/{component_id}" -d ' { "source": { "kind": "image", "storage": "swr", "url": "swr.cn-north-4.myhuaweicloud.com/demo/arm_tomcat8:v1" }, "version": "2023.0717.17160", "refer_resources": [ { "id": "1d3091a2-1ecf-11ee-ae69-0255ac1001ba", "type": "cce", "parameters": { "namespace": "default", "type": "ARM64" } } ], "limit_cpu": 0.25, "limit_memory": 0.5, "request_cpu": 0.25, "request_memory": 0.5, "mesher": {}, "affinity": {}, "anti_affinity": {}, "liveness_probe": {}, "readiness_probe": {}, "command": { "command": [], "args": [] }, "envs": [ { "name": "PAAS_PROJECT_ID", "inner": false, "value": "063a3158b1a34710b36ad208b9497d00" }, { "name": "CAS_APP_ID", "inner": false, "value": "f3f6cb89-831d-4579-8bbc-664487889e38" }, { "name": "PAAS_CLUSTER_ID", "inner": false, "value": "1d3091a2-1ecf-11ee-ae69-0255ac1001ba" }, { "name": "CAS_APPLICATION_ID", "inner": false, "value": "2c458700-c8e0-4651-a73b-5219b70a6572" }, { "name": "CAS_INSTANCE_VERSION", "inner": false, "value": "2023.0717.17062" }, { "name": "CAS_COMPONENT_ID", "inner": false, "value": "e1c3021b-df40-48e9-bd41-ef033fc77f2b" }, { "name": "CAS_INSTANCE_NAME", "inner": false, "value": "etst1-test-arm-5xdhrd" }, { "name": "CAS_COMPONENT_NAME", "inner": false, "value": "etst1" }, { "name": "PAAS_NAMESPACE", "inner": false, "value": "default" }, { "name": "PAAS_APP_NAME", "inner": false, "value": "etst1" }, { "name": "PAAS_PROJECT_NAME", "inner": false, "value": "cn-north-7" }, { "name": "CAS_INSTANCE_ID", "inner": false, "value": "f3f6cb89-831d-4579-8bbc-664487889e38" }, { "name": "CAS_ENVIRONMENT_NAME", "inner": false, "value": "test_arm" }, { "name": " AOM _DISCOVERY_RULE_VERSION", "inner": false, "value": "V1" }, { "name": "CAS_ENVIRONMENT_ID", "inner": false, "value": "21a43958-f64f-4077-8ae3-3a03bf0111c7" }, { "name": "testName", "inner": false, "value": "testValue" }, { "name": "PAAS_REGION_NAME", "inner": false, "value": "cn-north-7" }, { "name": "CAS_APPLICATION_NAME", "inner": false, "value": "app-test-application" } ], "deploy_strategy": { "type": "RollingRelease", "rolling_release": { "batches": "1" } }, "id": "f3f6cb89-831d-4579-8bbc-664487889e38", "name": "etst1" }' 返回结果: { "job_id": "JOB2209202b-617c-4591-b0c6-ef2521a943a2" } 记录返回结果中加粗显示的job_id的值,用于替换后续示例中的{job_id}。 调用2的接口,用3返回的job_id查询任务状态,等待任务完成。 调用根据组件ID下发组件任务API回滚组件,请求示例如下: curl -k -H "Content-Type:application/json;charset=utf8" -H "X-Auth-Token:$token" -X POST "https://{servicestage_endpoint}/v3/{project_id}/cas/applications/{application_id}/components/{component_id}/action" -d ' { "action": "rollback_current" }' 返回结果: { "job_id": "JOB66eb56db-062e-4462-ba95-8d3c63d5d462" } 记录返回结果中加粗显示的job_id的值,用于替换后续示例中的{job_id}。 调用2的接口,用5返回的job_id查询任务状态,等待任务完成。 调用根据组件ID下发组件任务API停止组件实例,请求示例如下: curl -k -H "Content-Type:application/json;charset=utf8" -H "X-Auth-Token:$token" -X POST "https://{servicestage_endpoint}/v3/{project_id}/cas/applications/{application_id}/components/{component_id}/action" -d ' { "action": "stop" }' 返回结果: { "job_id": "JOB2790bf9f-7d6e-473d-827f-1bb94e0cf10d" } 记录返回结果中加粗显示的job_id的值,用于替换后续示例中的{job_id}。 调用2的接口,用7返回的job_id查询任务状态,等待任务完成。
  • 操作步骤 调用创建应用API创建应用,请求示例如下: curl -k -H "Content-Type:application/json;charset=utf8" -H "X-Auth-Token:$Token" -X POST "https://{servicestage_endpoint}/v3/{project_id}/cas/applications" -d ' { "name": "app-test-application", "description": "test application", "enterprise_project_id": "0", "labels": [ { "key": "testKey", "value": "testValue" } ] }' 返回结果: { "id": "2c458700-c8e0-4651-a73b-5219b70a6572", "name": "app-test-application", "description": "test application", "project_id": "063a3158b1a34710b36ad208b9497d00", "enterprise_project_id": "0", "creator": "test_user", "create_time": 1689575641705, "update_time": 1689575641705, "unified_model": null, "labels": [ { "key": "testKey", "value": "testValue" } ] } 记录返回结果中加粗显示的应用ID,用于替换后续示例中的{application_id}。 调用根据应用ID修改应用配置API为应用添加应用环境变量,请求示例如下: curl -k -H "Content-Type:application/json;charset=utf8" -H "X-Auth-Token:$Token" -X PUT "https://{servicestage_endpoint}/v3/{project_id}/cas/applications/{application_id}/configuration" -d ' { "environment_id": "21a43958-f64f-4077-8ae3-3a03bf0111c7", "configuration": { "env": [ { "name": "testName", "value": "testValue" } ] } }' 返回结果: { "application_id": "2c458700-c8e0-4651-a73b-5219b70a6572", "environment_id": "21a43958-f64f-4077-8ae3-3a03bf0111c7", "configuration": { "env": [ { "name": "testName", "value": "testValue" } ] } } 调用根据应用ID获取应用详细信息API根据应用ID查询应用详细信息,请求示例如下: curl -k -H "Content-Type:application/json;charset=utf8" -H "X-Auth-Token:$token" -X GET "https://{servicestage_endpoint}/v3/{project_id}/cas/applications/{application_id}" 返回结果: { "id": "2c458700-c8e0-4651-a73b-5219b70a6572", "name": "app-test-application", "description": "test application", "project_id": "063a3158b1a34710b36ad208b9497d00", "enterprise_project_id": "0", "creator": "test_user", "create_time": 1689575641705, "update_time": 1689575641705, "unified_model": null, "labels": [ { "key": "testKey", "value": "testValue" } ], "component_count": 0 }
  • 操作场景 环境是用于组件部署和运行的计算(如云容器引擎 CCE、弹性云服务器 ECS等)、网络(如弹性负载均衡 ELB、弹性IP EIP等)和中间件(如分布式缓存 DCS、云数据库 RDS等)等基础资源的集合。ServiceStage把多种基础资源组合为一个环境,如:开发环境、测试环境、预生产环境和生产环境。按环境维度来管理资源、部署组件,可以减少具体基础资源运维管理的复杂性。 下面介绍如何调用创建环境API创建环境,再调用根据环境ID修改环境资源API为环境添加其他需要的资源,最后调用根据环境ID获取环境详细信息API根据环境ID查询环境详细信息。 API的调用方法请参见如何调用API。
  • 操作步骤 调用创建环境API创建环境,请求示例如下: curl -k -H "Content-Type:application/json;charset=utf8" -H "X-Auth-Token:$Token" -X POST "https://{servicestage_endpoint}/v3/{project_id}/cas/environments" -d ' { "name": "env-Kubernetes", "description": "test environment", "enterprise_project_id": "0", "charge_mode": "provided", "vpc_id": "081c539d-ed09-43b0-81d7-a87603e528b7", "labels": [ { "key": "testKey", "value": "testValue" } ], "deploy_mode": "container" }' 返回结果: { "id": "9cd33350-5d7f-46ec-ba6d-40ed793f0eb7", "name": "env-Kubernetes", "description": "test environment", "creator": "test_user", "enterprise_project_id": "0", "vpc_id": "081c539d-ed09-43b0-81d7-a87603e528b7", "deploy_mode": "container", "vm_cluster_size": 50, "labels": [ { "key": "testKey", "value": "testValue" } ], "create_time": 1689564968283, "update_time": 1689564968283, "resources": [] } 记录返回结果中加粗显示的环境ID,用于替换后续示例中的{environment_id}。 调用根据环境ID修改环境资源API为环境添加资源。 根据您已有的资源和需求,可以将和环境相同VPC下的计算、网络、中间件等多种类型的资源添加到环境中。请求示例如下: curl -k -H "Content-Type:application/json;charset=utf8" -H "X-Auth-Token:$Token" -X PUT "https://{servicestage_endpoint}/v3/{project_id}/cas/environments/{environment_id}/resources" -d ' { "resources": [ { "id": "d2917177-3436-4e53-a5bc-706c3529e0e7", "name": "elb-pu6a", "type": "elb" } ] }' 返回结果: { "resources": [ { "id": "d2917177-3436-4e53-a5bc-706c3529e0e7", "type": "elb", "name": "elb-pu6a" } ] } 调用根据环境ID获取环境详细信息API根据环境ID查询环境详细信息,请求示例如下: curl -k -H "Content-Type:application/json;charset=utf8" -H "X-Auth-Token:$Token" -X GET "https://{servicestage_endpoint}/v3/{project_id}/cas/environments/{environment_id}" 返回结果: { "id": "9cd33350-5d7f-46ec-ba6d-40ed793f0eb7", "name": "env-Kubernetes", "description": "test environment", "creator": "test_user", "enterprise_project_id": "0", "vpc_id": "081c539d-ed09-43b0-81d7-a87603e528b7", "deploy_mode": "container", "vm_cluster_size": 50, "labels": [ { "key": "testKey", "value": "testValue" } ], "create_time": 1689564968283, "update_time": 1689574181240, "resources": [ { "id": "d2917177-3436-4e53-a5bc-706c3529e0e7", "type": "elb", "name": "elb-pu6a" } ] }
  • 其他限制 云服务器因欠费而处于冻结状态,此时无法创建私有镜像,您必须先续费,解冻资源后再进行创建。 通过x86 CPU架构的云服务器创建的私有镜像,不能用于创建鲲鹏CPU架构的云服务器,也不能在鲲鹏CPU架构云服务器切换操作系统时使用。 通过外部镜像文件创建私有镜像时,若架构类型选择“x86”,则该私有镜像不能用于创建鲲鹏CPU架构的云服务器,也不能在鲲鹏CPU架构云服务器切换操作系统时使用。 32位操作系统的私有镜像不能创建超过4G内存规格的云服务器。因为32位系统的内存寻址空间最大为4GB。
  • 支持UEFI启动方式的操作系统版本 云服务器的启动方式包括BIOS启动和UEFI启动,二者区别请参见“UEFI启动方式与BIOS启动方式有哪些区别?”。 支持UEFI启动方式的操作系统版本如表1所示。 表1 支持UEFI启动方式的操作系统版本 操作系统类型 操作系统版本 Windows Windows Server 2019 Standard 64bit Windows Server 2019 Datacenter 64bit Windows Server 2016 Standard 64bit Windows Server 2016 Datacenter 64bit Windows Server 2012 R2 Standard 64bit Windows Server 2012 R2 Datacenter 64bit Windows Server 2012 Essentials R2 64bit Windows Server 2012 Standard 64bit Windows Server 2012 Datacenter 64bit Windows 10 64bit Ubuntu Ubuntu 19.04 Server 64bit Ubuntu 18.04 Server 64bit Ubuntu 16.04 Server 64bit Ubuntu 14.04 Server 64bit Red Hat Red Hat Linux Enterprise 7.4 64bit Red Hat Linux Enterprise 7.3 64bit Red Hat Linux Enterprise 7.1 64bit Red Hat Linux Enterprise 7.0 64bit Red Hat Linux Enterprise 6.9 64bit Red Hat Linux Enterprise 6.6 32bit Red Hat Linux Enterprise 6.5 64bit Oracle Linux Oracle Linux Server release 7.4 64bit Oracle Linux Server release 6.9 64bit openSUSE openSUSE 42.1 64bit SUSE SUSE Linux Enterprise Server 12 SP5 64bit SUSE Linux Enterprise Server 12 SP1 64bit SUSE Linux Enterprise Server 11 SP3 64bit Fedora Fedora 29 64bit Fedora 24 64bit Debian Debian GNU/Linux 8.8.0 64bit CentOS CentOS 7.6 64bit CentOS 7.5 64bit CentOS 7.4 64bit CentOS 7.0 64bit CentOS 6.9 64bit CentOS 6.6 64bit EulerOS EulerOS 2.8 64bit EulerOS 2.7 64bit EulerOS 2.5 64bit EulerOS 2.3 64bit EulerOS 2.2 64bit openEuler openEuler 20.03 64bit 中标麒麟 NeoKylin V7 64bit 统信 UOS 20 64bit 父主题: 相关支持列表
  • 步骤1:创建命名空间 登录云容器实例管理控制台。 在左侧导航栏中选择“命名空间”,在右侧页面中“通用计算型”命名空间下单击“创建”。 填写命名空间名称。 设置VPC,选择使用已有VPC或新建VPC,新建VPC需要填写VPC网段,建议使用网段:10.0.0.0/8~22,172.16.0.0/12~22,192.168.0.0/16~22。 此处VPC和子网的网段不能为10.247.0.0/16,10.247.0.0/16是云容器实例预留给负载访问的网段。如果您使用此网段,后续可能会造成IP冲突,导致负载无法创建或服务不可用;如果您不需要通过负载访问,而是直接访问Pod,则可以使用此网段。 设置子网网段。 您需要关注子网的可用IP数,确保有足够数量的可用IP,如果没有可用IP,则会导致负载创建失败。 单击“创建”。
  • 安装容器引擎 上传镜像前,您需要安装容器引擎,如果您已经安装了容器引擎,请确保容器引擎为1.11.2及以上版本。 参考购买弹性云服务器创建一台带有公网IP地址的Linux弹性云服务器。 作为演示,弹性云服务器和公网IP的规格不需要太高,例如弹性云服务器的规格为“1vCPUs | 2GiB”、公网IP带宽为“1 Mbit/s”即可,操作系统请选择“CentOS 7.6”。 您也可以使用其他机器安装容器引擎,不创建弹性云服务器。 返回弹性云服务器列表,单击“远程登录”登录购买的弹性云服务器。 使用如下命令快速安装容器引擎。 curl -fsSL get.docker.com -o get-docker.sh sh get-docker.sh sudo systemctl daemon-reload sudo systemctl restart docker
  • 构建镜像 此处以如何使用Dockerfile,并使用nginx为基础镜像构建镜像2048为例。在构建镜像之前,需要先创建Dockerfile文件。 从镜像仓库拉取nginx镜像,作为基础镜像: docker pull nginx 下载2048静态页面应用: git clone https://gitee.com/jorgensen/2048.git 构建Dockerfile。 输入命令: vi Dockerfile 编辑Dockerfile文件内容: FROM nginx MAINTAINER Allen.Li@gmail.com COPY . /usr/share/nginx/html EXPOSE 80 CMD ["nginx", "-g", "daemon off;"] nginx为基础镜像,基础镜像可根据创建的应用类型进行选择,例如创建的是Java应用,基础镜像可选择Java镜像。 /usr/share/nginx/html为nginx存放Web静态页面的路径。 80为容器端口。 Dockerfile内容格式,详情请参考Dockerfile reference。 构建镜像2048。 输入命令: docker build -t='2048' . 创建镜像成功,如下图: 图1 成功构建镜像 查询镜像: docker images 显示如下图,说明镜像构建成功: 图2 查询镜像
  • 创建 IAM 用户 如果您需要多用户协同操作管理您账号下的资源,为了避免共享您的密码/访问密钥,您可以通过IAM创建用户,并授予用户对应权限。这些用户可以使用特别的登录链接和自己单独的用户账号访问华为云,帮助您高效的管理资源,您还可以设置账号安全策略确保这些账号的安全,从而降低您的企业信息安全风险。 华为云注册账号无需授权,由华为云账号创建的IAM用户需要授予相应的权限才能使用CCI,具体请参见权限管理。
  • 操作流程 操作步骤 说明 准备工作 您需要 注册华为账号 ,并为账户充值。 步骤一:构建镜像并上传至SWR镜像仓库 将应用构建镜像并上传镜像仓库,便于在云容器实例创建负载时,拉取上传的镜像。 步骤二:创建命名空间 您需要在CCI服务中创建一个命名空间,便于项目管理。 步骤三:创建负载 配置基本信息和访问信息。 步骤四:访问负载 通过IP或 域名 去访问创建好的负载。 步骤五:清理资源 如果您在完成实践后不需要继续使用CCI,请及时清理资源以免产生额外扣费。
  • 步骤二:创建命名空间 登录云容器实例管理控制台。 在左侧导航栏中选择“命名空间”,在右侧页面中“通用计算型”命名空间下单击“创建”。 填写命名空间名称。 设置VPC,选择使用已有VPC或新建VPC,新建VPC需要填写VPC网段,建议使用网段:10.0.0.0/8~22,172.16.0.0/12~22,192.168.0.0/16~22。 此处VPC和子网的网段不能为10.247.0.0/16,10.247.0.0/16是云容器实例预留给负载访问的网段。如果您使用此网段,后续可能会造成IP冲突,导致负载无法创建或服务不可用;如果您不需要通过负载访问,而是直接访问Pod,则可以使用此网段。 设置子网网段。 您需要关注子网的可用IP数,确保有足够数量的可用IP,如果没有可用IP,则会导致负载创建失败。 单击“创建”。
  • 操作场景 您可以删除不需要的私有镜像。 删除私有镜像后,将无法找回,请谨慎操作。 删除私有镜像后,不能再使用该镜像创建云服务器或云硬盘。 删除私有镜像后,已使用该镜像创建的云服务器仍可正常使用,并会继续产生费用,但是无法重装操作系统,也不能创建相同配置的云服务器。 删除复制镜像的源镜像,对复制后的镜像没有影响;反之亦然。 删除正在制作的整机镜像可能会导致备份残留继续收费,如果不需要此备份,请在云备份或云服务器备份控制台进行删除。
  • 方式二:使用profile控制pod调度到CCI 登录集群节点,配置profile资源。 vi profile.yaml 限制CCE集群最大负载数,配置local maxNum和scaleDownPriority的profile模板示例如下: apiVersion: scheduling.cci.io/v1 kind: ScheduleProfile metadata: name: test-cci-profile namespace: default spec: objectLabels: matchLabels: app: nginx strategy: localPrefer location: local: maxNum: 20 # 当前暂不支持local/cci同时配置maxNum scaleDownPriority: 10 cci: {} 限制CCI集群最大负载数,配置cci maxNum和scaleDownPriority的profile的模板示例如下: apiVersion: scheduling.cci.io/v1 kind: ScheduleProfile metadata: name: test-cci-profile namespace: default spec: objectLabels: matchLabels: app: nginx strategy: localPrefer location: local: {} cci: maxNum: 20 # 当前暂不支持local/cci同时配置maxNum scaleDownPriority: 10 strategy:调度策略选择。可配置策略值:auto、enforce、localPrefer。详情请参见调度策略。 location内可配置线下IDC和云上pod限制数量maxNum和pod缩容优先级scaleDownPriority,maxNum取值范围[0~int32],scaleDownPriority取值范围[-100, 100]。 local字段和cci字段不可以同时设置maxNum。 缩容优先级为非必填项参数,如果不配置缩容优先级,默认值将为空。
  • 约束与限制 当前只有负载的原生标签能够被ScheduleProfile匹配,使负载能够被ScheduleProfile管理,将CCE集群的Pod调度到CCI。例如通过ExtensionProfile加到负载上的标签不能够被ScheduleProfile匹配,因此不会被ScheduleProfile管理调度功能。 当弹性到CCI的资源调度失败时,bursting节点会被锁定半小时,期间无法调度至CCI。用户可通过CCE集群控制台,使用kubectl工具查看bursting节点状态,若节点被锁定,可手动解锁bursting。
  • 方式一:通过配置labels控制pod调度到CCI 通过CCE集群控制台(console)创建pod调度到CCI。通过CCE集群创建工作负载时,选择CCI弹性承载策略配置,选择“不开启”以外的任意策略。 在CCE集群控制台(console)创建工作负载时,CCI弹性承载支持勾选“bursting-node”或者“virtual-kubelet”,如果使用CCI 1.0请勾选“virtual-kubelet”,如果使用CCI 2.0请勾选“bursting-node”。目前CCI 2.0仅对白名单用户开放,如需使用CCI 2.0服务,请提交工单申请开启CCI 2.0服务。 通过yaml文件在CCE集群节点创建pod调度CCI。成功安装bursting插件后,登录CCE集群节点,在工作负载的yaml文件中添加virtual-kubelet.io/burst-to-cci标签。 apiVersion: apps/v1 kind: Deployment metadata: name: test namespace: default labels: virtual-kubelet.io/burst-to-cci: 'auto' # 弹性到CCI spec: replicas: 2 selector: matchLabels: app: test template: metadata: labels: app: test spec: containers: - image: 'nginx:perl' name: container-0 resources: requests: cpu: 250m memory: 512Mi limits: cpu: 250m memory: 512Mi volumeMounts: [] imagePullSecrets: - name: default-secret
  • 约束与限制 metrics-server无法采集到通过bursting插件弹性到CCI 2.0上的Pod的监控数据,可能会影响HPA工作。如果HPA无法正常工作,请参考弹性伸缩进行处理。 从CCE bursting弹到CCI 2.0的pod,与从CCI 2.0前端或API创建的pod,如非必要,命名空间和pod名请勿同时重复,这将导致CCI 2.0侧的pod监控数据异常。从CCE侧查看pod的监控不受影响。
  • 策略参数 策略参数包含Version和Statement两部分,下面介绍策略参数详细说明。了解策略参数后,您可以根据场景自定义策略,如自定义策略使用样例。 表1 策略参数说明 参数 含义 值 Version 策略的版本。 1.1:代表基于策略的访问控制。 Statement: 策略的授权语句 Effect:作用 定义Action中的操作权限是否允许执行。 Allow:允许执行。 Deny:不允许执行。 说明: 当同一个Action的Effect既有Allow又有Deny时,遵循Deny优先的原则。 Action:授权项 操作权限。 格式为“服务名:资源类型:操作”。授权项支持通配符号*,通配符号*表示所有。 示例: "obs:bucket:ListAllMybuckets":表示查看OBS桶列表权限,其中obs为服务名,bucket为资源类型,ListAllMybuckets为操作。 您可以在对应服务“API参考”资料中查看该服务所有授权项,如OBS授权项。 Condition:条件 使策略生效的特定条件,包括条件键和运算符。 格式为“条件运算符:{条件键:[条件值1,条件值2]}”。 如果您设置多个条件,同时满足所有条件时,该策略才生效。 示例: "StringEndWithIfExists":{"g:UserName":["specialCharacter"]}:表示当用户输入的用户名以"specialCharacter"结尾时该条statement生效。 Resource: 资源类型 策略所作用的资源。 格式为“服务名:region:domainId:资源类型:资源路径”, 资源类型支持通配符号*,通配符号*表示所有。支持资源粒度授权的云服务和资源类型参见:支持IAM资源粒度授权的云服务。 示例: "obs:*:*:bucket:*": 表示所有的OBS桶。 "obs:*:*:object:my-bucket/my-object/*": 表示my-bucket桶my-object目录下的所有对象。 条件键 条件键表示策略语句的 Condition 元素中的键值。根据适用范围,分为全局条件键和服务条件键。 全局级条件键(前缀为g:)适用于所有操作,IAM提供两种全局条件键:通用全局条件键和其他全局条件键。 通用全局条件键:在鉴权过程中,云服务不需要提供用户身份信息,IAM将自动获取并鉴权。详情请参见:通用全局条件键。 其他全局条件键:在鉴权过程中,IAM通过云服务获取条件信息并鉴权。仅部分已对接的云服务支持其他全局条件键。 服务级条件键(前缀为服务缩写,如obs:)仅适用于对应服务的操作,详情请参见对应云服务的用户指南,如OBS请求条件。 表2 通用全局条件键 全局条件键 类型 说明 g:CurrentTime 时间 接收到鉴权请求的时间。以 ISO 8601 格式表示,例如:2012-11-11T23:59:59Z。示例参见1。 g:DomainName 字符串 请求者的账号名称。示例参见2。 g:MFAPresent 布尔值 是否使用MFA多因素认证方式 获取Token 。示例参见3。 g:MFAAge 数值 通过MFA多因素认证方式获取的Token的生效时长。该条件需要和g:MFAPresent一起使用。示例参见4。 g:PKITokenIssueTime 时间 PKI Token的签发时间。以ISO 8601格式表示,例如:2012-11-11T23:59:59Z。示例参见5。 g:ProjectName 字符串 项目名称。示例参见6。 g:UserId 字符串 IAM用户ID。示例参见7。 g:UserName 字符串 IAM用户名。示例参见8。 表3 其他全局条件键 全局条件键 类型 说明 g:SourceIp IP Address 请求用户的IP地址 g:SourceVpc String 请求用户的VPC ID g:SourceVpce String 请求用户的VPC Endpoint ID g:TagKeys String 资源标签键 g:ResourceTag/{TagKey} String 资源标签键值 g:CurrentTime 示例:表示用户在北京时间2023年3月1日8点到北京时间2023年3月30日8点可以创建IAM委托。注意:策略中g:CurrentTime条件键值的时间格式为UTC时间。 { "Version": "1.1", "Statement": [{ "Effect": "Allow", "Action": ["iam:roles:createRoles"], "Condition": { "DateGreaterThan": { "g:CurrentTime": ["2023-03-01T00:00:00Z"] }, "DateLessThan": { "g:CurrentTime": ["2023-03-30T00:00:00Z"] } } }] } g: DomainName 示例:表示仅有用户zhangsan可以创建委托。 { "Version": "1.1", "Statement": [{ "Effect": "Allow", "Action": ["iam:roles:createRoles"], "Condition": { "StringEquals": { "g:DomainName": ["zhangsan"] } } }] } g:MFAPresent 示例:表示请求者获取身份凭证时采用了MFA认证后才可以创建IAM委托。 { "Version": "1.1", "Statement": [{ "Effect": "Allow", "Action": ["iam:roles:createRoles"], "Condition": { "Bool": { "g:MFAPresent": ["true"] } } }] } g:MFAAge 示例:表示请求者获取身份凭证时采用了MFA认证的时间必须大于900s才可以创建IAM委托。 { "Version": "1.1", "Statement": [{ "Effect": "Allow", "Action": ["iam:roles:createRoles"], "Condition": { " NumberGreaterThanEquals ": { "g:MFAAge": ["900"] } } }] } g:PKITokenIssueTime 示例:表示用户在北京时间2023年3月1日8点前请求签发的PKI Token可以创建IAM委托。 策略中g:PKITokenIssueTime条件键值的时间格式为UTC时间。 { "Version": "1.1", "Statement": [{ "Effect": "Allow", "Action": ["iam:roles:createRoles"], "Condition": { "DateLessThan": { "g:PKITokenIssueTime": ["2023-03-01T00:00:00Z"] } } }] } g:ProjectName 示例:表示请求者获取的凭证范围必须是在北京四时才可以创建IAM委托。 { "Version": "1.1", "Statement": [{ "Effect": "Allow", "Action": ["iam:roles:createRoles"], "Condition": { " StringEquals ": { "g: ProjectName ": ["cn-north-4"] } } }] } g: UserId 示例:表示用户ID为xxxxxxxxxxx…的用户才可以创建IAM委托。 { "Version": "1.1", "Statement": [{ "Effect": "Allow", "Action": ["iam:roles:createRoles"], "Condition": { "StringEquals": { "g: UserId ": ["xxxxxxxxxxx…"] } } }] } g: UserName 示例:表示用户lisi才可以创建IAM委托。 { "Version": "1.1", "Statement": [{ "Effect": "Allow", "Action": ["iam:roles:createRoles"], "Condition": { "StringEquals": { "g: UserName ": ["lisi"] } } }] } 多值条件键 ForAllValues:测试请求集的每个成员的值是否为条件键集的子集。如果请求中的每个键值均与策略中的至少一个值匹配,则条件返回true。 { "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "ims:images:share" ], "Condition": { "ForAllValues:StringEquals": { "ims:TargetOrgPaths": [ "orgPath1", "orgPath2", "orgPath3" ] } } } ] } 此策略描述的是对于请求者发起共享的组织中所有组织路径必须是orgPath1、orgPath2或者orgPath3,那么允许共享。 假如请求者想共享镜像给组织路径orgPath1、orgPath3下的成员,策略匹配成功。 假如请求者想共享镜像给组织路径orgPath1、orgPath2、orgPath3、orgPath4下的成员,策略匹配失败。 ForAnyValue:测试请求值集的至少一个成员是否与条件键值集的至少一个成员匹配。如果请求中的任何一个键值与策略中的任何一个条件值匹配,则条件返回true。对于没有匹配的键或空数据集,条件返回false。 { "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "ims:images:share" ], "Condition": { "ForAnyValue:StringEquals": { "ims:TargetOrgPaths": [ "orgPath1", "orgPath2", "orgPath3" ] } } } ] } 此策略描述的是对于请求者发起共享的组织中任一一个组织路径是orgPath1、orgPath2或者orgPath3,那么允许共享。 假如请求者想共享镜像给组织路径orgPath1、orgPath4下的成员,策略匹配成功。 假如请求者想共享镜像给组织路径orgPath4、orgPath5下的成员,策略匹配失败。 条件键运算逻辑 图2 条件键运算逻辑示意图 对于同一条件键的多个条件值,采用OR运算逻辑,即请求值按照条件运算符匹配到任意一个条件值则返回true。 当运算符表示否定含义的时候(例如:StringNotEquals),则请求值按照条件运算符不能匹配到所有的条件值。 同一运算符下的不同条件键之间,采用AND运算逻辑。不同运算符之间,采用AND运算逻辑。
  • 允许访问的VPC Endpoint 仅在“API访问”页签中可进行配置。限制用户只能从具有设定ID的VPC Endpoint访问华为云API,例如:0ccad098-b8f4-495a-9b10-613e2a5exxxx。若未进行访问控制配置,则默认用户从所有VPC Endpoint都能访问API。 图2 允许访问的VPC Endpoint “允许访问的IP地址区间”、“允许访问的IP地址区间或网段”和“允许访问的VPC Endpoint”,如果同时设置,只要满足其中一种即可允许访问。 单击“恢复默认值”,可以将“允许访问的IP地址区间”恢复为默认值,即0.0.0.0~255.255.255.255,同时将“允许访问的IP地址区间或网段”、“允许访问的VPC Endpoint ”清空。
  • 计费说明 华为云 GaussDB (DWS)根据您选择的 数据仓库 节点规格及使用的相关资源进行计费。具体内容如表1所示。如您需快速了解GaussDB(DWS)服务的具体价格,请参见GaussDB(DWS)价格详情。 表1 GaussDB(DWS)计费项说明 计费项 计费说明 适用的计费模式 计费公式 数据仓库节点 对您选择的节点规格计费,计费详情请参见GaussDB(DWS)价格详情。 计费模式的详细说明请参见计费模式。 包年/包月计费、按需计费 节点规格单价*计费时长 快照存储空间 GaussDB(DWS)提供了部分免费存储空间,用于存放您的快照数据,免费空间内不计费。当快照数据存储空间超过免费空间大小时,超出部分按照 对象存储服务 (OBS)的计费规则进行计费,参见OBS价格详情。 免费空间大小是您的集群的总存储空间大小,即单节点存储空间大小 * 节点数。 按需计费 存储单价*存储量*计费时长 数据仓库服务磁盘存储 用户在可选范围内自定义集群使用的存储类型与存储容量,采用存储资源独立计费的方式。计费详情请参见GaussDB(DWS)价格详情。 说明: 即创建集群以及创建成功后集群详情界面显示的热存储(含缓存)该存储为磁盘存储,与OBS存储不同。 包年/包月计费、按需计费 热数据存储容量价格*热数据存储容量*节点数量*数据副本数量*计费时长 冷数据存储 用户在可选范围内自定义集群使用的存储类型与存储容量,采用存储资源折扣套餐独立计费的方式。 折扣套餐 冷数据存储容量(GB)*冷数据存储容量价格*计费时长(小时)*购买数量 冷分区数据存储 冷分区数据采用OBS存储性价比高,按需集群使用按需计费。 按需计费 冷分区数据存储容量价格*冷分区数据存储容量*节点数量*数据副本数量*计费时长 公网IP及带宽(可选) GaussDB(DWS)集群支持绑定弹性公网IP,所需费用按照虚拟私有云(VPC)服务的弹性公网IP计费规则进行计费。计费详情请参见弹性公网IP价格详情。 GaussDB(DWS)集群在华为云内部网络产生的流量不计费。 包年/包月计费、按需计费 按固定带宽值采用阶梯计费: 0Mbit/s~5Mbit/s(含):均为一个统一的单价 大于5Mbit/s:按每Mbit/s计费 弹性负载均衡 ELB(可选) 按照您实际使用时长收取费用,详情请参见弹性负载均衡价格详情: LCU费用:根据独享型实例每小时使用的性能容量单位 (Loadbalancer Capacity Unit,简称LCU) 数计费。 实例费用:根据用户的独享型实例使用时长(不足1小时按实际使用时长计算)计费。 包年/包月计费、按需计费 按照您实际使用时长收取费用: LCU费用:根据独享型实例每小时使用的性能容量单位 (Loadbalancer Capacity Unit,简称LCU) 数计费。 实例费用:根据用户的独享型实例使用时长(不足1小时按实际使用时长计算)计费。 数据库加密密钥(可选) 在创建GaussDB(DWS) 集群时,如果开启“加密数据库”的功能,需使用KMS(密钥管理服务)的密钥加解密数据库。密钥按照 数据加密 服务密钥的计费规则进行计费,详情请参见数据加密服务价格详情。 包年/包月计费、按需计费 开启密钥管理(KMS): 密钥个数:按创建成功或导入成功的密钥实例进行按需计费,以小时为单位,不设最低消费标准。 API请求次数:免费请求次数为20000次,超出的部分进行计费,以万次为单位。
  • 计费构成分析 可以将集群的使用阶段按照计费模式分为两段:在2023/03/18 15:30:00 ~ 2023/03/20 10:30:00期间为按需计费,2023/03/20 10:30:00 ~ 2023/04/20 23:59:59期间为包年/包月计费。 按需计费 在2023/03/18 15:30:00 ~ 2023/03/20 9:00:00期间按照dwsx2.2xlarge.m7规格计费,计费时长为41.5小时,费用计算如下: 在2023/03/20 9:00:00 ~ 2023/03/20 10:30:00期间按照dwsx2.4xlarge.m7规格计费,计费时长为1.5小时,费用计算如下: 包年/包月计费 在2023/03/20 10:30:00 ~ 2023/04/20 23:59:59期间为包年/包月计费,计费时长为1个月,费用计算如下: 由此可见,在3~4月份,该GaussDB(DWS)集群总共产生的费用为:556.35 + 42.28 + 13529.52 = 14128.15 元。
  • 计费场景 某用户于2023/03/18 15:30:00创建了一个按需计费的GaussDB(DWS)集群,规格配置如下: 节点规格:dwsx2.2xlarge.m7 热数据存储:100GB/节点 节点数量:3 数据盘:SSD云盘 用了一段时间后,用户发现集群当前规格无法满足业务需要,于2023/03/20 9:00:00规格调整为dwsx2.4xlarge.m7(48vCPUs,300GB)存储不变。因为该集群打算长期使用下去,于2023/03/20 10:30:00将集群计费模式转为包年/包月计费,购买时长为1个月。那么在3~4月份,该集群总共产生多少费用呢?
  • 日志管理使用方式 功能名称 功能描述 配置方式 配置日志 将日志对接LTS,并创建日志组和日志流。 配置日志 更改存储时长 (可选)默认存储日志的时间为7天,存储时间可以在1~360天之间进行设置。 更改日志存储时长 日志搜索与分析 (可选)通过合理的日志收集、高效的搜索方法和专业的分析工具,实现对系统或应用的全面监控和精细化管理。 请参见日志搜索与分析 日志可视化 (可选)将日志数据按照图表类型呈现。 请参见日志可视化 配置告警规则 (可选)监控日志中的关键词,通过在一定时间段内,统计日志中关键字出现的次数,实时监控服务运行状态。 请参见日志告警 日志字段查看 介绍日志的中各个字段代表的含义。 日志字段说明
  • 异常拦截排查 访问控制日志出现异常拦截:可能是防护规则/黑名单/白名单配置有误,需检查策略配置。 攻击事件日志出现异常拦截:可能是IPS当前的防护模式拦截了您的业务。 如果是单个流量被拦截,可将被拦截的IP加入白名单。 如果是多个流量被拦截,在日志中查看是被单个规则还是多个规则阻断。 单个规则阻断:修改该规则的防护动作,请参见修改基础防御规则动作。 多个规则阻断:修改当前的防护模式,请参见调整IPS防护模式拦截网络攻击。
  • 放行业务访问某平台的流量 假如您需要放行EIP(xx.xx.xx.48)对“cfw-test.com”和“*.example.com”的80端口和443端口的访问流量,设置参数如下,其余参数可根据您的部署进行填写。 将平台域名添加至应用型域名组,如图 添加某平台域名组所示。 配置两条防护规则: 一条拦截所有流量,如图 拦截所有流量所示,优先级置于最低。 一条放行EIP对某平台的流量访问,如图 放行IP对某平台的访问流量所示,优先级设置最高。 图1 添加某平台域名组 图2 拦截所有流量 图3 放行EIP对某平台的80端口和443端口的访问流量
  • 访问控制策略类型 访问控制策略分为“防护规则”和“黑/白名单”两类功能,区别如表 防护规则和黑/白名单的区别所示,流量命中某一条策略时,执行该策略的动作,各功能的防护顺序请参见 云防火墙 的防护顺序是什么?。 表1 防护规则和黑/白名单的区别 类型 支持的防护对象 网络类型 防护后的动作 配置方式 防护规则 五元组 IP地址组 地理位置(地域) 域名和域名组 公网IP 私网IP 设置为“阻断”:流量直接拦截。 设置为“放行”:流量被“防护规则”功能放行后,再经过入侵防御(IPS) 功能检测。 通过添加防护规则拦截/放行流量 黑名单 五元组 IP地址组 直接拦截流量。 通过添加黑白名单拦截/放行流量 白名单 流量被云防火墙放行,不再经过其它功能检测。
  • 通配符规则 参数名称 输入示例 说明 源/目的 0.0.0.0/0 所有IP。 域名 www.example.com 对www.example.com域名生效。 域名 *.example.com 所有以example.com为后缀的域名,例如:test.example.com。 服务-源端口/目的端口 1-65535 所有端口生效。 服务-源端口/目的端口 80-443 对80到443之间的所有端口生效。 服务-源端口/目的端口 80 443 对80和443端口生效。
共100000条