pause pod 什么是pod_Kubernetes 自主式Pod清单 干货太多先马住慢慢看

43aa4757781405dfa1933a68f1ac0673.png

在讲资源清单之前,先给大家介绍一下究竟什么是Kubernetes资源?有几种资源?

① · 资源分类:

① · 1 工作负载:pod、rs(ReplicasSet)、deploy(Deployment)、sts(StatefulSet)、ds(DaemonSet)、job、cronjob

① · 2 服务发现及负载均衡:svc(Service)、ing(Ingress)

① · 3 配置与存储:cm(ConfigMap)、Secret、Volume、pv( persistentvolumes )、pvc、sc(StorageClasses)DownwardAPI

① · 4 集群级:ns(Namespace),Node,Role,ClusterRole,RoleBinding,ClusterRoleBinding

① · 5 元数据: HPA,PodTemplate,LimitRange

这么多种分类看完已经晕了,其实每种分类下面还有好多好多字段需要你自己定义 ,今天我们只介绍一种自主式清单 【pod自主式清单】 。

什么是自主式pod?和kubectl run的pod又有什么区别?

我们接触的pod大多数是控制器控制的pod,那么今天讲的是自主式pod(也就是由yaml文件来创建的pod),也就是pod自己去控制自己,防止pod被控制器杀死。(虽然这种pod应用的场景不是很多,但是只要熟悉了pod的清单,再理解其他几种类型的资源就会非常好理解) ② · 1 看看pod清单里面都有哪些字段

fe99a386e626c0b2b4410ddc1cbbbe30.png

想要查看详细信息就使用kubectl explain pod 想要查看下面的子字段的话kubectl explain pod.apiVersion 即可~~ apiVersion kind metadata spec 这四个字段是必须有的,下面就看看一份简单的pod清单应该长什么样

apiVersion: v1        ##版本为v1
kind: Pod               ##资源类型为Pod
metadata:              ## 元数据,下面是需要配置的子字段,这里缩进字符要保持一致
  name: pod-demo      ## pod名
  namespace: default    ##pod所在的名称空间
  labels:                   ##标签-- 下面全用KV格式书写,这里我们给这个pod 打上两个标签  ↓
    app: pod-demo  
    release: bata
spec:           
  containers:              ##容器
  - name: app-container            ##容器名
    image: ikubernetes/myapp:v1     ##镜像地址

现在我们就试试用这个文件创建第一个自主式pod 创建命令 kubectl create -f pod-demo.yaml 删除命令 kubectl delete -f pod-demo.yaml

1a2e770827b08014a6801866c7ccad68.png

这样一个自主式pod就创建好了,但是好像还不够定制化,下面就详细介绍一下自主式pod可以定义那些字段 可定义的字段太多了,这里我总结了大部分常用指标,大家当字典看吧~

spec.nodeSelector <map[string]string>
pod.spec.nodeSelector: #指定对象的调度节点,节点必须存在
pod.spec.restartPolicy <string>
pod.spec.restartPolicy:#容器的重启策略。有三种Always(只有退出就重启),OnFailure(失败退出时不重启),Never(只要退出就不重启),kubelet重新启动的已退出容器将以指数退避延迟(10秒,20秒,40秒......)重新启动,上限为五分钟,并在成功执行十分钟后重置
spec.containers.image.imagePullPolicy  <string>        #镜像的下载策略。有三种:Always(总是去仓库下载) ,Never(从不去仓库下载) , IfNotPresent(如果本地没有就去仓库下载) 
spec.containers.ports:        #容器公开的端口列表。在这里公开端口可以为系统提供关于容器使用的网络连接的额外信息,但主要是提供信息。在这里不指定端口不会阻止该端口被公开。任何监听容器内默认的“0.0.0.0”地址的端口都可以从网络访问
spec.containers.ports.containerPort <integer> -required-    #pod暴露的端口,此端口仅是额外的信息,对端口是否被暴露没有影响
spec.containers.ports.hostPort <integer>   #主机上公开的端口
spec.containers.ports.protocol <string>    #端口的协议
spec.containers.ports.hostIP   <string>    #指定要绑定的主机
spec.containers.command <[]string> #运行的程序,类似于docker中的entrypiont,并且这里的命令不会运行在shell中,如果没有这个字段docker镜像会运行自己entrypiont中的指令
spec.containers.args <[]string>  #向docker镜像中传递参数 如果定义了这个字段,docker镜像中cmd命令不会被执行,如果引用变量使用$(VAR_NAME)格式引用,如果想使用命令引用的的方式,需要使用$$(VAR_NAME)方式来引用 
#关于args和command的官方文档链接:https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/   
spec.containers.volumeMounts 
spec.containers.volumeMounts.name 
spec.containers.volumeMounts.mountPath #可以被容器挂载的存储卷的路径,路径不能包含':' 符号 
spec.containers.volumeMounts.subPath #可以被容器挂载的存储卷的路径,并且不会覆盖挂载点中的文件 
spec.containers.volumeMounts.readOnly #是否只读,默认为false
spec.containers.resources 
spec.containers.resources.limits    #资源限制
spec.containers.resources.limits.cpu  #CPU 上限, 可以短暂超过, 容器也不会被停止 
spec.containers.resources.limits.memory :# 内存上限, 不可以超过; 如果超过, 容器可能会被终止或调度到其他资源充足的机器上 
spec.containers.resources.requests   #资源需求
spec.containers.resources.requests.cpu :# CPU 请求, 也是调度 CPU 资源的依据, 可以超过 
spec.containers.resources.requests.memory : #内存请求, 也是调度内存资源的依据, 可以超过; 但如果超过, 容器可能会在 Node 内存不足时清理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值