Pod

Pod 的基本操作

创建pod

1. 先定义模板文件

examplepod.yaml

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表示使用Kubernetes API的稳定版本。
  • kind表示要创建的资源对象,这里使用关键字Pod。
  • metadata表示该资源对象的元数据。一个资源对象可拥有多个元数据,其中一项是name,它表示当前资源的名称。
  • spec表示该资源对象的具体设置。其中containers表示容器的集合,这里只设置了一个容器,该容器的属性如下。
    • name:要创建的谷器名称。
    • image:容器的镜像地址。
    • imagePullPolicy:镜像的下载策略,支持3种imagePullPolicy,如下所示。
      • Always:不管镜像是否存在都会进行一次拉取。
      • Never:不管镜像是否存在都不会进行拉取。
      • ifNotPresent:只有镜像不存在时,才会进行拉取
    • command:容器的启动命令列表(不配置的话,使用镜像内部的命令)。
    • args:启动参数列表(在本例中是输出文字“HelloKubernetes !”并休眠3600s ) 。

运行以下命令,通过模板创建Pod。

kubectl apply -f  examplepod.yaml

创建成功后,可通过以下命令查询当前运行的所有Pod.

kubectl get pod

查询pod

Pod创建后,最常用的功能就是查询。可以用以下命令查询Pod的状态。

kubectl get pod {pod名称}

还可以在查询命令中带上参数-w,以对Pod状态进行持续监控。只要Pod发生了变化,就会在控制台中输出相应信息。命令如下。

kubectl get pod {Pod名称} -w

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

kubectl get pod {Pod名称} -o wide

get命令除了可以显示简要的运行信息外,还可以输出完整信息。它支持多种格式的输出,如可以用yaml和Json方式输出,命令如下。

kubectl get pod examplepod --output yaml
kubectl get pod examplepod --output json

一般情况下,如果要查询Pod更详细的信息(包括状态、生命周期和执行情况等),除了将其输出为yaml或json格式,还可以用describe命令查看详情,格式如下。

kubectl describe pods {pod名称}

该命令会输出比较全面的信息,包括资源的基本信息、容器信息、准备情况、存储卷信息及相关的事件列表。在资源部署时如果遇到问题,可以使用此命令查看详情,分析部署错误的原因。

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

kubectl logs {pod名称}

修改pod

可以用replace命令来修改原先设置的Pod属性,命令格式如下。

kubectl replace -f { pod模板路径}

修改之前示例中定义的Pod,使它输出“Hello Kubernetesreplaced!”。先打开examplepod.yml文件。

apiVersion: v1
kind: Pod
metadata:name: examplepod
spec:containers:- name: examplepod-containerimage: busyboximagePullPolicy: IfNotPresentcommand: ['sh','-c']args: ['echo "Hello Kubernetes replace"; sleep 3600']

提示:Pod有很多属性无法修改,比如containers的image属性,spec下的activeDeadline seconds、tolerations属性等。如果一定要修改,则需要加上–force参数,相当于重新创建Pod,命令如下。

kubectl replace -f {pod模板路径}―-force

删除pod

Pod的删除非常简单,只要执行以下命令即可。

kubectl delete pod { Pod名称}

另外,还可以基于模板文件删除资源,如以下命令所示。

kubectl delete -f{模板文件名称}

Pod 模板详解

在之前创建Pod的示例中,我们使用了基本的Pod模板来定义资源,但Pod模板包含的内容不仅只有示例中的那些,还可以定义非常丰富的内容。
以下是Pod模板的主要内容及对应说明。目前只需要大致了解有这些属性就足够了,不需要把每个都完全理解,在以后的章节中将逐一进行演示。

apiversion : v1 #版本,必填,v1代表稳定版本
kind: pod #类型,必填,Pod
metadata: #元数据,表示资源的标识信息name: string #元数据,必填,Pod的名字namespace: string #元数据,Pod的命名空间labels: #元数据,标签列表- key: value #元数据,可定义多个标签的键/值对annotations: #元数据,自定义注解列表- key: value #元数据,可定义多个标签的键/值对
spec: 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: strina #内存限制,单位可以为 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: stringtcpsocket :#通过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

如果要了解一个正在运行的Pod的配置,可以通过以下命令来获取。

kubectl get pod {pod名称}-o yaml

pod 与容器

Pod创建容器的方式

之前描述的Pod模板和Docker-Compose 配置非常相似,但Pod模板涉及其他部署参数的设定,相对更复杂。先排除与容器无关的配置参数,在模板的Containers部分,指明容器的部署方式。在部署过程中,会转换成对应的容器运行时( container runtime)命令,例如,对于Docker,会转换成类似于Docker run的命令。

在最开始的例子中,yml文件内容如下。

apiVersion: v1
kind: Pod
metadata:name: examplepod
spec:containers:- name: examplepod-containerimage: busyboximagePullPolicy: IfNotPresentcommand: ['sh','-c']args: ['echo"Hello Kubernetes"; sleep 3600']

在Kubernetes将Pod调度到某个节点后,kubelet会调用容器运行时(本例中为Docker),执行如下所示的命令。

docker run --name examplepod-container busybox sh -c 'echo"Hello Kubernetes !"; sleep 3600'

提示: command和args设置会分别覆盖原Docker镜像中定义自EntryPoint 与CMD,在使用时请务必注意以下规则。

  • 如果没有在模板中提供command或args,则使用Docker镜像中定义的默认值运行。
  • 如果在模板中提供了command,但未提供args,则仅使用提供的command。Docker镜像中定义的默认的EntryPoint和默认的命令都将被忽略。
  • 如果只提供了args,则Docker镜像中定义的默认的EntryPoint将与所提供的args组合到一起运行。
  • 如果同时提供了command和args,Docker镜像中定义的默认的EntryPoint和命令都将被忽略。所提供的command和args将会组合到一起运行。

同样,在Pod模板的Container设置中的各项信息,在运行时都会转换为类似的容器命令来执行。Container的基础信息的设置如下所示。

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 #环境变量值

容器中关键的基本信息(如name、image、imagePullPolicy、command、args)在之前的示例中已经演示并讲解过,接下来将演示另外3组——volumeMounts、ports、env。

1. volumesMounts 配置信息

容器运行时通常会提供一些机制来将存储附加到容器上。例如,Docker有两种容器机制:一种是数据卷( data volume) ,它可以将容器内的文件或目录映射到宿主机上的文件或目录中,其命令格式为$docker run -v/{主机的目录}

k8s(二)——— pod 详解相关推荐

  1. 玩转k8s:Pod详解

    1 Pod详解 1.1 Pod介绍 1.1.1 Pod结构 每个Pod中都可以包含一个或者多个容器,这些容器可以分为两类: 用户程序所在的容器,数量可多可少 Pause容器,这是每个Pod都会有的一个 ...

  2. k8s之Pod详解(五)【Kubernetes(K8S) 入门进阶实战完整教程,黑马程序员K8S全套教程(基础+高级)】

    参考于Kubernetes(K8S) 入门进阶实战完整教程,黑马程序员K8S全套教程(基础+高级) Pod Pod的结构 每个Pod中都可以包含一个或者多个容器 这些容器可以分为两类: 用户自定义用的 ...

  3. 【k8s】八、Pod详解(二)

    目录 前言 Pod网络通讯方式 不同情况下的网络通讯方式 同一个Pod内部通讯 Pod间的通讯 Pod 与 Service之间的通讯 Pod与外网通讯 Pod到外网 外网到Pod CNI 什么是CNI ...

  4. 学习笔记之-Kubernetes(K8S)介绍,集群环境搭建,Pod详解,Pod控制器详解,Service详解,数据存储,安全认证,DashBoard

    笔记来源于观看黑马程序员Kubernetes(K8S)教程 第一章 kubernetes介绍 应用部署方式演变 在部署应用程序的方式上,主要经历了三个时代: 传统部署:互联网早期,会直接将应用程序部署 ...

  5. kubernetes—Pod详解

    Pod详解 前言 Pod介绍 Pod结构 Pod定义 pod的几种基础配置 概述 基本配置(name,image) 镜像拉取(imagePullPolicy) 启动命令(command和args) 环 ...

  6. Kuberneters(2)- Pod详解

    第四章 实战入门 本章节将介绍如何在kubernetes集群中部署一个nginx服务,并且能够对其进行访问. Namespace ​ Namespace是kubernetes系统中的一种非常重要资源, ...

  7. [深入浅出Cocoa]之消息(二)-详解动态方法决议(Dynamic Method Resolution)

    [深入浅出Cocoa]之消息(二)-详解动态方法决议(Dynamic Method Resolution) 罗朝辉 (http://www.cnblogs.com/kesalin/) 本文遵循&quo ...

  8. ViewPager 详解(二)---详解四大函数

    前言:上篇中我们讲解了如何快速实现了一个滑动页面,但问题在于,PageAdapter必须要重写的四个函数,它们都各有什么意义,在上节的函数内部为什么要这么实现,下面我们就结合Android的API说明 ...

  9. RxJS 系列之二 - Observable 详解

    查看新版教程,请访问前端修仙之路 RxJS 系列目录 RxJS 系列之一 - Functional Programming 简介 RxJS 系列之二 - Observable 详解 (本文) RxJS ...

  10. CORS跨域资源共享(二):详解Spring MVC对CORS支持的相关类和API【享学Spring MVC】

    每篇一句 重构一时爽,一直重构一直爽.但出了问题火葬场 前言 上篇文章通过我模拟的跨域请求实例和结果分析,相信小伙伴们都已经80%的掌握了CORS到底是怎么一回事以及如何使用它.由于Java语言中的w ...

最新文章

  1. 【组队学习】【32期】动手学数据分析
  2. linux还原备份的内核镜像,使用Mondo制作Linux镜像(ISO)、还原系统图文详解
  3. 推荐:微服务架构的深度解析!
  4. echarts 样式 配置 vue
  5. Zxing 扫描码的ios简化版搭建过程
  6. iis启动服务时提示在本地计算机 无法启动iis admin服务,无法启动IIS Express Web服务器...
  7. eclipse 主题设置
  8. AI(Adobe illustrator)修改所有字体
  9. 最高响应比优先算法(HRRF)及例题详解
  10. 汽车故障诊断方法及注意事项
  11. python中的snip用法_--snip--总是报错,找了好久不知道问题出在哪,望大佬求解(python-pygame)...
  12. 安装安全防护软件有助于保护计算机不受侵害,安装安全防护软件有助于保护计算机不受病毒侵害。...
  13. 旅游业休克:“云旅游+直播买货”急救
  14. Win10系统邮件添加QQ邮件账户
  15. mysql查询每行重复_MySQL查询返回重复的行
  16. 破解无线路由器,获得微信等上网信息
  17. util.Date和sql.Date之间的转换
  18. html查找器如何卸载,租号器要求卸载影子系统-怎么完全删除影子系统
  19. tcam开发C语言,TCAM
  20. 怎么打开jsp文件目录_它怎么能这么快?

热门文章

  1. 计算机网络定义简述。
  2. MFC中CFileDialog用法
  3. 钢琴学习:B站:艺起钢琴:《即兴伴奏怎么加花?学钢琴必不可少的一步》
  4. busybox配置telnetd
  5. 【智慧养殖】畜禽养殖环境智能监控系统
  6. labelme: 用于将黑红色mask标签图转为黑白的mask标签
  7. 操作系统:软盘与硬盘
  8. 游戏设计总结-1.从立项开始
  9. 个体户没对公银行账号怎么开通微信支付?
  10. 传统的寻呼机(俗称BB机)