华为云用户手册

  • 操作步骤 部署组件。 调用部署组件接口,请求示例如下: curl -k -H "Content-Type:application/json" -H "X-Environment-ID: $env_id" -H "X-Auth-Token:$Token" -X POST "https://{cae_endpoint}v1/{project_id}/cae/applications/{application_id}/components/{component_id}/action" -d '{ "api_version": "v1", "kind": "Action", "metadata": { "name": "deploy", "annotations": { "version": "1.0.0" } }}' 返回结果: {"job_id": "68531a56-febe-4218-be23-97fe00454cd1"} 得到的job_id,可以通过job_id获取对应组件的部署任务状态。
  • 运行容器 使用容器引擎可以直接运行Wordpress和MySQL,且可以使用--link参数将两个容器连接,在不改动代码的情况下让Wordpress的容器访问MySQL的容器。 执行下面的命令运行MySQL。 docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=******** -e MYSQL_DATABASE=wordpress -d mysql:5.7 参数解释如下: --name指定容器的名称为some-mysql。 -e指定容器的环境变量。如这里指定环境变量MYSQL_ROOT_PASSWORD的值为********,请替换为您设置的密码。指定环境变量MYSQL_DATABASE,镜像启动时要创建的数据库名称为wordpress。 -d表示在后台运行。 执行下面的命令运行Wordpress。 docker run --name some-wordpress --link some-mysql:mysql -p 8080:80 -e WORDPRESS_DB_PASSWORD=******** -e WORDPRESS_DB_USER=root -d wordpress 参数解释如下: --name指定容器的名称为some-wordpress 。 --link指定some-wordpress容器链接some-mysql容器,并将some-mysql命名为mysql。这里--link只是提供了一种方便,不使用--link的话,可以指定some-wordpress的环境变量WORDPRESS_DB_HOST访问mysql的IP与端口。 -p指定端口映射,如这里将容器的80端口映射到主机的8080端口。 -e指定容器的环境变量,如这里指定环境变量WORDPRESS_DB_PASSWORD的值为********,请替换为您设置的密码。Wordpress的环境变量WORDPRESS_DB_PASSWORD必须与MySQL的环境变量MYSQL_ROOT_PASSWORD值相同,这是因为Wordpress需要密码访问MySQL数据库。WORDPRESS_DB_USER为访问数据的用户名,使用用户root去连接MySQL。 -d表示在后台运行。 Wordpress运行之后,就可以在本机通过http://127.0.0.1:8080访问Wordpress博客了,如下所示。
  • 创建命名空间 登录云容器实例管理控制台,左侧导航栏中选择“命名空间”。 在对应类型的命名空间下单击“创建”。 填写命名空间名称。 设置VPC。 选择使用已有VPC或新建VPC,新建VPC需要填写VPC网段,建议使用网段:10.0.0.0/8~24,172.16.0.0/12~24,192.168.0.0/16~24。 设置子网网段。 您需要关注子网的可用IP数,确保有足够数量的可用IP,如果没有可用IP,则会导致负载创建失败。 单击“创建”。
  • 概述 在云容器实例中,您可以使用多种方法创建负载,包括使用云容器实例的Console控制台界面、调用API部署应用,那这些方式的使用有什么不同的地方呢?这些方法又与直接运行Docker run命令运行容器有什么区别呢? 本文将通过运行一个Wordpress + MySQL的博客为例,比较这几种方法之间的异同,以利于您挑选合适的使用方法。 WordPress是使用PHP语言开发的博客平台。用户可以在支持PHP和MySQL数据库的服务上架设属于自己的网站,也可以把WordPress当作一个内容管理系统来使用。更多WordPress信息可以通过官方网站了解:https://wordpress.org/。 WordPress需配合MySQL一起使用,WordPress运行内容管理程序,MySQL作为数据库存储数据。在容器中运行通常会将WordPress和MySQL分别运行两个容器中,如下图所示。 父主题: 负载创建
  • 应用场景 /dev/shm由tmpfs文件系统构成,tmpfs是Linux/Unix系统上的一种基于内存的文件系统,故读写效率非常高。 目前有用户希望通过/dev/shm实现进程间数据交互或通过/dev/shm实现临时数据存储,此时CCI场景/dev/shm默认大小64M无法满足客户诉求,故提供修改/dev/shm size大小的能力。 本操作实践展示通过“memory类型EmptyDir”和“配置securityContext与mount命令”两种方式来修改/dev/shm容量。
  • 限制与约束 /dev/shm使用基于内存的tmpfs文件系统,不具备持久性,容器重启后数据不保留。 用户可通过两种方式修改/dev/shm容量,但不建议在一个Pod中同时使用两种方式进行配置。 EmptyDir所使用的memory从Pod申请的memory中进行分配,不会额外占用资源。 在/dev/shm中写数据相当于申请内存,此种场景下需评估进程内存使用量,当容器内的进程申请内存与EmptyDir中数据量之和超过容器请求的限制内存时,会出现内存溢出异常。 当需要修改/dev/shm容量时,容量大小通常设定为Pod内存申请量的50%。
  • 镜像制作 tensorflow社区有tensoflow的基础镜像,已经装好了基础的tensorflow库,它分支持GPU和支持CPU两个版本,在镜像中心即可下载。 GPU版本地址为 tensorflow/tensorflow:1.15.0-gpu CPU版本地址为 tensorflow/tensorflow:1.13.0 本文采用tensorflow官网中一个已经训练好的模型,对图片进行分类,模型名称Inception-v3。Inception-v3是在2012年ImageNet视觉识别挑战赛上训练出的模型,它将一个非常大的图片集进行了1000个种类的图片分类。Github有使用Inception-v3进行图片分类的代码。 训练模型的代码,均在工程https://gpu-demo.obs.cn-north-1.myhuaweicloud.com/gpu-demo.zip中,您需要将代码下载解压,并将代码工程打入镜像中。下面附上制作镜像的Dockerfile文件内容: FROM tensorflow/tensorflow:1.15.0-gpuADD gpu-demo /home/project/gpu-demo 其中ADD将gpu-demo工程拷贝到镜像的/home/project目录下,可以根据自己需要修改。 执行docker build -t tensorflow/tensorflow:v1 . 命令制作镜像(.表示当前目录,即Dockerfile文件所在目录)。 镜像制作好后需要上传到 容器镜像服务 ,具体步骤请参见https://support.huaweicloud.com/usermanual-swr/swr_01_0009.html。
  • Namespace 调用创建Namespace接口创建命名空间,并指定使用命名空间的类型。 { "apiVersion": "v1", "kind": "Namespace", "metadata": { "name": "namespace-test", "annotations": { "namespace.kubernetes.io/flavor": "gpu-accelerated" } }, "spec": { "finalizers": [ "kubernetes" ] }} 调用创建Network接口创建网络,与VPC与子网关联。 { "apiVersion": "networking.cci.io/v1beta1", "kind": "Network", "metadata": { "annotations": { "network.alpha.kubernetes.io/default-security-group": "{{security-group-id}}", "network.alpha.kubernetes.io/domain-id": "{{domain-id}}", "network.alpha.kubernetes.io/project-id": "{{project-id}}" }, "name": "test-network" }, "spec": { "availableZone": "{{zone}}", "cidr": "192.168.0.0/24", "attachedVPC": "{{vpc-id}}", "networkID": "{{network-id}}", "networkType": "underlay_neutron", "subnetID": "{{subnet-id}}" }}
  • MySQL 调用创建Deployment接口部署MySQL。 Deployment名称为mysql。 设置Pod的标签为app:mysql。 使用mysql:5.7镜像。 设置容器环境变量MYSQL_ROOT_PASSWORD为“********”,请替换为您设置的密码。 { "apiVersion": "apps/v1", "kind": "Deployment", "metadata": { "name": "mysql" }, "spec": { "replicas": 1, "selector": { "matchLabels": { "app": "mysql" } }, "template": { "metadata": { "labels": { "app": "mysql" } }, "spec": { "containers": [ { "image": "mysql:5.7", "name": "container-0", "resources": { "limits": { "cpu": "500m", "memory": "1024Mi" }, "requests": { "cpu": "500m", "memory": "1024Mi" } }, "env": [ { "name": "MYSQL_ROOT_PASSWORD", "value": "********" } ] } ], "imagePullSecrets": [ { "name": "imagepull-secret" } ] } } }} 调用创建Service接口创建一个Service,定义1中创建的Pod的访问策略。 Service名称为mysql。 选择标签为app:mysql的Pod,即关联1中创建的Pod。 负载访问端口3306映射到容器的3306端口。 Service的访问类型为ClusterIP,即使用ClusterIP在内部访问Service。 { "apiVersion": "v1", "kind": "Service", "metadata": { "name": "mysql", "labels": { "app": "mysql" } }, "spec": { "selector": { "app": "mysql" }, "ports": [ { "name": "service0", "targetPort": 3306, "port": 3306, "protocol": "TCP" } ], "type": "ClusterIP" }}
  • Wordpress 调用创建Deployment接口部署Wordpress。 Deployment名称为wordpress。 replicas值为2,表示创建2个pod。 设置Pod的标签为app:wordpress。 使用wordpress:latest镜像。 设置容器环境变量WORDPRESS_DB_PASSWORD为“********”,请替换为您设置的密码。此处的密码必须与MySQL的MYSQL_ROOT_PASSWORD一致。 { "apiVersion": "apps/v1", "kind": "Deployment", "metadata": { "name": "wordpress" }, "spec": { "replicas": 2, "selector": { "matchLabels": { "app": "wordpress" } }, "template": { "metadata": { "labels": { "app": "wordpress" } }, "spec": { "containers": [ { "image": "wordpress:latest", "name": "container-0", "resources": { "limits": { "cpu": "500m", "memory": "1024Mi" }, "requests": { "cpu": "500m", "memory": "1024Mi" } }, "env": [ { "name": "WORDPRESS_DB_PASSWORD", "value": "********" } ] } ], "imagePullSecrets": [ { "name": "imagepull-secret" } ] } } }} 调用创建Service接口创建一个Service,定义1中创建的Pod的访问策略。 Service名称为wordpress。 选择标签为app:wordpress的Pod,即关联1中创建的Pod。 负载访问端口8080映射到容器的80端口,80端口为wordpress镜像的默认对外暴露的端口。 Service的访问类型为ClusterIP,即使用ClusterIP在内部访问Service。 { "apiVersion": "v1", "kind": "Service", "metadata": { "name": "wordpress", "labels": { "app": "wordpress" } }, "spec": { "selector": { "app": "wordpress" }, "ports": [ { "name": "service0", "targetPort": 80, "port": 8080, "protocol": "TCP" } ], "type": "ClusterIP" }} 调用创建Ingress接口创建一个Ingress,定义wordpress的外部访问策略,即关联ELB实例(ELB实例需要与Wordpress负载在同一个VPC内)。 metadata.annotations.kubernetes.io/elb.id:ELB实例的ID。 metadata.annotations.kubernetes.io/elb.ip:ELB实例的IP地址。 metadata.annotations.kubernetes.io/elb.port:ELB实例的端口。 spec.rules:访问服务的规则集合。path列表,每个path(比如:/)都关联一个backend(比如“wordpress:8080”)。backend是一个service:port的组合。Ingress的流量被转发到它所匹配的backend。 这里配置完后,访问ELB的IP:端口的流量就会流向wordpress:8080这个Service,由于Service是关联了wordpress的Pod,所以最终访问的就是1中部署的wordpress容器。 { "apiVersion": "extensions/v1beta1", "kind": "Ingress", "metadata": { "name": "wordpress", "labels": { "app": "wordpress", "isExternal": "true", "zone": "data" }, "annotations": { "kubernetes.io/elb.id": "2d48d034-6046-48db-8bb2-53c67e8148b5", "kubernetes.io/elb.ip": "10.10.10.10", "kubernetes.io/elb.port": "9012" } }, "spec": { "rules": [ { "http": { "paths": [ { "path": "/", "backend": { "serviceName": "wordpress", "servicePort": 8080 } } ] } } ] }}
  • 使用场景 用户在线下IDC有自建的harbor镜像仓库,同时也会将镜像同步到华为云SWR镜像仓库。创建负载后,希望调度到自建Kubernetes集群节点上运行的Pod使用自建镜像仓库的镜像,弹性到CCI的Pod使用SWR的镜像,以提高镜像拉取效率。可通过在Pod.Annotations中加入注解可以实现弹性到CCI的Pod中容器使用的镜像与自建Kubernetes集群使用的镜像为不同地址。 通过Annotation "coordinator.cci.io/image-replacement"配置镜像替换策略。其值为如下所示json字符串:
  • 配置场景二 原Pod中容器使用不同的镜像仓库,可配置多条替换策略。 示例: 第一个容器匹配到第一条策略,将"harbor.domain"替换为"swr.cn-north-4.myhuaweicloud.com/org1"。 第二个容器匹配到第二条策略,将镜像名前加上"swr.cn-north-4.myhuaweicloud.com/org1"和"/"。 第三个容器匹配到第三条策略,将前缀"harbor.domain/a/b/c/d"替换为"swr.cn-north-4.myhuaweicloud.com/org2"。 因为需要完整匹配最后一个"/"之前的部分,第一条策略即便有与该镜像相同的前缀"harbor.domain",也不会生效。 替换策略: "coordinator.cci.io/image-replacement": '[{"repositoryPrefix":"harbor.domain","replaceWith":"swr.cn-north-4.myhuaweicloud.com/org1"},{"repositoryPrefix":"","replaceWith":"swr.cn-north-4.myhuaweicloud.com/org1"},{"repositoryPrefix":"harbor.domain/a/b/c/d","replaceWith":"swr.cn-north-4.myhuaweicloud.com/org2"}]' 替换前: containers: - name: container-0 image: 'harbor.domain/ubuntu:latest' - name: container-1 image: 'nginx:latest' - name: container-2 image: 'harbor.domain/a/b/c/d/redis:latest' 替换后: containers: - name: container-0 image: 'swr.cn-north-4.myhuaweicloud.com/org1/ubuntu:latest' - name: container-1 image: 'swr.cn-north-4.myhuaweicloud.com/org1/nginx:latest' - name: container-2 image: 'swr.cn-north-4.myhuaweicloud.com/org2/redis:latest'
  • 使用Nvidia-smi工具 为了支持查看GPU使用情况的场景,需要在镜像中注入nvidia-smi工具,根据购买的专属节点GPU驱动版本选择不同的nvidia-smi二进制文件。 nvidia-smi获取方式。 该二进制文件可以在nvidia官网,根据CUDA Toolkit版本选择下载对应版本的nvidia驱动包。 图1 NVIDIA驱动程序下载 以CUDA 10.1为例,可以下载得到对应版本的驱动包NVIDIA-Linux-x86_64-418.126.run文件,执行如下命令解压缩: sh NVIDIA-Linux-x86_64-418.126.run -x 在解压缩后的目录下即可找到官方提供的nvidia-smi工具二进制文件。 注入nvidia-smi工具。 将步骤1中得到的nvidia-smi二进制文件放在Dockerfile所在目录下,然后在同目录下的Dockerfile中新增注入语句: # inject nvidia-smi toolCOPY nvidia-smi /usr/bin/RUN chmod +x /usr/bin/nvidia-smi COPY命令会从Dockerfile文件所在的当前目录下去寻找名为nvidia-smi的文件,然后拷贝到镜像的/usr/bin/目录下。 父主题: GPU负载
  • 配置场景一 原Pod中所有容器镜像均使用同一镜像仓库与组织,配置一条替换策略即可。 示例:将所有容器镜像"harbor.domain/a/b/c/d"前缀都替换为SWR的镜像前缀"swr.cn-north-4.myhuaweicloud.com/org"。 替换策略: "coordinator.cci.io/image-replacement": '[{"repositoryPrefix":"harbor.domain/a/b/c/d","replaceWith":"swr.cn-north-4.myhuaweicloud.com/org"}]' 替换前: containers: - name: container-0 image: 'harbor.domain/a/b/c/d/ubuntu:latest' - name: container-1 image: 'harbor.domain/a/b/c/d/nginx:latest' 替换后: containers: - name: container-0 image: 'swr.cn-north-4.myhuaweicloud.com/org/ubuntu:latest' - name: container-1 image: 'swr.cn-north-4.myhuaweicloud.com/org/nginx:latest' 示例Deployment: apiVersion: apps/v1 kind: Deployment metadata: name: test-vk labels: virtual-kubelet.io/burst-to-cci: 'auto' spec: replicas: 20 selector: matchLabels: app: test-vk template: metadata: labels: app: test-vk annotations: coordinator.cci.io/image-replacement: '[{"repositoryPrefix":"harbor.domain/a/b/c/d","replaceWith":"swr.cn-north-4.myhuaweicloud.com/org"}]' spec: containers: - name: container-0 image: harbor.domain/a/b/c/d/ubuntu:latest resources: limits: cpu: 500m memory: 1024Mi requests: cpu: 500m memory: 1024Mi command: - /bin/bash - '-c' - sleep 10000 - name: container-1 image: harbor.domain/a/b/c/d/nginx:latest resources: limits: cpu: 500m memory: 1024Mi requests: cpu: 500m memory: 1024Mi command: - /bin/bash - '-c' - sleep 10000
  • 内核参数配置 CCI服务底座使用安全容器构建了业内领先的Serverless容器平台,同物理机系统内核隔离且互不影响。对于资深业务部署场景,内核参数调优是比较通用的方式。在安全范围内,CCI服务允许客户根据Kubernetes社区推荐的方案,通过Pod的安全上下文(Security Context)对内核参数进行配置,极大提升用户业务部署的灵活性。如果您对securityContext概念不够熟悉,更多信息可阅读Security Context。 在 Linux 中,最通用的内核参数修改方式是通过sysctl接口进行配置。在Kubernetes中,也是通过Pod的sysctl安全上下文(Security Context)对内核参数进行配置,如果您对sysctl概念不够熟悉,可阅读在 Kubernetes 集群中使用 sysctl。安全上下文(Security Context)作用于同一个Pod内的所有容器。 CCI服务支持修改的内核参数范围如下: kernel.shm*,kernel.msg*, kernel.sem,fs.mqueue.*,net.*(net.netfilter.*和net.ipv4.vs.*除外) 以下示例中,使用Pod SecurityContext来对两个sysctl参数net.core.somaxconn和net.ipv4.tcp_tw_reuse进行设置。 apiVersion:v1kind:Podmetadata: name: xxxxx namespace: auto-test-namespacespec: securityContext: sysctls: - name: net.core.somaxconn value: "65536" - name: net.ipv4.tcp_tw_reuse value: "1" ...... 进入容器确认配置生效: 父主题: 负载管理
  • 匹配与替换规则 替换策略可配置多条。各条替换策略的原字符串(repositoryPrefix)不允许重复。每个容器至多只会执行一条替换策略。配置替换策略无需考虑先后顺序,不同的配置顺序结果一致。 原Pod.spec中配置的container和initContainer镜像均支持替换。 若repositoryPrefix不为空,则匹配Pod中所有镜像名中最后一个"/"字符之前的字符串与该值相同的容器,对其最后一个"/"字符之前的部分替换为replaceWith的内容。 若repositoryPrefix为空,则对Pod中镜像名不包含前缀(即没有"/"字符)的容器,镜像名前加上replaceWith的内容和一个"/"字符。
  • 工作负载下发 登录CCE控制台。 选择CCE集群,单击进入CCE集群总览页面。 在导航栏左侧单击“工作负载”,进入工作负载首页。 单击“创建工作负载”,具体操作步骤详情请参见创建工作负载。 填写基本信息。“CCI弹性承载”选择“强制调度策略”。关于调度策略更多信息,请参考调度负载到CCI。 CCE集群创建工作负载时,需要弹性到CCI,健康检查不支持配置TCP启动探针。 进行容器配置。 配置完成后,单击“创建工作负载”。 在工作负载页面,选择工作负载名称,单击进入工作负载管理界面。 工作负载所在节点为CCI集群,说明负载成功已调度到CCI。
  • 安装插件 登录CCE控制台。 选择CCE集群,单击进入CCE集群总览页面。 在导航栏左侧单击“插件中心”,进入插件中心首页。 选择“CCE 突发弹性引擎 (对接 CCI)”插件,单击“安装”。 配置插件参数。 表1 插件参数说明 插件参数 说明 选择版本 插件的版本。插件版本和CCE集群存在配套关系,更多信息可以参考CCE突发弹性引擎(对接CCI)插件版本记录。 规格配置 用于配置插件负载的实例数及资源配额。 选择“系统预置规格”时,您可选择“单实例”或“高可用”规格。 选择“自定义规格”时,您可根据需求修改插件各个组件的副本数以及CPU/内存配置。 说明: CCE 突发弹性引擎 (对接 CCI) 插件在1.5.2及以上版本,将占用更多节点资源,请在升级CCE突发弹性引擎(对接 CCI)插件前预留空间配额。 单实例:需要预留一个节点,节点下至少需要有7个Pod空间配额。若开启网络互通,则需要有8个Pod空间配额。 高可用:需要预留两个节点,节点下至少需要有7个Pod空间配额,共计14个Pod空间配额。若开启网络互通,则需要有8个Pod空间配额,共计16个Pod空间配额。 弹性到CCI的业务量不同时,插件的资源占用也不相同。业务申请的POD、Secret、Congfigmap、PV、PVC会占用虚机资源。建议用户评估自己的业务使用量,按以下规格申请对应的虚机大小:1000pod+1000CM(300KB)推荐2U4G规格节点,2000pod+2000CM推荐4U8G规格节点,4000pod+4000CM推荐8U16G规格节点。 网络互通 开启后,支持CCE集群中的Pod与CCI集群中的Pod通过Kubernetes Service互通,并在插件安装时部署组件proxy。详细功能介绍请参考网络。
  • 插件卸载 登录CCE控制台。 选择CCE集群,单击进入CCE集群总览页面。 在导航栏左侧单击“插件中心”,进入插件中心首页。 选择“CCE 突发弹性引擎 (对接 CCI)”插件,单击“卸载”。 表2 特殊场景说明 特殊场景描述 场景现象 场景说明 CCE集群无节点,卸载插件。 插件卸载失败。 bursting插件卸载时会在集群中启动Job用于清理资源,卸载插件时请保证集群中至少有一个可以调度的节点。 用户直接删除集群,未卸载插件。 用户在CCI侧的命名空间中有资源残留,如果命名空间有计费资源,会造成额外计费。 由于直接删除集群,没有执行插件的资源清理Job,造成资源残留。用户可以手动清除残留命名空间及其下的计费资源来避免额外计费。 关于CCE突发弹性引擎(对接CCI)更多内容详情请参见:CCE突发弹性引擎(对接CCI)。
  • 约束与限制 仅支持VPC网络模式的CCE Standard集群和 CCE Turbo 集群,暂不支持Arm集群。如果集群中包含Arm节点,插件实例将不会部署至Arm节点。 暂不支持守护进程集(DaemonSet)以及HostNetwork网络模式的容器实例(Pod)弹性到CCI。 集群所在子网不能与10.247.0.0/16重叠,否则会与CCI命名空间下的Service网段冲突,导致无法使用。 暂不支持使用Volcano调度器将挂载 云存储 卷的容器实例(Pod)弹性到CCI。
  • 使用场景 在使用CCE或者其他K8s集群时,可以使用HostPath。由于CCI为共享集群,未开放HostPath能力,所以当使用HostPath的Pod想通过Virtual Kubelet弹到CCI时,会被vk-webhook拦截。如无法改变Pod spec.volumes中配置的HostPath,当前可通过配置Annotation的形式,允许让使用HostPath的Pod弹性到CCI上,但是VK在校验时需要去掉Pod中的HostPath或者将HostPath替换为localDir、emptyDir或者flexVolume。 通过在Pod.Annotations中加入注解可以做到HostPath转localDir、emptyDir或者flexVolume。
  • 开通服务操作 进入自然语言处理基础官网,单击“立即使用”,进入自然语言处理控制台。 在“总览”页面,选择需要使用的服务,在操作列单击“开通服务”。 如果操作列无开通服务选项,请使用华为云账号,即当前 IAM 账号的主账号登录自然语言处理控制台。 图1 开通服务 在弹框中单击“确定”,确认开通服务。 服务开通成功后,开通状态将显示为“已开通”。 NLP服务开通后,暂不支持关闭。开通服务时,计费规则默认为“按需计费”。按需计费时,不使用NLP服务,则不收费。如果您购买了套餐包,套餐包扣减规则请参见计费规则。
  • 使用ConfigMap配置Prometheus访问CCI 首先使用cci-iam-authenticator作为k8s client端的认证插件,通过用户名/密码的方式配置IAM认证信息。您可参照安装并设置kubectl进行配置。配置完成后,执行“kubectl config view”命令,获取$HOME/.kube/config路径下的kubeconfig文件。 图1 kubeconfig文件 以下示例是为Prometheus访问CCI所做的配置。使用此配置文件构造Prometheus连接API Server的信息。您只需将获取到的kubeconfig配置文件内容写入ConfigMap。 kind: ConfigMapapiVersion: v1 metadata: name: kubeconfig data: kubeconfig: |- apiVersion: v1 # cci-iam-authenticator生成的kubeconfig配置文件 ...
  • 使用ConfigMap管理Prometheus配置 为了能够方便地管理配置文件,我们这里将 prometheus.yml 文件用 ConfigMap 的形式进行管理。通过ConfigMap可以方便地做到配置解耦,使得不同环境有不同的配置。相比环境变量,Pod中引用的ConfigMap可以做到实时更新,当您更新ConfigMap的数据后,Pod中引用的ConfigMap会同步刷新。 创建prometheus-config.yml文件,并写入以下内容: kind: ConfigMapapiVersion: v1metadata: name: prometheus-config labels: name: prometheus-configdata: prometheus.yml: |- global: scrape_interval: 15s evaluation_interval: 15s scrape_configs: - job_name: kuberenete-pods # 对pod中应用的监控,自定义监控 kubernetes_sd_configs: - role: pod kubeconfig_file: /etc/kube/kubeconfig # 指定deployment挂载kubeconfig的路径 namespaces: names: - test # 要监控的命名空间列表 relabel_configs: - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape] action: keep regex: true - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path] action: replace target_label: __metrics_path__ regex: (.+) - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port] action: replace regex: ([^:]+)(?::\d+)?;(\d+) replacement: $1:$2 target_label: __address__ - action: labelmap regex: __meta_kubernetes_pod_label_(.+) - source_labels: [__meta_kubernetes_namespace] - action: replace target_label: kubernetes_namespace - source_labels: [__meta_kubernetes_pod_name] - action: replace target_label: kubernetes_pod_name - job_name: cci-monitor # 监控pod指标 kubernetes_sd_configs: - role: pod kubeconfig_file: /etc/kube/kubeconfig #指定deployment挂载kubeconfig的路径 namespaces: names: - test # 要监控的命名空间列表 relabel_configs: - source_labels: [__meta_kubernetes_pod_annotation_monitoring_cci_io_enable_pod_metrics] - action: drop regex: false - action: replace regex: ([^:]+)(?::\d+)? replacement: $1:19100 source_labels: [__meta_kubernetes_pod_ip] target_label: __address__ - action: replace regex: ([^:]+)(?::\d+)?;(\d+) replacement: $1:$2 source_labels: [__meta_kubernetes_pod_ip, __meta_kubernetes_pod_annotation_monitoring_cci_io_metrics_port] target_label: __address__
  • 使用Deployment部署Prometheus 创建prometheus的工作负载,将配置项挂载到工作负载中。使用Deployment部署Prometheus所用的镜像,相比于官方镜像额外打包了cci-iam-authenticator二进制。 示例中创建一个名为prometheus-config的Volume,Volume引用名为“prometheus-config”、“kubeconfig”、“prometheus-storage”的ConfigMap,再将Volume挂载到容器的“/tmp”路径下。 kind: DeploymentapiVersion: apps/v1 metadata: name: prometheus labels: app.kubernetes.io/component: prometheus app.kubernetes.io/instance: k8s app.kubernetes.io/name: prometheus app.kubernetes.io/part-of: kube-prometheus spec: replicas: 1 selector: matchLabels: app.kubernetes.io/component: prometheus # 架构中的组件 app.kubernetes.io/instance: k8s # 标识应用程序实例的唯一名称 app.kubernetes.io/name: prometheus # 应用程序的名称 app.kubernetes.io/part-of: kube-prometheus # 这是一个更高级别应用程序的名称 template: metadata: labels: app.kubernetes.io/component: prometheus app.kubernetes.io/instance: k8s app.kubernetes.io/name: prometheus app.kubernetes.io/part-of: kube-prometheus spec: volumes: # 在Volume中引用ConfigMap - name: prometheus-config configMap: name: prometheus-config defaultMode: 420 # ConfigMap卷中的所有文件默认设置为420 - name: kubeconfig configMap: name: kubeconfig defaultMode: 420 - name: prometheus-storage emptyDir: medium: LocalAuto sizeLimit: 10Gi containers: - name: prometheus image: 'swr.cn-north-7.myhuaweicloud.com/cci_k8s_gcr_io/...' args: # 传给可执行文件的参数(启动参数) - '--storage.tsdb.retention.time=12h' # 监控数据保留的时间 - '--config.file=/etc/prometheus/prometheus.yml' # 配置文件 - '--storage.tsdb.path=/prometheus/' # Prometheus写入数据库的地方 ports: - containerPort: 9090 protocol: TCP resources: limits: cpu: 500m memory: 1Gi requests: cpu: 500m memory: 1Gi volumeMounts: - name: prometheus-config mountPath: /etc/prometheus/ - name: kubeconfig mountPath: /etc/kube/ - name: prometheus-storage mountPath: /prometheus/ terminationMessagePath: /dev/termination-log # 表示容器的异常终止消息的路径 terminationMessagePolicy: File # 仅从终止消息文件中检索终止消息。 imagePullPolicy: Always restartPolicy: Always terminationGracePeriodSeconds: 30 # 优雅关闭的宽限期,即在收到停止请求后,有多少时间来进行资源释放或者做其它操作,如果到了最大时间还没有停止,会被强制结束。 dnsPolicy: ClusterFirst securityContext: {} schedulerName: default-scheduler strategy: type: RollingUpdate rollingUpdate: maxUnavailable: 25% maxSurge: 25% revisionHistoryLimit: 10 progressDeadlineSeconds: 600
  • 什么是区域、可用区 使用区域和可用区来描述数据中心的位置,您可以在特定的区域、可用区创建资源。 区域(Region):从地理位置和网络时延维度划分,同一个Region内共享弹性计算、块存储、对象存储、VPC网络、弹性公网IP、镜像等公共服务。Region分为通用Region和专属Region,通用Region指面向公共租户提供通用云服务的Region;专属Region指只承载同一类业务或只面向特定租户提供业务服务的专用Region。 可用区(AZ,Availability Zone):一个AZ是一个或多个物理数据中心的集合,有独立的风火水电,AZ内逻辑上再将计算、网络、存储等资源划分成多个集群。一个Region中的多个AZ间通过高速光纤相连,以满足用户跨AZ构建高可用性系统的需求。 图1阐明了区域和可用区之间的关系。 图1 区域和可用区 目前,华为云已在全球多个地域开放云服务,您可以根据需求选择适合自己的区域和可用区。
  • 有哪些途径可以使用自然语言处理的API? 共有三种方式可以基于已构建好的请求消息发起请求。 cURL cURL是一个命令行工具,用来执行各种URL操作和信息传输。cURL充当的是HTTP客户端,可以发送HTTP请求给服务端,并接收响应消息。cURL适用于接口调试。关于cURL详细信息请参见https://curl.haxx.se/。 编码 通过编码调用接口,组装请求消息,并发送处理请求消息。 REST客户端 Mozilla、Google都为REST提供了图形化的浏览器插件,发送处理请求消息。下载postman请参见https://www.getpostman.com/。
  • 操作步骤 进入 API Explorer 平台获取IAM用户Token接口。 选择Region,编辑获取用户Token接口的请求参数,进行具体的API调用。 Region 在Region下拉列表选取您需要访问的区域。 Params nocatalog为非必填,如果设置该参数,返回的响应体中将不显示catalog信息。任何非空字符串都将解释为true,并使该字段生效。 Body 通过切换输入方式可以选择表单填写或文本输入请求体。 表单填写:通过表单填写完成请求体,无需了解JSON语法,参考示例填写参数值。 文本输入:通过文本输入完成请求体,可以直接在编辑框内编写JSON格式的请求体。 { "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "domain": { "name": "IAM用户所属账号名" }, "name": "IAM用户名", "password": "IAM用户的登录密码" } } }, "scope": { "domain": { "name": "IAM用户所属账号名" } } }} 参数说明请参见:请求参数。 如果是第三方系统用户,没有在本系统设置登录密码,可以通过系统登录页面的找回密码功能设置登录密码,并在password中输入新设置的密码。 单击调试,发送API请求。 在返回的响应体中查看获取的用户Token,用户调用IAM其他API接口时,可以使用该Token进行鉴权。 Token的有效期为24小时,需要使用一个Token鉴权时,可以先缓存起来,避免频繁调用。 如果返回错误码,例如401,表示认证失败,请确认Request Body中请求参数填写正确后重新发送请求。
  • 如何选择区域? 选择区域时,您需要考虑以下几个因素: 地理位置 一般情况下,建议就近选择靠近您或者您的目标用户的区域,这样可以减少网络时延,提高访问速度。不过,在基础设施、BGP网络品质、资源的操作与配置等方面,中国大陆各个区域间区别不大,如果您或者您的目标用户在中国大陆,可以不用考虑不同区域造成的网络时延问题。 云服务之间的关系 如果多个云服务一起搭配使用,需要注意: 不同区域的弹性云服务器、关系型数据库、 对象存储服务 内网不互通。 不同区域的弹性云服务器不支持跨区域部署在同一负载均衡器下。 资源的价格 不同区域的资源价格可能有差异,请参见华为云服务价格详情。
  • 操作步骤 编辑获取用户Token接口的Request URL、Header、Body,进行具体的API调用。 Request URL 格式为:https://IAM地区与终端节点地址/API接口URI 访问网址:地区与终端节点,获取IAM区域与终端节点地址。 目前自然语言处理基础、语言生成、语言理解和 机器翻译 服务的API均支持“华北-北京四”区域。 图1 IAM区域与终端节点 访问网址:获取用户Token,获取API接口的URI。 以cn-north4为例,则Request URL为:https://iam.cn-north-4.myhuaweicloud.com/v3/auth/tokens 选择API接口获取方式,并将Request URL填写至postman中。 图2 Request URL示例 Request Header key:Content-Type,value:application/json;charset=utf8 图3 Headers参数示例 Request Body 修改Request Body样例中参数。 {"auth": {"identity": {"methods": [ "password" ],"password": {"user": {"domain": {"name": "账号名"},"name": "IAM用户名","password": "IAM用户密码"}}},"scope": {"domain": {"name": "账号名"}}} } 获取账号名、IAM用户名,请参见:获取账号、IAM用户、项目名称和ID。 如果未创建IAM用户,请先使用管理员账号创建IAM用户,在创建IAM用户时会设置IAM用户密码,详情请参见创建IAM用户。 如果是第三方系统用户,没有在本系统设置登录密码,可以通过系统登录页面的找回密码功能设置登录密码,并在password中输入新设置的密码。 单击“Send”,发送API请求。 在返回的响应头中查看获取的用户Token,用户调用IAM其他API接口时,可以使用该Token进行鉴权。 Token的有效期为24小时,需要使用一个Token鉴权时,可以先缓存起来,避免频繁调用。 如果返回错误码,例如401,表示认证失败,请确认Request Body中请求参数填写正确后重新发送请求。 如果您的调试结果异常,提示“Header Overflow”,可以参考故障处理解决Header溢出问题。
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全