kubernetes核心技术-Pod(基础概述)

  1. Pod概述
    • Pod是k8s系统中可以创建和管理的最小单元,是资源对象模型中由用户创建或部署的最小资源对象模型,也是在k8s上运行容器化应用的资源对象,其他的资源对象都是用来支撑或者扩展Pod对象功能的,比如控制器对象是用来管控Pod对象的,Service或者Ingress资源对象是用来暴露Pod引用对象的,PersistentVolume资源对象是用来为Pod提供存储等等,k8s不会直接处理容器,而是Pod,Pod是由一个或多个container组成
    • Pod是Kubernetes的最重要概念,每一个Pod都有一个特殊的被称为==”根容器“Pause容器==Pause容器对应的镜像属于Kubernetes平台的一部分,除了Pause容器,每个Pod还包含一个或多个紧密相关的用户业务容器

Pod基本概念

(1)最小部署的单元
(2)包含多个容器(一组容器的集合)
(3)一个pod中容器共享网络命名空间
(4)pod是短暂的(重启就可能发生变化)

Pod存在的意义

  1. 创建容器使用docker,一个docker对应是一个容器,一个容器有进程,一个容器运行一个应用程序
  2. Pod是多进程设计,运行多个应用程序
  • 一个Pod有多个容器,一个容器里面运行一个应用程序
  1. Pod存在为了亲密性应用
  • 两个应用之间(频繁)交互
  • 网络之间的调用

机制

容器用Docker创建,容器本身之间是相互隔离的(namespace->名称空间, group)

  1. 共享网络
  • 首先pod会创建Pause容器(根容器/info容器)
  • 通过Pause容器,把其他业务容器加入到Pause容器里面,让所有业务容器在同一个名称空间(namespace)中,可以实现网络共享
  1. 共享存储
  • 引入数据卷概念Volumn,使用数据卷进行持久化存储
  • kubernetes核心技术-Pod(基础概述)_第1张图片

演示:kubernetes核心技术-Pod(基础概述)_第2张图片


Pod镜像拉取策略

  • kubernetes核心技术-Pod(基础概述)_第3张图片

  • IfNotPresent: 默认值,镜像在宿主机上不存在时才拉取

  • Always: 每次创建Pod都会重新拉取一次镜像

  • Never: Pod永远不会主动拉取这个镜像

Pod资源限制(可以影响Pod调度)

  • kubernetes核心技术-Pod(基础概述)_第4张图片

Pod重启策略

*kubernetes核心技术-Pod(基础概述)_第5张图片

Pod健康检查

  1. livenessProbe(存活检查)
  • 如果检查失败,将杀死容器,根据Pod的**restartPolicy(重启策略)**来操作。
  1. readinessProbe(就绪检查)
  • 如果检查失败,Kubernetes会把Pod从service endpoints中别除。

    #Probe支持以下三种检查方法:
    ## httpGet
    ### 发送HTTP请求,返回200-400范围状态码为成功。
    
    #exec
    ## 执行shell命令返回状态码是0为成功。
    
    #tcpSocket
    ###发起TCP Socket建立成功。
    

    kubernetes核心技术-Pod(基础概述)_第6张图片

创建Pod的基本流程

kubernetes核心技术-Pod(基础概述)_第7张图片

  • master节点:1创建pod-首先进入API Server - 把相关信息存储到etcd · 2Scheduler监听API Server(是否有新的pod创建) - 有新的pod创建时通过etcd读取到相关信息(把结果返回API Server - 在存储到etcd) - 通过调度算法pod调度到某个node节点
  • node节点:3通过Kubelet先访问API Server - 通过etcd读取到分配给当前节点pod相关信息 · 4通过docker创建容器(把创建容器的状态返回API Server - 在存储到etcd)
  • API Server:同一管理
  • etxd:存储
  • Scheduler: 实时监控API Server

Pod调度

  • 影响Pod调度:
  1. Pod资源限制

  2. 节点选择器标签(nodeSelector)

    spec:
     nodeSelector:
      env_test: dev
     containers:
     - name: nginx
      image: nginx:1.15
    
[root@master0 ~]# kubectl label node node1 env_test=dev
node/node1 labeled
[root@master0 ~]# kubectl get node node1 --show-labels
NAME    STATUS   ROLES    AGE   VERSION   LABELS
node1   Ready    <none>   26h   v1.18.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,env_test=dev,kubernetes.io/arch=amd64,kubernetes.io/hostname=node1,kubernetes.io/os=linux
[root@master0 ~]#
  1. 节点亲和性

  2. 污点和污点容忍

节点亲和性

节点亲和性->nodeAffinity和之前nodeSelector基本一样的,根据节点上标签约束来绝对Pod调度
到哪些节点上

kubernetes核心技术-Pod(基础概述)_第8张图片

  1. 硬亲和性
  2. 软亲和性
  3. 支持常用操作符:operator: In/NotIn/Exists/Gt…

污点

  1. 基本介绍

    • nodeSelector和nodeAffinity: Pod调度到某些节点上,Pod属性,调度时候实现
    • Taint污点:节点不做普通分配调度,是节点属性
  • 查看污点情况命令:kubectl describe node [节点name]| grep Taint

    [rootak8smaster ~]# kubectl describe node k8smaster | grep Taint
    Taints:  			node-role.kubernetes.io/master:NoSchedule
    
    #污点值
    #NoSchedule: 一定不会调度
    #PreferNoSchedule: 尽量不被调度
    #NoExecute: 不会调度,并且还会驱逐Node已有Pod
    
- 为节点添加污点:kubectl taint node [节点name] [key=value:污点值]
   [root@k8smaster ~]# kubectl taint node k8snodel env_test=yes:NoSchedule
   node/k8snodel tainted
   [root k8smaster ~]#
 - 删除污点:kubectl taint node [节点name] [key:污点值] -
[rootek8smaster ~]# kubectl describe node k8snode1 | grep Taint
Taints:			env_test=yes:NoSchedule
[rootak8smaster ]# kubectl taint node k8snode1 env_test:NoSchedule-
node/k8snodel untainted
[rootak8smaster ~]# kubectl describe node k8snode1 | grep Taint
Taints:				<none>
  1. 污点容忍: 虽然加了污点但也有可能被调度到
spec:
    tolerations:
    - key: " "
    operator: "Equal"
    value: " "
    effect: "NoSchedule"
    containers:
    - name: webdemo
    image: nginx

你可能感兴趣的:(kubernetes,容器,docker)