zoukankan      html  css  js  c++  java
  • Pod资源对象

    简介

      Pod 是 Kubernetes 系统的基础但是远, 是自愿对象模型中可由用户创建或者部署调度的最小单位。

      Pod 对象是一组容器的集合,这些容器共享 network 、UTS 及 IPC名称空间,具有相同的域名, 主机名, 和网络接口,可通过 IPC 直接进行通信。但分别拥有各自独立的 MNT, USR 和 PID 名称空间。

    Pod 的管理

    快速生成 yaml 文件

    1. kubectl run nginx --image=nginx --dry-run -o yaml

    查看帮助

    kubectl explain pods.metadata

    pod中镜像下载策略

         kubernetes 中支持自定义镜像文件的获取策略,

    字段: imagePullPolicy
        值: Always: 总是从指定的仓库中获取镜像.
             IfNotPresent: 仅当地镜像缺失时候方才从目标仓库下载镜像.
             Never: 禁止从仓库下载镜像,即仅适用本地镜像.
    

      示例:

     1 [root@k8s ~]# cat nginx.yaml 
     2 apiVersion: v1
     3 kind: Pod
     4 metadata:
     5   labels:
     6     run: nginx
     7   name: nginx
     8 spec:
     9   containers:
    10   - image: nginx
    11     imagePullPolicy: IfNotPresent
    12     name: nginx
    13   restartPolicy: Always
    实例

    pod中容器的运行命令

      修改默认运行的命令,即修改指定容器运行时的命令.

    方法1:
        command: ['sh','-c','echo OK! && sleep 60']
    
    方法2: 
    	command:
    	- sh
    	- -c 
    	- echo OK! && sleep 60
    
    方法3:
    	args:
    	-sh 
    	- -c 
    	- echo OK! && sleep 60
    
    方法4:
    	command: ['/bin/sh']
    	args: ['-c','echo OK! && sleep 60']

    实例:

     1 [root@k8s ~]# cat busybox.yaml 
     2 apiVersion: v1
     3 kind: Pod
     4 metadata:
     5   labels:
     6     run: busybox
     7   name: busybox
     8 spec:
     9   containers:
    10   - image: busybox
    11     imagePullPolicy: IfNotPresent
    12     name: busybox
    13     command: ['sh','-c','echo OK! && sleep 60']
    14   restartPolicy: Always
    实例

    pod中使用变量

    方法:
    env:
    - name: key1
      value: value1 
    - name: key2
      value: value2
    
    说明:
    	name: 环境变量名称即key
    	value: 传递给环境变量的值, 通过 $(VAR_NAME)引用,逃逸格式为$$(VAR_NAME) 默认值为空
    

    实例:

     1 [root@k8s ~]# cat busybox.yaml 
     2 apiVersion: v1
     3 kind: Pod
     4 metadata:
     5   labels:
     6     run: busybox
     7   name: busybox
     8 spec:
     9   containers:
    10   - image: busybox
    11     imagePullPolicy: IfNotPresent
    12     name: busybox
    13     command: ['sh','-c','echo OK! && sleep 60']
    14     env:
    15     - name: devops
    16       value: kubernetes
    17   restartPolicy: Always
    实例

    pod重启策略

        定义 pod 生命周期和异常退出时的重启策略.

    字段:
    restartPolicy: Never	
    值: 
        Always: 总是重启
        OnFailure: 失败了才会重启
        Never: 从不重启  

    实例:

     1 [root@k8s ~]# cat busybox.yaml 
     2 apiVersion: v1
     3 kind: Pod
     4 metadata:
     5   labels:
     6     run: busybox
     7   name: busybox
     8 spec:
     9   containers:
    10   - image: busybox
    11     imagePullPolicy: IfNotPresent
    12     name: busybox
    13     command: ['shs','-c','echo OK! && sleep 60']     # 故意写错
    14     env:
    15     - name: devops
    16       value: kubernetes
    17   restartPolicy: OnFailure
    实例

    初始化容器

        初始化容器主要为运行的容器做一些初始化的工作提前准备工作. 比如一个容器 A 依赖其他容器运行,可以为 A 设置多个依赖容器,比如 A1 A2. A1,A2的初始化容器会按照顺序启动,如果A1没有启动成功,A2则也不会启动,只有所有的初始化容器运行完毕后,容器A 才会运行.

    关键字:
    initContainers:
    ''   下面定义一个个初始化的容器 ''
      - name: init-poda
        image: busybox
        command: ['sh','-c','touch /work-dir/aa.txt']
        volumeMounts:
        - name: workdir
          mountPath: "/work-dir"

    实例:

     1 apiVersion: v1
     2 kind: Pod
     3 metadata:
     4   name: myapp-initpod
     5   labels:
     6     app: myapp
     7 spec:
     8   volumes:
     9   - name: workdir
    10     emptyDir: {}
    11   containers:
    12   - name: myapp-nginx
    13     image: nginx
    14     imagePullPolicy: IfNotPresent
    15     volumeMounts:
    16     - name: workdir
    17       mountPath: "/text"
    18   initContainers:
    19   - name: init-poda
    20     image: busybox
    21     command: ['sh','-c','touch /work-dir/aa.txt']
    22     volumeMounts:
    23     - name: workdir
    24       mountPath: "/work-dir"
    实例

    资源调度对象

    主机过滤

    主机打分
    手动指定pod运行位置

    标签

    kubectl get pods --show-labels
    kubectl top pods -l name=cpu-utilizer
    
    kubectl label nodes --all aa/111=abc
    kubectl label nodes --all disktype=ssd
    kubectl label nodes test1 aa/111=abc
    kubectl label nodes test1 aa/111-         取消标签  
     
    手动指定pod 运行在指定的标签(node)上
     
    apiVersion: v1
    kind: Pod
    metadata:
      creationTimestamp: null
      labels:
        run: nginx-selector
      name: nginx-selector
    spec:
      nodeSelector:
        disktype: ssd
      containers:
      - image: nginx
        name: nginx-selector
        resources: {}
        imagePullPolicy: IfNotPresent
      dnsPolicy: ClusterFirst
      restartPolicy: Always
    status: {}

    cordon

        设置 cordon 状态的 node ,新创建的 pod 请求不会调度到此node 上, 但是现有运行中的 pod 不会受到影响.
    设置cordon状态: kubectl cordon node_name    
    取消cordon状态: kubectl uncordon node_name     

    drain

        设置 drain 状态的 node, 会把此node 标记为不可用.新创建的 pod 不会调度到此node 上, 同时会把此node 上运行的pod迁移走. 普通pod 没有此特性, deployment 等控制器有此特性.
    设置 drain状态: kubectl drain node_name 
    取消 drain状态: kubectl uncordon node_name 

    taint

        设置node 污点,如果node 上有污点 新创建的 pod 不会调度到此node上,但是可以修改 pod 参数使其可以容忍污点.
    设置污点: kubectl taint node node_name aaa=123:NoSchedule
    取消污点: kubectl taint node node_name aaa-
    查看污点: kubectl describe nodes node_name | grep Taints   
    
    # pod 容忍污点配置
    tolerations:
    - key: "aaa"
      operator: "Equal"
      value: "123"
      effect: "NoSchedule"
    

      

     
     
     

    作者:闫世成

    出处:http://cnblogs.com/yanshicheng

    联系:yans121@sina.com

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。如有问题或建议,请联系上述邮箱,非常感谢。
  • 相关阅读:
    Linux利器strace
    记一次MongoDB性能问题
    mongodb慢查询记录
    PHP操作MongoDB学习笔记
    字典NSDictionary的常见用法
    字典与自定义对象的相互转换
    URLString中文字符转义
    常见序列化与反序列化方法
    Swift处理异常的三种方式-try
    客户端Socket使用步骤
  • 原文地址:https://www.cnblogs.com/yanshicheng/p/13179575.html
Copyright © 2011-2022 走看看