Pod介绍

Pod

1、Pod基本概念

(1)最小部署的单元

(2)包含多个容器(一组容器的集合)

(3)一个pod中容器共享网络命名空间

(4)pod是短暂的

2、Pod存在意义

(1)创建容器使用docker,一个docker对应一个容器,一个容器有进程,一个容器运行一个应用程序。

(2)Pod是多进程设计,运行多个应用程序

一个Pod有多个容器,一个容器里面运行一个应用程序

(3)Pod存在为了亲密性应用

  • 两个应用之间可以进行交互
  • 网络之间调用
  • 两个应用需要频繁调用

3、Pod实现机制

  • 共享网络:通过Pause容器,把其他业务容器加入到Pause容器里面,让所有业务容器在同一个名称空间中,可以实现网络共享。

容器本身之间相互隔离的(namespace、group)

前提条件:容器在同一个ns里面

每一个Pod都有一个特殊的被称为“根容器”的pause容器。

  • 共享存储:引入数据卷概念volum,使用数据卷进行持久化存储

4、镜像拉取策略

apiVersion: v1
kind: Pod
metadata:
  name:mypod
spec:
  containers:
    - name: nginx
      image: nginx:1.14
      imagePullPolicy: Always
      
#ifNotPresent:默认值,镜像在宿主机上不存在时才拉取
#Always:每次创建Pod都会重新拉取一次镜像
#Never:Pod永远都不会主动拉取这个镜像

5、Pod资源限制

本身是由docker进行限制的
在这里插入图片描述

6、Pod重启机制

apiVersion: v1
kind: Pod
metadata:
  name:mypod
spec:
  containers:
    - name: nginx
      image: nginx:1.14
  restartPolicy: Nerver

#Always:当容器终止退出后,总是重启容器,默认策略。
#OnFailure:当容器异常退出(退出状态码非0)时,才重启容器。
#Never:当容器终止退出,从不重启容器。

7、Pod健康检查

(1)通过容器进行检查

(2)应用层健康检查
在这里插入图片描述

Pod的调度

创建Pod的流程

在这里插入图片描述

1、影响调度的属性

(1)Pod资源限制对Pod调度产生影响

根据request找到足够node节点进行调度

(2)节点选择器标签影响Pod调度

  • 首先对节点创建标签

    kubectl label node node1 env_role=prod

    [root@k8smaster ~]# kubectl label nodes k8snode1 env_role=dev
    node/k8snode1 labeled
    [root@k8smaster ~]# kubectl get nodes k8snode1 --show-labels 
    NAME       STATUS   ROLES    AGE   VERSION   LABELS
    k8snode1   Ready    <none>   29h   v1.18.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,env_role=dev,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8snode1,kubernetes.io/os=linux
    [root@k8smaster ~]# kubectl get nodes k8snode1 --show-labels 
    NAME       STATUS   ROLES    AGE   VERSION   LABELS
    k8snode1   Ready    <none>   29h   v1.18.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,env_role=dev,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8snode1,kubernetes.io/os=linux
    
  • 节点选择器

在这里插入图片描述
在这里插入图片描述

(3)节点亲和性,nodeAffinity和之前nodeSelector基本一样的,根据节点上标签的约束来决定Pod调度到哪些节点上,比节点选择器强大

  • 硬亲和性

    约束条件必须满足

  • 软亲和性

    尝试满足,不保证

在这里插入图片描述

支持常用操作符:In 、NotIn 、 Exists、Gt、Lt、DoesNotExits

(4)污点和污点容忍

  • 基本介绍

nodeAffinity和nodeSelector:Pod调度到某些节点上,Pod属性,调度时候实现

Taint污点:节点不做普通分配调度,是节点属性

  • 应用场景

    • 专用节点
    • 配置特定硬件节点
    • 基于Taint驱逐

    查看当前节点污点情况:

    [root@k8smaster ~]# kubectl describe node k8smaster | grep Taint
    Taints:             node-role.kubernetes.io/master:NoSchedule
    

    污点值有三个:

    (1)NoSchedule:一定不被调度

    (2)PreferNoSchedule:尽量不被调度

    (3)NoExcute:不会调度,并且还会驱逐Node已有Pod

    为节点添加污点:

    kubectl taint node [node] key=value:污点三个值
    
    kubectl scale deployment nginx --replicas=5
    
    [root@k8smaster ~]# kubectl get pod -o wide
    NAME                    READY   STATUS    RESTARTS   AGE    IP           NODE       NOMINATED NODE   READINESS GATES
    nginx-f89759699-fzv6b   1/1     Running   0          27s    10.244.1.4   k8snode1   <none>           <none>
    nginx-f89759699-nzzfj   1/1     Running   0          27s    10.244.2.3   k8snode2   <none>           <none>
    nginx-f89759699-rp7kn   1/1     Running   0          2d4h   10.244.2.2   k8snode2   <none>           <none>
    nginx-f89759699-rtrvn   1/1     Running   0          27s    10.244.1.3   k8snode1   <none>           <none>
    nginx-f89759699-x7zcr   1/1     Running   0          27s    10.244.2.4   k8snode2   <none>           <none>
    #通过命令删除pod
    [root@k8smaster ~]# kubectl delete deployment nginx
    deployment.apps "nginx" deleted
    #获取pod命令
    [root@k8smaster ~]# kubectl get pod
    No resources found in default namespace.
    
    #给节点1(k8snode1)添加污点
    [root@k8smaster ~]# kubectl taint node k8snode1 env_role=yes:NoSchedule
    node/k8snode1 tainted
    #查看节点1上面的污点
    [root@k8smaster ~]# kubectl describe node k8snode1 | grep Taint
    Taints:             env_role=yes:NoSchedule
    
    #创建镜像
    [root@k8smaster ~]# kubectl create deployment web --image=nginx
    deployment.apps/web created
    #创建5个副本
    [root@k8smaster ~]# kubectl scale deployment web --replicas=5
    deployment.apps/web scaled
    #查看节点运行情况
    [root@k8smaster ~]# kubectl get pod -o wide
    NAME                   READY   STATUS    RESTARTS   AGE   IP           NODE       NOMINATED NODE   READINESS GATES
    web-5dcb957ccc-5d7sq   1/1     Running   0          10s   10.244.2.6   k8snode2   <none>           <none>
    web-5dcb957ccc-9t5bt   1/1     Running   0          93s   10.244.2.5   k8snode2   <none>           <none>
    web-5dcb957ccc-b5wrt   1/1     Running   0          10s   10.244.2.8   k8snode2   <none>           <none>
    web-5dcb957ccc-jm5hf   1/1     Running   0          10s   10.244.2.7   k8snode2   <none>           <none>
    web-5dcb957ccc-tlmlf   1/1     Running   0          10s   10.244.2.9   k8snode2   <none>           <none>
    

    为节点删除污点:

    [root@k8smaster ~]# kubectl describe node k8snode1 | grep Taint
    Taints:             env_role=yes:NoSchedule
    #删除污点方式
    [root@k8smaster ~]# kubectl taint node k8snode1 env_role:NoSchedule-
    node/k8snode1 untainted
    [root@k8smaster ~]# kubectl describe node k8snode1 | grep Taint
    Taints:             <none>
    

    污点容忍

    就算值被设定为NoSchedule,也可能被调度到

在这里插入图片描述

key和value是设置节点污点的时候的key和value。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值