文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Kubernetes应用部署问题怎么处理

2023-06-04 16:40

关注

这篇文章主要讲解了“Kubernetes应用部署问题怎么处理”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Kubernetes应用部署问题怎么处理”吧!

1、应用部署问题处理的整体思路

在将容器化的应用部署到Kubernetes集群中,可能会出现各种问题。根据Kubernetes的架构设计原理,容器化应用对外提供服务出现的主要问题在三个点上:

1)应用本身的问题:此问题为应用本身的问题,不在此文中进行详细的阐述;

2)作为容器化应用逻辑主机的Pod的问题:此部分的问题主要涉及到容器化应用是否在容器云中正常部署和运行,这里会涉及到CPU、内存、存储资源等问题;

3)代理容器化应用服务的问题:第三方服务或用户会通过代理服务访问容器化应用,如果代理服务存在问题,则容器云应用将无法对外提供服务能力,这里会涉及到服务是否存在、DNS解析是否正确等问题。

在本文中,以部署的高可用MySQL为例展示如何进行问题定位和处理。另外为了能够在Kubernetes集群外访问MySQL数据库,对外暴露了MySQL master的NodePort类型服务,服务名称为mysql-0-svc。

2、调试Pods

在调试Pod之前,通过kubectl get pods命令查看一下Pod的运行状态。

$ kubectl get pods --namespace=kube-public

对于特定的Pod,可以通过kubectl describe pods命令查看详细的信息。

$ kubectl describe pods/mysql-0 --namespace=kube-public

在Pod的生命周期中,有如下的几个状态:

根据Pod所处的状态,相应的处理方式不同。

2.1 Pod处于待命(Pending)状态

如果Pod被卡在待命(Pending)状态,则意味着它无法被安排到Node节点上。造成这种情况通常因为某种类型的资源不足,从而导致Pod无法被调度。通过查看kubectl describe …命令的输出内容,应该有为什么Pod无法被调度的原因。这些原因包括:

2.2 Pod处于等待(Waiting)状态

如果Pod处于等待(Waiting)状态,则它已被调度到一个工作Node上,但它无法在该Node上运行。同样,通过kubectl describe …应该是能够获取有用的信息。处于等待(Waiting)状态的最常见的原因是无法拉取镜像。有三件事需要检查:

2.3 Pod崩溃(Crashing)或其他不健康

首先,通过执行kubectl logs ${POD_NAME} ${CONTAINER_NAME}查看当前容器的日志:

$ kubectl logs mysql-0 mysql --namespace=kube-public

如果容器之前已崩溃,可以使用以下命令访问上一个容器的崩溃日志:

$ kubectl logs --previous mysql-0 mysql --namespace=kube-public

或者,也可以使用kubectl exec在该容器内运行命令:

$ kubectl exec ${POD_NAME} -c ${CONTAINER_NAME} -- ${CMD} ${ARG1} ${ARG2} ... ${ARGN}

请注意,这-c ${CONTAINER_NAME}是可选的,对于仅包含单个容器的Pod,可以省略。

如果这些方法都不起作用,可以找到运行该pod的主机,并通过SSH连接到该主机。

2.4 Pod正在运行,但没有按照要求执行

如果Pod没有按预期运行,可能是Pod描述中存在错误,并且在创建Pod时忽略了该错误。通常可能是,Pod描述的一部分嵌套不正确,或键名不正确,因此键被忽略。例如,如果拼写错误command,commnd则将创建Pod,但不会按照希望使用命令行。

首先,要做的第一件事是删除此Pod,并尝试使用–validate选项再次创建它。例如,运行kubectl create –validate -f mypod.yaml。如果拼写错误command,commnd那么会出现如下错误:

I0805 10:43:25.129850   46757 schema.go:126] unknown field: commndI0805 10:43:25.129973   46757 schema.go:129] this may be a false alarm, see https://github.com/kubernetes/kubernetes/issues/6842pods/mypod

接下来,要检查的是apiserver上的Pod是否与要创建的Pod相匹配。例如,运行kubectl get pods/mypod -o yaml > mypod-on-apiserver.yaml,然后将原始的Pod描述mypod.yaml与从apiserver返回的描述文件mypod-on-apiserver.yaml进行比较。“apiserver”版本通常会有一些不在原始版本上的内容,这不影响。但是,如果原始版本上有不在apiserver版本上的行,则可能意味着原始版本Pod描述规范存在问题。

3、调试代理服务

根据Kubernetes的架构设计,用户或其它应用通过代理服务访问容器化应用。因此需要通过调试确认代理服务是否正常,需要做的工作包括:

1)检查代理服务本身是否存在;

2)检查代理服务是否能够正常通过DNS进行解析;

3)检查代理服务本身是否正确。

3.1 检查服务是否存在

在调试服务时,第一步要做的就是检查服务是否存在。在本文的前面说明了,在Kubernetes中通过NodePort类型对外暴露了MySQL master。通过执行kubectl get svc命令,可以获取是否存在相应服务:

$ kubectl get svc/mysql-0-svc --namespace=kube-public

通过返回的结果可以看出,在Kubernetes集群中存在此服务。

3.2 能否通过DNS解析正常解析代理服务

对于处于同一个命名空间的容器化应用,可以直接通过代理服务的名称(mysql-0-svc)访问MySQL master。

$ kubectl exec -it redis-ha-redis-ha-sentinel-5947b9569-r2b56 --namespace=kube-public -- nslookup mysql-0-svc

对Kubernetes集群中不同命名空间的容器化应用,则需要通过添加命名空间名称后(mysql-0-svc.kube-public)访问MySQL master:

$ kubectl exec -it gf1-6497d5df45-98g8v -- nslookup mysql-0-svc.kube-public

根据返回的可以看出,通过DNS能够正确的解析代理服务。

3.2.1 DNS是否正常工作

如果通过上述的操作都无法正常解析服务,通过kubectl exec -it  ${POD_NAME}  — nslookup命令检查一下Kubernetes master是否正常工作:

$ kubectl exec -it gf1-6497d5df45-98g8v -- nslookup kubernetes.default

如果此操作也失败,则需要检查Kubernetes集群中的DNS服务是否正常运行。

3.3 代理服务本身是否正确

如果代理服务也存在,DNS解析也没有问题。则需要检查一下代理服务本身是否有问题:

$ kubectl get service mysql-0-svc -o yaml --namespace=kube-public

例如访问的端口是否正确?targetPort是否指向了正确的Pods端口?这里的端口协议是否与Pod暴露出来的端口协议一致等。

感谢各位的阅读,以上就是“Kubernetes应用部署问题怎么处理”的内容了,经过本文的学习后,相信大家对Kubernetes应用部署问题怎么处理这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯