华为云用户手册

  • Service使用HTTP Service使用HTTP仅1.21及以上版本集群支持。 Service支持使用ELB的7层能力,共享型和独享型ELB都支持对接。独享型ELB实例有如下限制: 对接已有的独享型ELB实例,需要独享型ELB实例同时支持4层和7层的flavor,否则会功能不可用。 使用自动创建的ELB实例,注意同时使用独享型ELB实例的4层和7层能力,需要在kubernetes.io/elb.autocreate的annotation中指定4层和7层flavor。 使用ELB的7层能力时,需要添加如下annotation: kubernetes.io/elb.protocol-port: "https:443,http:80" protocol-port的取值需要和service的spec.ports字段中的端口对应,格式为protocol:port,port中的端口会匹配service.spec.ports中端口,并将该端口发布成对应的protocol协议。 kubernetes.io/elb.cert-id: "17e3b4f4bc40471c86741dc3aa211379" cert-id内容为ELB证书管理的证书ID,当protocol-port指定了https协议,ELB监听器的证书会设置为cert-id证书,当发布多个HTTPS的服务,会使用同一份证书。 配置示例如下,其中spec.ports中两个端口与kubernetes.io/elb.protocol-port中对应,443端口、80端口分别发布成HTTPS、HTTP协议。 apiVersion: v1kind: Servicemetadata: annotations: kubernetes.io/elb.autocreate: ' { "type": "public", "bandwidth_name": "cce-bandwidth-1634816602057", "bandwidth_chargemode": "traffic", "bandwidth_size": 5, "bandwidth_sharetype": "PER", "eip_type": "5_bgp", "available_zone": [ "cn-north-4b" ], "l7_flavor_name": "L7_flavor.elb.s2.small", "l4_flavor_name": "L4_flavor.elb.s1.medium" }' kubernetes.io/elb.class: performance kubernetes.io/elb.protocol-port: "https:443,http:80" kubernetes.io/elb.cert-id: "17e3b4f4bc40471c86741dc3aa211379" labels: app: nginx name: test name: test namespace: defaultspec: ports: - name: cce-service-0 port: 443 protocol: TCP targetPort: 80 - name: cce-service-1 port: 80 protocol: TCP targetPort: 80 selector: app: nginx version: v1 sessionAffinity: None type: LoadBalancer 使用上面的示例创建Service,在新建的ELB实例中可以看到创建了443端口和80端口的监听器。
  • 操作场景 负载均衡( LoadBalancer )可以通过弹性负载均衡从公网访问到工作负载,与弹性IP方式相比提供了高可靠的保障,一般用于系统中需要暴露到公网的服务。 负载均衡访问方式由公网弹性负载均衡服务地址以及设置的访问端口组成,例如“10.117.117.117:80”。 在访问时从ELB过来的流量会先访问到节点,然后通过Service转发到Pod。 图1 负载均衡( LoadBalancer )
  • 约束与限制 CCE中的负载均衡 ( LoadBalancer )访问类型使用弹性负载均衡 ELB提供网络访问,存在如下产品约束: 自动创建的ELB实例建议不要被其他资源使用,否则会在删除时被占用,导致资源残留。 1.15及之前版本集群使用的ELB实例请不要修改监听器名称,否则可能导致无法正常访问。 创建service后,如果服务亲和从集群级别切换为节点级别,连接跟踪表将不会被清理,建议用户创建service后不要修改服务亲和属性,如需修改请重新创建service。 当服务亲和设置为节点级别(即externalTrafficPolicy为local)时,集群内部可能使用ELB地址访问不通,具体情况请参见集群内使用ELB地址无法访问Service说明。 CCE Turbo 集群仅支持集群级别服务亲和。 独享型ELB仅支持1.17及以上集群。 独享型ELB规格需要为网络型(TCP/UDP),且网络类型必须支持私网。如果需要Service支持HTTP,则独享型ELB规格需要为网络型(TCP/UDP)和应用型(HTTP)。 使用控制台创建LoadBalancer类型Service时会自动生成一个节点端口(nodeport),端口号随机。使用kubectl创建LoadBalancer类型Service时,如不指定节点端口,也会随机生成一个节点端口,端口号随机。 使用CCE集群时,如果LoadBalancer类型Service的服务亲和类型为集群级别(cluster),当请求进入到集群时,会使用SNAT分发到各个节点的节点端口(nodeport),不能超过节点可用的nodeport数量,而服务亲和为节点级别(local)则无此约束。使用CCE Turbo集群时,如果是使用共享型ELB依然有此约束,而独享型ELB无此约束,建议使用CCE Turbo时配合使用独享型ELB。 集群服务转发模式为IPVS时,不支持配置节点的IP作为Service的externalIP,会导致节点不可用。
  • ELB转发说明 LoadBalancer类型Service创建完后,可以在ELB控制台查看ELB实例的监听器转发规则,如下所示。 图5 ELB转发说明 可以看到这个ELB实例创建了一个监听器,其后端服务器为Pod所在的节点,后端服务器端口为Service的NodePort(节点端口)。当有流量通过ELB请求时,会转发给Pod所在节点IP:节点端口,也就是访问到了Service,从而访问到Pod,这跟操作场景中所述是一致的。
  • 相关操作 通过命令行工具连接集群:请参见通过kubectl连接集群。 添加节点:集群创建完成后,若您需要为集群添加更多节点,请参见购买节点。 登录节点:请参见登录节点。 创建命名空间:同个集群内可创建多个命名空间,形成逻辑上的不同分组,便于不同的分组在共享使用集群资源时还能被分别管理。若您需要为集群创建命名空间,请参见命名空间。 创建工作负载:集群创建完成后,您可以使用镜像创建一个可公网访问的应用,请参见创建无状态负载(Deployment)或创建有状态负载(StatefulSet)。 单击已成功创建的集群名称,进入“集群详情”页可查看集群详情。 表2 已创建的集群详情 页签类别 说明 集群详情 可查看该集群的详情及运行状态等。 监控 可查看集群下全部节点的CPU和内存分配率(即分配量的最大值),以及控制节点的CPU和内存使用率、控制节点规格等信息。 事件 可以直接在“事件”页签下查看集群的事件。 可以设置查询条件,比如设置事件产生的时间段或搜索事件名称,查看相关事件。 说明: 由于版本更新演进,旧版Console不再支持查看新集群的事件,请前往新版Console使用。 弹性扩容 您可以根据实际业务需要对集群的工作节点进行扩容和缩容,详情请参见集群弹性扩容。 v1.17版本的集群不再支持 AOM 提供的弹性伸缩机制,请使用节点池功能进行弹性伸缩,详情请参见节点池概述。 kubectl 若您需要从客户端计算机连接到kubernetes集群,请使用kubernetes命令行客户端kubectl,详情请参见通过kubectl连接集群。 资源标签 通过为资源添加标签,可以对资源进行自定义标记,实现资源的分类。 您可以在TMS中创建“预定义标签”,预定义标签对所有支持标签功能的服务资源可见,通过使用预定义标签可以提升标签创建和迁移效率。具体请参见创建预定义标签。 CCE服务会自动帮您创建CCE-Dynamic-Provisioning-Node=节点id的标签,允许增加5个标签。 Istioctl 在集群开启istio服务网格功能后,您使用Istio命令行工具Istioctl配置多种路由策略,从而管理服务流量,包括流量转移、故障注入、限流熔断等。详情请参见启用istio。
  • 约束与限制 创建节点过程中会使用域名方式从OBS下载软件包,需要能够使用云上内网DNS解析OBS域名,否则会导致创建不成功。为此,节点所在子网需要配置为内网 DNS地址 ,从而使得节点使用内网DNS。在创建子网时DNS默认配置为内网DNS,如果您修改过子网的DNS,请务必确保子网下的DNS服务器可以解析OBS服务域名,否则需要将DNS改成内网DNS。 单Region下单用户可创建的集群总数限制为50个,如果配额不满足业务需求,请到“我的配额”提交申请。 集群一旦创建以后,不支持变更以下项: 变更集群类型,例如“鲲鹏集群”变更为“CCE集群”。 变更集群的控制节点数量。 变更控制节点可用区。 变更集群的网络配置,如所在的 虚拟私有云VPC 、子网、容器网段、服务网段、IPv6、kubeproxy代理(转发)模式。 变更网络模型,例如“容器隧道网络”更换为“VPC网络”。 更多内容请参见约束与限制。
  • 约束与限制 创建节点过程中会使用域名方式从OBS下载软件包,需要能够使用云上内网DNS解析OBS域名,否则会导致创建不成功。为此,节点所在子网需要配置为内网DNS地址,从而使得节点使用内网DNS。在创建子网时DNS默认配置为内网DNS,如果您修改过子网的DNS,请务必确保子网下的DNS服务器可以解析OBS服务域名,否则需要将DNS改成内网DNS。 仅支持创建KVM虚拟化类型的节点,非KVM虚拟化类型的节点创建后无法正常使用。 集群中的节点一旦创建后不可变更可用区。 集群中通过“按需计费”模式购买的节点,在CCE“节点管理”中进行删除操作后将会直接被删除;通过“包年/包月”模式购买的节点不能直接删除,请通过页面右上角“费用-我的订单”执行资源退订操作。 GPU能力以插件的方式外接提供,需要您在“插件管理”中安装GPU-beta插件。 网络模式选择“容器隧道网络”时,只能添加同一类型的节点,即全部为虚拟机节点或全部为裸金属节点,且集群版本需要选择v1.13.10或以上。 网络模式选择“VPC网络”时,支持同时管理虚拟机节点和裸金属节点,集群版本需要选择v1.11.7或以上。
  • 升级插件 登录CCE控制台,在左侧导航栏中选择“插件管理”,在“插件实例”页签下,选择对应的集群,单击nginx-ingress下的“ 升级”。 如果升级按钮处于冻结状态,则说明当前插件版本是最新的版本,不需要进行升级操作。 升级nginx-ingress插件时,会替换原先节点上的旧版本的nginx-ingress插件,安装最新版本的nginx-ingress插件以实现功能的快速升级。 插件升级后将重启nginx-ingress,可能导致相关业务无法访问,请在合适的时间段进行升级。 在“基本信息”页面选择插件版本,单击“下一步”。 在“规格配置”步骤中,参照表1设置服务选型参数,其中带“*”的参数为必填参数。 完成配置参数后,单击“升级”即可升级nginx-ingress插件。
  • 工作原理 Nginx Ingress由资源对象Ingress、Ingress控制器、Nginx三部分组成,Ingress控制器用以将Ingress资源实例组装成Nginx配置文件(nginx.conf),并重新加载 Nginx使变更的配置生效。当它监听到Service中Pod变化时通过动态变更的方式实现Nginx上游服务器组配置的变更,无须重新加载Nginx进程。工作原理如图1所示。 Ingress:一组基于域名或URL把请求转发到指定Service实例的访问规则,是Kubernetes的一种资源对象,Ingress实例被存储在 对象存储服务 etcd中,通过接口服务被实现增、删、改、查的操作。 Ingress控制器(Ingress controller):用以实时监控资源对象Ingress、Service、End-point、Secret(主要是TLS证书和Key)、Node、ConfigMap的变化,自动对Nginx进行相应的操作。 Nginx:实现具体的应用层负载均衡及访问控制。 图1 Nginx Ingress工作原理
  • 插件简介 Kubernetes通过kube-proxy服务实现了Service的对外发布及负载均衡,它的各种方式都是基于传输层实现的。在实际的互联网应用场景中,不仅要实现单纯的转发,还有更加细致的策略需求,如果使用真正的负载均衡器更会增加操作的灵活性和转发性能。 基于以上需求,Kubernetes引入了资源对象Ingress,Ingress为Service提供了可直接被集群外部访问的 虚拟主机 、负载均衡、SSL代理、HTTP路由等应用层转发功能。 Kubernetes官方发布了基于Nginx的Ingress控制器,nginx-ingress是一款使用configmap来存储nginx配置的插件,nginx ingress controller会将ingress生成一段nginx的配置,将这个配置通过Kubernetes API写到Nginx的Pod中,然后reload完成nginx的配置修改和更新。 nginx-ingress插件直接使用社区模板与镜像,CCE不提供额外维护,不建议用于商用场景。 开源社区地址:https://github.com/kubernetes/ingress-nginx nginx-ingress示例模板即将下线,如果您已经通过“模板市场”的“示例模板”安装过nginx-ingress,请务必卸载后再安装此插件。 安装该插件时,您可以通过“定义nginx配置”添加配置,此处的设置将会全局生效,该参数直接通过配置nginx.conf生成,将影响管理的全部Ingress,相关参数可通过configmap查找,如果您配置的参数不包含在configmap所列出的选项中将不会生效。 安装该插件后,您在CCE控制台创建Ingress时可以开启“对接Nginx”按钮,并通过“Nginx配置”下的“自定义配置”将Kubernetes annotations添加到特定的Ingress对象,以自定义其行为,Kubernetes annotations字段详情请参见Annotations。 请勿手动修改和删除CCE自动创建的ELB和监听器,否则将出现工作负载异常;若您已经误修改或删除,请卸载Nginx Ingress插件后重装。
  • 云审计 服务支持的CCE操作列表 表1 云审计服务支持的CCE操作列表 操作名称 资源类型 事件名称 创建用户委托 集群 createUserAgencies 创建集群 集群 createCluster 创建包周期集群 集群 createCluster/createPeriodicCluster 更新集群描述 集群 updateCluster 升级集群 集群 clusterUpgrade 删除集群 集群 claimCluster/deleteCluster 下载集群证书 集群 getClusterCertByUID 绑定、解绑eip 集群 operateMasterEIP 集群休眠唤醒、节点纳管重置(V2) 集群 operateCluster 集群休眠(V3) 集群 hibernateCluster 集群唤醒(V3) 集群 awakeCluster 按需集群规格变更 集群 resizeCluster 包周期集群规格变更 集群 resizePeriodCluster 修改集群配置 集群 updateConfiguration 创建节点池 节点池 createNodePool 更新节点池 节点池 updateNodePool 删除节点池 节点池 claimNodePool 迁移节点池 节点池 migrateNodepool 修改节点池配置 节点池 updateConfiguration 创建节点 节点 createNode 创建包周期节点 节点 createPeriodNode 删除集群下所有节点 节点 deleteAllHosts 删除单个节点 节点 deleteOneHost/claimOneHost 更新节点描述 节点 updateNode 创建插件实例 插件实例 createAddonInstance 删除插件实例 插件实例 deleteAddonInstance 上传模板 模板 uploadChart 更新模板 模板 updateChart 删除模板 模板 deleteChart 创建模板实例 模板实例 createRelease 升级模板实例 模板实例 updateRelease 删除模板实例 模板实例 deleteRelease 创建ConfigMap K8S资源 createConfigmaps 创建DaemonSet K8S资源 createDaemonsets 创建Deployment K8S资源 createDeployments 创建Event K8S资源 createEvents 创建Ingress K8S资源 createIngresses 创建Job K8S资源 createJobs 创建namespace K8S资源 createNamespaces 创建Node K8S资源 createNodes 创建PersistentVolumeClaim K8S资源 createPersistentvolumeclaims 创建Pod K8S资源 createPods 创建ReplicaSet K8S资源 createReplicasets 创建ResourceQuota K8S资源 createResourcequotas 创建密钥 K8S资源 createSecrets 创建服务 K8S资源 createServices 创建StatefulSet K8S资源 createStatefulsets 创建卷 K8S资源 createVolumes 删除ConfigMap K8S资源 deleteConfigmaps 删除DaemonSet K8S资源 deleteDaemonsets 删除Deployment K8S资源 deleteDeployments 删除Event K8S资源 deleteEvents 删除Ingress K8S资源 deleteIngresses 删除Job K8S资源 deleteJobs 删除Namespace K8S资源 deleteNamespaces 删除Node K8S资源 deleteNodes 删除Pod K8S资源 deletePods 删除ReplicaSet K8S资源 deleteReplicasets 删除ResourceQuota K8S资源 deleteResourcequotas 删除Secret K8S资源 deleteSecrets 删除Service K8S资源 deleteServices 删除StatefulSet K8S资源 deleteStatefulsets 删除卷 K8S资源 deleteVolumes 替换指定的ConfigMap K8S资源 updateConfigmaps 替换指定的DaemonSet K8S资源 updateDaemonsets 替换指定的Deployment K8S资源 updateDeployments 替换指定的Event K8S资源 updateEvents 替换指定的Ingress K8S资源 updateIngresses 替换指定的Job K8S资源 updateJobs 替换指定的Namespace K8S资源 updateNamespaces 替换指定的Node K8S资源 updateNodes 替换指定的PersistentVolumeClaim K8S资源 updatePersistentvolumeclaims 替换指定的Pod K8S资源 updatePods 替换指定的Replicaset K8S资源 updateReplicasets 替换指定的ResourceQuota K8S资源 updateResourcequotas 替换指定的Secret K8S资源 updateSecrets 替换指定的Service K8S资源 updateServices 替换指定的Statefulset K8S资源 updateStatefulsets 替换指定的状态 K8S资源 updateStatus 上传组件模板 K8S资源 uploadChart 更新组件模板 K8S资源 updateChart 删除组件模板 K8S资源 deleteChart 创建模板应用 K8S资源 createRelease 更新模板应用 K8S资源 updateRelease 删除模板应用 K8S资源 deleteRelease 父主题: 云审计服务
  • 操作场景 CCE支持配置工作负载日志策略,便于日志的统一收集、管理和分析,以及按周期防爆处理。 CCE配合AOM收集工作负载的日志,在创建节点时会默认安装AOM的ICAgent(在集群kube-system命名空间下名为icagent的DaemonSet),ICAgent负责收集工作负载的日志并上报到AOM,您可以在CCE控制台和AOM控制台查看工作负载的日志。 默认情况下,ICAgent会采集容器的标准输出,您无需做任何设置。 您还可以在创建工作负载的时候设置容器日志存储路径,ICAgent会采集该路径下日志。 容器日志可以选择主机路径和容器路径两种模式。 主机路径:HostPath模式,将主机路径挂载到指定的容器路径(挂载路径)。用户可以在节点的主机路径中查看到容器输出在挂载路径中的日志信息。 容器路径:EmptyDir模式,将节点的临时路径挂载到指定的路径(挂载路径)。临时路径中存在的但暂未被采集器上报到AOM的日志数据在Pod实例删除后会消失。
  • 设置容器日志存储路径-使用kubectl 您可以通过在YAML定义的方式设置容器日志存储路径。 如下所示,使用EmptyDir挂载到容器的“/var/log/nginx”路径下,这样ICAgent就会采集容器“/var/log/nginx”路径下的日志。其中policy字段是CCE自定义的字段,能够让ICAgent识别并采集日志。 apiVersion: apps/v1kind: Deploymentmetadata: name: testlog namespace: defaultspec: selector: matchLabels: app: testlog template: replicas: 1 metadata: labels: app: testlog spec: containers: - image: 'nginx:alpine' name: container-0 resources: requests: cpu: 250m memory: 512Mi limits: cpu: 250m memory: 512Mi volumeMounts: - name: vol-log mountPath: /var/log/nginx policy: logs: rotate: '' volumes: - emptyDir: {} name: vol-log imagePullSecrets: - name: default-secret 使用HostPath方法如下所示,相比EmptyDir就是volume的类型变成hostPath,且需要配置hostPath在主机上的路径。下面示例中将主机上“/tmp/log”挂载到容器的“/var/log/nginx”路径下,这样ICAgent就会采集容器“/var/log/nginx”路径下的日志,且日志还会在主机的“/tmp/log”路径下存储。 apiVersion: apps/v1kind: Deploymentmetadata: name: testlog namespace: defaultspec: replicas: 1 selector: matchLabels: app: testlog template: metadata: labels: app: testlog spec: containers: - image: 'nginx:alpine' name: container-0 resources: requests: cpu: 250m memory: 512Mi limits: cpu: 250m memory: 512Mi volumeMounts: - name: vol-log mountPath: /var/log/nginx readOnly: false extendPathMode: PodUID policy: logs: rotate: Hourly annotations: pathPattern: '**' format: '' volumes: - hostPath: path: /tmp/log name: vol-log imagePullSecrets: - name: default-secret 表2 关键参数解释 参数 中文解释 说明 extendPathMode 主机扩展路径 通过实例的ID或者容器的名称扩展主机路径,实现同一个主机路径下区分来自不同容器的挂载。 会在原先的“卷目录/子目录”中增加一个三级目录。使用户更方便获取单个Pod输出的文件。 None:不配置拓展路径。 PodUID:Pod的ID。 PodName:Pod的名称。 PodUID/ContainerName:Pod的ID/容器名称。 PodName/ContainerName:Pod名称/容器名称。 policy.logs.rotate 日志转储 此处日志转储是指日志的本地绕接。 设置:AOM每分钟扫描一次日志文件,当某个日志文件超过50MB时,会立即对其转储(转储时会在该日志文件所在的目录下生成一个新的zip文件。对于一个日志文件,AOM只保留最近生成的20个zip文件,当zip文件超过20个时,时间较早的zip文件会被删除),转储完成后AOM会将该日志文件清空。 不设置:若您在下拉列表框中选择“不设置”,则AOM不会对日志文件进行转储。 说明: AOM的日志绕接能力是使用copytruncate方式实现的,如果选择了设置,请务必保证您写日志文件的方式是append(追加模式),否则可能出现文件空洞问题。 当前主流的日志组件例如Log4j、Logback等均已经具备日志文件的绕接能力,如果您的日志文件已经实现了绕接能力,则无需设置。否则可能出现冲突。 建议您的业务自己实现绕接,可以更灵活的控制绕接文件的大小和个数。 policy.logs.annotations.pathPattern 采集路径 设置采集路径可以更精确的指定采集内容,当前支持以下设置方式: 不设置则默认采集当前路径下.log .trace .out文件 设置**表示递归采集5层目录下的.log .trace .out文件 设置*表示模糊匹配 例子: 采集路径为/tmp/**/test*.log表示采集/tmp目录及其1-5层子目录下的全部以test开头的.log文件。 注意: 使用采集路径功能请确认您的采集器ICAgent版本为5.12.22或以上版本。 policy.logs.annotations.format 多行日志匹配 有些程序打印的日志存在一条完整的日志数据跨占多行(例如 Java 程序日志)情况,日志采集系统默认是按行采集。如果您想在日志采集系统中按整条显示日志,可以开启多行日志,采用时间或正则匹配的方式,当某行日志匹配上预先设置的时间格式或正则表达式,就认为是一条日志的开头,而下一个行首出现作为该条日志的结束标识符。 格式如下 { "multi": { "mode": "time", "value": "YYYY-MM-DD hh:mm:ss" }} multi表示分行模式: time:日志时间,请输入时间通配符。时间通配符填写参考示例:如日志中的时间是2017-01-01 23:59:59,按照规则应该填写:YYYY-MM-DD hh:mm:ss。 regular:正则模式,请输入正则表达式。
  • 设置容器日志存储路径 在CCE中创建工作负载时,添加容器后,展开“容器日志”配置区域。 图1 容器日志 单击“添加日志策略”,设置自定义日志参数,配置日志策略,以nginx为例,不同工作负载根据实际情况配置。 图2 添加日志策略 存储类型有“主机路径”和“容器路径”两种类型可供选择: 表1 配置日志策略 参数 参数说明 存储类型 主机路径:HostPath模式,将主机路径挂载到指定的容器路径(挂载路径)。用户可以在节点的主机路径中查看到容器输出在挂载路径中的日志信息。 容器路径:EmptyDir模式,将节点的临时路径挂载到指定的路径(挂载路径)。临时路径中存在的但暂未被采集器上报到AOM的日志数据在Pod实例删除后会消失。 添加容器挂载 *主机路径 请输入主机的路径,如:/var/paas/sys/log/nginx 挂载路径 请输入数据存储要挂载到容器上的路径,如:/tmp 须知: 请不要挂载到系统目录下,如“/”、“/var/run”等,否则会导致容器异常。建议挂载在空目录下,若目录不为空,请确保目录下无影响容器启动的文件,否则文件会被替换,导致容器启动异常,工作负载创建失败。 挂载高危目录的情况下 ,建议使用低权限帐号启动,否则可能会造成宿主机高危文件被破坏。 AOM只采集最近修改过的前20个日志文件,且默认采集两级子目录。 AOM只采集挂载路径下的“.log”、“.trace”、“.out”文本日志文件。 容器中挂载点的权限设置方法,请参见为Pod或容器配置安全性上下文。 主机扩展路径 仅“主机路径”类型需要填写 通过实例的ID或者容器的名称扩展主机路径,实现同一个主机路径下区分来自不同容器的挂载。 会在原先的“卷目录/子目录”中增加一个三级目录。使用户更方便获取单个Pod输出的文件。 None:不配置拓展路径。 PodUID:Pod的ID。 PodName:Pod的名称。 PodUID/ContainerName:Pod的ID/容器名称。 PodName/ContainerName:Pod名称/容器名称。 采集路径 设置采集路径可以更精确的指定采集内容,当前支持以下设置方式: 不设置则默认采集当前路径下.log .trace .out文件 设置**表示递归采集5层目录下的.log .trace .out文件 设置*表示模糊匹配 例子: 采集路径为/tmp/**/test*.log表示采集/tmp目录及其1-5层子目录下的全部以test开头的.log文件。 注意: 使用采集路径功能请确认您的采集器ICAgent版本为5.12.22或以上版本。 日志转储 此处日志转储是指日志的本地绕接。 设置:AOM每分钟扫描一次日志文件,当某个日志文件超过50MB时,会立即对其转储(转储时会在该日志文件所在的目录下生成一个新的zip文件。对于一个日志文件,AOM只保留最近生成的20个zip文件,当zip文件超过20个时,时间较早的zip文件会被删除),转储完成后AOM会将该日志文件清空。 不设置:若您在下拉列表框中选择“不设置”,则AOM不会对日志文件进行转储。 说明: AOM的日志绕接能力是使用copytruncate方式实现的,如果选择了设置,请务必保证您写日志文件的方式是append(追加模式),否则可能出现文件空洞问题。 当前主流的日志组件例如Log4j、Logback等均已经具备日志文件的绕接能力,如果您的日志文件已经实现了绕接能力,则无需设置。否则可能出现冲突。 建议您的业务自己实现绕接,可以更灵活的控制绕接文件的大小和个数。 多行日志 有些程序打印的日志存在一条完整的日志数据跨占多行(例如 Java 程序日志)情况,日志采集系统默认是按行采集。如果您想在日志采集系统中按整条显示日志,可以开启多行日志,采用时间或正则匹配的方式,当某行日志匹配上预先设置的时间格式或正则表达式,就认为是一条日志的开头,而下一个行首出现作为该条日志的结束标识符。 分行模式: 日志时间:请输入时间通配符。时间通配符填写参考示例:如日志中的时间是2017-01-01 23:59:59,按照规则应该填写:YYYY-MM-DD hh:mm:ss。 正则模式:请输入正则表达式。 添加容器挂载 单击后可配置多条容器挂载路径,即一个主机路径可对应多个容器挂载路径。 单击“确定”,并完成创建工作负载。
  • 通过配置项设置命令行参数 您可以使用配置项设置容器中的命令或者参数值,使用环境变量替换语法$(VAR_NAME)来进行。如下面的编排示例所示。 apiVersion: v1kind: Podmetadata: name: configmap-pod-3spec: containers: - name: test-container image: busybox command: [ "/bin/sh", "-c", "echo $(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY)" ] env: - name: SPECIAL_LEVEL_KEY valueFrom: configMapKeyRef: name: cce-configmap key: SPECIAL_LEVEL - name: SPECIAL_TYPE_KEY valueFrom: configMapKeyRef: name: cce-configmap key: SPECIAL_TYPE restartPolicy: Never 这个Pod运行后,输出如下内容。 Hello CCE
  • 使用配置项挂载到工作负载数据卷 配置项也可以在数据卷里面使用,只需在创建工作负载时将配置项挂载到工作负载中即可。挂载完成后,最终生成以key为文件名, value为文件内容的配置文件。 apiVersion: v1kind: Podmetadata: name: configmap-pod-4spec: containers: - name: test-container image: busybox command: [ "/bin/sh", "-c", "ls /etc/config/" ] ##列出该目录下的文件名称 volumeMounts: - name: config-volume mountPath: /etc/config ##挂载到/etc/config目录下 volumes: - name: config-volume configMap: name: cce-configmap restartPolicy: Never 这个Pod运行后,在/etc/config目录下会生成SPECIAL_LEVEL和SPECIAL_TYPE两个文件,文件的内容为Hello和CCE。且运行时会输出如下内容,即cce-configmap中SPECIAL_LEVEL和SPECIAL_TYPE的名称。 SPECIAL_TYPESPECIAL_LEVEL 挂载ConfigMap到数据卷还可以在界面上进行操作,在创建工作负载时,设置容器的高级设置,选择数据存储,添加本地磁盘,选择ConfigMap即可配置。具体操作请参见配置项(ConfigMap)挂载。
  • 通过配置项设置工作负载环境变量 您可以在创建工作负载时将配置项设置为环境变量,使用valueFrom参数引用ConfigMap中的Key/Value。 apiVersion: v1kind: Podmetadata: name: configmap-pod-1spec: containers: - name: test-container image: busybox command: [ "/bin/sh", "-c", "env" ] env: - name: SPECIAL_LEVEL_KEY valueFrom: ##使用valueFrom来指定env引用配置项的value值 configMapKeyRef: name: cce-configmap ##引用的配置文件名称 key: SPECIAL_LEVEL ##引用的配置项key restartPolicy: Never 如果您需要将多个配置项的value值定义为pod的环境变量值,您只需要在pod中添加多个环境变量参数即可。 env:- name: SPECIAL_LEVEL_KEY valueFrom: configMapKeyRef: name: cce-configmap key: SPECIAL_LEVEL- name: SPECIAL_TYPE_KEY valueFrom: configMapKeyRef: name: cce-configmap key: SPECIAL_TYPE 如果要将一个配置项中所有数据都添加到环境变量中,可以使用 envFrom 参数,配置项中的 key 会成为 Pod 中的环境变量名称。 apiVersion: v1kind: Podmetadata: name: configmap-pod-2spec: containers: - name: test-container image: busybox command: [ "/bin/sh", "-c", "env" ] envFrom: - configMapRef: name: cce-configmap restartPolicy: Never
  • 操作步骤-新UI 新UI支持节点池中节点包周期。 登录CCE控制台。 进入集群,在左侧选择“节点管理”,在右侧选择“节点池”页签。 单击右上角“创建节点池”。 填写基础配置参数。 节点池名称:新建节点池的名称,默认按“集群名-nodepool-随机数”生成名称,可自定义。 节点数量:创建节点池时,创建节点的数量。 弹性伸缩: 默认不开启。包年/包月不支持弹性伸缩,仅按需支持。 单击开启后,节点池将根据集群负载情况自动创建或删除节点池内的节点,参数设置如下: 节点数上限和节点数下限:您可设置节点数的上限和下限,保证节点数在合理的范围内伸缩。 节点池优先级:请根据业务需要设置相应数值,该数值表示节点池之间进行弹性扩缩容的优先级,数值越大优先级越高,如设置为4的节点池比设置为1的节点池优先启动弹性伸缩。若多个节点池的值设置相同,如都设置为2,表示这几个节点池之间不分优先级,系统将按最小资源浪费原则进行伸缩。 弹性扩容时CCE将按照如下策略来选择节点池进行扩容: 通过预判算法判断节点池是否能满足让Pending的Pod正常调度的条件,包括节点资源大于Pod的request值、nodeSelect、nodeAffinity和taints等是否满足Pod正常调度的条件;另外还会过滤掉扩容失败(因为资源不足等原因)还处于15min冷却时间的节点池。 有多个节点池满足条件时,判断节点池设置的优先级(优先级默认值为0,取值范围为0-100,其中100为最高,0为最低),选择优先级最高的节点池扩容。 如果有多个节点池处于相同的优先级,或者都没有配置优先级时,通过最小浪费原则,根据节点池里设置的虚拟机规格,计算刚好能满足Pending的Pod正常调度,且浪费资源最少的节点池。 如果还是有多个节点池的虚拟机规格都一样,只是AZ不同,那么会随机选择其中一个节点池触发扩容。 节点池中的节点建议不要放置重要数据,以防止节点被弹性缩容,数据无法恢复。 为保证功能的正常使用,节点池开启弹性扩缩容功能后,请务必安装AutoScaler插件。 填写计算配置参数。 计费模式:按需计费或包年/包月。包年/包月可选择时长和自动续费,按月购买自动续费周期为1个月,按年购买自动续费周期为1年。 可用区:可用区是在同一区域下,电力、网络隔离的物理区域,可用区之间内网互通,不同可用区之间物理隔离。 请根据业务需要进行选择。节点池创建之后不支持修改可用区属性,请谨慎选择。 如果您需要提高工作负载的高可靠性,建议您选择“随机可用区”,将节点随机均匀分布在不同可用区中。 节点类型:虚拟机节点或裸金属节点。 节点规格:请根据业务需求选择相应的节点规格,不同的可用区可选择的节点规格类型可能不同,请根据实际情况选择。 图4 选择节点规格 为确保节点稳定性,系统会自动预留部分资源,用于运行必须的系统组件。详细请参见节点预留资源计算公式。 操作系统:部分Region不显示下方分类,请直接选择节点对应的操作系统。 公共镜像:请选择节点对应的操作系统。 私有镜像(公测中):若没有私有镜像可选择,请单击“创建私有镜像指引”进行制作,该功能仅支持v1.15及以上版本集群。详细操作步骤请参见如何使用私有镜像制作工作节点镜像?。 重装操作系统或修改操作系统配置将导致节点不可用,请务必谨慎操作。 登录方式:支持密码和密钥对。 选择“密码”:用户名默认为“root”,请输入登录节点的密码,并确认密码。 登录节点时需要使用该密码,请妥善管理密码,系统无法获取您设置的密码内容。 选择“密钥对”:选择用于登录本节点的密钥对,支持选择共享密钥。 密钥对用于远程登录节点时的身份认证。若没有密钥对,可单击选项框右侧的“创建密钥对”来新建,创建密钥对操作步骤请参见创建密钥对。 如果子用户创建节点选择密钥对创建,这个密钥只对创建这个密钥的子用户有效,即使其他子用户在同一个组也无法选择,也无法使用。例如:A用户创建的密钥,B用户无法使用这个密钥对创建节点,并且Console也选不到。 图5 密钥对 填写存储配置参数。 系统盘:设置工作节点的系统盘空间。您可以设置系统盘的规格为40GB-1024GB之间的数值,缺省值为50GB。 在默认情况下,系统盘可提供高I/O(SAS)、超高I/O(SSD)几种基本的云硬盘类型,关于云硬盘的详细信息请参见云硬盘概述。 数据盘:设置工作节点的数据盘空间。您可以设置数据盘的规格为100GB-32768GB之间的数值,缺省值为100GB。数据盘空间大小配置跟实际业务有关,详细的说明请参见数据盘空间分配说明。 当集群版本为v1.13.10-r0及以上,且节点类型为“磁盘增强型”或“超高I/O型”时,数据盘支持使用云硬盘或本地盘。 若数据盘卸载或损坏,会导致docker服务异常,最终导致节点不可用。建议不要删除该数据盘。 数据盘空间分配:单击后方的“展开高级配置”,勾选下面“自定义空间分配”可以对数据盘空间使用占比进行自定义设置。 您可以自定义数据盘中容器运行时和Kubelet的资源占比。默认90%空间分配给容器运行时使用,剩余空间分配给kubelet组件使用。 您还可以定义单个容器最大能够占用多少空间,默认为10G。 新增数据盘:节点至少需要一块数据盘,且可以增加数据盘。单击“增加一块数据盘”,可以增加数据盘,单击后方的“展开高级配置”可以选择将新增数据盘 挂载到指定目录。 注意挂载路径不能设置为 /、/home/paas、/var/paas、/var/lib、/var/script、/var/log/、/mnt/paas、/opt/cloud,不能和系统目录冲突(例如bin、lib、home、root、boot、dev、etc、lost+found、mnt、proc、sbin、srv、tmp、var、media、opt、selinux、sys、usr等),否则会导致系统或节点安装失败。 加密:数据盘加密功能可为您的数据提供强大的安全防护,加密磁盘生成的快照及通过这些快照创建的磁盘将自动继承加密功能。 默认不加密。 点选“加密”后,可在弹出的“加密设置”对话框中,选择已有的密钥,若没有可选的密钥,请单击后方的链接创建新密钥,完成创建后单击刷新按钮。 填写网络配置参数。 虚拟私有云:跟随集群,不可变更。 该参数仅在v1.13.10-r0及以上版本的集群中支持,否则不显示。 所在子网:通过子网提供与其他网络隔离的、可以独享的网络资源,以提高网络安全。 可选择该集群虚拟私有云下的任意子网,集群节点支持跨子网。 请确保子网下的DNS服务器可以解析OBS服务域名,否则无法创建节点。 该参数仅在v1.13.10-r0及以上版本的集群中支持,否则不显示。 填写高级配置参数。 K8S标签:K8S标签是Kubernetes自带的标签能力,可以通过kubectl命令使用标签过滤节点资源。 资源标签:通过为资源添加标签,可以对资源进行自定义标记,实现资源的分类。 您可以在TMS中创建“预定义标签”,预定义标签对所有支持标签功能的服务资源可见,通过使用预定义标签可以提升标签创建和迁移效率。具体请参见创建预定义标签。 CCE服务会自动帮您创建CCE-Dynamic-Provisioning-Node=节点id的标签,允许增加5个标签。 污点(Taints):使用污点(Taints)可优化容器在集群间的调度,结合工作负载的容忍能力可以避免容器Pod被分配到不合适的节点上。详细说明请参见节点调度设置(污点taint)。 最大实例数:节点最大允许创建的实例数(Pod),该数量包含系统默认实例。集群网络模型为“VPC网络”时,此处的最大值取决于您选择的每个节点可供分配的容器IP个数。 该设置的目的为防止节点因管理过多实例而负载过重,请根据您的业务需要进行设置,相关说明请参见节点最多可以创建多少个Pod。 云服务器组:云服务器组是对云服务器的一种逻辑划分,同一云服务器组中的云服务器遵从同一策略。 安装前执行脚本:请输入脚本命令,大小限制为0~1000字符。 脚本将在Kubernetes软件安装前执行,可能导致Kubernetes软件无法正常安装,需谨慎使用。常用于格式化数据盘等场景。 安装后执行脚本:请输入脚本命令,大小限制为0~1000字符。 脚本将在Kubernetes软件安装后执行,不影响Kubernetes软件安装。常用于修改Docker配置参数等场景。 委托:委托是由租户管理员在 统一身份认证 服务上创建的。通过委托,可以将云主机资源共享给其他帐号,或委托更专业的人或团队来代为管理。新建委托请参见委托其他云服务管理资源,创建委托时委托类型选择“云服务”,单击“选择”按钮并在弹出的窗口中选择“E CS BMS”,即允许ECS或BMS调用云服务。 单容器可用数据空间:该参数用于设置一个容器可用的数据空间大小,设置范围为10G到500G。如果设置的参数超过数据盘中Docker可占用的实际数据空间(由数据盘设置项中的资源分配自定义参数指定,默认为数据盘大小的90%),将以Docker的实际空间大小为主。该参数仅在v1.13.10-r0及以上版本的集群中显示。 单击“下一步:规格确认”。 单击“提交”。
  • 约束与限制 CCE Turbo集群仅支持在新版本UI设置弹性扩缩容,具体设置请参见操作步骤-新UI。 支持在新版本UI设置节点池包周期计费,具体设置请参见操作步骤-新UI。 节点弹性伸缩功能需要安装autoscaler插件,具体安装与参数配置请参见autoscaler。 仅按需计费支持节点弹性伸缩,包年/包月计费模式不支持弹性伸缩。如果节点池中有按需计费节点被转成包周期计费,可能会导致弹性伸缩失效,请通过迁移节点功能将包周期节点迁移到DefaultPool。
  • 使用密钥配置Pod的数据卷 密钥可以在Pod中作为文件使用。如下面的Pod示例所示,mysecret密钥的username和password以文件方式保存在/etc/foo目录下。 apiVersion: v1kind: Podmetadata: name: mypodspec: containers: - name: mypod image: redis volumeMounts: - name: foo mountPath: "/etc/foo" readOnly: true volumes: - name: foo secret: secretName: mysecret 另外,还可以指定密钥的目录路径和权限,username存放在容器中的/etc/foo/my-group/my-username目录下。 apiVersion: v1kind: Podmetadata: name: mypodspec: containers: - name: mypod image: redis volumeMounts: - name: foo mountPath: "/etc/foo" volumes: - name: foo secret: secretName: mysecret items: - key: username path: my-group/my-username mode: 511 挂载Secret到数据卷还可以在界面上进行操作,在创建工作负载时,设置容器的高级设置,选择数据存储,添加本地磁盘,选择Secret即可配置。具体请参见密钥(Secret)挂载。
  • 使用密钥设置Pod的环境变量 密钥可以在Pod中设置为环境变量。如下面的Pod示例所示,mysecret密钥的username和password配置为Pod的环境变量。 apiVersion: v1kind: Podmetadata: name: secret-env-podspec: containers: - name: mycontainer image: redis env: - name: SECRET_USERNAME valueFrom: secretKeyRef: name: mysecret key: username - name: SECRET_PASSWORD valueFrom: secretKeyRef: name: mysecret key: password restartPolicy: Never
  • 操作场景 容器组(Pod)是Kubernetes中最小的可部署单元。一个Pod(容器组)包含了一个应用程序容器(某些情况下是多个容器)、存储资源、一个唯一的网络IP地址、以及一些确定容器该如何运行的选项。Pod容器组代表了Kubernetes中一个独立的应用程序运行实例,该实例可能由单个容器或者几个紧耦合在一起的容器组成。 Kubernetes集群中的Pod存在如下两种使用途径: 一个Pod中只运行一个容器。"one-container-per-pod" 是Kubernetes中最常见的使用方式。此时,您可以认为Pod容器组是该容器的 wrapper,Kubernetes通过Pod管理容器,而不是直接管理容器。 一个Pod中运行多个需要互相协作的容器。您可以将多个紧密耦合、共享资源且始终在一起运行的容器编排在同一个Pod中,可能的情况有: Content management systems, file and data loaders, local cache managers等 log and checkpoint backup, compression, rotation, snapshotting等 data change watchers, log tailers, logging and monitoring adapters, event publishers等 proxies, bridges, adapters等 controllers, managers, configurators, and updaters 您可以在云容器引擎CCE中方便的管理容器组(Pod),如编辑YAML、监控、删除等操作。
  • 操作场景 工作负载创建后,您可以对其执行伸缩、升级、编辑YAML、日志、监控、回退、删除等操作。 表1 工作负载/任务管理 操作 描述 日志 可查看无状态工作负载、有状态工作负载、守护进程集、普通任务的日志信息 升级 可以通过更换镜像或镜像版本实现无状态工作负载、有状态工作负载、守护进程集的快速升级,业务无中断。 编辑YAML 可通过在线YAML编辑窗对无状态工作负载、有状态工作负载、守护进程集和容器组的YAML文件进行修改和下载。普通任务和定时任务的YAML文件仅支持查看、复制和下载。 伸缩 可以根据业务需求自行定义无状态工作负载、有状态工作负载和守护进程集的伸缩策略,降低因应对业务变化和高峰压力而人为反复调整资源的工作量,帮助您节约资源和人力成本。 监控 可以通过CCE控制台查看无状态工作负载、守护进程集和容器组的CPU和内存占用情况,以确定需要的资源规格。 回退 无状态工作负载可以进行回退操作,仅无状态工作负载可用。 暂停 无状态工作负载可以进行暂停操作,仅无状态工作负载可用。 恢复 无状态工作负载可以进行恢复操作,仅无状态工作负载可用。 标签管理 标签是以key/value键值对的形式附加在工作负载上的。添加标签后,可通过标签对工作负载进行管理和选择,主要用于设置亲和性与反亲和性调度。 删除 若工作负载无需再使用,您可以将工作负载或任务删除。工作负载或任务删除后,将无法恢复,请谨慎操作。 访问方式 您可根据业务需要选择工作负载的访问方式:网络概述。 调度策略 CCE支持“自定义调度策略”和“简易调度策略”。自定义调度策略开放节点亲和、工作负载亲和以及工作负载反亲和调度策略的配置,以满足用户的更高需求。简易调度策略提供简单便捷以及足够功能的调度方式。 事件 查看该工作负载或具体实例的事件名称、事件类型、发生次数、Kubernetes事件、首次和最近发生的时间。
  • 容器如何执行命令和参数 Docker的镜像拥有存储镜像信息的相关元数据,如果不设置生命周期命令和参数,容器运行时会运行镜像制作时提供的默认的命令和参数,Docker原生定义这两个字段为“Entrypoint”和"CMD"。 如果在创建工作负载时填写了容器的运行命令和参数,将会覆盖镜像构建时的默认命令"Entrypoint"、"CMD",规则如下: 表1 容器如何执行命令和参数 镜像 Entrypoint 镜像CMD 容器运行命令 容器运行参数 最终执行 [touch] [/root/test] 未设置 未设置 [touch /root/test] [touch] [/root/test] [mkdir] 未设置 [mkdir] [touch] [/root/test] 未设置 [/opt/test] [touch /opt/test] [touch] [/root/test] [mkdir] [/opt/test] [mkdir /opt/test]
  • 设置容器启动命令-YAML样例 本节以nginx为例,说明通过kubectl设置容器启动命令的方法。 请参见通过kubectl连接集群,使用kubectl连接集群。参见通过kubectl命令行创建无状态工作负载或通过kubectl命令行创建有状态工作负载时,容器启动命令的参数设置如下所示,详细请参见kubernetes官方文档。 apiVersion: apps/v1kind: Deploymentmetadata: name: nginxspec: replicas: 1 selector: matchLabels: app: nginx strategy: type: RollingUpdate template: metadata: labels: app: nginx spec: containers: - image: nginx command: - sleep - '3600' #启动命令 imagePullPolicy: Always lifecycle: postStart: exec: command: - /bin/bash - install.sh #启动后命令 preStop: exec: command: - /bin/bash - uninstall.sh #停止前命令 name: nginx imagePullSecrets: - name: default-secret
  • 操作场景 创建工作负载或任务时,通常通过镜像指定容器中运行的进程。 在默认情况下,镜像会运行默认命令,如果想运行特定命令或重写镜像默认值,需要用到以下设置: 工作目录:指定运行命令的工作目录。 若镜像中未指定工作目录,且在界面中也未指定,默认是“/”。 运行命令:控制镜像运行的实际命令。 运行参数:传递给运行命令的参数。 容器启动后,容器中的内容不应修改。如果修改配置项(例如将容器应用的密码、证书、环境变量配置到容器中),当容器重启(例如节点异常重新调度pod)后,会导致配置丢失,业务异常。 配置信息应通过入参等方式导入容器中,以免重启后配置丢失。
  • 工作负载创建时设置 您可以在创建工作负载时通过CCE控制台设置Service访问方式,如下: 参考创建无状态负载(Deployment)、创建有状态负载(StatefulSet)或创建守护进程集(DaemonSet),在“工作负载访问设置”步骤,单击“添加服务”。 访问类型:选择“集群内访问 ( ClusterIP )”。 Service名称:自定义服务名称,可与工作负载名称保持一致。 IPv6:默认不开启,开启后服务的集群内IP地址(ClusterIP)变为IPv6地址,具体请参见如何通过CCE搭建IPv4/IPv6双栈集群?。该功能仅在1.15及以上版本的集群创建时开启了IPv6功能才会显示。 端口配置: 协议:请根据业务的协议类型选择。 容器端口:工作负载程序实际监听的端口,需用户确定。nginx程序实际监听的端口为80。 访问端口:容器端口映射到集群虚拟IP上的端口,用虚拟IP访问工作负载时使用,端口范围为1-65535,可任意指定。 图2 访问类型为集群内访问 ( ClusterIP ) 单击“下一步”进入“高级设置”页面,直接单击“创建”。 单击“查看工作负载详情”,在“访问方式”页签下获取访问地址,例如10.247.74.100:8080。
  • Service Service是用来解决Pod访问问题的。每个Service有一个固定IP地址,Service将访问流量转发给Pod,而且Service可以给这些Pod做负载均衡。 图1 通过Service访问Pod 根据创建Service的类型类型不同,可分成如下模式: ClusterIP:用于在集群内部互相访问的场景,通过ClusterIP访问Service。 NodePort:用于从集群外部访问的场景,通过节点上的端口访问Service。 LoadBalancer:用于从集群外部访问的场景,其实是NodePort的扩展,通过一个特定的LoadBalancer访问Service,这个LoadBalancer将请求转发到节点的NodePort,而外部只需要访问LoadBalancer。 ENI LoadBalancer:用于从集群外部访问的场景,可使用LoadBalancer直通容器,使部署在容器中的业务时延降低、性能无损耗。 Service的详细介绍请参见Service概述。
  • 网络访问场景 负载网络访问可以分为如下几种场景。 集群内部访问:创建ClusterIP类型的Service,通过Service访问负载。 外部访问负载:从外部访问负载推荐使用Service(NodePort类型或LoadBalancer类型)或Ingress访问。 公网访问负载需要节点或LoadBalancer绑定公网IP。 内网访问负载通过节点或LoadBalancer内网IP即可。如果跨VPC需要通过对等连接等手段打通不同VPC网络。 负载访问外部: 负载访问内网:负载访问内网地址,在不同容器网络模型下有不同的表现,需要注意在对端安全组放通容器网段,具体请参见容器如何访问VPC内部网络。 负载访问公网:访问公网有几种方法可以实现,一是让容器所在节点绑定公网IP(容器网络模型为VPC网络或容器隧道网络),或给Pod IP绑定公网IP(云原生2.0网络),另一个是通过NAT网关配置SNAT规则,具体请参见从容器访问公网。 图3 网络访问示意图
  • 集群网络构成 集群中节点都位于VPC中,节点使用VPC的网络,容器的网络是使用专门的网络插件来管理。 节点网络 节点网络为集群内主机(节点,图中的Node)分配IP地址,您需要选择VPC中的子网用于CCE集群的节点网络。子网的可用IP数量决定了集群中可以创建节点数量的上限(包括Master节点和Node节点),集群中可创建节点数量还受容器网络的影响,在容器网络模型中会进一步说明。 容器网络 为集群内容器分配IP地址。CCE继承Kubernetes的IP-Per-Pod-Per-Network的容器网络模型,即每个Pod在每个网络平面下都拥有一个独立的IP地址,Pod内所有容器共享同一个网络命名空间,集群内所有Pod都在一个直接连通的扁平网络中,无需NAT可直接通过Pod的IP地址访问。Kubernetes只提供了如何为Pod提供网络的机制,并不直接负责配置Pod网络;Pod网络的具体配置操作交由具体的容器网络插件实现。容器网络插件负责为Pod配置网络并管理容器IP地址。 当前CCE支持如下容器网络模型。 容器隧道网络:容器隧道网络在节点网络基础上通过隧道封装另构建的独立于节点网络平面的容器网络平面,CCE集群容器隧道网络使用的封装协议为VXLAN,后端虚拟交换机采用的是openvswitch,VXLAN是将以太网报文封装成UDP报文进行隧道传输。 VPC网络:VPC网络采用VPC路由方式与底层网络深度整合,适用于高性能场景,节点数量受限于虚拟私有云VPC的路由配额。每个节点将会被分配固定大小的IP地址段。VPC网络由于没有隧道封装的消耗,容器网络性能相对于容器隧道网络有一定优势。VPC网络集群由于VPC路由中配置有容器网段与节点IP的路由,可以支持集群外直接访问容器实例等特殊场景。 云原生2.0网络:云原生网络2.0是自研的新一代容器网络模型,深度整合了虚拟私有云VPC的弹性网卡(Elastic Network Interface,简称ENI)和辅助弹性网卡(Sub Network Interface,简称Sub-ENI)的能力,直接从VPC网段内分配容器IP地址,支持ELB直通容器,绑定安全组,绑定弹性公网IP,享有高性能。 不同容器网络模型,容器网络的性能、组网规模、适用场景各不相同,在容器网络模型对比章节,将会详细介绍不同容器网络模型的功能特性,了解这些有助于您选择容器网络模型。 服务网络 服务(Service)是Kubernetes内的概念,每个Service都有一个固定的IP地址,在CCE上创建集群时,可以指定Service的地址段(即服务网段)。服务网段不能和节点网段、容器网段重叠。服务网段只在集群内使用,不能在集群外使用。
共100000条