发布网友 发布时间:2022-12-28 00:44
共1个回答
热心网友 时间:2023-10-21 18:13
公司使用rancher来部署k8s集群,最近因为有一个新的项目开发完成需要搭建环境,因此我编写了k8s的yaml来导入到rancher中,生成一个测试环境,一个演示环境,测试环境用于测试,演示环境用于给客户演示。导入之后namespace等成功生成,测试环境没有问题,但是demo环境出现了问题。
demo环境的yaml如下:
刚开始在namespace页面时看起来并没有什么问题,但是点击进入到工作负载页面后,在访问端口处展示的端口却是n/a。当时感觉不对,但是并没有在意,
查看pod日志,也能正常展示
但是通过接口进行访问时,却一直访问不到。经过多次排查,发现是因为yaml编写的问题
图中三处的APP名称必须保持一致,才能正常访问。
labels: 用来定位一个或多个资源,键值对方式进行定义,下方使用的selector会与这里的键值对对应,作为selector的挑选条件
matchlabels:** 标签选择器,与上面的标签共用,这个部分是17版本开始加的,必须与上面的labels对应,选择包含标签app:xxxx的资源
在新版的k8s中labels是非常重要的
matchLabels/matchExpression作用
matchLabels使用场景
Pod 选择器
如果在生产环境中有大量的Deployment的话,无法快速确定哪些Pod是属于哪个Deployment,这个是就体现了label标签的重要性,而我上面的yaml并没有将service中的selector与deployment中的lables对应,因此创建的pod无法与service绑定,导致访问不到。
将yaml修改成如下之后修复了这个bug
https://blog.csdn.net/Mr1ght/article/details/118180271