华为云用户手册

  • 在环境变量中引用Secret Secret最常见的用法是作为环境变量注入到容器中,如下示例。 apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - image: nginx:latest name: container-0 resources: limits: cpu: 500m memory: 1024Mi requests: cpu: 500m memory: 1024Mi env: - name: key valueFrom: secretKeyRef: name: mysecret key: key1 imagePullSecrets: - name: imagepull-secret
  • 创建Secret 如下示例中定义的Secret中包含两条Key-Value。 apiVersion: v1 kind: Secret metadata: name: mysecret type: Opaque data: key1: VkZNME0wVlpVbEpQVHpGTFdrSkRWVWhCV2s5T1ZrNUxUVlZNUjBzMFRWcElVMFpVUkVWV1N3PT0= # Base64编码后的值 key2: T0VkR1RGRlZVRlpVU2xCWFdUZFBVRUZCUmtzPQ== # Base64编码后的值
  • 创建动态EIPPool 动态EIPPool,即根据用户在EIPPool中填写的配置,动态创建底层的EIP资源,同时在CCI命名空间下创建相应的EIP对象。 以下示例创建了一个名为eippool-demo1的动态EIPPool,具体字段含义见表1。 动态创建独占带宽类型的EIPPool,无需指定带宽ID,示例如下: apiVersion: crd.yangtse.cni/v1 kind: EIPPool metadata: name: eippool-demo1 namespace: xxx # EIPPool所在的命名空间,与Pod保持一致 spec: amount: 3 # EIP资源池中的EIP数量 eipAttributes: networkType: 5_bgp ipVersion: 4 bandwidth: name: cci-eippool-demo1 chargeMode: bandwidth shareType: PER size: 5 动态创建共享带宽类型的EIPPool,必须指定带宽ID且只需填写该字段,示例如下: apiVersion: crd.yangtse.cni/v1 kind: EIPPool metadata: name: eippool-demo1 namespace: xxx spec: amount: 3 eipAttributes: networkType: 5_bgp ipVersion: 4 bandwidth: id: xxx shareType: WHOLE #带宽类型为共享带宽时,必须指定带宽ID。 表1 参数说明 参数 参数含义 约束 name EIPPool的名称 建议EIPPool的名字长度不超过29个字节,超过字段将被截断,但不影响使用。 namespace EIPPool所在的命名空间 与Pod的命名空间保持一致。 amount EIP资源池中的EIP数量 取值范围为0~500。 networkType EIP的类型 取值范围:5_telcom(电信),5_union(联通),5_bgp(全动态BGP),5_sbgp(静态BGP),5_ipv6。 必须是系统具体支持的类型。 ipVersion 弹性公网IP的版本 取值范围:4、6,分别表示创建ipv4和ipv6。 必须是系统具体支持的类型 不填或空字符串时,默认创建ipv4。 chargeMode 按流量计费还是按带宽计费 取值范围:bandwidth,traffic,不填或者为空时默认是bandwidth。其中IPv6国外默认是bandwidth,国内默认是traffic。 shareType 带宽类型 取值范围:PER,WHOLE(PER为独占带宽,WHOLE是共享带宽)。 该字段为WHOLE时,必须指定带宽ID。 id 带宽ID 取值范围:WHOLE类型的带宽ID。 size 带宽大小 取值范围:1-200。 单位:Mbit/s。 具体范围以各区域配置为准,请参见控制台对应页面显示。 对于以上YAML文件中的EIP相关字段,您还可以在EIP参数界面查看参数具体的功能描述,取值范围和约束。 执行以下命令,查看EIPPool详情,-n表示EIPPool所在的命名空间。 回显信息中有名称为eippool-demo1的EIPPool,表示动态EIPPool已创建成功。 # kubectl get eippool -n $namespace_name NAME EIPS USAGE AGE eippool-demo1 0/3 39m 父主题: 创建EIPPool
  • 为kubectl上下文指定Namespace 上面创建Network是在指定的Namespace下创建的,本文档后续的资源创建都是在某个命名空间下操作,每次都指定命名空间比较麻烦,您可以为kubectl上下文指定命名空间,这样在某个上下文中,创建的资源就都是在某个命名空间下,方便操作。 指定Namespace只需要在设置上下文命令中添加一个“--namespace”选项,如下所示。 kubectl config set-context $context --namespace=$ns 其中,$ns为Namespace的名称;$context 为上下文的名称,可以自定义,也可执行如下命令获取: # kubectl config get-contexts CURRENT NAME CLUSTER AUTHINFO NAMESPACE cci-context-cn-east-3-1C8PNI0POPPCSFGXPM6S cci-cluster-cn-east-3 cci-user-cn-east-3-1C8PNI0POPPCSFGXPM6S * cci-context-cn-east-3-hwuser_xxx cci-cluster-cn-east-3 cci-user-cn-east-3-hwuser_xxx kubernetes-admin@kubernetes kubernetes kubernetes-admin 假设,上面创建的Namespace名称为namespace-test,则示例如下。 # kubectl config set-context cci-context --namespace=namespace-test 指定Namespace后,就可以使用 kubectl 命令直接操作云容器实例的相关资源。如下所示,执行kubectl get pod,查看Pod资源,一切正常。 # kubectl get pod No resources found.
  • 创建Namespace Namespace下需要有一个Network关联VPC及子网,创建完Namespace后需要创建一个Network。 通常情况下,没有频繁创建Namespace的需求,建议通过云容器实例的控制台界面创建Namespace,具体方法请参见创建命名空间。 以下示例创建一个名为namespace-test的Namespace,指定云容器实例的资源类型为general-computing。 apiVersion: v1 kind: Namespace metadata: name: namespace-test labels: sys_enterprise_project_id: "0" annotations: namespace.kubernetes.io/flavor: general-computing spec: finalizers: - kubernetes 这里的定义文件采用YAML格式描述(如果您对YAML格式不了解,可以参考YAML语法),也可使用JSON格式。 sys_enterprise_project_id:表示企业项目ID,可进入企业管理的企业项目详情页面获取。未开通企业管理的用户无需配置此参数。不配置时默认为0,表示default企业项目。 namespace.kubernetes.io/flavor: general-computing:指定命名空间类型。 命令空间的类型有如下两种: general-computing:通用计算型,支持创建含CPU资源的容器实例及工作负载,适用于通用计算场景。 gpu-accelerated:GPU型,支持创建含GPU资源的容器实例及工作负载,适用于深度学习、科学计算、视频处理等场景。 假如上面Namespace定义的文件名称为ns.yaml,则执行kubectl create -f ns.yaml即可创建命名空间,-f 表示从文件创建。 # kubectl create -f ns.yaml namespace/namespace-test created 执行kubectl get ns查询namespace是否创建成功,ns为namespace的缩写。 # kubectl get ns NAME STATUS AGE namespace-test Active 23s 如上,可以看到namespace-test这个命名空间创建成功,且存在的时长为23秒。 登录云容器实例控制台,单击左侧导航栏“命名空间”,您可以看到命令空间创建成功,但状态为“异常”。这是因为在云容器实例中,您需要为Namespace定义网络策略,具体操作方法请参见创建Network。 图2 Namespace-异常
  • Namespace与网络的关系 从网络角度看,命名空间对应一个虚拟私有云(VPC)中一个子网,如图1所示,在创建命名空间时会关联已有VPC或创建一个新的VPC,并在VPC下创建一个子网。后续在该命名空间下创建Pod、Service等资源时都会在对应的VPC及子网之内,且占用子网中的IP地址。 通常情况下,如果您在同一个VPC下还会使用其他服务的资源,您需要考虑您的网络规划,如子网网段划分、IP数量规划等,确保有可用的网络资源。 图1 命名空间与VPC子网的关系
  • 限制与约束 一个Pod只能绑定一个EIP,一个EIP只能被一个Pod绑定。 创建Pod时,可指定annotation属性,创建完成后,更新EIP相关的annotation均无效。 EIP随Pod创建的优先级高于使用EIPPool创建的EIP。 绑定已有EIP创建的优先级高于EIP随Pod创建的EIP。 绑定EIP的Pod,如果要被公网成功访问,需要添加放通相应公网请求流量的安全组规则。 已经被Pod绑定的弹性公网IP,请勿通过弹性公网IP的console或API直接操作(修改别名/删除/解绑/绑定/转包周期等操作),否则可能导致资源残留。 绑定已有EIP时,使用负载创建的Pod删除重建后,由于需要等待前一个Pod完成解绑,所以重建的Pod就绪时间会变长。 绑定已有的EIP必须是用户手动创建给Pod使用的,不能使用EIPPool生成的EIP,否则会导致EIP状态异常。
  • 非安全环境配置kubectl 参照上述操作,安装并设置kubectl。 编辑kubeconfig文件,删除敏感信息参数。 Linux系统,kubeconfig文件默认位于$HOME/.kube/config。 表2 待删除敏感信息参数 Command Flag Environment Value Description --domain-name DOMAIN_NAME 租户名 --user-name USER_NAME 子用户名 --password PASSWORD 用户密码 --ak ACCESS_KEY_ID Access Key --sk SECRET_ACCESS_KEY Secret Key --cache CREDENTIAL_CACHE 是否开启缓存Token 更多参数说明请参见cci-iam-authenticator使用参考。 配置删除参数相应的环境变量来使用kubectl,以AK/SK为例。 export ACCESS_KEY_ID=xxxxxxx export SECRET_ACCESS_KEY=xxxxxxx export CREDENTIAL_CACHE=false kubectl get ns 执行上述命令后,提示如下类似信息: No resources found.
  • 获取AK/SK AK(Access Key ID):访问密钥ID。与私有访问密钥关联的唯一标识符;访问密钥ID和私有访问密钥一起使用,对请求进行加密签名。 SK(Secret Access Key):与访问密钥ID结合使用的密钥,对请求进行加密签名,可标识发送方,并防止请求被修改。 登录管理控制台。 单击用户名,在下拉列表中单击“我的凭证”。 在“我的凭证”页面,单击“访问密钥”页签。 单击“新增访问密钥”,输入验证码。 单击“确定”,生成并下载访问密钥。 为防止访问密钥泄露,建议您将其保存到安全的位置。
  • 安装并设置kubectl 以下操作以Linux环境为例,更多详情信息请参见安装和配置kubectl。 将下载kubectl中下载的kubectl赋予可执行权限,并放到PATH目录下。 chmod +x ./kubectl mv ./kubectl $PATH 其中,$PATH为PATH路径(如/usr/local/bin),请替换为实际的值。 您还可以通过如下命令查看kubectl的版本,如下所示。 kubectl version --client=true Client Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.0", GitCommit:"e19964183377d0ec2052d1f1fa930c4d7575bd50", GitTreeState:"clean", BuildDate:"2020-08-26T14:30:33Z", GoVersion:"go1.15", Compiler:"gc", Platform:"linux/amd64"} 配置IAM认证信息并持久化到本地。 将下载cci-iam-authenticator中下载的cci-iam-authenticator赋予可执行权限,并放到PATH目录下。 chmod +x ./cci-iam-authenticator mv ./cci-iam-authenticator $PATH 初始化cci-iam-authenticator配置。 初始化cci-iam-authenticator提供了AK/SK和用户名/密码两种方式,请选择其中一种执行。 使用AK/SK的方式配置IAM认证信息 cci-iam-authenticator generate-kubeconfig --cci-endpoint=https://$endpoint --ak=xxxxxxx --sk=xxxxxx 其中,endpoint为云容器实例的Endpoint,获取方法请参见地区和终端节点;ak、sk的获取方法请参见获取AK/SK,ak为文件中Access Key部分,sk为文件中Secret Key部分。 例如,Endpoint为https://cci.cn-north-4.myhuaweicloud.com,ak的值为my-ak,sk的值为ABCDEFAK.. ,则命令如下所示: cci-iam-authenticator generate-kubeconfig --cci-endpoint=https://cci.cn-north-4.myhuaweicloud.com --ak=my-ak --sk=ABCDEFAK.. 执行上述命令后,显示如下类似信息: Switched to context "cci-context-cn-north-4-my-ak" 其中,cci-context-cn-north-4-my-ak为context名,可通过kubectl config get-contexts命令查看。 使用用户名/密码的方式配置IAM认证信息 cci-iam-authenticator generate-kubeconfig --cci-endpoint=https://$endpoint --domain-name=xxxxxxx --user-name=xxxxxx --password='xxxxxx' 其中,endpoint为云容器实例的Endpoint,domain-name为租户名,user-name为子用户名,password为子用户密码,请根据替换为实际的值。 若无子用户,user-name与domain-name配置一致即可,也可以不添加user-name参数。 IAM的Endpoint请参见地区和终端节点,请注意需要使用与云容器实例地区相同的Endpoint。 在非安全的环境中使用kubectl,建议您完成此步骤后,使用环境变量的方式重新配置认证信息,具体参考非安全环境配置kubectl。 配置完成后,即可通过kubectl命令操作云容器实例的相关资源。 例如,查看北京四的namespace资源。 kubectl get ns No resources found. 您可以从回显中看到北京四没有任何命名空间,在云容器实例中创建资源首先需要创建一个命名空间,具体方法请参见Namespace和Network。 当通过API访问公有云系统时,需要使用访问用户名密码或者密钥(AK/SK)进行身份认证并对请求进行加密,确保请求的机密性、完整性和请求双方身份的正确性。请妥善保存$HOME/.kube/config配置文件,确保访问密钥不被非法使用。 当开启cache缓存token提高访问性能时,token会以文件的方式保存在$HOME/.cci/cache的子目录下,请及时清理。 当发现访问密钥被非法使用(包括丢失、泄露等情况),可以自行删除或者通知管理员重置访问密钥,重新配置。 删除的访问密钥将无法恢复。
  • 获取云容器实例Endpoint Endpoint在地区和终端节点页面获取,如下表所示。 表3 地区和终端节点 区域名称 区域 终端节点(Endpoint) 华北-北京四 cn-north-4 cci.cn-north-4.myhuaweicloud.com 华东-上海一 cn-east-3 cci.cn-east-3.myhuaweicloud.com 华东-上海二 cn-east-2 cci.cn-east-2.myhuaweicloud.com 华南-广州 cn-south-1 cci.cn-south-1.myhuaweicloud.com 西南-贵阳一 cn-southwest-2 cci.cn-southwest-2.myhuaweicloud.com
  • 下载cci-iam-authenticator 在CCI官网下载cci-iam-authenticator二进制,最新版本为v2.6.17。 针对不同的操作系统,cci-iam-authenticator的下载地址如表1所示。 表1 下载地址 操作系统 下载地址 查看帮助 Linux AMD 64位 cci-iam-authenticator_linux-amd64 cci-iam-authenticator_linux-amd64_sha256 cci-iam-authenticator使用参考 Darwin AMD 64位 cci-iam-authenticator_darwin-amd64 cci-iam-authenticator_darwin-amd64.sha256 Darwin ARM 64位 cci-iam-authenticator_darwin-arm64 cci-iam-authenticator_darwin-arm64.sha256
  • 生命周期管理 云容器实例基于Kubernetes,提供了容器生命周期钩子,在容器的生命周期的特定阶段执行调用,比如容器在停止前希望执行某项操作,就可以注册相应的钩子函数。目前提供的生命周期钩子函数如下所示。 启动后处理(PostStart):负载启动后触发。 停止前处理(PreStop):负载停止前触发。 调用接口时,只需配置pod的lifecycle.postStart或lifecycle.preStop参数,如下所示。 apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - image: nginx:latest name: container-0 resources: limits: cpu: 500m memory: 1024Mi requests: cpu: 500m memory: 1024Mi lifecycle: postStart: # 启动后处理 exec: command: - "/postStart.sh" preStop: # 停止前处理 exec: command: - "/preStop.sh" imagePullSecrets: - name: imagepull-secret 父主题: Pod
  • 创建静态EIPPool 静态EIPPool,即根据用户指定的多个未使用的EIP,静态纳管底层的EIP资源,同时在CCI命名空间下创建相应的EIP对象。如果EIPPool中的EIP已经被NAT或者ELB使用,则会纳管失败。 以下示例创建了一个名为eippool-demo2的静态EIPPool,并在此EIPPool中纳管10.246.173.254和10.246.172.3两个公网IP。示例如下: apiVersion: crd.yangtse.cni/v1 kind: EIPPool # 创建的对象类别 metadata: # 资源对象的元数据定义 name:eippool-demo2 spec: # EIPPool的配置信息 eips: # 纳管的公网IP - 10.246.173.254 - 10.246.172.3 父主题: 创建EIPPool
  • Readiness Probe的工作原理 如果调用kubectl describe命令查看Service的信息,您会看到如下信息。 $ kubectl describe svc nginx -n $namespace_name Name: nginx ...... Endpoints: 192.168.113.81:80,192.168.165.64:80,192.168.198.10:80 ...... 可以看到一个Endpoints,Endpoints同样也是Kubernetes的一种资源对象,可以查询得到。 $ kubectl get endpoints -n $namespace_name NAME ENDPOINTS AGE nginx 192.168.113.81:80,192.168.165.64:80,192.168.198.10:80 14m 这里的192.168.113.81:80是Pod的IP:Port,通过如下命令可以查看到Pod的IP,与上面的IP一致。 # kubectl get pods -o wide -n $namespace_name NAME READY STATUS RESTARTS AGE IP nginx-55c54cc5c7-49chn 1/1 Running 0 1m 192.168.198.10 nginx-55c54cc5c7-x87lb 1/1 Running 0 1m 192.168.165.64 nginx-55c54cc5c7-xp4c5 1/1 Running 0 1m 192.168.113.81 通过Endpoints就可以实现Readiness Probe的效果,当Pod还未就绪时,将Pod的IP:Port在Endpoints中删除,Pod就绪后再加入到Endpoints中,如下图所示。 图1 Readiness Probe的实现原理
  • HTTP GET Readiness Probe的配置与存活探针(livness probe)一样,都是在 Pod Template 的 containers 里面,如下所示,这个Readiness Probe向Pod发送HTTP请求,当Probe收到2xx或3xx返回时,说明Pod已经就绪。 apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - image: nginx:latest name: container-0 resources: limits: cpu: 500m memory: 1024Mi requests: cpu: 500m memory: 1024Mi readinessProbe: # readinessProbe httpGet: # HTTP GET定义 path: /read port: 80 imagePullSecrets: - name: imagepull-secret
  • Exec Exec方式与HTTP GET方式一致,如下所示,这个探针执行ls /ready命令,如果这个文件存在,则返回0,说明Pod就绪了,否则返回其他状态码。 apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - image: nginx:latest name: container-0 resources: limits: cpu: 500m memory: 1024Mi requests: cpu: 500m memory: 1024Mi readinessProbe: # Readiness Probe exec: # 定义 ls /ready 命令 command: - ls - /ready imagePullSecrets: - name: imagepull-secret 将上面Deployment的定义保存到deploy-read.yaml文件中,删除之前创建的Deployment,用deploy-read.yaml创建这个Deployment。 # kubectl delete deploy nginx -n $namespace_name deployment.apps "nginx" deleted # kubectl create -f deploy-read.yaml -n $namespace_name deployment.apps/nginx created 这里由于nginx镜像不包含 /ready 这个文件,所以在创建完成后容器不在Ready状态,如下所示,注意READY这一列的值为0/1,表示容器没有Ready。 # kubectl get po -n $namespace_name NAME READY STATUS RESTARTS AGE nginx-7955fd7786-686hp 0/1 Running 0 7s nginx-7955fd7786-9tgwq 0/1 Running 0 7s nginx-7955fd7786-bqsbj 0/1 Running 0 7s 再次查看Service,发现Endpoints一行的值为空,表示没有Endpoints。 $ kubectl describe svc nginx -n $namespace_name Name: nginx ...... Endpoints: ...... 如果此时给容器中创建一个 /ready 的文件,让Readiness Probe成功,则容器会处于Ready状态。再查看Pod和Endpoints,发现创建了/ready文件的容器已经Ready,Endpoints也已经添加。 # kubectl exec -n $namespace_name nginx-7955fd7786-686hp -- touch /ready # kubectl get po -o wide -n $namespace_name NAME READY STATUS RESTARTS AGE IP nginx-7955fd7786-686hp 1/1 Running 0 10m 192.168.93.169 nginx-7955fd7786-9tgwq 0/1 Running 0 10m 192.168.166.130 nginx-7955fd7786-bqsbj 0/1 Running 0 10m 192.168.252.160 # kubectl get endpoints -n $namespace_name NAME ENDPOINTS AGE nginx 192.168.93.169:80 14d
  • Readiness Probe高级配置 与Liveness Probe相同,Readiness Probe也有同样的高级配置选项,上面nginx Pod的describe命令回显有中有如下行。 Readiness: exec [ls /var/ready] delay=0s timeout=1s period=10s #success=1 #failure=3 这一行表示readiness probe的具体参数配置,其含义如下: delay=0s 表示容器启动后立即开始探测,没有延迟时间 timeout=1s 表示容器必须在1s内做出相应反馈给probe,否则视为探测失败 period=10s 表示每10s探测一次 #success=1 表示探测连续1次成功表示成功 #failure=3 表示探测连续3次失败后会重启容器 这些是创建时默认设置的,您也可以手动配置,如下所示。 readinessProbe: # Readiness Probe exec: # 定义 ls /readiness/ready 命令 command: - ls - /readiness/ready initialDelaySeconds: 10 # 容器启动后多久开始探测 timeoutSeconds: 2 # 表示容器必须在2s内做出相应反馈给probe,否则视为探测失败 periodSeconds: 30 # 探测周期,每30s探测一次 successThreshold: 1 # 连续探测1次成功表示成功 failureThreshold: 3 # 连续探测3次失败表示失败
  • 高级配置 创建Secret Secret是一种加密存储的资源对象,您可以将认证信息、证书、私钥等保存在密钥中,从而解决了密码、token、密钥等敏感数据的配置问题。 如下示例中定义的Secret中包含三条Key-Value。 apiVersion: v1 kind: Secret metadata: name: cert type: Opaque data: ca.crt: ... server.crt: ... server.key: ... 配置tls证书 用户可以通过配置annotation指定exporter server的tls证书套件,进行加密通信,并使用文件挂载的方式,关联证书secret。示例如下: kind: Deployment apiVersion: apps/v1 metadata: name: nginx-tls spec: replicas: 1 selector: matchLabels: app: nginx-tls template: metadata: labels: app: nginx-tls annotations: monitoring.cci.io/enable-pod-metrics: "true" monitoring.cci.io/metrics-port: "19100" monitoring.cci.io/metrics-tls-cert-reference: cert/server.crt monitoring.cci.io/metrics-tls-key-reference: cert/server.key monitoring.cci.io/metrics-tls-ca-reference: cert/ca.crt sandbox-volume.openvessel.io/volume-names: cert spec: volumes: - name: cert secret: secretName: cert defaultMode: 384 containers: - name: container-0 image: 'nginx:alpine' resources: limits: cpu: 1000m memory: 2048Mi requests: cpu: 1000m memory: 2048Mi volumeMounts: - name: cert mountPath: /tmp/secret0 imagePullSecrets: - name: imagepull-secret 表3 tls证书参数说明 Annotation 功能 可选值 默认值 monitoring.cci.io/metrics-tls-cert-reference tls证书volume引用 ${volume-name}/${volume-keyOrPath}(卷/路径) 无(使用http) monitoring.cci.io/metrics-tls-key-reference tls私钥volume引用 ${volume-name}/${volume-keyOrPath} 无(使用http) monitoring.cci.io/metrics-tls-ca-reference tls CA volume引用 ${volume-name}/${volume-keyOrPath} 无(使用http) 以上参数的值为tls的证书、私钥、CA文件所在存储卷的“卷名”和“路径”。
  • 基础配置 以下示例介绍Pod资源监控指标的基础配置方式,提供了Pod级别特性开关和自定义端口的能力。 kind: Deployment apiVersion: apps/v1 metadata: name: nginx-exporter spec: replicas: 1 selector: matchLabels: app: nginx-exporter template: metadata: labels: app: nginx-exporter annotations: monitoring.cci.io/enable-pod-metrics: "true" monitoring.cci.io/metrics-port: "19100" spec: containers: - name: container-0 image: 'nginx:alpine' resources: limits: cpu: 1000m memory: 2048Mi requests: cpu: 1000m memory: 2048Mi imagePullSecrets: - name: imagepull-secret 表2 参数说明 Annotation 功能 可选值 默认值 monitoring.cci.io/enable-pod-metrics 是否开启监控指标特性 true,false(不区分大小写) true monitoring.cci.io/metrics-port 指定pod exporter启动监听端口 合法端口(1~65535) 19100
  • 资源监控指标 资源基础监控包含CPU/内存/磁盘等类别,具体请参见资源监控指标。 表1 资源监控指标 监控指标类 指标名称 释义 CPU container_cpu_system_seconds_total System CPU累积占用时间(单位:秒) container_cpu_usage_seconds_total 容器在所有CPU内核上的累积占用时间 (单位:秒) container_cpu_user_seconds_total User CPU累积占用时间(单位:秒) container_cpu_cfs_periods_total 已经执行的CPU时间周期数 container_cpu_cfs_throttled_periods_total 被限流的CPU时间周期 container_cpu_cfs_throttled_seconds_total 被限流的CPU时间(单位:秒) 文件系统/磁盘IO container_fs_inodes_free 文件系统的可用inode数量 container_fs_usage_bytes 文件系统的使用量(单位:字节) container_fs_inodes_total 文件系统的总计inode数量 container_fs_io_current 磁盘/文件系统当前正在进行的 I/O 数量 container_fs_io_time_seconds_total 磁盘/文件系统花费在 I/O 上的累计秒数 container_fs_io_time_weighted_seconds_total 磁盘/文件系统累积加权 I/O 时间 container_fs_limit_bytes 容器可以使用的磁盘/文件系统总量(单位:字节) container_fs_reads_bytes_total 容器累积读取磁盘/文件系统数据的总量(单位:字节) container_fs_read_seconds_total 容器累积读取磁盘/文件系统数据的秒数 container_fs_reads_merged_total 容器合并读取磁盘/文件系统的累积计数 container_fs_reads_total 容器已完成读取磁盘/文件系统的累积计数 container_fs_sector_reads_total 容器已完成扇区读取磁盘/文件系统的累积计数 container_fs_sector_writes_total 容器已完成扇区写入磁盘/文件系统的累积计数 container_fs_writes_bytes_total 容器累积写入磁盘/文件系统数据的总量(单位:字节) container_fs_write_seconds_total 容器累计写入磁盘/文件系统的秒数 container_fs_writes_merged_total 容器合并写入磁盘/文件系统的累积计数 container_fs_writes_total 容器已完成写入磁盘/文件系统的累积计数 container_blkio_device_usage_total 容器区分IO操作对磁盘的使用总量(单位:字节) 内存 container_memory_failures_total 容器内存分配失败的累积计数 container_memory_failcnt 容器内存使用达到限制的次数 container_memory_cache 容器总页缓存内存(单位:字节) container_memory_mapped_file 容器内存映射文件的大小(单位:字节) container_memory_max_usage_bytes 容器历史最大内存使用量(单位:字节) container_memory_rss 容器常驻内存集的大小(单位:字节) container_memory_swap 容器虚拟内存使用量(单位:字节) container_memory_usage_bytes 容器当前的内存使用量(单位:字节) container_memory_working_set_bytes 容器工作集内存使用量(单位:字节) 网络 container_network_receive_bytes_total 容器网络累积接收数据总量(单位:字节) container_network_receive_errors_total 接收时遇到的错误累积计数 container_network_receive_packets_dropped_total 接收时丢弃的数据包的累积计数 container_network_receive_packets_total 接收数据包的累积计数 container_network_transmit_bytes_total 容器网络累积传输数据总量(单位:字节) container_network_transmit_errors_total 传输时遇到的错误累积计数 container_network_transmit_packets_dropped_total 传输时丢弃的数据包的累积计数 container_network_transmit_packets_total 传输数据包的累积计数 进程 container_processes 容器当前运行的进程数 container_sockets 容器当前打开套接字的个数 container_file_descriptors 容器当前打开文件描述符的个数 container_threads 容器内当前运行的线程数 container_threads_max 容器内允许运行的最大线程数 container_ulimits_soft 容器内1号进程的软 ulimit 值。如果为-1,则无限制,优先级和nice除外 container_spec_cpu_period 容器分配的CPU周期 container_spec_cpu_shares 容器分配的CPU份额 container_spec_memory_limit_bytes 容器可以使用的总内存量限制 container_spec_memory_reservation_limit_bytes 容器可以使用的预留内存限制 container_spec_memory_swap_limit_bytes 容器可以使用的虚拟内存限制 container_start_time_seconds 容器已经运行的时间(单位:秒) container_last_seen 最近一次监控采集器感知到容器的时间 gpu container_accelerator_memory_used_bytes 容器正在使用的GPU加速卡内存量(单位:字节) container_accelerator_memory_total_bytes 总GPU加速卡可用内存量(单位:字节) container_accelerator_duty_cycle GPU加速卡实际运行时间百分比 监控指标数总计59个,与cadvisor提供的指标数一致。 指标详细含义,可参考cadvisor文档:https://github.com/google/cadvisor/blob/v0.39.0/docs/storage/prometheus.md。
  • 在环境变量中引用ConfigMap ConfigMap最为常见的使用方式就是在环境变量和Volume中引用。 例如下面例子中,引用了configmap-test的property_1,将其作为环境变量EXAMPLE_PROPERTY_1的值,这样容器启动后里面EXAMPLE_PROPERTY_1的值就是property_1的值,即“Hello”。 apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - image: nginx:latest name: container-0 resources: limits: cpu: 500m memory: 1024Mi requests: cpu: 500m memory: 1024Mi env: - name: EXAMPLE_PROPERTY_1 valueFrom: configMapKeyRef: # 引用ConfigMap name: configmap-test key: property_1 imagePullSecrets: - name: imagepull-secret
  • 创建ConfigMap 下面示例创建了一个名为configmap-test的ConfigMap,ConfigMap的配置数据在data字段下定义。 apiVersion: v1 kind: ConfigMap metadata: name: configmap-test data: # 配置数据 property_1: Hello property_2: World
  • 在Volume中引用ConfigMap 在Volume中引用ConfigMap,就是通过文件的方式直接将ConfigMap的每条数据填入Volume,每条数据是一个文件,键就是文件名,键值就是文件内容。 如下示例中,创建一个名为vol-configmap的Volume,这个Volume引用名为“configmap-test”的ConfigMap,再将Volume挂载到容器的“/tmp”路径下。Pod创建成功后,在容器的“/tmp”路径下,就有两个文件property_1和property_2,他们的值分别为“Hello”和“World”。 apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - image: nginx:latest name: container-0 resources: limits: cpu: 500m memory: 1024Mi requests: cpu: 500m memory: 1024Mi volumeMounts: - name: vol-configmap # 挂载名为vol-configmap的Volume mountPath: "/tmp1" imagePullSecrets: - name: imagepull-secret volumes: - name: vol-configmap configMap: # 引用ConfigMap name: configmap-test
  • cci-iam-authenticator使用参考 cci-iam-authenticator作为k8s client端的认证插件,主要提供了generate-kubeconfig和token两个子命令。 A tool to authenticate to CCI using HuaweiCloud IAM credentials Usage: cci-iam-authenticator [command] Available Commands: generate-kubeconfig Generate or modify kubeconfig files based on user configuration help Help about any command token Authenticate using HuaweiCloud IAM and get token for CCI Flags: --alsologtostderr log to standard error as well as files -h, --help help for cci-iam-authenticator --log_dir string If non-empty, write log files in this directory --log_file string If non-empty, use this log file --logtostderr log to standard error instead of files (default true) -v, --v Level number for the log level verbosity --version version for cci-iam-authenticator Use "cci-iam-authenticator [command] --help" for more information about a command. 其中,Flags主要为日志选项。 token token子命令用于获取用户token,获取token的认证方式有用户名/密码、ak/sk两种,选择其中一种即可。 Authenticate using HuaweiCloud IAM and get token for CCI Usage: cci-iam-authenticator token [flags] Flags: --ak string IAM access key ID --cache Cache the token credential on disk until it expires (default true) --domain-name string IAM domain name, typically your account name -h, --help help for token --iam-endpoint string HuaweiCloud IAM endpoint, i.e. https://iam.cn-north-4.myhuaweicloud.com (default "https://iam.myhuaweicloud.com") --insecure-skip-tls-verify If true, the iam server's certificate will not be checked for validity. (default true) --password string IAM user password --project-id string IAM project id, project id and project name should not be empty at same time --project-name string IAM project name, project id and project name should not be empty at same time --sk string IAM secret access key --token-only Return token only for other tool integration --user-name string IAM user name. Same as domain-name when using main account, otherwise use iam user name 其中,Flags分为用户名密码、AKSK和公共配置。 表1 用户名/密码配置 Command Flag Environment Value Description domain-name DOMAIN_NAME 租户名,即账号名,详情请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0001.html。 user-name USER_NAME 子用户名,即IAM用户名。若不配置与domain-name一致。 详情请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0001.html。 password PASSWORD 用户或子用户密码。 表2 AK/SK配置 Command Flag Environment Value Description ak ACCESS_KEY_ID ak、sk的获取方法请参见获取AK/SK,ak为文件中Access Key部分,sk为文件中Secret Key部分。 sk SECRET_ACCESS_KEY 表3 公共配置 Command Flag Environment Value Description iam-endpoint IAM_ENDPOINT IAM的Endpoint,必须配置,详情请参见https://developer.huaweicloud.com/endpoint?IAM。 project-name PROJECT_NAME 项目名,详情请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0001.html。 project-id PROJECT_ID 项目ID,详情请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0001.html。 insecure-skip-tls-verify INSECURE_SKIP_TLS_VERIFY 是否跳过对CCI/IAM服务端的校验,默认为true。 cache CREDENTIAL_CACHE 是否开启将IAM Token缓存到本地,提高访问性能,默认为true。 注意: 在非安全环境,建议关闭此选项。 generate-kubeconfig 为用户直接生成kubeconfig配置,若指定的kubeconfig已存在,则会注入新的server、user、context配置,并将当前的kubeconfig context切换到此次配置的结果。 默认情况下会对用户的配置进行校验,尝试访问IAM及CCI,确保用户配置的IAM认证信息、CCI地址可用。 Generate or modify kubeconfig files based on user configuration. Sets a cluster entry, a user entry and a context entry in kubeconfig and use this context as the current-context. The loading order follows these rules: 1. If the --kubeconfig flag is set, then only that file is loaded. The flag may only be set once and no merging takes place. 2. If $KUBECONFIG environment variable is set, then it is used as a list of paths (normal path delimiting rules for your system). These paths are merged. When a value is modified, it is modified in the file that defines the stanza. When a value is created, it is created in the first file that exists. If no files in the chain exist, then it creates the last file in the list. 3. Otherwise, ${HOME}/.kube/config is used and no merging takes place. Examples: # Generate kubeconfig to ${HOME}/.kube/config using aksk cci-iam-authenticator generate-kubeconfig --cci-endpoint=https://cci.cn-north-4.myhuaweicloud.com --ak=*** --sk=*** # Generate kubeconfig to ${HOME}/.kube/config using domain name and password cci-iam-authenticator generate-kubeconfig --cci-endpoint=https://cci.cn-north-4.myhuaweicloud.com --domain-name=*** --password=*** Usage: cci-iam-authenticator generate-kubeconfig [flags] Flags: --ak string IAM access key ID --cache Cache the token credential on disk until it expires (default true) --cci-endpoint string CCI server endpoint, i.e. https://cci.cn-north-4.myhuaweicloud.com --domain-name string IAM domain name, typically your account name -h, --help help for generate-kubeconfig --iam-endpoint string HuaweiCloud IAM endpoint, i.e. https://iam.cn-north-4.myhuaweicloud.com (default "https://iam.myhuaweicloud.com") --insecure-skip-tls-verify If true, the iam server's certificate will not be checked for validity. (default true) --kubeconfig string use a particular kubeconfig file --password string IAM user password --project-id string IAM project id, project id and project name should not be empty at same time --project-name string IAM project name, project id and project name should not be empty at same time --sk string IAM secret access key --token-only Return token only for other tool integration --user-name string IAM user name. Same as domain-name when using main account, otherwise use iam user name --validation Validate kubeconfig by trying to access CCI with existing config (default true) 同一个kubeconfig可以包含多个环境、认证信息,用户可以通过同一份IAM认证配置,仅修改cci-endpoint生成多个region的kubeconfig,例如: # 生成北京4的kubeconfig,并切换到对应context $ cci-iam-authenticator generate-kubeconfig --cci-endpoint=https://cci.cn-north-4.myhuaweicloud.com --ak=my-ak --sk=xxxxxx Switched to context "cci-context-cn-north-4-my-ak". # 生成上海1的kubeconfig,并切换到对应context $ cci-iam-authenticator generate-kubeconfig --cci-endpoint=https://cci.cn-east-3.myhuaweicloud.com --ak=my-ak --sk=xxxxxx Switched to context "cci-context-cn-east-3-my-ak". # 切换到北京4的context $ kubectl config use-context cci-context-cn-north-4-my-ak 父主题: 使用kubectl(推荐)
  • 使用EIPPool 在命名空间下创建完成EIPPool对象后,用户可在Pod模板中添加指定的Annotation: yangtse.io/eip-pool 使用对应EIPPool中的EIP资源,指定后,Pod在创建时将会自动从EIPPool中获取一个可用的EIP并绑定至Pod。 已经被EIPPool使用的EIP,在VPC界面是无法正常的执行绑定、解绑和删除操作的,因此不建议在VPC界面直接操作已被EIPPool使用的EIP。 以创建的eippool-demo1为例。 apiVersion: v1 kind: Pod metadata: annotations: yangtse.io/eip-pool:eippool-demo1 # 通过指定EIPPool的形式使用EIP ... 执行以下命令,查看EIPPool详情,-n表示EIPPool所在的命名空间。 回显信息中名称为eippool-demo1的EIPPool,使用量加1,表示Pod绑定EIP资源成功。 # kubectl get eippool -n $namespace_name NAME EIPS USAGE AGE eippool-demo1 1/3 64m Pod启动后,通过Annotation:yangtse.io/allocated-ipv4-eip可查询到Pod当前使用的EIP。 apiVersion:v1 kind:Pod metadata: annotations: yangtse.io/allocated-ipv4-eip: 116.205.XXX.XXX # Pod被分配到的EIP 如果Pod进行重建,则将会从EIPPool中重新获取一个可用的EIP。 父主题: EIPPool
  • 高级配置 Secret是一种加密存储的资源对象,您可以将认证信息、证书、私钥等保存在密钥中,从而解决了密码、token、密钥等敏感数据的配置问题。 apiVersion: v1 kind: Secret metadata: name: cci-sfs-kafka-tls type: Opaque data: ca.crt: ... server.crt: ... server.key: ... 用户可以通过配置SSL参数,进行加密的安全连接,证书文件等相关的文件引用通过sandbox volume的特性来支持。
  • 约束与限制 当前不支持容器标准输出采集上报到kafka。 当前不支持日志轮转,若需要对日志文件进行大小的控制,请自行处理。 单条日志长度限制为250KB,如果超过则会丢弃。 不支持指定系统、设备、cgroup、tmpfs、localdir等挂载目录的日志采集,会直接忽略。 同一个容器中待采集的日志文件不能重名,如果有重复文件则只会采集到采集器首次感知到的日志文件。 日志文件的文件名,最大长度为190,超过长度限制的日志文件将不会被采集。
  • 纯量 纯量的数据类型有字符串、布尔值、整数、浮点数、Null、时间、日期。 字符串表示: 字符串默认不使用引号表示: str: This_is_a_line 如果字符串之中包含空格或特殊字符,需要放在引号之中: str: 'content: a string' 单引号和双引号都可以使用,两者区别是单引号可以识别转义字符:双引号不会对特殊字符转义:↵ s1: 'content:\n a string' s2: "content:\n a string" 单引号之中如果还有单引号,必须连续使用两个单引号转义。 str: 'labor''s day' 字符串可以写成多行,从第二行开始,必须有一个单空格缩进。换行符会被转为空格。 str: This_is a_multi_line 整数表示: int_value: 314 浮点型表示: float_value: 3.14 Null表示: parent: ~ 时间表示: 时间采用ISO8601格式。 iso8601: 2018-12-14t21:59:43.10-05:00 日期表示: 日期采用复合ISO8601格式的年、月、日表示。 date: 1976-07-31
  • 数组 数组使用连字符和空格“- ”表示,合法的表示方法如下: animal: - Cat - Dog - Goldfish 也可使用行内表示法: animal: [Cat, Dog, Goldfish] 对象和数组可以嵌套使用,形成复合结构: languages: - Ruby - Perl - Python websites: YAML: yaml.org Ruby: ruby-lang.org Python: python.org Perl: use.perl.org
共100000条