Kubernetes之Pod 控制器

定义Pod的常用资源

 pods.spec.containers

- name    <string>   #containers 的名字

  image    <string>  #镜像地址

  imagePullPolicy    <string>  #如果标签是latest  就是Always(总是下载镜像)  IfNotPresent(先看本地是否有此镜像,如果没有就下载) Never (就是使用本地镜像)

  ports    <[]Object>  #是给对象列表  可以暴露多个端口  可以对每个端口的属性定义 例如:(名称(可后期调用)端口号  协议  暴露在的地址上) 暴露端口只是提供额外信息的,不能限制系统是否真的暴露

   - containerPort 容器端口

     hostIP  主机地址(基本不会使用)

     hostPort 节点端口

     name 名称

     protocol  (默认是TCP)

  args  <[]string>   传递参数给command 相当于docker中的CMD

    command    <[]string> 相当于docker中的ENTRYPOINT (参考地址

  • 如果Pod不提供commandargs使用Container,则使用Docker镜像中的cmd或者ENTRYPOINT。

  • 如果Pod提供command但不提供args,则仅使用提供 command的。将忽略Docker镜像中定义EntryPoint和Cmd。

  • 如果Pod中仅提供args,则args将作为参数提供给Docker镜像中EntryPoint
  • 如果提供了commandargs,则Docker镜像中的ENTRYPOINT和CMD都将不会生效,Pod中的args将作为参数给command运行

 标签

key=value

  • key:只能使用 字母 数字  _  -  . (只能以字母数字开头,不能超过63给字符)
  • value: 可以为空 只能使用 字母 数字开头
#显示标签
$ kubectl get pods --show-labels
NAME                     READY     STATUS    RESTARTS   AGE       LABELS
jdk-94bcfc779-fs2cl      1/1       Running   0          8d        pod-template-hash=506797335,workload.user.cattle.io/workloadselector=deployment-default-jdk
mysql-5ffdf958d9-7qdnv   1/1       Running   1          3d        pod-template-hash=1998951485,workload.user.cattle.io/workloadselector=deployment-default-mysql

#-L 显示具有app标签的pod 并打印app标签下的值
$ kubectl get pods --all-namespaces  -L app
NAMESPACE         NAME                                    READY     STATUS        RESTARTS   AGE       APP
cattle-alerting   alertmanager-649c5fc4d7-4hp9q           2/2       Running       0          1d        alertmanager
cattle-system     cattle-cluster-agent-6d7c847588-f6cmt   1/1       Running       2          28d       cattle-cluster-agent
cattle-system     cattle-node-agent-9m2ls                 1/1       Running       2          28d       cattle-agent
cattle-system     cattle-node-agent-9ngfh                 1/1       Running       0          12d       cattle-agent
cattle-system     cattle-node-agent-j862c                 1/1       Running       1          12d       cattle-agent
cattle-system     cattle-node-agent-s8s75                 1/1       Running       1          12d       cattle-agent

#-l 过滤那些pod具有app标签

$ kubectl get pods --all-namespaces  -l app
NAMESPACE         NAME                                    READY     STATUS    RESTARTS   AGE
cattle-alerting   alertmanager-649c5fc4d7-4hp9q           2/2       Running   0          1d
cattle-system     cattle-cluster-agent-6d7c847588-f6cmt   1/1       Running   2          28d
cattle-system     cattle-node-agent-9m2ls                 1/1       Running   2          28d
cattle-system     cattle-node-agent-9ngfh                 1/1       Running   0          12d

#打标签
$  kubectl label pod jdk-94bcfc779-fs2cl app=dev

#修改标签 --overwrite
$ kubectl label pod jdk-94bcfc779-fs2cl app=test --overwrite

标签选择器

  • 等值关系标签选择器:=, == , !=  (kubectl get pods -l app=test,app=dev)
  • 集合关系标签选择器: KEY in (v1,v2,v3), KEY notin (v1,v2,v3)   !KEY (kubectl get pods -l "app in (test,dev)")

许多资源支持内嵌字段

  • matchLabels: 直接给定建值
  • matchExpressions: 基于给定的表达式来定义使用标签选择器,{key:"KEY",operator:"OPERATOR",values:[V1,V2,....]}
  • 操作符: in notin:Values字段的值必须是非空列表  Exists NotExists:  Values字段的值必须是空列表

节点选择器

nodeSelector    <object>

元数据中的annotations 资源注解

annotations    <object>  与labels不同的是,他不能挑选资源对象,仅用于为对象提供元数据

原文地址:https://www.cnblogs.com/xzkzzz/p/9519489.html