1、Pod基本介绍

Pod

1、Pod基本概念

(1) 最小的部署单位

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

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

(4) Pod是短暂的

2、Pod存在意义

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

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

  • 一个Pod有多个容器,一个容器只能运行一个应用程序

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

两个应用之间进行焦化
网络之间调用
两个应用需要频繁调用

3、Pod实现机制

  • 容器本身之间相互隔离

(1) 共享网络

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

(2) 共享存储

  • 引入数据卷概念volumn,使用数据卷进行持久化存储

4、Pod镜像拉取策略

imagePullPolicy:

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

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

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

5、Pod资源限制

resources: 
  requests: #代表需要调度的资源
    memory: "64Mi"    
    cpu: "250m"
    
  limits:   # 能调度的最大资源
    memory: "128Mi"
    cpu: "500m"

6、Pod重启机制

restartPolicy:

  • Always: 当容器终止退出后,总是重启容器,默认策略。

  • OnFailure:但容器异常退出(状态码非0)时,才重启容器。

  • Never:当容器终止退出时,从不重启容器。

7、Pod健康检查

livenessProbe(存活检查)

  • 如果检查失败,将杀死容器,根据Pod的restartPoticy来操作

readinessProbe(就绪检查)

  • 如果检查失败,kubernetes会把Pod从service endpoints中剔除

Probe支持以下三种检查方法

  • httpGet

    发送HTTP请求,返回200-4--范围状态码为成功

  • exec

    执行shell命令返回状态码是0为成功

  • tcpSocket

    发起TCP Socket 建立成功

8、调度策略

API Server   etcd   Scheduler   Kubelet     Docker
​
1、创建Pod ->apiserver -> etcd
​
2、Scheduler ->apiserver ->etcd-> 调度算法,把Pod调度到某个节点上
​
3、kubelet -> apiserver ->读取etcd拿到分配给当前节点Pod ->docker创建容器
​
​

1.Pod资源限制对pod调用产生影响

resources:
  requestes:
    memory: "64Mi"
    cpu: "250m"
根据request找到足够资源的node节点进行调度

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

[root@m1 ~]# kubectl label node n1 env_role=dev
node/n1 labeled             #对n1节点打一个标签
​
[root@m1 ~]# kubectl get nodes n1 --show-labels         #查看n1节点标签状态
NAME   STATUS   ROLES    AGE   VERSION   LABELS
n1     Ready    worker   24d   v1.20.6   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,env_role=dev,kubernetes.io/arch=amd64,kubernetes.io/hostname=n1,kubernetes.io/os=linux,node-role.kubernetes.io/worker=worker

3.节点亲和性对Pod调度的影响

节点亲和性,nodeAffinity 和nodeSelector基本一样,根据节点上标签约束来绝对调度到哪些节点上。

(1)硬亲和性 requiredDuringSchedulingIgnoredDuringExecution

约束条件必须满足

(2)软亲和性 preferreDuringSchedulingIgnoreDuringExecution

尝试满足,不保证绝对满足

支持常用操作符

In NotIn Exists Gt Lt DoesNotExists

9、污点和污点容忍

1、基本介绍

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

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

2、场景:

专用节点, 配置特点硬件节点, 给予Taint驱逐

3、具体演示

1、查看污点情况

[root@m1 ~]# kubectl describe node m1 | grep Taint          
Taints:             node-role.kubernetes.io/master:NoSchedule
​
# NoSchedule: 一定不被调度
# PreferNoSchedule: 尽量不被调度
#NoExecute: 不会调度,并且还会驱逐已有Node
​

2、为节点添加污点

kubectl taint node [node] key=value:污点三个值

[root@m1 ~]# kubectl taint node n1 env_role=yes:NoSchedule
node/n1 tainted
​

3、删除污点

kubectl taint node [node] key-

[root@m1 ~]# kubectl taint node n1 env_role-
node/n1 untainted
#后面加一个减号就可以删除了
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值