Kubernetes-Pod基本概念(六)

作者: Hughman | 来源:发表于2019-12-06 19:03 被阅读0次

1 pod介绍

  一个pod是一组紧密相关的容器,是一起运行在同一个工作节点上,以及同一个Linux命名空间中。每个pod就像是一个独立的逻辑机器,拥有自己的IP、主机名、进程等,运行一个独立的应用程序。
  pod是逻辑主机,一个pod的所有容器都运行在同一个逻辑机器上,其他pod中的容器,即使运行在同一个工作节点上,也会出现在不同的节点上。即一个pod包含多个容器时,这些容器总是运行在同一个工作节点上,一个pod绝不可能跨多个工作节点。
举例

容器、pod、节点的关系

by 《K8s in Action》

  每个pod自有IP,包含1个或多个容器,每个容器运行一个应用进程

查看pod命令
$ kubectl get pods
READY:0/1 表示pod的单个容器显示为未就绪的状态;相反,1/1表示已就绪;
STATUS: Pending 表示pod处于挂起状态;相反,Running表示pod处于运行状态;

2 K8s运行应用流程

  运行应用两大步骤:1)构建镜像并推送至镜像仓库中;2)K8s创建pod进行调度;


K8s中运行容器镜像

by 《K8s in Action》

流程:
1)本地构建镜像;
2)推送镜像至镜像仓库;
3)kubectl创建并部署应用;
4)kubectl发出REST请求至REST API服务器;
5)创建pod并调度到工作节点;
6)kubelet收到通知;
7)kubelet告知Docker运行镜像;
8)Docker从镜像仓库中拉取镜像;
9)Docker创建并运行容器;

3 pod的产生

3.1 单个容器不建议多个进程

  如果单个容器中运行多个不相关的进程,保持所有进程运行、管理它们的日志将很难,需要包含一种在进程崩溃时能够自动重启的机制,同事,这些进程都将记录到相同的标准输出中,很难确定每个进程分别记录的内容。

3.2 pod的由来

  不能讲多个进程聚集在一个单独的容器中,需要pod将容器绑定在一起,并将它们作为一个单元进行管理,在包含容器的pod下,可以同时运行一些密切现骨干的进程,并为其提供相同的环境,此时这些进程就好像全部运行于单独的容器中,同时保持一定的隔离性。

3.3 同一pod中的容器隔离

  k8s可以通过配置docker让一个pod内的所有容器共享相同的Linux命名空间(network、UTS命名空间、IPC命名空间),从而使容器都共享相同的主机名、网络名和IPC通信。
  同一个pod中的容器运行的多个进程不能绑定到相同的端口号,否则会端口冲突(每个pod都有独立的端口空间,不同pod中的容器不会有端口冲突现象。)
  同一个pod中的容器具有相同的loopback网络接口,所以容器可以通过localhost与同一个pod中的其他容器进行通信。
注意
  容器不应该包含多个进程,pod也不应该包含多个并不需要运行在同一主机上的容器。如下图:

分层到多个pod

by 《K8s in Action》

4 pod描述

4.1 定义的主要部分

1)yaml中使用的kubernetes API版本和yaml描述的资源类型;
2)metadata:包括名称、命名空间、标签和关于该容器的其他信息;
3)spec:包含pod内容的实际说明,如pod的容器、卷和其他数据;
4)status:包含运行中的pod的当前信息,如pod所处的条件、每个容器的描述和状态,以及内部IP和其他基本信息。

4.2 简单的yaml文件

yaml文件

by 《K8s in Action》

描述信息:
1)该文件遵循Kubernetes API的v1版本;
2)描述的资源类型是pod;
3)资源名称为kubia-manual;
4)该pod由基于luksa/kubia镜像的单个容器组成;
5)容器名称为kubia;
6)容器监听的端口是8080;

5 pod删除

按名称删除
$ kubectl delete po pod_name
其中,pod_name为pod名称;删除命令指示uk8s终止该pod中所有容器,k8s向进程发送一个SIGTERM信号并等待一定的秒数(默认30s),使得其正常关闭,若未及时关闭,则通过SIGKILL终止进程。
删除多个pod
$ kubectl delete po pod_name1 pod_name2
多个pod删除使用空格隔开;
按照标签删除
$ kubectl depete po -l tag_key=tag_value
其中,tag_key为标签健,tag_value为标签值;
按照整个命名空间删除
$ kubectl delete ns namespace_name
其中,namespace_name为命名空间名称

相关文章

  • Kubernetes-Pod基本概念(六)

    1 pod介绍   一个pod是一组紧密相关的容器,是一期运行在同一个工作节点上,以及同一个Linux命名空间中。...

  • Kubernetes-Pod详解

    Pod 为什么需要Pod Pod,是Kubernetes项目中的原子调度单位。容器就是未来云计算系统中的进程;容器...

  • kubernetes-pod资源

    kubernetes是docker集群的编排工具 kubernetes的核心功能: 自愈: 重新启动失败的容器,在...

  • Kubernetes-Pod/ReplicaSet/Deploy

    本文主要记录解决自己学习和工作中的一个疑惑:k8s中的Pod/ReplicaSet/Deployment/Serv...

  • 六、react基本概念

    1、react-dom和react为什么要分开因为还有react-dom、react-canvas、react-a...

  • 框架、库、脚手架等区别

    首先必须分清六个基本概念:Library,Toolkit,Framework,Design,Boilerplate...

  • iOS:Protocol详解

    目录一,基本概念二,如何使用三,特点四,使用场景五,系统常见协议六,底层实现 一,基本概念 定义:将一些公共的方法...

  • Kubernetes-Pod使用的详细讲解

    1.Pod介绍 1.1 Pod结构 每个Pod中都可以包含一个或者多个容器,这些容器可以分为两类: 用户程序所在的...

  • Kubernetes-Pod控制器详解

    1.Pod控制器介绍 Pod是kubernetes的最小管理单元,在kubernetes中,按照pod的创建方式可...

  • Spring学习笔记(七、Spring AOP API)

    上一篇:Spring学习笔记(六、Spring AOP基本概念) 一、Spring AOP API 这是Sprin...

网友评论

    本文标题:Kubernetes-Pod基本概念(六)

    本文链接:https://www.haomeiwen.com/subject/elmegctx.html