超长可视化指南!最强K8S部署的debug思路,让bug无处遁形!

本文将帮助你厘清在Kubernetes中调试 deployment的思路。下图是完整的故障排查思路,如果你想获得更清晰的图片,请在公众号后台(RancherLabs)回复“troubleshooting”。

当你希望在Kubernetes中部署一个应用程序,你通常需要定义三个组件:

  • Deployment——这是创建名为Pods的应用程序副本的方法

  • Serivce——内部负载均衡器,将流量路由到Pods

  • Ingress——可以描述流量如何从集群外部流向Service

接下来,我们通过图片快速回顾一下。

在Kubernetes中,你的应用程序通过两层负载均衡器暴露:内部和外部。

内部负载均衡器称为Service,而外部负载均衡器则称为Ingress。

Pod未直接部署,因此,Deployment创建Pod并监视它们。

假设你想部署一个简单的Hello World应用程序,那么对于此类应用程序,其YAML文件与以下类似:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
  labels:
    track: canary
spec:
  selector:
    matchLabels:
      any-name: my-app
  template:
    metadata:
      labels:
        any-name: my-app
    spec:
      containers:
      - name: cont1
        image: learnk8s/app:1.0.0
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  ports:
  - port: 80
    targetPort: 8080
  selector:
    name: app
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: my-ingress
spec:
  rules:
  - http:
    paths:
    - backend:
        serviceName: app
        servicePort: 80
      path: /

这个定义很长,容易忽略组件之间的相互关系。

例如:

  • 你什么时候应该使用80端口,什么时候使用端口8080?

  • 你是否应该为每个服务创建一个新端口,以免它们冲突?

  • 标签(label)名称重要吗?是否应该每一处都一样?

在进行debug之前,我们先来回顾一下这三个组件之间的关系如何。

首先,我们从Deployment和Service开始。

连接Deployment和Service

实际上,Deployment和Service根本没有连接。相反,该Service直接指向Pod,并完全跳过Deployment。所以,你应该关注的是Pod和Service是如何与彼此关联的。你应该记住三件事:

  1. Service selector至少与Pod的一个标签匹配

  2. Serivce targetPort应该与Pod内的容器的containerPort相匹配

  3. Serviceport可以是任何数字。多个Service可以使用同一个端口,因为它们已经被分配了不同的IP地址

以下图片总结了如何连接端口:

考虑由Service暴露的pod

当你创建一个pod,你应该在你的Pod中为每个容器定义端口containerPort

当你创建一个Service时,你能够定义一个port和一个targetPort。但你应该将哪一个连接到容器呢?

targetPortcontainerPort应该能够匹配

如果你的容

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值