k8s中Pod的污点与容忍策略,抢占与优先级

污点是什么?

污点(Taint)是使节点与Pod产生排斥的一类规则.

污点策略是什么?

污点策略托过嵌合在键值对上的污点标签进行声明

污点标签

尽量不调度 :PreferNoSchedule

不被调度: NoSchedule

驱逐污点: NoExecute

管理污点标签

污点标签必须绑定在键值对上,格式如下:

key=value:[污点标签]

查看污点标签:

kubectl describe nodes [节点名字]

设置污点标签:

kubectl taint node [节点名字] key=value:污点标签

删除污点标签:

kubectl taint node [节点名字] key=value:节点标签-

容忍是什么?

容忍刚好与污点相反,某些时候我们需要在有污点的节点上运行Pod,这种无视污点标签的调度方式称为容忍.        

...... #配置容忍策略示例
spec:
  terminationGracePeriodSeconds: 0  
  restartPolicy: Always
  tolerations:                      #定义容忍策略
  - opperator: "Equal"              #匹配方式,必选(Equal,Exists)
    key: "k1"                       #设置键值对的值为key,为空代表任意键值对
    value: "v1"                     #设置values的值
    effect: "NoSchedule"            #设置容忍的标签,为空代表所有污点标签

(在上表中,Equal代表精确容忍策略,Exists代表模糊容忍策略)

优先级是什么?

优先级表示一个Pod相对于其他Pod的重要性.可以保证重要的Pod被调度运行.

如何使用优先级和抢占?

首先配置优先级类 PriorityClass,创建Pod时为其设置对应的优先级

PriorityClass

PriorityClass是一个全局资源对象,它定义了聪优先级类名称到优先级整数值的映射.优先级在Value字段中指定,可以设置小于10亿的整数值.

PriorityClass还有两个可选字段:

globalDefault用于设置默认优先级状态,如果没有任何优先级设置Pod的优先级为0

description用来配置描述性信息,告诉用户优先级的用途.

优先级策略

非抢占优先:指的是在调度阶段优先进行调度分配,一旦容器调度完成就不可以抢占,资源不足时,只能等待.

抢占优先: 强制调度一个Pod,如果资源不足无法被调度,调度程序会抢占(删除)较低优先级的Pod的资源,来保证高优先级Pod的运行.

非抢占优先级与抢占优先,一般使用非抢占优先.

非抢占优先级

定义优先级资源对象,高优先级定义

---
kind: PriorityClass
apiVersion: scheduling.k8s.io/v1
metadata:
  name: high-non               #优先级名称
globalDefault: false           #是否定义默认优先级(唯一)
preemptionPolicy: Never        #策略: 非抢占
value: 1000                    #优先级
description: non-preemptive    #描述信息

Pod安全

什么是特权容器?

容器是通过名称空间技术隔离的,有时候我们执行一些应用服务,需要使用或修改敏感的系统信息,这时容器需要突破隔离限制,获取更高的权限,这类容器统称特权容器.

运行特权容器会有一些安全风险,这种模式下运行容器对宿主机拥有root访问权限,可以突破隔离直接控制宿主机的资源配置.

特权容器(修改主机名和hosts文件)

---
kind: Pod
apiVersion: v1
metadata:
 name: root
spec:
  terminationGracePeriodSeconds: 0
  restartPolicy: Always
  hostname: myhost               #修改主机名
  hostAliases:                   #修改hosts
  - ip: 192.168.1.30             #IP地址
    hostnames:                   #名称键值对
    - harbor                     #主机名
  containers:
  - name: apache
    image: myos:httpd

root特权容器

---
kind: Pod
apiVersion: v1
metadata:
  name: root
spec:
  termainationGracePeriodSeconds: 0
  restartPolicy: Always
  hostPID: true                   #共享系统进程
  hostNetwork: true               #共享主机网络
  containers:
  - name: apache
    image: myos:httpd
    securityContext:              #安全上下文值
      privileged: true            #root容器

什么是Pod安全策略?

Pod安全策略是集群级别的资源,它能够控制Pod运行的行为,以及它具有访问什么的能力.

如何使用Pod安全策略?

kubernetes服务版本必须不低于版本v1.22

确保PodSecuriy特性门控被启用

Pod安全策略

PodSecurity提供一种内置的Pod安全性准入控制器,作为PodSecurityPolicies特性的后继演化版本.Pod安全性限制是在Pod被创建时,在名字空间层面实施的.

Pod安全性标准定义了三种不同的策略(Policy), 以广泛覆盖安全应用场景.这些策略是渐进式的,安全及别从高度宽松至高度受限.

Pod安全策略(LEVEL)

privileged: 不受限制的策略,提供最大可能范围的权限许可,此策略允许特权提升.

baseline: 弱限制性的策略,禁止已知的策略提升权限.允许使用默认的Pod配置.

restricted: 非常严格的限制性策略,遵循当前的保护Pod的最佳实践.

Pod准入控制标签(MODE)

Kubernetes定义莉一组标签,你可以设置这些标签来定义某个名字空间上Pod安全性标准级别.你所选择的标签定义了检测到潜在违例时,所要采取的动作.

enforce: 策略违例会导致Pod被拒绝.

audit: 策略违例会触发审计日志,但是Pod仍可被接受.

warn: 策略违例会触发用户可见的警告信息,但是Pod仍是被接受的

pod-security.kubernetes.io/<MODE>: <LEVEL>

案例:最安全的Pod

---
kind: Pod
apiVersion: v1
metadata:
  name: nonroot
spec:
  terminationGracePeriodSeconds: 0
  restartPolicy: Always
  containers:
  - name: php
    image: myos:php-fpm
    securityContext:
      allowPrivilegeEscalation: false
      runAsNonRoot: true
      runAsUser: 65534
      seccompProfile:
        type: "RuntimeDefault"
      capabilities:
              drop: ["ALL"]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值