首页 > 其他分享 >k8s finalizers和owner references

k8s finalizers和owner references

时间:2023-08-12 14:55:07浏览次数:48  
标签:删除 Finalizer finalizers PersistentVolume owner k8s 资源

finalizers

终结器,存放键的列表,列表内的键为空时资源才可被删除。
删除指定了Finalizer的对象时,填充.metadata.deletionTimestamp来标记要删除的对象,返回已接受202状态码使其进入只读状态。

# 创建包含finalizers的configmap
cat <<EOF | kubectl create -f -
apiVersion: v1
kind: ConfigMap
metadata:
  name: mymap
  finalizers:
  - kubernetes
EOF
# 因存在finalizers而无法删除configmap
kubectl delete cm mymap
# 去掉configmap的finalizers
kubectl patch configmap/mymap \
    --type json \
--patch='[{"op": "remove", "path": "/metadata/finalizers"}]'

一个常见的Finalizer的例子是kubernetes.io/pv-protection,用来防止意外删除PersistentVolume对象。当一个PersistentVolume对象被Pod使用时,k8s会添加pv-protection Finalizer。如果试图删除PersistentVolume,它将进入Terminating状态,但是控制器因为该Finalizer存在而无法删除该资源。当Pod停止使用PersistentVolume时,k8s清除pv-protection Finalizer,控制器就会删除该卷。

owner references

所有者引用,归谁管理/父资源对象是谁,用于级联删除。
不允许出现跨namespace的Owner Reference。

# 创建configmap mymap-parent
cat <<EOF | kubectl create -f -
apiVersion: v1
kind: ConfigMap
metadata:
  name: mymap-parent
EOF
# 创建mymap-parent的子对象mymap-child
CM_UID=$(kubectl get configmap mymap-parent -o jsonpath="{.metadata.uid}")
cat <<EOF | kubectl create -f -
apiVersion: v1
kind: ConfigMap
metadata:
  name: mymap-child
  ownerReferences:
  - apiVersion: v1
    kind: ConfigMap
    name: mymap-parent
    uid: $CM_UID
EOF
# 删除mymap-parent后mymap-child也被删除即级联删除
kubectl delete cm mymap-parent

父子资源删除策略有以下3种
Foreground: 先删除子资源再删除父资源(post-order)
Background: 先删除父资源再删除子资源(pre-order,默认策略)
Orphan: 忽略所有者引用进行删除,只删除当前对象

参考资料

https://www.jianshu.com/p/6053e1c3ceb0
https://juejin.cn/post/7153970808480595999

标签:删除,Finalizer,finalizers,PersistentVolume,owner,k8s,资源
From: https://www.cnblogs.com/WJQ2017/p/17624806.html

相关文章

  • k8s 网络模型
    容器网络通信模式在Host模式中,各容器共享宿主机的根网络名称空间,它们使用同一个接口设备和网络协议栈,因此,用户必须精心管理共享同一网络端口空间容器的应用与宿主机应用,以避免端口冲突。Bridge模式对host模式进行了一定程度的改进,在该模式中,容器从一个或多个专用网络(地址池)中获取IP......
  • k8s 容器安全上下文
    容器安全上下文介绍kubernetes为安全运行pod及容器运行设计了安全上下文机制,该机制允许用户和管理员定义pod或容器的特权与访问控制,已配置容器与主机以及主机之上的其它容器间的隔离级别。安全上下文就是一组用来决定容器时如何创建和运行的约束条件,这些条件代表创建和运行容器时使......
  • k8s 准入控制器之ResourceQuota
    资源配额概述尽管LimitRange资源能在名称空间上限制单个容器、Pod或PVC相关的系统资源用量,但用户依然可以创建出无数的资源对象,进而侵占集群上所有的可用系统资源。ResourceQuota资源能够定义名称空间级别的资源配额,从而在名称空间上限制聚合资源消耗的边界,它支持以资源类型来限制......
  • k8s 准入控制器之LimitRanger
    LimitRanger概述尽管用户可以为容器或Pod资源指定资源需求及资源限制,但这并非强制性要求,那些未明确定义资源限制的容器应用很可能会因程序Bug或真实需求而吞掉本地工作节点上的所有可用计算资源。因此妥当的做法是,使用LimitRange资源在每个名称空间中限制每个容器的最小及最大计算......
  • k8s 网络模型
    容器网络通信模式在Host模式中,各容器共享宿主机的根网络名称空间,它们使用同一个接口设备和网络协议栈,因此,用户必须精心管理共享同一网络端口空间容器的应用与宿主机应用,以避免端口冲突。Bridge模式对host模式进行了一定程度的改进,在该模式中,容器从一个或多个专用网络(地址池)中获取IP......
  • k8s实战案例之运行dubbo微服务
    1、dubbo微服务架构图通过上述架构可以了解到,生产者通过注册中心,将服务注册至注册中心,消费者通过注册中心找到生产者,从而实现消费者拿到生产者的实际地址,然后直接和生产者通信;管理端通过注册中心发现生产者和消费者,通过svc来管理生产者和消费者;集群外部客户端通过负载均衡器来......
  • k8s 网络模型
    容器网络通信模式在Host模式中,各容器共享宿主机的根网络名称空间,它们使用同一个接口设备和网络协议栈,因此,用户必须精心管理共享同一网络端口空间容器的应用与宿主机应用,以避免端口冲突。Bridge模式对host模式进行了一定程度的改进,在该模式中,容器从一个或多个专用网络(地址池)中获......
  • k8s jenkines kubesphere 部署流水线样例
    pipeline{agent{node{label'maven'}}stages{stage('拉取代码'){agentnonesteps{container('maven'){git(url......
  • k8s 自身原理 2
    前面我们说到K8S的基本原理和涉及的四大组件,分享了前两个组件etcd和ApiServer这一次我们接着分享一波:调度器scheduler控制器管理器controllermanager调度器scheduler调度器,见名知意,用于调度k8s资源的,那么这个调度器具体主要是调度啥资源呢?实际上看我们k8s中......
  • K8S 1.27.1版本初始化配置文件时报your configuration file uses an old API spec: "k
    现象:yourconfigurationfileusesanoldAPIspec:"kubeadm.k8s.io/v1beta2".Pleaseusekubeadmv1.22insteadandrun'kubeadmconfigmigrate--old-configold.yaml--new-confignew.yaml',whichwillwritethenew,similarspecusingan......