k8s--pod 介绍

简介: k8s--pod 介绍

pod 概述


Pod 是 K8S 系统中可以创建和管理的最小单元,是资源对象模型中由用户创建或部署的最小资源对象模型,也是在 K8S 上运行容器化应用的资源对象,其它的资源对象都是用来支撑或者扩展 Pod 对象功能的,比如控制器对象是用来管控 Pod 对象的,Service 或者 Ingress 资源对象是用来暴露 Pod 引用对象的,PersistentVolume 资源对象是用来为 Pod 提供存储等等,K8S 不会直接处理容器,而是 Pod,Pod 是由一个或多个 container 组成。

Pod 是 Kubernetes 的最重要概念,每一个 Pod 都有一个特殊的被称为 “根容器”的 Pause 容器。Pause 容器对应的镜像属于 Kubernetes 平台的一部分,除了 Pause 容器,每个 Pod 还包含一个或多个紧密相关的用户业务容器


Pod基本概念


  • 最小部署的单元
  • Pod 里面是由一个或多个容器组成【一组容器的集合】
  • 一个 pod 中的容器是共享网络命名空间
  • Pod 生命周期是短暂的
  • 每个 Pod 包含一个或多个紧密相关的用户业务容器


Pod存在的意义


  • 创建容器使用 docker,一个 docker 对应一个容器,一个容器运行一个应用进程
  • Pod 是多进程设计,运用多个应用程序,也就是一个 Pod 里面有多个容器,而一个容器里面运行一个应用程序

Pod 是在 K8S 集群中运行部署应用或服务的最小单元,它是可以支持多容器的。Pod 的设计理念是支持多个容器在一个 Pod 中共享网络地址和文件系统,可以通过进程间通信和文件共享这种简单高效的方式组合完成服务。同时 Pod 对多容器的支持是 K8S 中最基础的设计理念。在生产环境中,通常是由不同的团队各自开发构建自己的容器镜像,在部署的时候组合成一个微服务对外提供服务。

Pod 是 K8S 集群中所有业务类型的基础,可以把 Pod 看作运行在 K8S 集群上的小机器人,不同类型的业务就需要不同类型的小机器人去执行。目前 K8S 的业务主要可以分为以下几种

  • 长期伺服型:long-running
  • 批处理型:batch
  • 节点后台支撑型:node-daemon
  • 有状态应用型:stateful application


Pod实现机制


主要有以下两大机制

  • 共享网络
  • 共享存储


共享网络


容器本身之间相互隔离的,一般是通过 namespacegroup 进行隔离,那么Pod里面的容器如何实现通信?

  • 首先需要满足前提条件,也就是容器都在同一个namespace之间

关于Pod实现原理,首先会在Pod会创建一个根容器: pause容器,然后我们在创建业务容器 【nginx,redis 等】,在我们创建业务容器的时候,会把它添加到 info容器

而在 info容器 中会独立出 ip地址,mac地址,port 等信息,然后实现网络的共享


共享存储


Pod 持久化数据,专门存储到某个地方中


常用命令


# 查看所有的 pod 列表,-n 后面跟 namespace,查看指定的命名空间,-o wide 查看详细信息
kubectl get pod
kubectl get pod -n kube-system  # 查看 kube-system 命名空间下的 pod
kubectl get pod -o wide # 查看 pod 的详细信息,有 ip、node 节点等信息

kubectl get pod -o wide 的参数含义如下

  • name:自定义的名称,后面会加些数据
  • READY:当前 pod 里的容器,pause 容器不算在里面,/ 前面的表示运行了几个,后面的数字表示一共有几个
  • STATUS:当前的状态
  • AGE:pod 存在的时长
  • IP:pod 的 ip,这个只能在当前部署的机器上访问,外网是访问不了的
  • NODE:当前 pod 在哪个 node 上运行

# 显示 Node 的详细信息
kubectl describe node dce-10-6-215-190 # node 后面的是 node名称

# 显示 Pod 的详细信息, 特别是查看 pod 无法创建的时候的日志
kubectl describe pod web # web 是你创建 pod 时起的名称

# 根据 yaml 创建资源, apply 可以重复执行,create 不行
kubectl create -f pod.yaml
kubectl apply -f pod.yaml
# 删除所有 Pod
kubectl delete pod --all
# 强制删除某个文件名命名节点 ,基于 pod.yaml 定义的名称删除 pod 
kubectl delete -f <文件名>
# 删除某个Pod命令节点 
kubectl delete pod <pod名>
# 删除某个Replication Controller命名节点 
kubectl delete rc <rc名>
kubectl delete deployment 名称
# 删除某个服务命名节点 
kubectl delete service <service名>
# 删除所有Pod节点 
kubectl delete pod --all


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
存储 Kubernetes 调度
【K8S系列】Pod详解
【K8S系列】Pod详解
534 0
|
存储 Kubernetes 调度
k8s教程(pod篇)-DaemonSet(每个node上只调度一个pod)
k8s教程(pod篇)-DaemonSet(每个node上只调度一个pod)
241 0
|
4月前
|
Kubernetes Perl 容器
在K8S中,replicaset 和deploy有何区别?
在K8S中,replicaset 和deploy有何区别?
|
4月前
|
存储 Kubernetes API
在K8S中,删除一个Pod会发生什么事情?
在K8S中,删除一个Pod会发生什么事情?
|
5月前
|
Kubernetes 负载均衡 调度
k8s初始化pod-pod标签
k8s初始化pod-pod标签
54 1
|
4月前
|
运维 Kubernetes 容器
在K8S中,replicaset和deploy的区别?
在K8S中,replicaset和deploy的区别?
|
7月前
|
Kubernetes Perl 容器
在 Kubernetes 中重启 pod 的 3 种方法
【4月更文挑战第25天】
5266 1
在 Kubernetes 中重启 pod 的 3 种方法
|
7月前
|
Kubernetes 应用服务中间件 nginx
Kubernetes学习-深入Pod篇(一) 创建Pod,Pod配置文件详解
Kubernetes学习-深入Pod篇(一) 创建Pod,Pod配置文件详解
|
7月前
|
Shell 应用服务中间件 Docker
kubectl创建简单的pod
kubectl创建简单的pod
|
Kubernetes Java Docker
K8s 中 Pod OOMKilled 原因
K8s 中 Pod OOMKilled 原因
590 0