当前位置: 首页 > backend >正文

K8s-Pod详解

Pod介绍

Pod是Kubernetes中能够创建和部署的最小单元,是Kubernetes集群中的一个应用实例,总是部署在同一个节点Node上。(程序运行部署在容器中,容器必须存在pod中。pod可以认为是容器的封装,一个pod中可以存在一个或者多个容器。)

pod的工作方式

在K8s中,所有的资源都可以使用一个yaml文件来创建,创建Pod也可以使用yaml配置文件。或者使用kubectl run在命令行创建Pod(不常用)。

自主式Pod(不推荐):所谓的自主式Pod,就是直接定义一个Pod资源,但是自主式Pod是存在一个问题的,假如我们不小心删除了pod,那么pod就彻底删除了。

控制器管理的Pod(推荐)
常见的管理Pod的控制器:Replicaset、Deployment、Job、CronJob、Daemonset、Statefulset。控制器管理的Pod可以确保Pod始终维持在指定的副本数运行。如,通过Deployment管理Pod

namespace 名称空间的创建

#创建名称空间dev

[root@k8s-master dev]# kubectl create namespace dev

#查看名称空间

[root@k8s-master dev]# kubectl get ns

#在namespace名称空间下创建nginx的pod

[root@k8s-master dev]# kubectl run nginxpod --image nginx:1.17.1 -n dev

#查看新创建的pod

[root@k8s-master dev]# kubectl get pod -n de

同理删除指定的pod

再次查看pod显示没有,删除名称空间dev

[root@k8s-master dev]# kubectl delete ns de

#查看所有的pod,-A所有的名称空间

[root@k8s-master ~]# kubectl get pod -A

Pod配置

基本配置

创建pod-base.yaml文件,内容如下:

[root@k8s-master01 dev]# vim pod-base.yaml

#下面定义了一个比较简单Pod的配置,里面有两个容器:
nginx:用1.17.1版本的nginx镜像创建,(nginx是一个轻量级web容器)
busybox:用1.30版本的busybox镜像创建,(busybox是一个小巧的linux命令集合)

# 创建Pod
[root@master pod]# kubectl apply -f pod-base.yaml
pod/pod-base created

# 查看Pod状况,状态为CrashLoopBackOff(表示 Pod 中的容器反复崩溃并重启)
[root@master pod]# kubectl get pod -n dev

解决busybox容器运行问题

原来busybox并不是一个程序,而是类似于一个工具类的集合,kubernetes集群启动管理后,它会自动关闭。解决方法就是让其一直在运行,这就用到了command配置。

#使用命令进行查看报错
[root@k8s-master01 dev]# kubectl describe pod pod-base -n dev

[root@k8s-master01 dev]# vim pod-base.yaml

#插入命令

command: ["/bin/sh","-c","touch /tmp/hello.txt;while true;do /bin/echo
$(date +%T) >> /tmp/hello.txt; sleep 3; done;"]

通过 Deployment 管理 Pod,利用控制器的滚动更新机制,直接更新 Pod 的不可变字段时,必须删除旧 Pod 后重新创建。

#删除pod

[root@k8s-master01 dev]# kubectl delete -f pod-base.yaml
#创建pod
[root@k8s-master01 dev]# kubectl apply -f pod-base.yaml

#查看Pod状况,状态为Running正在运行
[root@master pod]# kubectl get pod -n dev

镜像拉取

配置imagePullPolicy参数,imagePullPolicy用于设置镜像拉取策略,kubernetes支持配置三种拉取策略:
        Always:总是从远程仓库拉取镜像(一直远程下载)
        IfNotPresent:本地有则使用本地镜像,本地没有则从远程仓库拉取镜像(本地有就本地 本地没远程下载)
        Never:只使用本地镜像,从不去远程仓库拉取,本地没有就报错 (一直使用本地)

默认值说明:
如果镜像tag为具体版本号, 默认策略是:IfNotPresent
如果镜像tag为:latest(最终版本) ,默认策略是always

环境变量

env,环境变量,用于在pod中的容器设置环境变量。

#删除Pod

[root@k8s-master01 dev]# kubectl delete -f pod-base.yaml
[root@k8s-master01 dev]# vim pod-base.yaml

# 创建Pod
[root@master ~]# kubectl create -f pod-env.yaml
# 进入容器,输出环境变量
[root@master ~]# kubectl exec pod-env -n dev -c busybox -it /bin/sh

这种方式不是很推荐,推荐将这些配置单独存储在配置文件中,这种方式将在后面介绍。

资源配额

        容器中的程序要运行,肯定是要占用一定资源的,比如cpu和内存等,如果不对某个容器的资源做限制,那么它就可能吃掉大量资源,导致其它容器无法运行。针对这种情况,kubernetes提供了对内存和cpu的资源进行配额的机制,这种机制主要通过resources选项实现。

他有两个子选项:

requests:用于设置容器需要的最小资源,如果环境资源不够用,容器无法启动

limits:用于限制运行容器的占用资源,当容器占用资源超过limits时会被终止

# 下载 安装Metrics-Server
[root@k8s-master01 dev]# wget https://mirrors.chenby.cn/https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

# 修改配置

[root@k8s-master01 dev]# vim components.yaml

# 修改此处 添加如下内容

# 修改镜像地址
sed -i "s#registry.k8s.io#k8s.chenby.cn#g" components.yaml
cat components.yaml | grep image

#运行pod
[root@k8s-master01 ~]# kubectl apply -f components.yaml

# 需要稍等一会才可查看到
[root@k8s-master01 ~]# kubectl  top node

http://www.xdnf.cn/news/733.html

相关文章:

  • 第一讲 生成式ai是什么
  • 头歌java课程实验(函数式接口及lambda表达式)
  • 【AI论文】CLIMB:基于聚类的迭代数据混合自举语言模型预训练
  • 2026《数据结构》考研复习笔记四(第一章)
  • 单例模式与消费者生产者模型,以及线程池的基本认识与模拟实现
  • Java学习手册:Filter 和 Listener
  • synchronized 与分布式锁
  • 约束:常见约束(常见约束-例子,外键约束)
  • Laravel-vite+vue开发前端模板
  • 最新扣子空间实操指南
  • QML--全局对象Qt
  • 1.Vue自动化工具安装(Vue-cli)
  • 自定义请求头导致跨域的解决办法
  • C++学习:六个月从基础到就业——内存管理:RAII原则
  • 键入网址到网页显示,期间发生了什么?
  • Arduino示例代码讲解:Project 08 - Digital Hourglass 数字沙漏
  • DAY 50 leetcode 1047--栈和队列.删除字符串中的所有相邻重复项
  • Spring MVC 如何体现 Model-View-Controller 各自的职责?它们之间是如何协作的?
  • 【Linux】进程状态
  • 【仓颉 + 鸿蒙 + AI Agent】CangjieMagic框架(17):PlanReactExecutor
  • OpenCV 自适应背景更新 cv2.accumulateWeighted
  • 【OC】AVPlayerLayer的学习
  • PG psql --single-transaction 参数功能
  • 秘密任务 3.0:如何通过 JWT 认证确保 WebSockets 安全
  • c++基础·左值右值
  • HBase安装与基本操作指南
  • 安卓单机斗地主,具备休闲挑战等多模式
  • paddleocr出现: [WinError 127] 找不到指定的程序解决办法
  • 一招解决所以Maven找不到依赖包的问题
  • 即插即用模块(1) -MAFM特征融合