华为云用户手册

  • 解决方案 登录节点。 重新创建PV和VG,但是创建时报错: root@host1:~# pvcreate /dev/vdbDevice /dev/vdb excluded by a filter 这是由于添加的磁盘是在另一个虚拟机中新建的,已经存在了分区表,当前虚拟机并不能识别磁盘的分区表,运行parted命令重做分区表,中途需要输入三次命令。 root@host1:~# parted /dev/vdbGNU Parted 3.2Using /dev/vdbWelcome to GNU Parted! Type 'help' to view a list of commands.(parted) mklabel msdosWarning: The existing disk label on /dev/vdb will be destroyed and all data on this disk will be lost. Do you want to continue?Yes/No? yes(parted) quitInformation: You may need to update /etc/fstab. 再次运行pvcreate,当询问是否擦除dos签名时,输入y,就可以将磁盘创建为PV。 root@host1:~# pvcreate /dev/vdbWARNING: dos signature detected on /dev/vdb at offset 510. Wipe it? [y/n]: yWiping dos signature on /dev/vdb.Physical volume "/dev/vdb" successfully created 创建VG。 判断该节点的docker盘,如果是/dev/vdb和/dev/vdc两个盘,则执行下面的命令: root@host1:~# vgcreate vgpaas /dev/vdb /dev/vdc 如果只有/dev/vdb盘,则执行下面的命令: root@host1:~# vgcreate vgpaas /dev/vdb 创建完成后,重置节点即可恢复。
  • CCE集群节点中安装kubelet的端口主要有哪些? CCE集群节点中安装kubelet的端口主要有如下几个: 10250 –port:kubelet服务监听的端口,api会检测他是否存活。 10248 –healthz-port:健康检查服务的端口。 10255 –read-only-port:只读端口,可以不用验证和授权机制,直接访问。 4194 –cadvisor-port:当前节点cadvisor运行的端口。 父主题: 节点运行
  • 基本介绍 表1 CCE和CCI基本介绍 云容器引擎CCE 云容器实例CCI 云容器引擎(Cloud Container Engine,简称CCE)提供高度可扩展的、高性能的企业级Kubernetes集群,支持运行Docker容器,提供了Kubernetes集群管理、容器应用全生命周期管理、应用服务网格、Helm应用模板、插件管理、应用调度、监控与运维等容器全栈能力,为您提供一站式容器平台服务。借助云容器引擎,您可以在华为云上轻松部署、管理和扩展容器化应用程序。 详细介绍请查看什么是云容器引擎。 云容器实例(Cloud Container Instance, CCI)服务提供Serverless Container(无服务器容器)引擎,让您无需创建和管理服务器集群即可直接运行容器。通过CCI您只需要管理运行在Kubernetes上的容器化业务,无需管理集群和服务器即可在CCI上快速创建和运行容器负载,使容器应用零运维,使企业聚焦业务核心,为企业提供了Serverless化全新一代的体验和选择。 而Serverless是一种架构理念,是指不用创建和管理服务器、不用担心服务器的运行状态(服务器是否在工作等),只需动态申请应用需要的资源,把服务器留给专门的维护人员管理和维护,进而专注于应用开发,提升应用开发效率、节约企业IT成本。传统上使用Kubernetes运行容器,首先需要创建运行容器的Kubernetes服务器集群,然后再创建容器负载。 详细介绍请查看什么是云容器实例。
  • 创建方式 表2 创建方式不同 云容器引擎CCE 云容器实例CCI CCE是基于Kubernetes的托管式容器管理服务,可以提供原生Kubernetes体验,可以一键创建原生Kubernetes集群,与社区能力基本一致。 使用CCE,您需要创建集群和节点,简单、低成本、高可用,无需管理Master节点。 CCI提供 Serverless Container引擎,在华为云上部署容器时,您不需要购买和管理E CS ,可以直接在华为云上运行容器和Pod,为您省去底层ECS的运维和管理工作。 使用CCI,您无需创建集群,无需创建和管理Master节点及Work节点,可直接启动应用程序。
  • CCE与CCI两者的配合 通过安装Virtual-Kubelet插件,可以在在短时高负载场景时,将部署在CCE上的无状态工作负载(Deployment)、有状态工作负载(StatefulSet)、普通任务(Job)三种资源类型的容器实例(Pod),弹性创建到华为云云容器实例CCI服务上,以减少集群扩容带来的消耗。 具体功能如下: 支持容器实例实现秒级弹性伸缩:在集群资源不足时,无需新增节点,virtual-kubelet插件将自动为您在云容器实例CCI侧创建容器实例,减少运维成本。 无缝对接华为云 容器镜像服务 SWR,支持使用公用镜像和私有镜像。 支持CCI容器实例的事件同步、监控、日志、exec、查看状态等操作。 支持查看虚拟弹性节点的节点容量信息。 支持CCE和CCI两侧实例的service网络互通。 详情请参见华为云 CCE弹性伸缩 至CCI。
  • 问题建议 方案一:发布服务使用域名发现,需要提前预制好主机名和命名空间,服务发现使用域名的方式,注册的服务的域名为:服务名.命名空间.svc.cluster.local 。这种使用有限制,注册中心部署必须容器化部署。 方案二:容器部署使用主机网络部署,然后亲和到集群的某一个节点,这样可以明确知道容器的服务地址(就是节点的地址),注册的地址为:服务所在节点IP,这种方案可以满足注册中心利用VM部署,缺陷是使用主机网络效率没有容器网络高。
  • 如何让多个Pod均匀部署到各个节点上? Kubernetes中kube-scheduler组件负责Pod的调度,对每一个新创建的 Pod 或者是未被调度的 Pod,kube-scheduler 会选择一个最优的节点去运行这个 Pod。kube-scheduler 给一个 Pod 做调度选择包含过滤和打分两个步骤。过滤阶段会将所有满足 Pod 调度需求的节点选出来,在打分阶段 kube-scheduler 会给每一个可调度节点进行优先级打分,最后kube-scheduler 会将 Pod 调度到得分最高的节点上,如果存在多个得分最高的节点,kube-scheduler 会从中随机选取一个。 打分优先级中节点调度均衡(BalancedResourceAllocation)只是其中一项,还有其他打分项会导致分布不均匀。详细的调度说明请参见Kubernetes 调度器和调度策略。 想要让多个Pod尽可能的均匀分布在各个节点上,可以考虑使用工作负载反亲和特性,让Pod之间尽量“互斥”,这样就能尽量均匀的分布在各节点上。 示例如下: kind: DeploymentapiVersion: apps/v1metadata: name: nginx namespace: defaultspec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: container-0 image: nginx:alpine resources: limits: cpu: 250m memory: 512Mi requests: cpu: 250m memory: 512Mi affinity: podAntiAffinity: # 工作负载反亲和 preferredDuringSchedulingIgnoredDuringExecution: # 尽量满足如下条件 - podAffinityTerm: labelSelector: # 选择Pod的标签,与工作负载本身反亲和 matchExpressions: - key: app operator: In values: - nginx namespaces: - default topologyKey: kubernetes.io/hostname # 在节点上起作用 imagePullSecrets: - name: default-secret 父主题: 调度策略
  • 排查项二:节点IP+节点端口 只有发布为节点访问(NodePort)或负载均衡(LoadBalancer )的服务才能通过节点IP+节点端口进行访问。 节点访问(NodePort)类型: 节点的访问端口就是节点对外发布的端口。 负载均衡(LoadBalancer )类型: 负载均衡的节点端口通过“编辑YAML”可以查看。 如下图所示: nodePort: 30637为节点对外暴露的端口。targetPort: 80为Pod对外暴露的端口。port: 123为服务对外暴露的端口,负载均衡类型的服务同时使用该端口配置ELB的监听器。 找到节点端口(nodePort)后,使用容器所在节点的IP地址+端口进行访问,并查看结果是否符合预期。 常见问题: 节点的入方向对业务端口未放通。 节点配置了自定义路由,并且配置错误。 pod的label与service的label不匹配(kubectl或API创建)。
  • 排查项三:负载均衡IP+端口 如果使用负载均衡IP+端口不能访问,但节点IP+端口可以访问。 请排查: 相关端口或URL的后端服务器组是否符合预期。 节点上的安全组是否对ELB暴露了相关的协议或端口。 四层ELB的健康检查是否开启(未开启的话,请开启)。 七层ELB的访问方式中使用的证书是否过期。 常见问题: 发布四层ELB时,如果客户在界面未开启健康检查,ELB可能会将流量转发到异常的节点。 UDP协议的访问,需要放通节点的ICMP协议。 pod的label与service的label不匹配(kubectl或API创建)。
  • 解决方法 如果想要解决这个问题,可以在定时任务的CronJob中配置参数:startingDeadlineSeconds。该参数只能使用kubectl命令,或者通过API接口进行创建或修改。 YAML示例如下: apiVersion: batch/v1kind: CronJobmetadata: name: hellospec: startingDeadlineSeconds: 200 schedule: "* * * * *" jobTemplate: spec: template: spec: containers: - name: hello image: busybox:1.28 imagePullPolicy: IfNotPresent command: - /bin/sh - -c - date; echo Hello restartPolicy: OnFailure 如果重新创建CronJob,也可以临时规避这个限制。
  • 排查项一:容器+容器端口 在CCE控制台界面或者使用kubectl命令查找pod的IP,然后登录到集群内的节点或容器中,使用curl命令等方法手动调用接口,查看结果是否符合预期。 如果容器IP+端口不能访问,建议登录到业务容器内使用“127.0.0.1+端口”进行排查。 常见问题: 容器端口配置错误(容器内未监听访问端口)。 URL不存在(容器内无相关路径)。 服务异常(容器内的业务BUG)。 检查集群网络内核组件是否异常(容器隧道网络模型:openswitch内核组件;VPC网络模型:ipvlan内核组件)。
  • Headless Service使用场景 当某个工作负载的多个Pod之间没有任何区别时,可以使用普通Service,利用集群kube-proxy实现Service的负载均衡,例如常见的无状态应用Nginx。 但是某些应用场景下,工作负载的各个实例间存在不同的角色区别,比如Redis集群,每个Redis实例都是不同的,它们之间存在主从关系,并且需要相互通信。这种情况下,使用普通Service无法通过Cluster IP来保证访问到某个指定的实例,因此需要设置Headless Service直接访问Pod的真实IP地址,实现Pod间互相访问。 Headless Service一般结合StatefulSet来部署有状态的应用,比如Redis集群、MySQL集群等。
  • Headless Service和普通Service的区别 普通Service: 一个Service可能对应多个EndPoint(Pod),client访问的是Cluster IP,通过iptables或IPVS规则转到Real Server,从而达到负载均衡的效果。例如:Service有2个EndPoint,但是DNS查询时只会返回Service的地址,具体client访问的是哪个Real Server,是由iptables或IPVS规则来决定的,客户端无法自行选择访问指定的EndPoint。 Headless Service: 访问Headless Service时,DNS查询会如实的返回每个真实的EndPoint(Pod的IP地址)。对应到每一个EndPoints,即每一个Pod,都会有对应的DNS域名;这样Pod之间就可以互相访问,达到实例间发现和访问的效果。
  • 如何收集CCE集群中节点的日志? CCE节点日志文件如下表所示。 表1 1.21及以上版本节点日志列表 日志名称 路径 kubelet日志 /var/log/cce/kubernetes/kubelet.log kube-proxy日志 /var/log/cce/kubernetes/kube-proxy.log everest日志(存储) /var/log/cce/everest-csi-driver yangtse日志(网络) /var/log/cce/yangtse canal日志 /var/log/cce/canal 系统日志 /var/log/messages 表2 1.19及以下版本节点日志列表 日志名称 路径 kubelet日志 /var/paas/sys/log/kubernetes/kubelet.log kube-proxy日志 /var/paas/sys/log/kubernetes/kube-proxy.log everest日志(存储) /var/log/cce/everest-csi-driver yangtse日志(网络) /var/paas/sys/log/yangtse canal日志 /var/paas/sys/log/canal 系统日志 /var/log/messages 父主题: 节点运行
  • 基础概念 云容器引擎(CCE) 云容器引擎(Cloud Container Engine,简称CCE)提供高度可扩展的、高性能的企业级Kubernetes集群,支持运行Docker容器,提供了Kubernetes集群管理、容器应用全生命周期管理、应用服务网格、Helm应用模板、插件管理、应用调度、监控与运维等容器全栈能力,为您提供一站式容器平台服务。借助云容器引擎,您可以在华为云上轻松部署、管理和扩展容器化应用程序。 应用管理与运维平台(ServiceStage) ServiceStage应用管理与运维平台是一个应用托管和微服务管理平台,可以帮助企业简化部署、监控、运维和治理等应用生命周期管理工作。ServiceStage面向企业提供微服务、移动和Web类应用开发的全栈解决方案,帮助您的各类应用轻松上云,聚焦业务创新,帮助企业数字化快速转型。
  • 解决方法 您可以使用kubectl命令删除残留的模板实例。 安装模板时,模板中的一些资源可能已经创建成功,因此首先要手动删除这些资源。确保残留的资源删除后,需删除模板实例。 若为 helm v2 的实例,在kube-system命名空间下查询模板实例对应的配置项(ConfigMap),例如: 删除该配置项,此时模板实例即删除成功: 若为helm v3 的实例,在实例所在命名空间下查询模板实例对应的密钥(Secret),例如: 删除该密钥,此时模板实例即删除成功: 注:若用户通过前端console操作,在获取实例、更新实例等操作中CCE会自动尝试转换原v2模板实例到v3模板实例。在密钥中存储release信息,原配置项中release信息不会删除。建议用户在配置项和密钥中均查询并删除该实例。
  • 解决方案 创建pod时,在pod的annotation中需增加kubernetes.io/extend-path-mode。 创建deployment时,需要在template中的annotation增加kubernetes.io/extend-path-mode。 如下为创建pod的yaml示例,在annotation中添加kubernetes.io/extend-path-mode关键字后,完全匹配到containername,name,mountpath三个字段,则会在volumeMount中增加对应的extendpathmode: apiVersion: v1kind: Podmetadata: name: test-8b59d5884-96vdz generateName: test-8b59d5884- namespace: default selfLink: /api/v1/namespaces/default/pods/test-8b59d5884-96vdz labels: app: test pod-template-hash: 8b59d5884 annotations: kubernetes.io/extend-path-mode: '[{"containername":"container-0","name":"vol-156738843032165499","mountpath":"/tmp","extendpathmode":"PodUID"}]' metrics.alpha.kubernetes.io/custom-endpoints: '[{"api":"","path":"","port":"","names":""}]' ownerReferences: - apiVersion: apps/v1 kind: ReplicaSet name: test-8b59d5884 uid: 2633020b-cd23-11e9-8f83-fa163e592534 controller: true blockOwnerDeletion: truespec: volumes: - name: vol-156738843032165499 hostPath: path: /tmp type: '' - name: default-token-4s959 secret: secretName: default-token-4s959 defaultMode: 420 containers: - name: container-0 image: 'nginx:latest' env: - name: PAAS_APP_NAME value: test - name: PAAS_NAMESPACE value: default - name: PAAS_PROJECT_ID value: b6315dd3d0ff4be5b31a963256794989 resources: limits: cpu: 250m memory: 512Mi requests: cpu: 250m memory: 512Mi volumeMounts: - name: vol-156738843032165499 mountPath: /tmp extendPathMode: PodUID - name: default-token-4s959 readOnly: true mountPath: /var/run/secrets/kubernetes.io/serviceaccount terminationMessagePath: /dev/termination-log terminationMessagePolicy: File imagePullPolicy: Always restartPolicy: Always terminationGracePeriodSeconds: 30 dnsPolicy: ClusterFirst serviceAccountName: default serviceAccount: default nodeName: 192.168.0.24 securityContext: {} imagePullSecrets: - name: default-secret - name: default-secret affinity: {} schedulerName: default-scheduler tolerations: - key: node.kubernetes.io/not-ready operator: Exists effect: NoExecute tolerationSeconds: 300 - key: node.kubernetes.io/unreachable operator: Exists effect: NoExecute tolerationSeconds: 300 priority: 0 dnsConfig: options: - name: timeout value: '' - name: ndots value: '5' - name: single-request-reopen enableServiceLinks: true 表1 关键参数说明 参数 参数类型 描述 containername String 容器名称。 name String volume的名称。 mountpath String 挂载路径 extendpathmode String 将在已创建的“卷目录/子目录”中增加一个三级目录,便于更方便获取单个Pod输出的文件。 支持如下五种类型,详情请参考容器日志。 None:不配置拓展路径。 PodUID:Pod的ID。 PodName:Pod的名称。 PodUID/ContainerName:Pod的ID/容器名称。 PodName/ContainerName:Pod名称/容器名称。
  • 问题现象 删除命名空间时,命名空间一直处“删除中”状态,无法删除。查看命名空间yaml配置,status中有报错“DiscoveryFailed”,示例如下: 上图中报错信息为:Discovery failed for some groups, 1 failing: unable to retrieve the complete list of server APIs: metrics.k8s.io/v1beta1: the server is currently unable to handle the request 表示当前删除命名空间动作阻塞在kube-apiserver访问metrics.k8s.io/v1beta1 接口的APIService资源对象。
  • 解决方案 删除相关报错资源,重新通过helm创建。 查看报错内容,确认产生冲突的资源。请您关注“Unable to continue with install:”后的信息,例如以下报错为default命名空间中的test-nginx工作负载出现冲突。 前往集群控制台或执行以下kubectl命令删除集群中的test-nginx工作负载。此处仅为示例,请根据实际报错信息进行删除。 kubectl delete deploy test-nginx -n default 解决资源冲突后,尝试重新安装模板。
  • 问题现象 创建或升级实例失败,提示“Create release by helm failed:rendered manifests contain a resource that already exists。Unable to continue with install: ..., label validation error:missing key \"app.kubernetes.io/managed-by\":must be set to\"Helm\" ... 创建模板实例失败”。
  • 问题根因 当集群中存在APIService对象时,删除命名空间会先访问APIService对象,若APIService资源无法正常访问,会阻塞命名空间删除。除用户创建的APIService对象资源外,CCE集群部分插件也会自动创建APIService资源,如metrics-server, prometheus插件。 APIService使用介绍请参考:https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/apiserver-aggregation/
  • 节点上监听了哪些端口 表1 Node节点监听端口 目的端口 协议 端口说明 10248 TCP kubelet健康检查端口 10250 TCP kubelet服务端口,提供节点上工作负载的监控信息和容器的访问通道 10255 TCP kubelet只读端口,提供节点上工作负载的监控信息 动态端口(与宿主机限制的范围有关,比如 内核参数 net.ipv4.ip_local_port_range) TCP kubelet 随机监听一个端口,与CRI Shim通信获取Exec URL 10249 TCP kube-proxy metric端口,提供kube-proxy组件的监控信息 10256 TCP kube-proxy健康检查端口 动态端口(32768~65535) TCP docker exec等功能的websocket监听端口 动态端口(32768~65535) TCP containerd exec等功能的websocket监听端口 28001 TCP icagent本地侦听端口,接受节点syslog日志 28002 TCP icagent健康检查端口 20101 TCP yangtse-agent/canal-agent健康检查端口(容器隧道网络模式涉及) 20104 TCP yangtse-agent/canal-agent的metric端口,提供组件的监控信息(容器隧道网络模式涉及) 3125 TCP everest-csi-driver侦听健康检查端口 3126 TCP everest-csi-driver pprof端口 19900 TCP node-problem-detector 健康检查server端口 19901 TCP node-problem-detector对接普罗采集监控数据端口 4789 UDP ovs侦听端口,容器网络vxlan报文的传输通道(容器隧道网络模式涉及) 4789 UDPv6 ovs侦听端口,容器网络vxlan报文的传输通道(容器隧道网络模式涉及) 动态端口30000~32767 TCP kube-proxy侦听端口,做4层负载均衡。K8s会给NodePort和Loadbalancer类型的服务分配一个随机端口,默认范围在30000~32767 动态端口30000~32767 UDP kube-proxy侦听端口,做4层负载均衡。K8s会给NodePort和Loadbalancer类型的服务分配一个随机端口,默认范围在30000~32767 123 UDP ntpd侦听端口,负责时间同步 20202 TCP PodLB侦听端口,做7层负载均衡,负责转发容器镜像拉取请求 父主题: 节点运行
  • 检查Ingress配置是否正确 如果以上排查项都正常,需要考虑是否由于参数设置引起异常。由于使用kubectl创建时需要填写的参数较多易出错,建议您使用控制台创建,根据可视界面按需设置参数,自动过滤不符合要求的负载均衡及Service,能够有效避免出现关键参数格式错误或缺失的问题。 请您根据以下思路进行逐一排查Ingress配置: 检查对接ELB参数是否正确 由于ELB通过annotations字段下的参数进行定义,但是K8s在创建资源时并不会对annotations字段参数进行校验,如果出现关键参数错误或缺失,Ingress资源也可被创建,但无法正常访问。 以下是出现频率较高的问题,供您参考: 对接的目标ELB未与集群处于同一VPC下。 添加ELB型Ingress时对接已有ELB,annotations中关键字段kubernetes.io/elb.id、kubernetes.io/elb.ip、kubernetes.io/ingress.class、kubernetes.io/elb.port缺失。 添加Nginx型Ingress时,未安装nginx-ingress插件导致无ELB连接。 添加Nginx型Ingress时,annotations中关键字段kubernetes.io/ingress.class、kubernetes.io/elb.port缺失。 添加Nginx型Ingress时,kubernetes.io/elb.port参数不支持自定义端口,使用HTTP协议固定为80,HTTPS协议固定为443。 检查Service配置是否正确 检查Ingress对接的Service类型是否正确,Ingress支持的Service如下。 表1 ELB Ingress支持的Service类型 集群类型 ELB类型 集群内访问(ClusterIP) 节点访问(NodePort) CCE集群 共享型负载均衡 不支持 支持 独享型负载均衡 不支持(集群内访问服务关联实例未绑定eni网卡,独享型负载均衡无法对接) 支持 CCE Turbo 集群 共享型负载均衡 不支持 支持 独享型负载均衡 支持 不支持(节点访问服务关联实例已绑定eni网卡,独享型负载均衡无法对接) 表2 Nginx Ingress支持的Service类型 集群类型 ELB类型 集群内访问(ClusterIP) 节点访问(NodePort) CCE集群 共享型负载均衡 支持 支持 独享型负载均衡 支持 支持 CCE Turbo集群 共享型负载均衡 支持 支持 独享型负载均衡 支持 支持 检查Service的访问端口号是否正确,此处Service的访问端口号(port字段)需区别于容器端口号(targetPort字段)。 检查转发配置的参数是否填写正确 添加的URL转发路径要求后端应用内存在相同的路径,否则转发无法生效。 例如,Nginx应用默认的Web访问路径为“/usr/share/nginx/html”,在为Ingress转发策略添加“/test”路径时,需要应用的Web访问路径下也包含相同路径,即“/usr/share/nginx/html/test”,否则将返回404。 使用Nginx型的Ingress Controller时,您可通过在annotations字段添加rewrite注释进行重定向,将业务内不存在的path路径进行重写,避免访问路径不存在的错误,详情请参见Rewrite。 创建Ingress时指定了域名(host),将无法通过IP访问。
  • 排查思路 本文提供了Ingress外部访问异常排查全景图,如图1所示,帮助您由浅入深地排查Ingress访问异常问题。 图1 Ingress访问异常排查全景图 检查异常是否由Ingress引起。 首先需要确认问题是否由Ingress导致的,因此需要确保外部域名解析正常、安全组规则正确,且Ingress对应的Service和工作负载工作正常。 检查Ingress状态是否正常。 在Service和工作负载都正常的情况下,需要保证Ingress依赖的ELB状态正常。如果是Nginx型的Ingress,还需要保证nginx-ingress插件的状态是正常的。 检查Ingress配置是否正确。 如果以上排查结果都正常,说明可能是Ingress的配置出现问题。 检查对接ELB参数是否填写正确。 检查Service参数是否填写正确。 检查转发配置的参数是否填写正确。 检查证书问题。 如果Ingress开启了HTTPS访问,还需要排除证书配置错误的问题。您可使用相同ELB创建一个HTTP协议的Ingress访问,如HTTP协议下访问正常,则说明HTTPS协议证书可能存在问题。 如果以上排查均无效果,请进行抓包分析,或提交工单寻求帮助。
  • 检查证书问题 CCE的Ingress密钥证书类型为IngressTLS或kubernetes.io/tls,若证书类型不正确,创建的Ingress将无法在ELB侧建立监听器,导致Ingress访问异常。 首先去除YAML中关于HTTPS的参数,尝试创建HTTP类型的Ingress是否可正常访问。 如HTTP访问正常,则考虑HTTPS密钥证书是否存在问题。 排除密钥类型错误。检查密钥类型是否为IngressTLS或kubernetes.io/tls类型。 # kubectl get secretNAME TYPE DATA AGEingress IngressTLS 2 36m 创建测试证书,排除证书问题。 # openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN={YOUR_HOST}/O={YOUR_HOST}" 使用测试的私钥证书tls.key和tls.crt创建正确类型的密钥,并重新创建HTTPS类型的Ingress测试是否可以正常访问。本文以创建IngressTLS类型密钥为例。 通过kubectl方式创建时,创建IngressTLS类型密钥的示例如下: kind: SecretapiVersion: v1type: IngressTLSmetadata: name: ingress namespace: defaultdata: tls.crt: LS0tLS1CRU*****FURS0tLS0t tls.key: LS0tLS1CRU*****VZLS0tLS0= 此处tls.crt和tls.key为示例,请获取真实密钥进行替换。tls.crt和tls.key的值为Base64加密后的内容。
  • 应用场景 灵活迁移 通过将弹性网卡从云服务器实例解绑后再绑定到另外一台服务器实例,保留已绑定私网IP、弹性公网IP和安全组策略,无需重新配置关联关系,将故障实例上的业务流量快速迁移到备用实例,实现服务快速恢复。 业务分离管理 可以为服务器实例配置多个分属于同一VPC内不同子网的弹性网卡,特定网卡分别承载云服务器实例的内网、外网、管理网流量。针对子网可独立设置访问安全控制策略与路由策略,弹性网卡也可配置独立安全组策略,从而实现网络隔离与业务流量分离。
  • CCE容器 云存储 PVC能否感知底层存储故障? CCE PVC按照社区逻辑实现,PVC本身的定义是存储声明,与底层存储解耦,不负责感知底层存储细节,因此没有感知底层存储故障的能力。 云监控服务 CES 具备查看云服务监控指标的能力: 云监控 服务基于云服务自身的服务属性,已经内置了详细全面的监控指标。当用户在云平台上开通云服务后,系统会根据服务类型自动关联该服务的监控指标,帮助用户实时掌握云服务的各项性能指标,精确掌握云服务的运行情况。 建议有存储故障感知诉求的用户配套云监控服务 CES 的云服务监控能力使用,实现对底层存储的监控和告警通知。 父主题: 存储管理
  • 解决方法 给该用户授权Kubernetes权限,具体方法如下。 登录CCE控制台,在左侧导航栏中选择“权限管理”。 在右边下拉列表中选择要添加权限的集群。 在右上角单击“添加权限”,进入添加授权页面。 在添加权限页面,确认集群名称,选择该集群下要授权使用的命名空间,例如选择“全部命名空间”,选择要授权的用户或用户组,再选择具体权限。 对于没有 IAM 权限的用户,给其他用户和用户组配置权限时,无法选择用户和用户组,此时支持填写用户ID或用户组ID进行配置。 图1 配置命名空间权限 其中自定义权限可以根据需要自定义,选择自定义权限后,在自定义权限一行右侧单击新建自定义权限,在弹出的窗口中填写名称并选择规则。创建完成后,在添加权限的自定义权限下拉框中可以选择。 图2 自定义权限 单击“确定”。
  • 解决方案 登录挂载文件存储的节点,执行如下命令找到文件存储挂载路径。 findmnt 挂载点路径示例:/mnt/paas/kubernetes/kubelet/pods/7b88feaf-71d6-4e6f-8965-f5f0766d9f35/volumes/kubernetes.io~csi/sfs-turbo-ls/mount 执行如下命令尝试进入文件存储文件夹。 cd /mnt/paas/kubernetes/kubelet/pods/7b88feaf-71d6-4e6f-8965-f5f0766d9f35/volumes/kubernetes.io~csi/sfs-turbo-ls/mount 如果不能正确进入,则说明文件存储被删除或文件存储与节点间网络异常。 执行umount -l 命令解除挂载。 umount -l /mnt/paas/kubernetes/kubelet/pods/7b88feaf-71d6-4e6f-8965-f5f0766d9f35/volumes/kubernetes.io~csi/sfs-turbo-ls/mount 重启kubelet。 systemctl restart kubelet
  • 为什么Pod在节点不是均匀分布? Kubernetes中kube-scheduler组件负责Pod的调度,对每一个新创建的 Pod 或者是未被调度的 Pod,kube-scheduler 会选择一个最优的节点去运行这个 Pod。kube-scheduler 给一个 Pod 做调度选择包含过滤和打分两个步骤。过滤阶段会将所有满足 Pod 调度需求的节点选出来,在打分阶段 kube-scheduler 会给每一个可调度节点进行优先级打分,最后kube-scheduler 会将 Pod 调度到得分最高的节点上,如果存在多个得分最高的节点,kube-scheduler 会从中随机选取一个。 打分优先级中节点调度均衡(BalancedResourceAllocation)只是其中一项,还有其他打分项会导致分布不均匀。详细的调度说明请参见Kubernetes 调度器和调度策略。 父主题: 调度策略
共100000条