k8s核心概念pod 基本定义和命令

2023-05-16

文章目录

    • 工作负载
    • pod定义
    • pod分类
      • 关系
      • 静态pod
      • 控制器管理的pod
    • 镜像拉取策略
  • pod常用命令
    • 创建pod
    • 查看pod
    • 删除pod
      • 删除单个pod
      • 删除多个pod
    • pod的标签命令
      • 查看pod标签
      • 设置标签
        • 通过命令行设置标签
        • 通过yaml文件设置标签
      • 查询标签
        • 通过等值关系查看标签
        • 通过集合关系查看标签
      • 删除pod标签
      • pod内部镜像操作命令
        • 不用交互直接操作名
        • 和容器交互操作
    • Pod资源限制
    • Pod中多个容器网络共享

工作负载

  • 工作负载是在k8s集群中运行的应用程序,无论工作负载是单一服务还是集群构成,在k8s中都可以使用pod来运行它。

pod定义

  • pod是k8s集群管理与调度的最小计算单元,表示处于运行状态的一组容器
  • pod不是进程,只是容器运行的环境
  • 一个pod可以封装任意个容器
  • 一个pod内的容器共享部分命令空间,例如:Net Namespace、IPC Namespace、UTS Namespace
  • 用户pod默认会被调度运行在node节点上(不运行在master节点上,但是也有例外)
  • pod内的IP不是固定的,集群外不能直接访问pod

pod分类

关系

  • workloads分为静态pod控制器管理的pod
  • pod通过控制器实现应用的运行、伸缩、升级等操作
  • controller在集群中管理pod
  • pod与controller之间通过label-selector进行关联,且是唯一的关联方式

静态pod

  • 也称为无控制器管理的pod
  • 直接由特定节点上的 kubelet 守护进程管理, 不需要API 服务器看到它们
  • 尽管大多数 Pod 都是通过控制面(例如,Deployment) 来管理的,对于静态 Pod 而言,kubelet 直接监控每个 Pod,并在其失效时重启之。

控制器管理的pod

  • 控制器可以控制pod的副本数,扩容与裁剪,版本更新与回滚等

镜像拉取策略

由imagePullPolicy参数控制

  • Always : 不管本地有没有镜像,都要从仓库中下载镜像
  • Never : 从来不从仓库下载镜像, 只用本地镜像,本地没有就算了
  • IfNotPresent: 如果本地存在就直接使用, 不存在才从仓库下载

默认的策略是:

  • 当镜像标签版本是latest,默认策略就是Always
  • 如果指定特定版本默认拉取策略就是IfNotPresent。

pod常用命令

创建pod

  • 直接使用命令行创建pod,不推荐,测试自己玩玩就行
# 创建
kubectl run nginx --image=nginx
pod/nginx created
# 查看
kubectl get pod                
NAME    READY   STATUS              RESTARTS   AGE
nginx   0/1     ContainerCreating   0          13s
  • 使用yaml创建指定pod
    • 创建pod文件,例如pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx1
spec:
  containers:
  - name: nginx
    image: nginx
  • 使用yaml文件创建pod
kubectl create -f pod.yaml
pod/nginx1 created
  • 查看pod
kubectl get pod|grep nginx1
nginx1   1/1     Running   0          2m10s
  • 使用yaml创建pod时可以使用creat或者apply
    • apply:使用apply时,如果pod已存在相当于执行更新操作
kubectl apply -f pod.yaml 
pod/nginx1 configured
  • create:使用create时,如果pod已存在会直接报错
kubectl create -f pod.yaml 
Error from server (AlreadyExists): error when creating "pod.yaml": pods "nginx1" already exists

查看pod

  • pod是一种计算资源,可以通过kubectl get pod来查看
kubectl get pod 
NAME   READY   STATUS    RESTARTS   AGE
pod    1/1     Running   0          21s
  • pod或pods都可以,不指定namespace,默认是名为default的namespace
kubectl get pod -n default
NAME   READY   STATUS    RESTARTS   AGE
pod    1/1     Running   0          28s
  • 查看pod详细信息-o wide
kubectl get pod -o wide   
NAME   READY   STATUS    RESTARTS   AGE   IP           NODE             NOMINATED NODE   READINESS GATES
pod    1/1     Running   0          38s   10.1.0.114   docker-desktop   <none>           <none>
  • 描述pod详细信息
kubectl describe pod pod-stress [-n namespace  pod在非默认空间时需要指定pod所在的namespace]
Name:         pod-stress   # pod名称
Namespace:    default      # 所在命名空间
Priority:     0   # 优先级
Node:         docker-desktop/192.168.65.4    # 所在节点
Start Time:   Fri, 19 Aug 2022 11:24:15 +0800   # 创建时间
Labels:       <none>    # 标签
Annotations:  <none>    # 标签描述
Status:       Running   # pod状态
IP:           10.1.0.109   # Pod IP地址
IPs:        # IP地址
  IP:  10.1.0.109
Containers: # Pod中的容器信息
  c1:    # c1容器
    Container ID:  docker://b80d5e7b88cc207978da99ef508c0772a60ac693d94c0a59cd12266d6883aa57    # 容器ID
    Image:         polinux/stress      # 镜像名
    Image ID:      docker-pullable://polinux/stress@sha256:b6144f84f9c15dac80deb48d3a646b55c7043ab1d83ea0a697c09097aaad21aa   # 镜像ID
    Port:          <none>  # 端口
    Host Port:     <none>  # 主机端口
    Command:      # 启动命令
      stress
    Args:      # 启动参数
      --vm     # CPU数
      1
      --vm-bytes  # 内存数
      100
      --vm-hang   # 进程数
      1
    State:          Running      # 容器状态
      Started:      Fri, 19 Aug 2022 11:24:33 +0800   # 容器启动时间
    Ready:          True   # 是否就绪
    Restart Count:  0   # 容器重启次数
    Environment:    <none> # 环境变量
    Mounts:    # 绑定位置
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-sqkts (ro)
Conditions:
  Type              Status
  Initialized       True   # 初始化是否完成
  Ready             True      # 是否ready
  ContainersReady   True   # 容器是否ready
  PodScheduled      True   # pod调度
Volumes:    
  kube-api-access-sqkts:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events: 
  Type    Reason     Age   From               Message
  ----    ------     ----  ----               -------
  Normal  Scheduled  102s  default-scheduler  Successfully assigned default/pod-stress to k8s-worker1
  Normal  Pulling    102s  kubelet            Pulling image "polinux/stress"
  Normal  Pulled     83s   kubelet            Successfully pulled image "polinux/stress" in 18.944533343s
  Normal  Created    83s   kubelet            Created container c1
  Normal  Started    82s   kubelet            Started container c1

删除pod

删除单个pod

  • 命令行直接删除
kubectl delete pod nginx
pod "nginx" deleted
  • 使用yaml资源清单文件删除
kubectl delete -f pod.yaml 
pod "nginx1" deleted
  • 删除某个namespace会直接删除该命名空间下所有的pod
# 查看test空间下pod
kubectl get pod -n test
NAME     READY   STATUS    RESTARTS   AGE
nginx1   1/1     Running   0          16m
nginx2   1/1     Running   0          16m
# 删除test空间
kubectl delete ns test
namespace "test" deleted
# 查看test空间下pod
kubectl get pod -n test
No resources found in test namespace.

删除多个pod

  • 命令行删除,后面直接跟多个要删除的pod名称
  • 使用awk过滤删除
kubectl get pod |awk 'NR >1 {print $1}' |xargs kubectl delete pod 
pod "nginx1" deleted
pod "nginx2" deleted
  • 删除某个namespace会直接删除该命名空间下所有的pod

pod的标签命令

  • 为pod设置标签,便于控制器通过label和pod进行关联
  • 可以将标签理解成SQL中的查询条件

查看pod标签

kubectl get pod --show-labels
NAME     READY   STATUS              RESTARTS   AGE   LABELS
nginx1   0/1     ContainerCreating   0          2s    <none>

设置标签

通过命令行设置标签

kubectl label pod nginx1 env=test zone=beijing
pod/nginx1 labeled
kubectl get pod --show-labels                 
NAME     READY   STATUS    RESTARTS   AGE   LABELS
nginx1   1/1     Running   0          72s   env=test,zone=beijing

通过yaml文件设置标签

  • yaml清单文件
apiVersion: v1
kind: Pod
metadata:
  name: nginx2
  labels:
    env: dev
    zone: A
spec:
  containers:
    - name: nginx
      image: nginx
  • 验证
kubectl get pod --show-labels
NAME     READY   STATUS    RESTARTS   AGE     LABELS
nginx1   1/1     Running   0          4m29s   env=test,zone=beijing
nginx2   1/1     Running   0          46s     env=dev,zone=A

查询标签

通过等值关系查看标签

kubectl get pod -l env=dev
NAME     READY   STATUS    RESTARTS   AGE
nginx2   1/1     Running   0          3m10s

通过集合关系查看标签

kubectl get pod -l "env in(dev,test,prod)"
NAME     READY   STATUS    RESTARTS   AGE
nginx1   1/1     Running   0          7m31s
nginx2   1/1     Running   0          3m48s

删除pod标签

kubectl label pod nginx1 env- zone-
pod/nginx1 labeled

kubectl get pod --show-labels
NAME     READY   STATUS    RESTARTS   AGE     LABELS
nginx1   1/1     Running   0          8m59s   <none>
nginx2   1/1     Running   0          5m16s   env=dev,zone=A

pod内部镜像操作命令

不用交互直接操作名

  • 命令格式:kubectl exec pod名 -c 容器名 -- 命令
  • 不指定容器名,则默认为pod里的第1个容器
kubectl exec nginx1 -- date
Fri Aug 19 10:52:50 UTC 2022

和容器交互操作

kubectl exec -it nginx1 -c nginx -- /bin/bash
root@nginx1:/# ls
bin  boot  dev  docker-entrypoint.d  docker-entrypoint.sh  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@nginx1:/# 

Pod资源限制

apiVersion: v1
kind: Namespace
metadata:
  name: namespace1
---
apiVersion: v1
kind: Pod
metadata:
  name: pod-stress2
  namespace: namespace1
spec:
  containers:
  - name: c1
    image: polinux/stress
    imagePullPolicy: IfNotPresent
    resources:
      limits:
        memory: "200Mi"
      requests:
        memory: "100Mi"
    command: ["stress"]                    # 启动容器时执行的命令
    args: ["--vm", "1", "--vm-bytes", "150M", "--vm-hang", "1"]  # 产生1个进程分配150M内存1秒后释放

Pod中多个容器网络共享

  • 编写yaml文件
apiVersion: v1
kind: Pod
metadata:
  name: pod-share-network
spec:
  containers:
    - name: c1
      image: nginx
    - name: c2
      image: nginx
      imagePullPolicy: IfNotPresent
  • 运行yaml文件
    ···shell
    kubectl apply -f share_network.yaml
    pod/pod-share-network created
* 查看
```shell
kubectl get pod                       
NAME                READY   STATUS             RESTARTS   AGE
pod-share-network   1/2     CrashLoopBackOff   13         44m
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

k8s核心概念pod 基本定义和命令 的相关文章

  • android的system域解耦

    google很早在为此做准备 xff0c 要求所有设备能够刷GSI xff08 通用系统镜像 xff09 xff0c 并跑过XTS测试 动态分区解耦方案如上图 一 分区描述 单一系统映像 SSI 包含system和system ext图像的
  • Android Activity onConfigurationChanged()方法 监听状态改变

    AndroidManifest xml文件 xff1a 1 增加权限android permission CHANGE CONFIGURATION 2 设置Activity的android configChanges属性 span clas
  • 生产者消费者

    问题意义 生产者消费者问题是一个很经典的问题 xff0c 通过解决此问题 xff0c 能够学到多线程的的知识 程序设计思路 在本程序中采用信号灯的方式 xff0c 用Flag作为标志位 xff0c 指示生产过程和消费过程是否结束 Flag为
  • android keymaster

    keymaster span class hljs keyword is span a newly instroduced key management hardware abstraction layer hal component It
  • Android密钥证书管理相关介绍

    Java Security Java Security是Java中的安全模块 xff0c 它对应了一系列的规范 xff0c 主要包含三个重要规范 xff1a JavaCryptography Extension xff08 简写为JCE x
  • 安装依赖包 -- Ubuntu

    安装依赖包 xff08 须在虚拟环境中 xff09 xff1a 依赖就是开发以及程序运行需要使用的环境的集合 包括软件 插件等 我们一般会把需要使用的依赖给保存在一个文件中 xff0c 命名为requirements的txt文件 如果在其它
  • 大数据的感想

    1 大数据即全数据 xff08 即n 61 All xff0c 这里n为数据的大小 xff09 xff0c 其旨在收集和分析与某事物相关的 全部 数据 xff0c 而非仅分析 部分 数据 2 N 61 All xff08 所有 xff09
  • 新手如何配置spring

    首先 xff0c 可以通过springframework官方说明文档找到如下网址下载spring包 http repo spring io release org springframework spring 这里以4 2为例子 sprin
  • 对Zookeeper的分布式锁的浅解

    提起到锁 xff0c 我们在单机应用开发涉及到同步问题时往往会采用Sychronized Lock的方式进行解决多线程的代码同步问题 xff0c 此时多线程的运行都是在同一个JVM中 但是在分布式集群的情况下 xff0c 此时多线程的运行在
  • com.github.tobato.fastdfs.exception.FdfsServerException: 错误码:2,错误信息:找不到节点或文件

    我的原因是因为docker中Tracker没有启动起来 xff0c 重新启动后系统正常
  • Java线程、Java多线程详细介绍

    目录 一 进程和线程的区别 1 1 进程 1 2 线程 二 并发和并行 2 1 并行 2 2 并发 2 3 监控线程的执行情况 三 创建方式 3 1 继承Thread类 思考 xff1a 为什么不直接通过对象调用start xff08 xf
  • 抽象类和接口的区别(通俗易理解)

    目录 一 抽象类 1 1 抽象类概念 xff1a 1 2 抽象类特点 1 3 抽象类存在价值 二 接口 2 1 接口的概念 2 2 接口的特点 2 3 接口存在价值 三 接口和抽象类的关系 3 1 接口和抽象类相同点 3 2 接口和抽象类的
  • MyBatis缓存介绍

    提到MyBatis的缓存 xff0c 首先需要了解一下缓存是什么 一 缓存 1 1 什么是缓存 缓存是服务器内存的一块区域 1 2 什么样的数据适合使用缓存 经常访问但又不会时时发生变化的数据 1 3 缓存的设计目的 提高查询速度 xff0
  • 数据库的乐观锁和悲观锁

    一 悲观锁 悲观锁是一种思想 xff0c 对数据被其他事务修改持保守态度 xff0c 会通过数据库自身的锁机制来实现 xff0c 从而保证数据操作的排它性 悲观锁总是假设最坏的情况 xff0c 每次请求取数据的时候都认为请求会修改数据 xf
  • deepin实现微信双开

    说明 linux环境下进行微信双开本质是修改微信的启动脚本 xff0c 为每个微信进程指定一个工作目录 所以按照原理来讲 xff0c 你可以参考显得方法实现微信多开 操作方法 1 先备份 sudo cp opt apps com qq we
  • vue 引入字体图标显示方块

    问题现象 xff1a 使用element ui xff0c 字体图表显示 方块 项目加载后 xff0c 看加载文件 xff0c 并没有 woff或 woff2或 ttf等字体图标文件 也没有字体图表转换后的base64 xff0c 文件 环
  • mysql8.0报错解决方式:1449 - The user specified as a definer (‘root‘@‘%‘) does not exist

    今天在Navicat上新建本地数据库连接的时候 xff0c 输入正确的账号密码点击连接之后却报错 查询相关文件之后 xff0c 发现是权限问题 产生用户不能授权的原因是mysql 数据库中user 表中的特定用户 root 的host 的属
  • AD中PCB板设计中如何将正反面相互对调

    在pcb布局过程中 xff0c 有时会碰到正反面布局反了的情况 xff0c 且走线也已经大部分完成的时候 xff0c 我们可以利用AD软件的快捷键 xff0c 实现正反面相互对调的过程 按L键 xff0c 打开所有层显示 要对调的层 xff
  • 非分区表转换为分区表的三种方式

    创建测试环境 span class token comment 创建非分区表 span span class token keyword CREATE span span class token keyword TABLE span T N
  • 表管理语法

    表操作 表的创建表的修改修改列名修改列类型或约束添加新列删除列修改表名 表的删除删除表数据及结构删除表数据使用DELETE语法使用TRUNCATE语法 表的复制仅仅复制表结构复制表的结构 43 数据复制全部数据复制部分数据仅仅复制部分结构跨

随机推荐

  • 事务

    事务控制语言 事务的特性特点分类 事务的创建数据库隔离级别各种并发问题隔离级别 delete和truncate在事务使用时的区别 事务的特性 一条或多条SQ语句组成一个执行单位 xff0c 要么全执行 xff0c 要么全不执行 特点 A原子
  • 视图

    视图 简单介绍创建视图语法好处 修改视图语法 删除视图语法 查看视图语法 更新视图以下类型试图不可更新 视图和表比较 简单介绍 MySQL从5 0 1版本开始提供视图功能 xff0c 视图是一个虚拟表 xff0c 行和列的数据来自定义视图的
  • 存储过程和函数

    存储过程和函数 前提变量分类 系统变量使用作用域 自定义变量使用用户变量使用局部变量使用 作用域用户变量和局部变量对比 举例用户变量局部变量 存储过程和函数存储过程基本介绍语法举例 函数储过程和函数区别语法举例无参数又返回有参有返回 流程控
  • mysq简介

    mysql简介 RPM安装查看当前系统是否安装mysql安装查看mysql所属组和密码启动关闭mysql设置开机自启动安装位置修改字符集 配置文件二进制日志log bin错误日志log error查询日志log数据文件 存储引擎查看myis
  • mysql索引常见面试题

    mysql索引常见面试题 建表场景分析索引有查找和排序两大功能 建表 create table test1 id int not null PRIMARY KEY auto increment c1 char 10 c2 char 10 c
  • protobuf引入其它proto文件

    文章目录 同包内直接引用不同包中引用 同包内直接引用 文件结构 span class token operator span proto span class token operator span a proto span class t
  • JAVA_HOME配置

    Linux下配置 查询方法 xff1a span class token function which span java xff1a 查看Java执行命令位置 span class token function ls span lrt u
  • 经典进程同步问题(一)——生产者消费者问题

    目录 一 生产者消费者问题描述 二 解决思路 三 问题求解 xff1a 四 源码 五 运行结果 xff1a 一 生产者消费者问题描述 生产者消费者 xff08 producer customer xff09 问题是一个非常著名的进程同步问题
  • Markdown语法总结

    文章目录 Markdown 学习标题三级标题四级标题 字体引用分割线图片超链接列表有序列表无序列表 表格代码注脚LaTeX公式 表示行内公式 表示行内公式 使用HTML源码 Markdown 学习 标题 三级标题 四级标题 标题最多支持六级
  • linux下设置免密登录

    文章目录 配置本机免密登录设置远程免密登录 配置本机免密登录 未配置免密登录的时候需要输入密码ssh localhost span class token punctuation span root 64 zsx3 span class t
  • 设置静态ip

    设置静态ip 网络配置的配置文件所在位置 etc sysconfig network scripts 查看所有的设备配置文件 span class token punctuation span root zsx1 span class to
  • 退出telnet交互

    telnet 命令 xff1a telnet ip port 进入交互后使用ctrl 43 C无法退出 xff0c 使用ctrl 43 xff0c 进入telnet提示 xff0c 在使用ctrl 43 C
  • Redis集群只读问题

    问题 localhost span class token operator span class token file descriptor important 0 span gt span set n fsfsd span class
  • 批量删除镜像

    docker rmi f docker images grep 10 200 2 20 awk 39 print 3 39
  • Mac本地搭建loki日志追踪

    Loki版本 v2 4 x 参考文档 Helm Grafana Loki documentation 环境准备 helm工具安装 k8s环境支持 xff0c 可以直接使用docker桌面工具自带的k8s工具便于进行资源分配 安装 拉取gra
  • Mac系统配置k8s completion命令补全

    查看当前bash版本 bin bash version GNU bash version span class token number 3 2 span 57 span class token punctuation span span
  • namespaces “xxx“ not found

    使用k8s创建pod时提示namespace不存在 kubectl apply f statefulset deployment yaml n etcd Error from server span class token punctuat
  • yaml语法总结

    语法说明 区分大小写 缩进代表结构之间的层级 缩进最好使用空格 xff0c tab在有的编译器中不一定能支持 用于注释 数据类型 对象 语法 xff1a key value 举例 xff1a name 张三 age 12 数据 语法 xff
  • Centos虚拟机命令行和图形界面切换

    难题 小编最近遇到了问题 xff0c 就是部署git xff0c 但是是需要在命令行窗体中进行的 xff0c 现在安装了窗口版的 xff0c 那么有没有最简单的捷径让我变化一下呢 xff0c 接下来的一幕你会惊讶到如此简单 我们先看一下原理
  • k8s核心概念pod 基本定义和命令

    文章目录 工作负载pod定义pod分类关系静态pod控制器管理的pod 镜像拉取策略 pod常用命令创建pod查看pod删除pod删除单个pod删除多个pod pod的标签命令查看pod标签设置标签通过命令行设置标签通过yaml文件设置标签