Pods和Nodes

目标

  • 了解什么是Pods
  • 了解什么是Nodes
  • 应用部署问题定位

Kubernetes Pods
当你在模块 2中创建一个Deployment的时候,Kubernetes创建了一个Pod来放置你的应用实例。Pod是Kubernetes中的一个抽象概念,一个Pod包含了一组应用容器(比如Docker或者rkt)和这些容器共用的资源。这些资源包括:

  • 共享存储,Volumes
  • 网络,一个集群内唯一的IP地址
  • 每个容器执行的相关配置,比如容器的镜像版本或者是需要使用的特定端口

Pod模拟出了一个应用运行所需要的"逻辑主机",并且还能包含一些紧密耦合的其他应用。举个例子,在你的Node.js应用中,一个Pod可能包含了两个容器,除了Nodes.js本身以外还有一个是用来给Node.js webserver提供数据来开放给外部访问。在Pod中的容器共享同一个IP地址和端口区间,它们总是放置在同一个地方,一起被调度,并且运行在基于同一个Node上的共享上下文之中。

Pod在Kubenetes中是最小不可分割的单元。当我们在Kubenetes上创建一个Deployments的时候,Deployment会创建Pod并且同时在Pod里面创建容器(不要直接创建容器)。每个Pod都会放在预定的Node上面,并且会一直存在于那里直到运行终止(这个要根据restart策略来看具体情况)或者被删除。万一Node宕机了,整个Pod会被调度到集群中另外一个可用的Node上去

Pods概览

Nodes

一个Pod总是运行在一个Node上。在Kubernetes中一个Node是一个执行具体工作的机器,它可用是虚拟机也可用是物理机,这个取决于所在的集群。每个Node都由Master统一管理。每个Node上面可用有多个Pod,Kubernetes Master会自动在Node之间处理调度相关的处理。Master的自动调度会记录每个Node上的可用资源。

每个Kubernetes Node运行至少需要:

  • Kubelet,一个负责和Master和Node通讯的进程;同时它会管理当前节点上的运行的Pods和容器。
  • 一个容器运行时(Docker,rkt)负责从中心拉取容器镜像,解包容器,运行应用。

假如几个容器互相紧密耦合并且需要使用一些共享的资源(比如磁盘),那它们应该要放到同一个Pod中当做一个整体进行调度

Node架构

使用kubectl进行问题定位

在模块2中,我们使用了kubectl命令行工具。在模块3中,我们会继续使用它来获取所部署应用的相关信息和它们所运行的环境信息。下面是kubectl的一些最常用的操作:
kubectl get - 列出所有的资源
kubectl describe - 列出某个资源的详细信息
kubectl logs - 输出pod中容器的日志
kubectl exec - 在pod中的某个容器里面执行命令

你可以使用这些命令来观察应用程序什么时候被部署了,它现在处于什么状态,它运行在何处和它当前的配置是什么

你可能感兴趣的:(Pods和Nodes)