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

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

相关文章:

  • 操作系统是如何运行的?
  • 2014-2021年 区域经济高质量发展-高质量需求指标数据
  • 【Hot100】 240. 搜索二维矩阵 II
  • 微信小程序中使用h5页面预览图片、视频、pdf文件
  • 软考复习——知识点软件开发
  • 深入理解Java包装类:自动装箱拆箱与缓存池机制
  • Linux操作系统--进程的创建和终止
  • 缓存 --- Redis的三种高可用模式
  • 重构之去除多余的if-else
  • Kubernetes相关的名词解释Dashboard界面(6)
  • 年化26.9%的稳健策略|polars重构因子计算引擎(python策略下载)
  • 03【变量观】`let`, `mut` 与 Shadowing:理解 Rust 的变量绑定哲学
  • c++STL——list的使用和模拟实现
  • go环境安装mac
  • 02【初体验】安装、配置与 Hello Cargo:踏出 Rust 开发第一步
  • Three.js + React 实战系列-3D 个人主页 :完成 Navbar 导航栏组件
  • Mac-VScode-C++环境配置
  • Git拉分支技巧:从零开始创建并推送分支
  • 深入理解 CICD 与 Jenkins 流水线:从原理到实践
  • 基于Docker+k8s集群的web应用部署与监控
  • 长三角议事厅·周报|服务业扩大开放:长三角六城联动新探索
  • 发布近百条《原神》涉密游戏内容,游戏资讯网站被判赔33万元
  • 张九思任电子科大副教授,曾以学生身份入选爱思唯尔全球前2%顶尖科学家
  • “特朗普的欧洲耳语者”:梅洛尼白宫之行真能打破美欧关税僵局?
  • 讲座预告|把握可持续信息披露新机遇
  • 数据短缺阻碍AI一体机落地,专家提出数据元件治理新路径