k8s pod详解使用

news2024/10/13 4:24:00

什么是pod?

Kubernetes(简称K8s)是一个开源的容器编排平台,广泛用于构建、部署和管理容器化应用程序。在K8s中,Pod是一个核心概念,下面是对Pod的详细解释:

一、Pod的定义

Pod是K8s中最小的可部署单元,也是资源对象模型中由用户创建或部署的最小资源对象模型。它实现了对容器的封装和管理,是一组运行在同一主机(节点)上、共享网络和存储空间的一组容器。Pod内的容器共享同一个网络命名空间和存储卷,可以方便地实现容器间的通信和数据共享。

二、Pod的特点

  1. 共享资源:Pod中的容器共享网络和存储资源。它们可以相互访问,并通过本地主机之间的共享卷交换数据,这有助于减少网络通信开销并简化容器间的依赖关系。
  2. 调度和生命周期管理:K8s会将Pod部署到集群中的节点上,并监控其生命周期。K8s确保Pod一直处于运行状态,如果Pod崩溃或节点故障,K8s会自动在其他节点上重新创建Pod。
  3. 负载均衡:K8s可以根据需要创建多个副本的Pod,并利用负载均衡调度算法将流量分发到这些副本上,确保应用程序的高可用性。
  4. 灵活部署:Pod可以方便地部署和管理多个容器,实现集中式管理和快速部署。这有助于简化应用程序的部署和管理流程。

三、Pod的使用

  1. 创建Pod:在创建Pod之前,需要先搭建一个Kubernetes集群。然后,可以通过定义Pod的配置文件(通常使用YAML格式)来指定Pod的名称、包含的容器、使用的镜像、端口映射等信息。最后,使用kubectl命令行工具应用配置文件并部署Pod到集群中。
  2. 查看Pod状态:使用kubectl命令行工具可以查看Pod的状态信息,包括Pod是否正在运行、是否处于就绪状态等。
  3. 进入Pod内部:有时需要进入Pod的容器内部进行一些操作或调试。可以使用kubectl命令行工具进入Pod的bash终端或执行其他命令。
  4. 删除Pod:当不再需要Pod时,可以使用kubectl命令行工具删除Pod。

四、Pod的作用

Pod在K8s中扮演着至关重要的角色。它是K8s调度和管理的最小单位,也是应用程序部署和管理的基本单元。通过Pod,K8s能够实现对容器化应用程序的自动化部署、扩展和操作。Pod提供了共享资源、简化容器间通信和数据共享的机制,有助于提高应用程序的可用性和可扩展性。

综上所述,Pod是K8s中不可或缺的核心组件之一。它封装和管理容器,提供共享资源和简化通信的机制,为应用程序的部署和管理提供了强有力的支持。

使用pod 

 1..run/apply -f/create -f运行pod

[root@k8s-master pod]# kubectl run mynginx --image=nginx -n myns
pod/mynginx created
[root@k8s-master pod]# kubectl create -f tomcat.yaml 
pod/tomcat created
[root@k8s-master pod]# kubectl apply -f httpd.yaml 
pod/httpd created
​
[root@k8s-master pod]# kubectl get pods -n myns
NAME      READY   STATUS    RESTARTS   AGE
httpd     1/1     Running   0          2m20s
mynginx   1/1     Running   0          4m33s
tomcat    1/1     Running   0          8s

2.get查看pod信息 

查看所有pod 

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

查看指定的单个/多个pod

[root@k8s-master ~]# kubectl get pod nginx -n myns
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          9s
​
[root@k8s-master ~]# kubectl get pod nginx nginx1 -n myns
NAME     READY   STATUS    RESTARTS   AGE
nginx    1/1     Running   0          97s
nginx1   1/1     Running   0          15s

查看pod同时查看其他类型资源(需要具体指定资源类型和名称) 

[root@k8s-master ~]# kubectl get pod/nginx -n myns node/k8s-node1
NAME        READY   STATUS    RESTARTS   AGE
pod/nginx   1/1     Running   0          104s
​
NAME             STATUS   ROLES    AGE    VERSION
node/k8s-node1   Ready    <none>   3m6s   v1.28.2

列出在某个节点上运行的pod 

[root@k8s-master ~]# kubectl get pods --field-selector=spec.nodeName=k8s-node1

-w实时查看pod信息

[root@k8s-master ~]# kubectl get  pod -w nginx -n myns 
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          4h16m
[root@k8s-master ~]# 

3.exec操作运行中的pod 

进入运行中的pod 

[root@k8s-master ~]# kubectl exec -it nginx -n myns -- /bin/bash
root@nginx:/# ls
bin   docker-entrypoint.d   home   lib64   mnt   root  srv  usr
boot  docker-entrypoint.sh  lib    libx32  opt   run   sys  var
dev   etc           lib32  media   proc  sbin  tmp
​
#不进入但执行命令
[root@k8s-master ~]# kubectl exec -it nginx -n myns -- ls
bin   docker-entrypoint.d   home   lib64   mnt   root  srv  usr
boot  docker-entrypoint.sh  lib    libx32  opt   run   sys  var
dev   etc           lib32  media   proc  sbin  tmp

进入pod中的容器

[root@k8s-master ~]# kubectl exec -it nginx -c xxx -n myns -- /bin/bash
#-c后指定容器名称

4.pod的yaml文件配置定义解析 

[root@k8s-master ~]# kubectl explain pod.spec
#可以以此形式来一层一层获取可配置项
 
apiVersion: v1 
#必选项,版本号,如V1
kind: Pod 
#必选项,资源类型,pod等
metadata: 
#必选项,元数据部分
  name: xxx 
  #Pod名称
  namespace: xxx 
  #Pod所属的命名空间,默认为"default"
  labels: 
  #自定义标签列表
    - name: xxx   
    #自定义标签内容
spec: 
#必选项,Pod中容器的详细定义
  containers: 
  #必选项,Pod中容器列表
  - name: xxx 
  #必选项,容器名称
    image: xxx 
    #必选项,容器的镜像名称
    imagePullPolicy: [ Always|Never|IfNotPresent ] 
    #获取镜像的策略,tag为latest默认always,tag为具体版本号,默认IfNotPresent。always表示每次都尝试重新拉取镜像;ifNotPresent表示如果本地有那个镜像就使用本地的,不存在时才拉取;Nerver表示仅使用本地有的镜像,绝不拉取,本地没有时报错
    command: [xxx] 
    #容器的启动命令列表,如不指定则使用打包时使用的启动命令
    args: [xxx] 
    #容器的启动命令给定参数列表
    workingDir: xxx 
    #容器的工作目录
    volumeMounts: 
    #挂载到容器内部的存储卷配置
    - name: xxx
    #引用pod定义的共享存储卷的名称,需用volumes[]部分定义的的卷名
      mountPath: xxx 
      #存储卷在容器内mount的绝对路径,应少于512字符
      readOnly: xxx
      #布尔值,是否为只读模式
    ports: 
    #需要暴露的端口库号列表
    - name: xxx
    #端口的名称
      containerPort: xxx 
      #容器需要监听的端口号
      hostPort: xxx
      #容器所在主机需要监听的端口号,默认与Container相同
      protocol: xxx 
      #端口协议,支持TCP和UDP,默认TCP
    env: 
    #容器运行前需设置的环境变量列表
    - name: xxx 
    #环境变量名称
      value: xxx 
      #环境变量的值
    resources: 
    #资源限制和请求的设置
      limits: 
      #资源限制的设置
        cpu: xxx 
        #cpu的限制,单位为core数,将用于docker run --cpu-shares参数
        memory: xxx 
        #内存限制,单位可以为Mib/Gib,将用于docker run --memory参数
      requests: 
      #资源请求的设置
        cpu: xxx 
        #cpu请求,容器启动的初始可用数量
        memory: xxx 
        #内存请求,容器启动的初始可用数量
    lifecycle: 
    #生命周期钩子
      postStart: 
      #容器启动后立即执行此钩子,如果执行失败,会根据重启策略进行重启
      preStop: 
      #容器终止前执行此钩子,无论结果如何,容器都会终止
  livenessProbe: 
  #对Pod内各容器健康检查的设置,当探测无响应几次后将自动重启该容器
    exec: 
    #对Pod容器内检查方式设置为exec方式
      command: [xxx] 
      #exec方式需要制定的命令或脚本
    httpGet: 
    #对Pod内个容器健康检查方法设置为HttpGet,需要制定Path、port
      path: xxx
      port: xxx
      host: xxx
      scheme: xxx
      HttpHeaders:
        - name: xxx
          value: xxx
    tcpSocket: 
    #对Pod内个容器健康检查方式设置为tcpSocket方式
      port: number
    initialDelaySeconds: 0 
    #容器启动完成后首次探测的时间,单位为秒
    timeoutSeconds: 0 
    #对容器健康检查探测等待响应的超时时间,单位秒,默认1秒
    periodSeconds: 0 
    #对容器监控检查的定期探测时间设置,单位秒,默认10秒一次
    successThreshold: 0
    failureThreshold: 0
  securityContext:
    privileged: false
restartPolicy: [Always | Never | OnFailure] 
#Pod的重启策略
nodeName: <xxx> 
#设置NodeName表示将该Pod调度到指定到名称的node节点上
nodeSelector: xxx 
#设置NodeSelector表示将该Pod调度到包含这个label的node上
imagePullSecrets: 
#Pull镜像时使用的secret名称,以key:secretkey格式指定
  - name: xxx
hostNetwork: false 
#是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络
volumes: 
#在该pod上定义共享存储卷列表
  - name: string 
  #共享存储卷名称 (volumes类型有很多种)
    emptyDir: {} 
    #类型为emtyDir的存储卷,与Pod同生命周期的一个临时目录。为空值
    hostPath: xxx 
    #类型为hostPath的存储卷,表示挂载Pod所在宿主机的目录
      path: xxx 
      #Pod所在宿主机的目录,将被用于同期中mount的目录
    secret: 
    #类型为secret的存储卷,挂载集群与定义的secret对象到容器内部
      scretname: xxx
      items:
      - key: xxx
        path: xxx
    configMap: 
    #类型为configMap的存储卷,挂载预定义的configMap对象到容器内部
      name: xxx
      items:
      - key: xxx
        path: xxx

5.Pod对容器的封装 

对单个容器的封装

apiVersion: v1
kind: Pod
metadata:
  name: httpd
  labels:
    run: httpd
  namespace: myns
spec:
  containers:
  - name: httpd
    image: httpd
    ports:
    - containerPort: 80

对多个容器封装并绑定为一个Pod 

apiVersion: v1
kind: Pod
metadata:
  name: two-containers
  namespace: myns
  labels:
    name: tc
spec:
  containers:
  - name: first-container
    image: nginx
    ports:
    - containerPort: 80
  - name: second-container
    image: busybox
    command: ["/bin/sh", "-c", "while true; do echo 'Hello from the second container' > /shared-data/index.html; sleep 10; done"]
    volumeMounts:
    - name: shared-data
      mountPath: /shared-data
    ports:
    - containerPort: 8080
  volumes:
  - name: shared-data
    emptyDir: {}

6.pod使用配置映射 

通过配置映射(ConfigMap),可以将配置文件挂载到Pod中,方便管理和更新。

  volumes:
  - name: config-volume
    configMap:
      name: example-config

7.使用存储卷 

通过定义存储卷(Volume),可以将持久化存储挂载到Pod中。

  volumes:
  - name: vol-data
    persistentVolumeClaim:
      claimName: pvc1

8.使用Replication Controller 

通过Replication Controller可以确保指定数量的Pod副本在任何时候都处于运行状态。

  apiVersion: apps/v1
  kind: Deployment
  metadata:
    name: my-deployment
  spec:
    replicas: 3
    selector:
      matchLabels:
        app: my-app
    template:
      metadata:
        labels:
          app: my-app
      spec:
        containers:
        - name: my-container
          image: my-image

9. 使用Deployment 

Deployment是Replication Controller的升级版,支持滚动更新和回滚。

  apiVersion: apps/v1
  kind: Deployment
  metadata:
    name: my-deployment
  spec:
    replicas: 3
    selector:
      matchLabels:
        app: my-app
    template:
      metadata:
        labels:
          app: my-app
      spec:
        containers:
        - name: my-container
          image: my-image
          ports:
          - containerPort: 80

10.资源配额和限制 

通过设置资源配额(Resource Quotas),可以限制命名空间中所有Pod的资源使用总量。

  resources:
    requests:
      memory: "64Mi"
      cpu: "250m"
    limits:
      memory: "128Mi"
      cpu: "500m"

11.节点资源优化 

通过设置podsPerCore参数,可以根据节点的CPU核心数来控制每个节点上可以运行的Pod数量。

  podsPerCore: 2

12.Pod中的容忍度配置 

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: nginx
  tolerations:
  - key: "dedicated"
    operator: "Equal"
    value: "special-user"
    effect: "NoSchedule"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2209491.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

13.JVM内存模型深度剖析

一、JDK体系结构 JDK代表Java Development Kit(Java开发工具包)&#xff0c;是用于开发和编译Java应用程序的软件包。JDK是由Oracle提供的Java平台的官方实现&#xff0c;包含了开发和运行Java程序所需的工具、库和JRE(Java Runtime Environment)。 二、JAVA语言跨平台特性 Ja…

控制模型执行 | AnyLogic帮助

控制模型执行 | AnyLogic帮助 当运行AnyLogic模型时&#xff0c;您可以使用控制面板来控制模型的执行&#xff0c;控制面板显示在AnyLogic模型窗口的底部。 控制面板包含用于控制启动模型执行的按钮&#xff1a; 按钮命令描述运行[仅当模型当前未运行时可见]从当前状态运行模…

无人机之交互系统篇

一、系统构成 无人机交互系统通常由多个子系统组成&#xff0c;包括但不限于&#xff1a; 多模式人机交互装置&#xff1a;这是人机交互系统的基础层&#xff0c;通常包括计算机、局域网、传感器等设备&#xff0c;用于实现操作员与无人机之间的数据交互和指令传递。例如&…

MATLAB实现AM调制解调

1.基本概念 1.1 AM调制原理 调幅就是使载波的振幅随调制信号的变化规律而变化。基带信号m(t)与直流分量A0相加&#xff0c;然后和高频载波相乘实现AM信号的调制&#xff0c;如图1所示。 1.2 AM解调原理 AM信号经过信道传输&#xff0c;引入噪声后&#xff0c;再和载波相乘&…

jenkins 插件Publish Over SSH (sskey) 同步文件夹

一、安装插件 Publish Over SSH SSH Pipeline Steps 二、添加sshkey 将ssh免密登录的私钥新建到 二、准备目录 源&#xff1a;images 目标&#xff1a;/root/images2 流水线脚本 pipeline {agent anystages {stage(Dest) {steps {script{def remote [:]remote.name tstr…

【中短文--深度学习笔记】Batchsize的选择、批量归一化、loss是否已经收敛(更新中-ing)

一、如何选择合适的Batchsize&#xff1f; 如果你没有任何参考&#xff0c;那么选择2的n次方&#xff08;即64、128、256、512、1024等&#xff09;可以会更加直接和易于管理。而对于上限来说&#xff0c;batchsize大小最好<数据集样本数*0.1。 why? 梯度下降算法 在更新模…

盈利路上的关键一步:掌握五大交易离场技巧

近期&#xff0c;股市节后短暂的牛市成为了众人瞩目的焦点。有人收获颇丰&#xff0c;也有人因此亏了不少&#xff0c;时机没抓对&#xff0c;倒是被割了一波韭菜。市场起伏已是常态&#xff0c;但依旧会有很多人中招。围观近况&#xff0c;忽然深刻体会到&#xff0c;适时离场…

二值形态学基本运算的几何解释

Rafael Gonzalez和Richard Woods所著的《数字图像处理》&#xff0c;从集合角度定义膨胀和腐蚀&#xff0c;不易理解。本书从空域滤波角度对二值图像形态学中膨胀和腐蚀的定义和过程进行描述&#xff0c;并给出了动画演示过程。使用结构元素对图像的形态学处理与滤波模板的空域…

HIVE beeline连接报错Operation category READ is not supported in state standby

问题&#xff1a;hive连接报错Operation category READ is not supported in state standby 这个可能是因为hive配置的hdfs连接地址指定的是具体的namenode地址&#xff0c;但是hadoop集群配置的是HA,所以会发生主备切换&#xff0c;那么我们hive元数据配置就需要使用NameNode…

JavaEE-进程与线程

1.进程 1.1什么是进程 每个应⽤程序运⾏于现代操作系统之上时&#xff0c;操作系统会提供⼀种抽象&#xff0c;好像系统上只有这个程序在运 ⾏&#xff0c;所有的硬件资源都被这个程序在使⽤。这种假象是通过抽象了⼀个进程的概念来完成的&#xff0c;进程可 以说是计算机科学…

Arduino IDE 导入库(DallasTemperature.h和OneWire.h)

1打开IDE 2点击项目 3点击导入库 4在点击管理库 5搜索库 在下图的位置输入库名即可 6安装即可

基于Springboot+Vue的医疗废物管理系统 (含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 在系统…

基于yolov8、yolov5的交通标志检测识别系统(含UI界面、Python代码、数据集)

项目介绍 项目中所用到的算法模型和数据集等信息如下&#xff1a; 算法模型&#xff1a;     yolov8、yolov8 SE注意力机制 或 yolov5、yolov5 SE注意力机制 &#xff0c; 直接提供最少两个训练好的模型。模型十分重要&#xff0c;因为有些同学的电脑没有 GPU&#xff0…

避免 Python 类型转换错误:实用指南

在 Python 中&#xff0c;变量的类型是明确的&#xff0c;不能在没有显式转换的情况下直接将一种类型的值赋给另一种不同类型的变量。例如&#xff0c;以下将字符串与整数直接相加会报错&#xff0c;这跟其它语言有所差异&#xff0c;其它语言会进行隐式转 a "5" b…

c++类与对象三

C类与对象三 上期我们介绍了类的实例化&#xff0c;大小计算&#xff0c;还有this指针。这期我们继续深入更高层次的用法 类的六个默认函数 如个一个类里面没有成员&#xff0c;就是空类&#xff0c;但是空类里面真的什么都没有吗&#xff0c;并不是&#xff0c;在编译器中&…

大数据新视界 --大数据大厂之大数据环境下的零信任安全架构:构建可靠防护体系

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

Javascript 仅允许在异步函数和模块顶级使用 “await“

这个错误的原因&#xff0c;是我们在一个普通函数里调用了async函数&#xff0c;因为async 函数是异步函数&#xff0c;它返回一个 Promis&#xff0c;await必须与async一同出现。所以这里普通函数无法调用它。 async和await只是使函数调用看起来像同步而已&#xff0c;比如下…

【MMMLP】核心方法解读

此方法用于顺序推荐&#xff0c;和我的研究方向不一样&#xff0c;所以这里只探讨值得借鉴的部分 abstract&#xff1a; 现有的顺序推荐方法要么不能直接处理多模态&#xff0c;要么计算量大。为了解决这个问题&#xff0c;我们提出了一种新的多模态多层感知器&#xff08;MM…

MYSQL-windows安装配置两个或多个版本MYSQL

安装第一个mysql很简单&#xff0c;这里不再赘述。主要说说第二个怎么安装&#xff0c;服务怎么配置。 1. 从官网下载第二个MySQL并安装 一般都是免安装版了&#xff0c;下载解压到某个文件目录下(路径中尽量不要带空格或中文)&#xff0c;再新建一个my.ini文件&#xff08;或…

QGroundControl最新版本MacOS平台编译(使用CMakeLists.txt)

1.下载源码: git clone https://github.com/mavlink/qgroundcontrol.git --recursive 2.安装依赖: brew install GStreamer 设置环境变量:GST_PLUGIN_PATH 安装SDL2: brew install SDL2