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

K8s:Pod初识

Pod

Pod是k8s处理的最基本单元。容器本身不会直接分配到主机上,封装为Pod对象,是由一个或多个关系紧密的容器构成。她们共享 IPC、Network、和UTS namespace

pod的特征

  • 包含多个共享IPC、Network和UTC namespace的容器,可直接通过loaclhost通信
  • 所有Pod内容器都可以访问共享的Volune可以访问共享数据
  • 无容错性;直接创建的Pod一旦被调度后跟Node绑定,即使Node挂掉也不会重新调度

创建Pod

使用yaml文件定义Pod

apiVersion: v1
kind: Pod
metadata:name: examplepod
spec:containers:- name: examplepod-containerimage: busyboximagePullPolicy: IfNotPresentcommand: ['sh', '-c']args: ['echo "Hello Kubernetes!"; sleep 3600']
  • apiVersion: 表示使用的API版本。v1表示使用k8s API的稳定版本

  • **kind:**表示要创建的资源对象,使用关键字Pod

  • **metadata:**表示该资源对象的元数据。一个资源对象可拥有多个元数据,name表示当前资源的名称

  • Spec:表示该资源对象的具体设置。containers表示容器的集合,设置容器属性

    • name:要创建的容器名称
    • image:容器的镜像地址
    • imagePullPolicy:镜像的下载策略,支持三种下载策略
      • ALways:不管镜像是否存在都会进行一次拉取
      • Nerver:不管镜像是否存在都不会进行拉取
      • IfNotPresent:只有镜像不存在时,才会进行拉取
    • command:容器的启动命令
    • args:启动参数列表

    使用kubectl创建Pod

    kubectl apply -f *.yaml
    

    apply声明式对象配置命令。-f表示用文件名作为参数,apply既便于跟踪,又具备很好的可读性

    查看pod

    kubectl get pod
    

    可以在查询命令中带上参数-w,以对Pod状态进行持续监控

    $ kubectl get pod {Pod名称} -o wide
    

    还可以在查询命令中带上-o wide参数,输出Pod的更多概要信息(如调度到哪台机器上,Pod本身的虚拟IP等信息

    $ kubectl get pod {Pod名称} -o wide
    

    可以用describe命令查看详情,格式如下。

    $ kubectl describe pods {Pod名称}
    

    如果要查询Pod本身输出的日志信息,还可以使用logs命令

    $ kubectl logs {Pod名称}
    

    Pod模板

    apiVersion: v1            #版本,必填,v1代表稳定版本
    kind: pod                 #类型,必填,Pod
    metadata:                 #元数据,表示资源的标识信息name: String            #元数据,必填,Pod的名字namespace: String       #元数据,Pod的命名空间labels:                 #元数据,标签列表- key: value          #元数据,可定义多个标签的键/值对annotations:            #元数据,自定义注解列表- key: value          #元数据,可定义多个注解的键/值对
    spec:                     #Pod中容器的详细定义,必填containers:             #Pod中的容器列表,必填,可以有多个容器- name: String          #容器名称,必填image: String         #容器中的镜像地址,必填imagePullPolicy: [Always|Never|IfNotPresent]#获取镜像的策略,Always表示下载镜像;#IfNotPresent表示优先使用本地镜像,否则下载镜像;Never表示仅使用本地镜像command: [String]     #容器的启动命令列表(不配置的话,使用镜像内部的命令)args: [String]        #启动命令参数列表workingDir: String    #容器的工作目录volumeMounts:         #挂载到容器内部的存储卷设置- name: String        #为了引用Pod定义的共享存储卷的名称,要用volumes[]部分定义的卷名mountPath: String   #存储卷在容器内挂载的绝对路径,应少于512个字符readOnly: boolean   #是否为只读模式ports:                #容器需要暴露的端口号列表- name: String        #端口名称containerPort: int  #容器要暴露的端口hostPort: int       #容器所在主机监听的端口(把容器暴露的端口映射到宿主机的端口)protocol: String    #端口协议,支持TCP和UDP,默认为TCPenv:                  #容器运行前要设置的环境变量列表- name: String        #环境变量名称value: String       #环境变量值resources:            #资源限制和请求的设置limits:             #资源限制的设置cpu: String       #CPU的限制,单位为CPU内核数。将用于docker run --cpu-quota 参数,#也可以使用小数,例如0.1,0.1等价于表达式100m,表示100milicpumemory: String    #内存限制,单位可以为MiB/GiB/MB/GB(1MiB=1024×1024B,#1MB=1000×1000B),将用于docker run --memory参数requests:           #资源请求的设置cpu: String       #CPU请求,容器启动时的初始可用数量,将用于docker run --cpu-shares参数memory: String    #内存请求,容器启动时的初始可用数量livenessProbe:        #Pod内容器健康检查的设置,当探测几次无响应后将自动重启该容器,#检查方法有exec、httpGet和tcpSocket,对一个容器只要设置一种方法即可exec:               #通过exec方式来检查Pod内各容器的健康状况command: [String] #exec方式需要指定的命令或脚本httpGet:            #通过httpGet方式来检查Pod中各容器的健康状况,需要指定path、portpath: Stringport: numberhost: Stringscheme: StringhttpHeaders:- name: Stringvalue: String tcpSocket:             #通过tcpSocket检查Pod中各容器的健康状况port: numberinitialDelaySeconds: 0 #容器启动完成后,首次探测的时间(单位为秒)timeoutSeconds: 0      #对容器进行健康检查时探测等待响应的超时时间(单位为秒,默认为1s)periodSeconds: 0       #对容器监控检查的定期探测时间设置(单位为秒),默认10s一次successThreshold: 0failureThreshold: 0securityContext:       #安全配置privileged: falserestartPolicy: [Always|Never|OnFailure]#Pod的重启策略,Always表示不管以何种方式终止#运行,kubelet都将重启;OnFailure表示只有Pod以非0码退出才重启;Never表示不再重启该PodnodeSelector: object     #节点选择,设置nodeSelector表示将该Pod调度到包含这个标签的#节点上,以key:value格式来指定imagePullSecrets:        #拉取镜像时使用的secret名称,以key:secretkey格式指定- name: StringhostNetwork: false       #是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络volumes:                   #在该Pod上定义共享存储卷列表- name: String             #共享存储卷名称emptyDir: {}             #类型为emptyDir的存储卷,与Pod有相同生命周期的一个临时目录,为空值hostPath:                #类型为hostPath的存储卷,将会挂载Pod所在宿主机的目录path: string           #Pod所在宿主机的目录,该目录将在容器中挂载secret:                  #类型为secret的存储卷,在容器内部挂载集群中预定义的secret对象secretName: Stringitems:- key: Stringpath: StringconfigMap:               #类型为configMap的存储卷,挂载预定义的configMap对象到容器内部name: Stringitems:- key: Stringpath: String 
    ``
    

相关文章:

  • aws emr启动standalone的flink集群
  • 使用 Apache Commons Exec 管理外部进程
  • 【计算机网络】——概述(图文并茂)
  • oracle中的INTERVAL函数学习总结
  • 50etf期权上市时间是什么时候?50etf期权对应的标的
  • 2022年全国职业院校技能大赛高职组“信息安全管理与评估”赛项第三阶段任务书
  • GolangFoundation
  • CSS学习笔记目录
  • 安装Lubuntu24.04
  • C# list集合
  • 卷积神经网络-奥特曼识别
  • # 详解 JS 中的事件循环、宏/微任务、Primise对象、定时器函数,以及其在工作中的应用和注意事项
  • Swoole 协程调度机制
  • 构建 VPC 并启动 Web 服务器
  • ADB安装教程
  • 【391天】每日项目总结系列128(2018.03.03)
  • egg(89)--egg之redis的发布和订阅
  • Java基本数据类型之Number
  • Java精华积累:初学者都应该搞懂的问题
  • JSDuck 与 AngularJS 融合技巧
  • JSONP原理
  • Linux快速复制或删除大量小文件
  • Logstash 参考指南(目录)
  • React+TypeScript入门
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 今年的LC3大会没了?
  • 全栈开发——Linux
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 用jquery写贪吃蛇
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • # include “ “ 和 # include < >两者的区别
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • $.ajax,axios,fetch三种ajax请求的区别
  • $.ajax中的eval及dataType
  • (C11) 泛型表达式
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (poj1.3.2)1791(构造法模拟)
  • (定时器/计数器)中断系统(详解与使用)
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (十)T检验-第一部分
  • (算法)Travel Information Center
  • (杂交版)植物大战僵尸
  • (转)Mysql的优化设置
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .mysql secret在哪_MySQL如何使用索引
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .NET gRPC 和RESTful简单对比
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .NET技术成长路线架构图
  • ??javascript里的变量问题
  • @Autowired 与@Resource的区别