kubernetes yaml 文件

1.基本用法

apiVersion: v1
kind: Pod
#创建的资源类型可以是,Deployment、Job、Ingress、Service等
metadata:
#包含Pod的一些meta信息,比如名称、namespace、标签等信息
  name: ng1
  #Podname
  labels:
  #标签
    app: web
spec:
  containers:
    - name: ng1
      #容器name
      image:  hub.c.163.com/library/nginx
      #镜像拉取地址
      imagePullPolicy: IfNotPresent
      #镜像拉取策略,Always,(无论本地是否有每次都拉取) Never,(每次都不拉取,即使本地没有也不拉取) IfNotPresent(本地有就用,没有就去拉)
      ports:
      #对外开放端口
        - containerPort: 80

2.调度策略

节点选择器: nodeSelector、nodeName
基于node_name调度

apiVersion: v1
kind: Pod
metadata:
  name: ng2
spec:
  nodeName: cs25
  #指定调度到"cs25" node节点上
  containers:
    - name: ng2
      image:  hub.c.163.com/library/nginx

基于node标签来调度
kubectl label nodes cs25 disk=ssd
#给节点cs25 添加标签

apiVersion: v1
kind: Pod
metadata:
  name: ng2
spec:
  nodeSelector:
    disk: ssd
    #表示要只有node节点上有"disk=ssd",才能被调度上去
  containers:
    - name: ng2
      image:  hub.c.163.com/library/nginx

节点亲和性调度: nodeAffinity

apiVersion: v1
kind: Pod
metadata:
  name: ng2
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      #requiredDuringSchedulingIgnoredDuringExecution 硬亲和性 必须满足亲和性,满足不调用
      #preferredDuringSchedulingIgnoredDuringExecution 软亲和性 能满足最好,不满足也没关系。
        nodeSelectorTerms:
        - matchExpressions:
          - key: disk
            operator: In
            #表示上面那个字段必须包含下面两个值, 还可以换成"NotIn"取反
            values:
            - jx
            - ssd
      #表示 只能调度到node有"disk=jx" 或"node=ssd"
  containers:
    - name: ng2

POD调度 podAffinity 和 podAntiAffinity

apiVersion: v1
kind: Pod
metadata:
  name: ng2
  labels:
    app: nginx
spec:
  containers:
    - name: ng2
      image:  hub.c.163.com/library/nginx
---
apiVersion: v1
kind: Pod
metadata:
  name: ng3
spec:
  containers:
    - name: ng3
      image:  hub.c.163.com/library/nginx
  affinity:
    podAntiAffinity:
    #反亲和,表示满足条件的,让两个主机不在同一台node主机上运行,换成"podAffinity:"功能相反
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchExpressions:
          - {key: app, operator: In, values: ["nginx"]}
        topologyKey: kubernetes.io/hostname

labelSelector : 选择跟那组Pod亲和
namespaces : 选择哪个命名空间
topologyKey : 指定节点上的哪个键
假如在反亲和场景"topologyKey: type" 这个node标签所有主机都有,则第二台容器无法被调度到任何主机

3.污点容忍调度

kubectl taint nodes cs25 key=value:NoSchedule
NoSchedule:仅影响调度过程,对现存的Pod对象不产生影响;
NoExecute:既影响调度过程,也影响显著的Pod对象;不容忍的Pod对象将被驱逐
PreferNoSchedule: 表示尽量不调度

创建污点
kubectl taint node cs25 rongren=true:NoSchedule
#表示在cs25节点上创建一个 rongren的键 键值为"true",调度策略为NoSchedule
kubectl taint node cs25 rongren-
#删除污点,指定键名加"-"即可

apiVersion: v1
kind: Pod
metadata:
  name: ng6
spec:
  containers:
    - name: ng6
      image:  nginx
  tolerations:
  #设置容忍性
  - key: "rongren"
    operator: "Equal"
    #如果操作符为Exists,那么value属性可省略,表示key这个存在即通过,如果不指定operator,则默认为Equal,value一定要和设置的值相等,否则无法通过
    value: "true"
    effect: "NoSchedule"
  #意思是这个Pod要容忍的有污点的Node的key是”rongren“ Equal true,效果是NoSchedule,
  #tolerations属性下各值必须使用引号,容忍的值都是设置Node的taints时给的值。

如果在设置node的Taints(污点)之前,就已经运行了一些Pod,那么这些Pod是否还能继续在此Node上运行? 这就要看设置Taints污点时的effect(效果)了。

    如果effect的值是NoSchedule或PreferNoSchedule,那么已运行的Pod仍然可以运行,只是新Pod(如果没有容忍)不会再往上调度。

   而如果effect的值是NoExecute,那么此Node上正在运行的Pod,只要没有容忍的,立刻被驱逐。

   虽然是立刻被驱逐,但是K8S为了彰显人性化,又给具有NoExecute效果的污点, 在容忍属性中有一个可选的

      tolerationSeconds字段,用来设置这些Pod还可以在这个Node之上运行多久,给它们一点宽限的时间,到时间才驱逐。

   如果是以Pod来启动的,那么Pod被驱逐后, 将不会再被运行,就等于把它删除了。

   如果是deployment/rc,那么删除的pod会再其它节点运行。

   如果是DaemonSet在此Node上启动的Pod,那么也不会再被运行,直到Node上的NoExecute污被去除或者Pod容忍。

原文地址:https://blog.51cto.com/13620944/2459385

时间: 2024-10-07 18:13:44

kubernetes yaml 文件的相关文章

Kubernetes YAML 文件全字段详解

Kubernetes YAML 文件全字段详解 Deployment yaml 其中主要参数都在podTemplate 中,DaemonSet StatefulSet 中的pod部分一样. apiVersion: v1 kind: Deployment metadata: name: <deploy-name> namespace: <ns-name> labels: <key>: <value> spec: replicas: 2 selector: ma

Kubernetes之yaml文件详解-v1.15.x

Kubernetes之yaml文件详解 K8S 创建资源的方式 K8S有两种创建资源的方式:kubectl 命令和 yaml 配置文件. kubectl命令行:最为简单,一条命令就OK,但缺点也很明显,你并不知道这条命令背后到底做了哪些事!yaml配置文件:提供了一种让你知其然更知其所以然的方式.优势如下: 完整性:配置文件描述了一个资源的完整状态,可以很清楚地知道一个资源的创建背后究竟做了哪些事:灵活性:配置文件可以创建比命令行更复杂的结构:可维护性:配置文件提供了创建资源对象的模板,能够重复

kubernetes实战篇之helm示例yaml文件文件详细介绍

系列目录 前面完整示例里,我们主要讲解helm打包,部署,升级,回退等功能,关于这里面的文件只是简单介绍,这一节我们详细介绍一下这里面的文件,以方便我们参照创建自己的helm chart. Helm Chart 结构 Chart 目录结构 mychart/ Chart.yaml # Yaml文件,用于描述Chart的基本信息,包括名称版本等 LICENSE # [可选] 协议 README.md # [可选] 当前Chart的介绍 values.yaml # Chart的默认配置文件 requi

python解析yaml文件

YAML语法规则: http://www.ibm.com/developerworks/cn/xml/x-cn-yamlintro/ 下载PyYAML: http://www.yaml.org/ 解压安装: python setup.py install 1.新建test.yaml文件,内容如下: name: Tom Smith age: 37 spouse: name: Jane Smith age: 25 children: - name: Jimmy Smith age: 15 - nam

Python读取Yaml文件

近期看到好多使用Yaml文件做为配置文件或者数据文件的工程,随即也研究了下,发现Yaml有几个优点:可读性好.和脚本语言的交互性好(确实非常好).使用实现语言的数据类型.有一个一致的数据模型.易于实现. 既然有这么多好处,为什么不用呢,随后开始研究在Python中怎么读取Yaml文件,下面我们来看下: 1.首先需要下载Python的yaml库PyYAML,下载地址:http://pyyaml.org/,安装过程就省略...... 2.建立一个.py文件 3.import yaml 4.f = o

OPENCV(3) &mdash;&mdash; 对XML和YAML文件实现I/O 操作

XML\YAML文件在OpenCV中的数据结构为FileStorage string filename = "I.xml"; FileStorage fs(filename, FileStorage::WRITE); \\... fs.open(filename, FileStorage::READ); fs.release();   写入文件使用  <<  运算符 ,读取文件,使用 >> 运算符 fs << "iterationNr&qu

利用opencv的FileStorage类实现XML/YAML文件的读写

FileStorage是opencv2.0以后专门用来读写XML/YAML文件的类,标准的C++实现.利用好XML文件可以极大地方便我们对中间数据的处理. 官方文档: (1) http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/core/file_input_output_with_xml_yml/file_input_output_with_xml_yml.html#fileinputoutputxmlyaml (2) htt

day5模块学习--yaml文件处理

yaml文件处理(http://pyyaml.org/wiki/PyYAMLDocumentation)     摘要: 本文讲的是yaml在python上的使用教程详解, YAML是一种容易人类阅读.适合表示程序语言的数据结构.可用于不同程序间交换数据.支持泛型工具.支持串行处理.丰富的表达能力和可扩展性.易于使用的语言.YAML利用缩进或者是explicit indicatior(如{})来表示属. YAML是一种容易人类阅读.适合表示程序语言的数据结构.可用于不同程序间交换数据.支持泛型工

对XML和YAML文件实现I/O操作

1.文件的打开关闭 XML\YAML文件在OpenCV中的数据结构为FileStorage,打开操作例如: string filename = "I.xml"; FileStorage fs(filename, FileStorage::WRITE); \\... fs.open(filename, FileStorage::READ); 文件关闭操作会在FileStorage结构销毁时自动进行,但也可调用如下函数实现 fs.release(); 2.文本和数字的输入和输出 写入文件使