本页面提供关于Kubernetes容器服务的一些常见问题的解答
Kubernetes容器服务整合了云主机、网络、云硬盘等服务,并支持GPU、ARM等异构计算架构,支持多可用区容灾等技术构建高可用Kubernetes集群,并提供高性能可伸缩的容器应用管理能力,简化集群的搭建和扩容等工作,让您专注于容器化应用的开发与管理。
由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker对系统资源的利用率更高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。
传统的虚拟机技术启动应用服务往往需要数分钟,而Docker容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。
开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一致,导致有些bug并未在开发过程中被发现。而Docker的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性。
“网络”为您构建了一个二层隔离的私有网络环境,您可以定义二层网络中的三层子网, 三层子网用来管理云主机网络平面,提供了包括CIDR管理、网关、DNS等服务。
“子网”属于一个网络,一个网络可以有多个子网。根据实际业务需要可以设置不同规模的子网,一般可为10.0.0.0/8-24、172.16.0.0/12-24、192.168.0.0/16-24,其中最大的子网10.0.0.0/8的A类地址网络。同一网络下的不同子网通过挂载到同一个路由器,实现跨子网的通信。 集群是同一个网络下的一个或多个虚拟机(又称:节点)通过相关技术组合而成的计算机群体,为容器运行提供了计算资源池。 集群和网络、子网只存在下面2种场景:
打开 产品与服务 -> 网络 -> 网络 找到具有k8s-cluster、集群名的标签的网络,打开这个网络的详情,就可以看到集群的网段。
Kubernetes容器服务集群的节点的子网网段只能在创建集群时设置节点的网段,一旦集群创建后,子网网络不可修改了。 创建集群时,默认是自动创建网络,默认网段是10.0.0.0/16。如果需要设置网段,需要创建集群前先创建网络,然后选择已有节点网络。
创建集群时需要设置SSH密钥对,用于外部客户端通过SSH远程登录Kubernetes集群的节点。
本文主要介绍Kubernetes容器服务集群创建或扩容失败时,如何查看失败原因,并通过更改配置或其它运维手段解决问题
集群创建扩容失败原因很多,目前只能通过重建集群解决
错误可以归结为以下几点:
可以通过以下步骤,查看错误原因定位问题,并根据相应的解决方法解决问题。
集群处于无法连接状态,一般是因为集群对外暴露的apiserver地址无法访问。导致这种情况可以归纳为以下几点。
未授权状态
集群节点的规格是通过license控制,如果在云主机页面通过手工修改了集群节点的规格并超过了license的限制就会导致集群处于未授权状态。可以通过云主机页面重新把调大的规格改成小于license的限制。
警告状态
当集群中有关键组件,比如controller-manager、kube-scheduler、etcd等等组件异常时,集群会变成警告状态。
当集群中有节点not ready时,集群会变成警告状态。
一般处于警告状态时,集群过一段时间会自愈变成健康状态,如果长时间没有变化,需要联系运维人员协助。
集群节点在创建时确定好以后,在扩容时无法更改。(Kubernetes界面无法修改,可以在虚机管理页面更改规格,但是会造成节点重启,有可能会造成业务中断)可以在集群管理界面查看集群节点的规格。
Kubernetes容器服务提供对集群资源量使用量的统计。
创建好以后集群以后,可以通过key或者初始密码登录节点。
本文主要介绍Kubernetes容器服务集群删除失败时,如何查看失败原因,并通过更改配置或其它运维手段解决问题
集群删除失败原因很多,错误可以归结为以下几点:
可以通过以下步骤,查看错误原因定位问题,并根据相应的解决方法解决问题。
根据错误原因自行解决或者复制失败信息寻求运维人员帮助。
针对上面错误的三种错误原因,解决方案如下:
a. 资源被占用的情况。错误信息里会提示是安全被占用还是网络资源被占用,需要找到占用集群安全组或网络的虚机,删除相关虚机资源或者给虚机重新分配安全组或网络以后,再次点击删除集群。
b. 权限更改的情况。可以直接再次点击删除集群或者把租户的权限改成创建集群时的租户权限再次删除。
c. 创建或扩容失败的情况下导致删除失败的情况。这种情况一般就是云硬盘处于挂载中导致删除不掉。需要云管账户进到云硬盘页面,重置硬盘状态为可用状态以后,再次删除集群。
d. 其它删除失败的情况可以联系运维人员请求协助。
Kubernetes容器服务集群对节点网络只要求节点ip互通即可,不限制网络的拓扑形状。 下面以一个网络2个子网举例EKS使用已有网络。
至少有一个子网就可以被Kubernetes容器服务集群使用。这里创建2个子网,只是举例。
2. 3master节点选择99网络
在创建集群时,打开其他配置,设置容器组CIDR网络地址,就是EKS集群的容器网段。 容器组CIDR网络地址必须和服务CIDR网络地址不重叠,且容器组CIDR网络地址的ip数量小于服务CIDR网络地址的ip数量。
Kubernetes容器服务集群扩容节点时,无法点击扩容按钮,提示"资源超过最大配额,点击查看详情"
点击查看详情按钮,查看总配额为204800M,已使用配额和新添加配额为231424M,超过了26624M
向管理员申请给集群所在租户扩大内存配额。然后再进行扩容
eks集群扩容节点时,右上角提示"容器集群扩容失败"
打开浏览器F12按钮,查看扩容接口response提示cpu超过配额限制。
购买更高配额的license,重新导入再进行扩容。
创建存储类时,选择集群时,下拉框没有可选择的集群。
查看集群状态,集群状态处于非健康状态,无法创建存储类。
查看集群告警原因,恢复集群为健康状态再创建存储类。
删除持久卷按钮为灰色,无法删除。
持久卷处于绑定状态无法直接删除。
需要先删除对应的pvc,再删除持久卷。
排查项一:容器和容器端口 先通过Kubernetes容器服务的网页找到pod的ip地址,下图中第4个字段IP地址就是pod的ip地址。 然后登录到集群内的节点或容器中,使用curl命令等方法手动调用接口,查看结果是否符合预期。 如果容器IP+端口不能访问,建议登录到业务容器内使用127.0.0.1+端口进行排查。
节点的入方向对业务端口未放通。 节点配置了自定义路由,并且配置错误。 pod的label与service的label不匹配(kubectl或API创建)。
Ingress基于七层的HTTP和HTTPS协议进行转发,是集群流量的入口,可以通过域名和路径对访问做到更细粒度的划分。集群在添加Ingress后,可能会出现无法正常访问的情况,本文提供添加Ingress失败或无法正常访问的通用排查思路,帮助您找到问题所在。
Ingress作为集群流量的分发器,是连接外界和容器内业务的桥梁。 通过Kubectl创建Ingress是问题出现最多的场景,这里提供了几个重点排查项供您参考,帮助您快速找到根因。
如您通过YAML文件添加Ingress,首先考虑是否由于参数设置引起异常。Ingress通过annotations字段下的参数进行定义,K8s在创建资源时并不会对annotations字段参数进行校验,如果出现关键参数错误或缺失,Ingress资源也可被创建,但无法正常访问。
如通过Kubectl添加Ingress,请根据常见错误项进行检查,并检查关键参数是否存在填写错误的情况。若异常依旧无法排除,建议重新创建Ingress,确认基础功能可用后再添加自定义的高级功能。 建议通过Kubernetes容器服务网页添加Ingress,根据可视界面按需设置参数,自动过滤不符合要求的负载均衡及Service,能够有效避免出现关键参数格式错误或缺失的问题。
通过YAML创建Ingress时,需要正确填写目标Service名称及访问端口,然后确认Service中的容器端口是正确配置的,即Service可正常访问容器内业务。 通过Kubernetes容器服务添加Ingress时,将筛选符合要求的目标Service并自动填充对应的Service访问端口,您只需确认Service可正常访问容器内业务。
您需要确认Service中正确填写了容器内应用的暴露端口,在集群内的容器或节点上能够正常访问。
Ingress进行转发时支持设置不同的访问路径,需要注意的是该访问路径是目标容器内业务真实暴露的路径,如业务不存在对应路径,访问结果将返回404错误,无法找到对应的内容。
确认容器内业务拥有相应的路径,将Ingress中的path修改为目标业务中真实存在的路径。
如果返回如上图,表示没有相应的ingress配置。 其他404返回是业务返回,请排查自身业务。
当容器无法连接互联网时,请排查容器所在节点能否连接互联网。 登入节点,测试节点能否访问互联网。
网络的子网无法删除可能是因为您在EKS的集群中使用了该网络的子网,因此需要在Kubernetes容器服务界面删除相应的集群后,再删除网络的子网。 • 删除集群会将集群内的节点以及运行的工作负载和服务都销毁,请谨慎操作。 • 不建议在Kubernetes容器服务界面外删除管理Kubernetes容器服务集群的资源。 如何修复出现故障的容器网卡? 容器的网卡出现故障,会导致容器不断重启,且该容器无法对外提供服务。可通过如下步骤修复出现故障的容器网卡:
当节点处于“NotReady”状态,或删除pod时,容器由于某些原因无法终止时,导致pod阻塞在Terminating状态。
可执行以下命令强制删除:
kubectl delete pods <pod> -n <namespace> --grace-period=0 --force
点击容器“终端”选项,终端界面无法输入
可换为Google Chrome浏览器进入