Kubernetes之Pod控制器应用进阶

目录

  • Kubernetes之Pod控制器应用进阶

    • Pod控制器下spec常用字段
    • 标签(Labels)和标签选择器(LabelSelector)
      • 标签
      • 标签选择器

Kubernetes之Pod控制器应用进阶

Pod控制器下spec常用字段

#containers
[[email protected] ~]# kubectl explain pods.spec.containers.
name <string> -required- #容器名,必选字段
image <string>   #镜像,默认是dockerhub仓库,可以客户自己定义仓库
imagePullPolicy <string> #镜像获取策略,Always(总是下载),IfNotPresent(如果本地不存在就下载),Never(从不下载,使用本地镜像),默认IfNotPresent,如果镜像标签是latest,默认是Always
ports <[]Object> # 对象列表,可以暴漏多个端口,也可以对每个端口的属性进行单独定义,此处暴漏端口只是提供额外信息,不能限制系统是否真的暴漏
    - containerPort <integer>#容器端口
    hostIP   <string> #主机IP(一般不需要)
    hostPort <integer> #节点端口
    name <string> #名称
    protocol <string> #使用协议,默认是TCP
args <[]string> #为command传递参数,相当于docker的CMD

command <[]string>  #运行的命令 相当于docker中的ENTRYPOINT
Description docker field name kubernetes field name
the command run by container entrypoint command
the arguments passed to the command Cmd args

说明:
1、如果pod不提供command和args则默认使用docker镜像中的entrypoint和Cmd;
2、如果pod只提供command但是不提供args,则只使用command,docker镜像中的entrypoint和cmd都会被忽略;
3、如果pod不提供command但是只提供args,则使用docker镜像中默认的entrypoint,并且把pod中定义的args当作参数传给entrypoint,docker镜像中的cmd被忽略;
4、如果pod既提供command又提供args,那么就直接运行command和args,docker镜像中的entrypoint和cmd都被忽略。

标签(Labels)和标签选择器(LabelSelector)

标签

  • 使用标签把资源分类分组,可以方便管理资源
  • 所谓标签就是资源附加的键值对,key:只能使用,字母,数字 _ - . (只能以字母数字开头,不能超过63给字符),value: 可以为空,只能使用,字母,数字开头
  • 每一个标签都可以被标签选择器进行匹配度检查,从而完成资源挑选
  • 一个资源对象可有多个标签,同一个标签也可以对应多个资源
  • 可以在创建资源的时候配置标签,也可以使用kubectl label进行后期打标

显示所有pod的所有标签

[[email protected] ~]# kubectl get pods --show-labels
NAME                            READY   STATUS    RESTARTS   AGE   LABELS
client-f5cdb799f-pklmc          1/1     Running   0          19h   pod-template-hash=f5cdb799f,run=client
myapp-9b4987d5-47sjj            1/1     Running   0          19h   pod-template-hash=9b4987d5,run=myapp
myapp-9b4987d5-684q9            1/1     Running   0          19h   pod-template-hash=9b4987d5,run=myapp
myapp-9b4987d5-djdr9            1/1     Running   0          19h   pod-template-hash=9b4987d5,run=myapp
nginx-deploy-84cbfc56b6-tcssz   1/1     Running   0          23h   pod-template-hash=84cbfc56b6,run=nginx-deploy
pod-demo                        2/2     Running   1          16h   app=myapp,tier=frontend

筛选包含app标签的pod

[[email protected] ~]# kubectl get pods -l app
NAME       READY   STATUS    RESTARTS   AGE
pod-demo   2/2     Running   2          17h

显示所有pod标签为app的值,没有则显示为空

[[email protected] ~]# kubectl get pods -L app
NAME                            READY   STATUS    RESTARTS   AGE   APP
client-f5cdb799f-pklmc          1/1     Running   0          20h
myapp-9b4987d5-47sjj            1/1     Running   0          20h
myapp-9b4987d5-684q9            1/1     Running   0          20h
myapp-9b4987d5-djdr9            1/1     Running   0          20h
nginx-deploy-84cbfc56b6-tcssz   1/1     Running   0          24h
pod-demo                        2/2     Running   2          17h   myapp

使用kubectl label给资源打标签

#语法
  kubectl label [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N
[--resource-version=version] [options]
[[email protected] manifests]# kubectl label pod pod-demo release=canary
pod/pod-demo labeled

[[email protected] manifests]# kubectl get pods --show-labels
NAME                            READY   STATUS    RESTARTS   AGE   LABELS
client-f5cdb799f-pklmc          1/1     Running   0          20h   pod-template-hash=f5cdb799f,run=client
myapp-9b4987d5-47sjj            1/1     Running   0          20h   pod-template-hash=9b4987d5,run=myapp
myapp-9b4987d5-684q9            1/1     Running   0          20h   pod-template-hash=9b4987d5,run=myapp
myapp-9b4987d5-djdr9            1/1     Running   0          20h   pod-template-hash=9b4987d5,run=myapp
nginx-deploy-84cbfc56b6-tcssz   1/1     Running   0          24h   pod-template-hash=84cbfc56b6,run=nginx-deploy
pod-demo                        2/2     Running   2          17h   app=myapp,release=canary,tier=frontends

筛选同时包含多个标签的pod

[[email protected] manifests]# kubectl get pods -l release,app
NAME       READY   STATUS    RESTARTS   AGE
pod-demo   2/2     Running   2          17h

标签选择器

  • 等值关系:=,==,!=
  • 集合关系:
  • KEY in (VALUE1,VALUE2...)
  • KEY notin (VALUE1,VALUE2...)
  • KEY (表示存在KEY)
  • !KEY (表示不存在KEY)

许多资源支持内嵌字段定义其使用的标签选择器:

  • matchLabels: 直接给定键值 类似等值关系
  • matchExpressions: 基于给定的表达式来定义使用标签选择器,{key: "KEY", opeartor: "OPERATOR", values: [VAL1,VAL2...]}
    意思是给定的key键对values的值做基于operator表达式的比较,是否满足条件。其中 operator常用的有 In NotIn Exits NotExits,

    • In NotIn: value必须是非空列表,
    • Exits NotExits: values必须是空列表
  • annotations:与label不同的地方:它不能用于挑选资源对象,仅用于为对象提供"元数据",没有键值长度限制。

    节点标签选择器

    在添加资源时,可以让资源对节点有倾向性。

[[email protected] ~]# kubectl explain pods.spec.
 nodeName     <string> #指定node名称
 nodeSelector <map[string]string> #使用标签选择器

给node01打标签disktype=ssd,然后运行pod-demo使用节点标签选择器,使之运行在node01上

#给node01打标签
[[email protected] manifests]# kubectl label node node01 disktype=ssd
node/node01 labeled
[[email protected] manifests]# kubectl get nodes --show-labels
NAME     STATUS   ROLES    AGE   VERSION   LABELS
master   Ready    master   43h   v1.13.1   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=master,node-role.kubernetes.io/master=
node01   Ready    <none>   42h   v1.13.1   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,disktype=ssd,kubernetes.io/hostname=node01
node02   Ready    <none>   42h   v1.13.1   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=node02

#编辑pod-demo.yaml
[[email protected] manifests]# vim pod-demo_1.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-demo
  namespace: default
  #labels: {"app": "myapp","tier": "frontend"} 和下面效果一样,建议使用下面格式
  labels:
    app: myapp
    tier: frontend
spec:
  containers:
  - name: myapp
    image: ikubernetes/myapp:v1
  - name: busybox
    image: busybox
    command:
    - "/bin/sh"
    - "-c"
    - "sleep 3600"
  nodeSelector:
    disktype: ssd

#重新部署pod-demo,需提前删除原pod-demo
[[email protected] manifests]# kubectl delete -f pod-demo.yaml
pod "pod-demo" deleted
[[email protected] manifests]# kubectl apply -f pod-demo_1.yaml
pod/pod-demo created

#验证结果
[[email protected] manifests]# kubectl get pods -o wide
NAME                            READY   STATUS    RESTARTS   AGE   IP            NODE     NOMINATED NODE   READINESS GATES
client-f5cdb799f-pklmc          1/1     Running   0          20h   10.244.2.7    node02   <none>           <none>
myapp-9b4987d5-47sjj            1/1     Running   0          20h   10.244.1.13   node01   <none>           <none>
myapp-9b4987d5-684q9            1/1     Running   0          20h   10.244.1.12   node01   <none>           <none>
myapp-9b4987d5-djdr9            1/1     Running   0          20h   10.244.2.13   node02   <none>           <none>
nginx-deploy-84cbfc56b6-tcssz   1/1     Running   0          24h   10.244.2.4    node02   <none>           <none>
pod-demo                        2/2     Running   0          10s   10.244.1.14   node01   <none>           <none>

增加annotations注解,使用kubectl describe查看

[[email protected] manifests]# cat pod-demo_1.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-demo
  namespace: default
  labels:
    app: myapp
    tier: frontend
  annotations:
    white.io/created-by: "cluster white"
spec:
  containers:
  - name: myapp
    image: ikubernetes/myapp:v1
  - name: busybox
    image: busybox
    command:
    - "/bin/sh"
    - "-c"
    - "sleep 3600"
  nodeSelector:
    disktype: ssd
#需要使用kubectl describe pods pod-demo来查看才看的到
[[email protected] manifests]# kubectl describe pods pod-demo
Name:               pod-demo
Namespace:          default
Priority:           0
PriorityClassName:  <none>
Node:               node01/10.0.0.11
Start Time:         Fri, 29 Mar 2019 11:30:51 +0800
Labels:             app=myapp
                    tier=frontend
Annotations:        white.io/created-by: cluster white
Status:             Running
IP:                 10.244.1.15
... ...
参考资料

https://www.cnblogs.com/linuxk
马永亮. Kubernetes进阶实战 (云计算与虚拟化技术丛书)
Kubernetes-handbook-jimmysong-20181218

原文地址:https://www.cnblogs.com/wlbl/p/10652884.html

时间: 2024-08-30 12:33:17

Kubernetes之Pod控制器应用进阶的相关文章

Kubernetes之Pod控制器,ReplicaSet,Deployment,DaemonSet

目录 Kubernetes之Pod控制器,ReplicaSet,Deployment,DaemonSet ReplicaSet Deployment控制器 创建Deployment Deployment更新 Deployment扩容 金丝雀发布 Deployment回滚 DaemonSet 定义 DaemonSet演示 redis-filebeat DaemonSet的滚动更新 Kubernetes之Pod控制器,ReplicaSet,Deployment,DaemonSet Kubernete

Kubernetes/7.Pod控制器-Deployment

Pod控制器-Deployment 本章节开始,将对控制器逐个进行讲解和分析,我们先讲解最基础且最常用的控制器:Deployment! 控制器对象的分类 What is Deployment? Deployment的更新机制 ReplicaSet 命令补充 Deployment-demo 备注 1.控制器对象的分类 1.守护进程型 1.无状态应用:非系统级应用(Nginx等) 推荐使用:Deployment,ReplicaSet 2.无状态应用:系统级应用 应用场景:日志和监控收集客户端:场景就

Kubernetes/8.Pod控制器-DaemonSet

Pod控制器-DaemonSet 本章节给你带来第二个控制器:DaemonSet的讲解.你将了解到:什么是DaemonSet,以及他的配置实战,最后我还引出了污点和容忍度的专有名词,如果你已经有了一定的基础,可以选择性地直接去阅读该章节(看个人). What is DaemonSet? 命令补充 实战配置 知识点补充 备注 1.What is DaemonSet? DaemonSet是一个确保每个符合规则的node节点有且仅有一个Pod的控制器.你要注意以下两点: 1.新节点加入集群,也会新增一

Kubernetes之Pod 控制器

定义Pod的常用资源 pods.spec.containers - name    <string>   #containers 的名字 image    <string>  #镜像地址 imagePullPolicy    <string>  #如果标签是latest  就是Always(总是下载镜像)  IfNotPresent(先看本地是否有此镜像,如果没有就下载) Never (就是使用本地镜像) ports    <[]Object>  #是给对象

Kubernetes Pod 控制器

在机器人技术和自动化中,控制环是一个控制系统状态的不终止的循环 这是一个控制环的例子:"房间里的温度自动调节器"当你设置了温度,告诉了温度自动调节器你的"期望状态",房间的实际温度是"当前状态".通过对设备的开关控制,温度自动调节器让其当前状态无限接近于期望状态.控制器通过 k8s的apiserver 去监控集群的公共状态,并致力于将当前状态转变为所期望的状态. 中文参考官方:怎么描述Kubernetes架构控制器的 kubernetes 之Po

Kubernetes之标签与Pod控制器详解

一.标签 标签的主要作用:解决同类型的资源对象越来越多,为了更好的管理,按照标签分组: 常用的标签分类:release(版本):stable(稳定版).canary(金丝雀版本.可以理解为测试版).beta(测试版)environment(环境变量):dev(开发).qa(测试).production(生产)application(应用):ui.as(应用软件).pc.sctier(架构层级):frontend(前端).backend(后端).cache(缓存.隐藏)partition(分区):

Kubernetes系列之Kubernetes Pod控制器

#一.常见Pod控制器及含义 ###1. ReplicaSets ReplicaSet是下一代复本控制器.ReplicaSet和 Replication Controller之间的唯一区别是现在的选择器支持.Replication Controller只支持基于等式的selector(env=dev或environment!=qa),但ReplicaSet还支持新的,基于集合的selector(version in (v1.0, v2.0)或env notin (dev, qa)).大多数kub

Kubernetes之Pod的生命周期

目录 Kubernetes之Pod的生命周期 理解Pod Pod内如何管理多个容器 Pod的使用 其他替代选择 Pod的持久性 Pod的终止 Init容器 Pause容器 Pod的生命周期 Pod的phase Pod的状态 容器探针 存活性探测 livenessProbe 就绪性探测 readnessProbe livenessProbe和readinessProbe使用场景 lifecycle Kubernetes之Pod的生命周期 理解Pod Pod是kubernetes中你可以创建和部署的

Kubernetes之StatefulSet控制器

目录 Kubernetes之StatefulSet控制器 简介 StatefulSet使用 滚动更新 扩展伸缩 更新策略和版本升级 Kubernetes之StatefulSet控制器 简介 StatefulSet 作为 Controller 为 Pod 提供唯?的标识. 它可以保证部署和 scale 的顺序. StatefulSet是为了解决有状态服务的问题(对应Deployments和ReplicaSets是为?状态服务?设计) , 其应?场景包括: 稳定的持久化存储, 即Pod重新调度后还是