栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

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

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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,使用数据卷进行持久化存储

演示:


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

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

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

Pod资源限制(可以影响Pod调度)
Pod重启策略

*

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

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

创建Pod的基本流程

  • 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       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调度
到哪些节点上

  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:				
  1. 污点容忍: 虽然加了污点但也有可能被调度到
spec:
    tolerations:
    - key: " "
    operator: "Equal"
    value: " "
    effect: "NoSchedule"
    containers:
    - name: webdemo
    image: nginx
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/885155.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号