【云原生 K8s系列第4篇】:实战查看Pod和工作节点_如何查看pod在哪个节点上运行
如果工作节点发生故障,则会在集群中的其他可用工作节点上调度相同的 Pod。例如,Pod 可能既包含带有 Node.js 应用的容器,也包含另一个不同的容器,用于提供 Node.js 网络服务器要发布的数据。Pod 中的容器共享 IP 地址和端口,始终位于同一位置并且共同调度,并在同一工作节点上的共享上下文中运行。工作节点可以有多个 pod ,Kubernetes 主节点会自动处理在集群中的工作节点
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
- 了解 Kubernetes Pod。
- 了解 Kubernetes 工作节点。
- 对已部署的应用故障排除。
1、学习Kubernetes Pods
在前面的实战中我们创建 Deployment 时, Kubernetes 添加了一个 Pod 来托管我们的应用实例。
Pod 是 Kubernetes 抽象出来的,表示一组一个或多个应用程序容器(如 Docker),以及这些容器的一些共享资源。
这些资源包括:
- 共享存储,当作卷
- 网络,作为唯一的集群 IP 地址
- 有关每个容器如何运行的信息,例如容器镜像版本或要使用的特定端口。
Pod 为特定于应用程序的“逻辑主机”建模,并且可以包含相对紧耦合的不同应用容器。例如,Pod 可能既包含带有 Node.js 应用的容器,也包含另一个不同的容器,用于提供 Node.js 网络服务器要发布的数据。Pod 中的容器共享 IP 地址和端口,始终位于同一位置并且共同调度,并在同一工作节点上的共享上下文中运行。
Pod是 Kubernetes 平台上的原子单元。 在 Kubernetes 上创建 Deployment 时,该 Deployment 会在其中创建包含容器的 Pod (而不是直接创建容器)。每个 Pod 都与调度它的工作节点绑定,并保持在那里直到终止(根据重启策略)或删除。 如果工作节点发生故障,则会在集群中的其他可用工作节点上调度相同的 Pod。
2、工作节点
一个 pod 总是运行在工作节点。工作节点是 Kubernetes 中的参与计算的机器,可以是虚拟机或物理计算机,这个具体取决于集群。每个工作节点由主节点管理。工作节点可以有多个 pod ,Kubernetes 主节点会自动处理在集群中的工作节点上调度 pod 。 主节点的自动调度考量了每个工作节点上的可用资源。
每个 Kubernetes 工作节点至少运行:
- Kubelet,负责 Kubernetes 主节点和工作节点之间通信的过程; 它管理 Pod 和机器上运行的容器。
- 容器运行时(如 Docker)负责从仓库中提取容器镜像,解压缩容器以及运行应用程序。
2.1 工作节点图片概览
3、使用kubectl进行故障排除
在之前的实战中我们使用了 Kubectl 命令行界面。 接下来的实战中我们将继续使用它来获取有关已部署的应用程序及其环境的信息。 最常见的操作可以使用以下 kubectl 命令完成:
kubectl get - 列出资源
kubectl describe - 显示有关资源的详细信息
kubectl logs - 打印 pod 和其中容器的日志
kubectl exec - 在 pod 中的容器上执行命令
4、实战查看Pod和工作节点
4.1 检查应用配置
我们先验证一下我们在前一个场景中部署的应用程序是否正在运行。使用kubectl get命令并查找现有的Pods:
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
kubernetes-bootcamp-fb5c67579-bvltk 1/1 Running 0 50s
$
接下来,使用kubectl describe pods命令来查看Pod中有哪些容器以及用来构建这些容器的图像:
$ kubectl describe pods
Name: kubernetes-bootcamp-fb5c67579-bvltk
Namespace: default
Priority: 0
Node: minikube/10.0.0.69
Start Time: Thu, 21 Jul 2022 16:45:17 +0000
Labels: app=kubernetes-bootcamp
pod-template-hash=fb5c67579
Annotations: <none>
Status: Running
IP: 172.18.0.6
IPs:
IP: 172.18.0.6
Controlled By: ReplicaSet/kubernetes-bootcamp-fb5c67579
Containers:
kubernetes-bootcamp:
Container ID: docker://9ce0902c08eb2b6444e4738f55a8989238f530c06e7b2651df0ae76e415ae505
Image: gcr.io/google-samples/kubernetes-bootcamp:v1
Image ID: docker-pullable://jocatalin/kubernetes-
可以看到关于Pod容器的详细信息:IP地址、使用的端口和与Pod生命周期相关的事件列表。
4.2 在终端中显示应用程序
回想一下,Pods运行在一个隔离的、私有的网络中——所以我们需要代理访问它们,这样我们就可以调试它们并与它们交互。为此,将使用kubectl proxy命令在第二个终端窗口中运行代理。点击下面的命令,自动打开一个新的终端并运行代理:
echo -e "\n\n\n\e[92mStarting Proxy. After starting it will not output a response. Please click the first Terminal Tab\n"; kubectl proxy
现在我们将再次获得Pod名称,并通过代理直接查询该Pod。获取Pod名称并将其存储在POD_NAME环境变量中:
$ export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')
$ echo Name of the Pod: $POD_NAME
Name of the Pod: kubernetes-bootcamp-fb5c67579-756vw
如果想要查看应用程序的输出,可以运行一个curl请求。url即到Pod的API的路由。
$ curl http://localhost:8001/api/v1/namespaces/default/pods/$POD_NAME/proxy/
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-fb5c67579-756vw | v=1
$
4.3 查看容器日志
应用程序通常发送到STDOUT的任何内容都将成为Pod内容器的日志。
我们可以使用kubectl logs命令检索这些日志。注意此时并不需要指定容器名,因为在pod中只有一个容器。
$ kubectl logs $POD_NAME
Kubernetes Bootcamp App Started At: 2022-07-21T16:54:19.927Z | Running On: kubernetes-bootcamp-fb5c67579-756vw
Running On: kubernetes-bootcamp-fb5c67579-756vw | Total Requests: 1 | App Uptime: 142.394 seconds | Log Time: 2022-07-21T16:56:42.321Z
Running On: kubernetes-bootcamp-fb5c67579-756vw | Total Requests: 2 | App Uptime: 257.708 seconds | Log Time: 2022-07-21T16:58:37.635Z
$
![img](https://img-blog.csdnimg.cn/img_convert/0b5dcc41d9a3dc540d930d89c8dd17db.png)
![img](https://img-blog.csdnimg.cn/img_convert/b5b18d106ac0428e9e7dda0ed2ca9360.png)
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
到真正的技术提升。**
**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
更多推荐
所有评论(0)