资讯详情

【云原生|K8s系列第4篇】:实战查看Pod和工作节点

在这里插入图片描述

本期文章是K8s系列第四篇主要是实战查看pod以及工作节点。通过这篇文章们将学习和理解Kubernetes中的Pod和工作节点,并排除已部署的应用故障。

在前期文章中,我们介绍了一些云原生的入门知识和简单的实战。感兴趣的学生可以去我的云原生专栏学习。任何门:云原生学习专栏

实战查看Pod和工作节点

  • 学习目标
  • 1、学习Kubernetes Pods
  • 2、工作节点
    • 2.1 工作节点图片概述
  • 3、使用kubectl排除故障
  • 4、实战查看Pod和工作节点
    • 4.1 检查应用配置
    • 4.2 在终端中显示应用程序
    • 4.3 查看容器日志
    • 4.4 在容器上执行命令
  • 学习总结

学习目标

本文的学习目标是:

  • 了解 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
$ 

4.4 在容器上执行命令

一旦Pod启动并运行,我们就可以直接在容器上执行命令。为此,我们使用exec命令并使用Pod的名称作为参数。先列出环境变量:

kubectl exec $POD_NAME——env

再次值得一提的是,容器本身的名称可以省略,因为在Pod中只有一个容器。

接下来让我们在Pod的容器中启动一个bash会话:

kubectl exec -ti $POD_NAME——bash

我们现在在容器上有一个开放的控制台,我们可以在其中运行我们的NodeJS应用程序。应用程序的源代码在server.js文件中:

 cat server.js

通过运行curl命令来检查应用程序是否启动:

root@kubernetes-bootcamp-fb5c67579-756vw:/# curl localhost:8080
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-fb5c67579-756vw | v=1

这里我们使用localhost,是因为我们在NodeJS Pod中执行命令。

接着关闭容器连接即可,exit。

学习总结

1、Pod 是一组一个或多个应用程序容器(例如 Docker),包括共享存储(卷), IP 地址和有关如何运行它们的信息。 2、如果它们紧耦合并且需要共享磁盘等资源,这些容器应在一个 Pod 中编排。 3、工作节点是 Kubernetes 中的负责计算的机器,可能是VM或物理计算机,具体取决于集群。多个 Pod 可以在一个工作节点上运行。

标签: ld50s激光传感器c08连接器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台