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实现机制

主要有以下两大机制

  • 共享网络
  • 共享存储

共享网络

容器本身之间相互隔离的,一般是通过 namespace 和 group 进行隔离,那么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

 

 

相关文章

Redis Cluster 提供了一种运行 Redis 安装的方法,其中数据&...
创建GitLab源码项目并上传示例代码 1. 创建GitLab源码项目 本...
1. 引言 在如今的技术世界中,随着微服务架构的广泛应用和云...
先看看结果有多轻量吧 官方文档:https://grafana.com/docs/...
一、安装环境说明 硬件要求 内存:2GB或更多RAM CPU: 2核CPU...
CEPH 简介 不管你是想为云平台提供Ceph 对象存储和/或 Ceph ...