Kubernetes实战(八)-防止k8s namespace被误删除

news2024/10/5 13:59:13

1 背景

运维新同学在预发环境操作删除pod的时候,不知道什么原因把kubectl delete pod命令敲成了kubectl delete ns pre把预发环境删了,几十个模块,将近一个小时才恢复。幸亏是测试环境啊,如果是生产可以可以跑路了。

2 解决方案

通过kubectl操作k8s资源把数据发给apiserver,在apiserver把数据持久化到etcd之前我们可以通过MutatingWebhook修改、拦截相关资源的变更。

所以我们可以通过实现MutatingWebhook机制,控制高危的操作。

方案一:自己实现MutatingWebhook保护k8s资源不被删除,这个具体实现大家参考作者之前写的文章实现。

方案二:阿里开源的OpenKruise已经帮我们实现相关资源的删除保护。他的实现原理也是基于webhook实现。

下面我们重点实践基于OpenKruise资源删除保护。

2.1 OpenKruise 删除保护实践

2.1.1 OpenKruise架构

  • API:所有 OpenKruise 的功能都是通过 Kubernetes API 来提供

  • Manager:Kruise-manager 是一个运行 controller 和 webhook 中心组件,它通过 Deployment 部署在 kruise-system 命名空间中。资源保护主要是kruise-controller-manager的实现的webhook功能。

  • Daemon:DaemonSet 部署到每个 Node 节点上,提供镜像预热、容器重启等功能。

2.1.2 k8s集群在线部署OpenKruise

建议采用 helm v3.5+ 来安装 Kruise,,helm 是一个简单的命令行工具可以从 这里 获取。

# Firstly add openkruise charts repository if you haven't do this.
$ helm repo add openkruise https://openkruise.github.io/charts/

# [Optional]
$ helm repo update

# Install the latest version.
$ helm install kruise openkruise/kruise --version 1.5.0

通过上述办法可以在线部署OpenKruise

大部分同学的线上环境是没有外网的,下面我们看看离线部署方式。

2.1.3 k8s集群离线部署OpenKruise

下载最新稳定版OpenKruise,作者没有大家helm仓库,这里使用gitlab管理kruise

# Firstly add openkruise charts repository if you haven't do this.
$ helm repo add openkruise https://openkruise.github.io/charts/

# [Optional]
$ helm repo update

# download the latest version.
$ helm pull openkruise/kruise --version 1.5.0

在当前目录下有kruise-1.5.0.tgz解压缩,并修改镜像地址为你仓库地址

tar kruise-1.5.0.tgz
cd kruise

vim values.yaml
image:
    repository: yourharbor.domain.com/openkruise/kruise-manager
    tag: v1.5.0

注意:作者这里kruise 上传到gitlab管理,如果你有helm仓库可以放到自己的helm仓库。

下载镜像,并上传自己的harbor仓库

docker pull openkruise/kruise-manager:v1.5.0

docker tag openkruise/kruise-manager:v1.5.0 yourharbor.domain.com/openkruise/kruise-manager:v1.5.0 

docker push yourharbor.domain.com/openkruise/kruise-manager:v1.5.0 

在master节点上部署OpenKruise

git clone yourgit.domain.com/kruise.git

helm install kruise kruise/

至此,离线版安装OpenKruise就完成了。

部署完后,效果如下有kruise-controller-managerkruise-daemon

kubectl  get pod -n kruise-system
NAME                                         READY   STATUS    RESTARTS   AGE
kruise-controller-manager-6d7bfd75wf-4s6jk   1/1     Running   0          4h23m
kruise-controller-manager-6d7bfd75wf-dstl5   1/1     Running   0          6h21m
kruise-daemon-tnfd8                          1/1     Running   0          6h21m

2.2 保护的资源类型

2.2.1 保护的资源都有哪些?

目前支持的资源如下:

KindGroupVersionCascading judgement
Namespacecorev1namespace
CustomResourceDefinitionapiextensions.k8s.iov1beta1, v1CRD下是否还有存量的 CR
Deploymentappsv1replicas 是否为 0
StatefulSetappsv1replicas 是否为 0
ReplicaSetappsv1replicas 是否为 0
CloneSetapps.kruise.iov1alpha1replicas 是否为 0
StatefulSetapps.kruise.iov1alpha1, v1beta1replicas 是否为 0
UnitedDeploymentapps.kruise.iov1alpha1replicas 是否为 0

2.2.2 怎么开启资源保护?

在以上资源上加上标签policy.kruise.io/delete-protection=Always 或 policy.kruise.io/delete-protection=Cascading,即实现了对相应资源的的保护.

Always: 这个对象禁止被删除,除非上述 label 被去掉
Cascading: 这个对象如果还有可用的下属资源,则禁止被删除

2.2.3 案例实战

2.2.3.1 Always(对象禁止被删除)

test namespace 打上label policy.kruise.io/delete-protection=Cascading后,不管test namespace下是否有资源都不允许删除test,除非把标签去掉。

kubectl  label ns nohost policy.kruise.io/delete-protection=Always
kubectl  delete ns test

Error from server: admission webhook "vnamespace.kb.io" denied the req

2.2.4 Cascading(当删除对象还有其他资源是不让删)

test namespace下还有一个pod,所以当设置label是policy.kruise.io/delete-protection=Cascading,删除test 不允许删除,这样就对test namespace 起到保护的作用。

kubect label ns test policy.kruise.io/delete-protection=Cascading --overwrite
kubectl  delete ns test

Error from server: admission webhook "vnamespace.kb.io" denied the request: forbidden by ResourcesProtectionDeletion for policy.kruise.io/delete-protection=Cascading and active pods 1>0

如果把test namespace 下的所有pod都删掉,test 可以被delete掉。

2.3 OpenKruise 资源保护缺点

支持的资源有限,通过 webhook configuration 的 objectSelector 字段, Kruise webhook 只会拦截处理带有 policy.kruise.io/delete-protection 标签的 Namespace/CustomResourceDefinition/Deployment/StatefulSet/ReplicaSet 资源。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1293188.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Thymeleaf生成pdf表格合并单元格描边不显示

生成pdf后左侧第一列的右描边不显示,但是html显示正常 显示异常时描边的写法 cellpadding“0” cellspacing“0” ,td,th描边 .self-table{border:1px solid #000;border-collapse: collapse;width:100%}.self-table th{font-size:12px;border:1px sol…

关于物联网仪表ADW300 远传电表的详细介绍-安科瑞 蒋静

1概述 ADW300无线计量仪表主要用于计量低压网络的三相有功电能,具有体积小、精度高、功能丰富等优点,并且可选通讯方式多,可支持 RS485 通讯和 Lora、NB、4G、wifi 等无线通讯方式,增加了外置互感器的电流采样模式,从而…

postman实现接口自动化图解步骤,测试用例集,断言,动态参数,全局变量的随笔记录

实现接口自动化的方式有很多种,requests unittest ddt 的接口自动化框架有些朋友也有接触,但是考虑到很多没有代码基础,且这种框架实现需要的时间周期比较长,但是大多数公司的项目时间并不充裕。 这篇随笔主要就是记录实现效率…

CentOS系统下配置HTTP服务器的步骤

在CentOS系统下配置HTTP服务器涉及到一系列的步骤。以下是一个基本的步骤概述,帮助你了解如何为CentOS系统配置HTTP服务器。 安装HTTP服务器软件: 首先,你需要在CentOS系统上安装HTTP服务器软件。常见的选择是Apache HTTP服务器。你可以使用…

SDN随笔

SDN不支持跨厂商 vxlan有1600万个,随便用 openstack来通过sdn来管理网络 网络架构 openflow很激进,用的很少 华为解决方案 推动网络设备的自动化配发 网络流量与路径优化

科普小知识-3D 打印是什么?

3D 打印是什么?作为近年来备受关注的前沿科技,3D 打印技术正在不断改变着制造业、医疗领域、艺术设计等多个领域的面貌。其又被称为增材制造,是一种通过电脑设计,逐层堆叠材料来创建三维物体的技术。 3D 打印的基本原理 3D 打印…

智能优化算法应用:基于北方苍鹰算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于北方苍鹰算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于北方苍鹰算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.北方苍鹰算法4.实验参数设定5.算法结果6.参考…

Qt11.7

登录窗口的应用场景&#xff0c;实现一个登录窗口界面 头文件&#xff1a; #ifndef AIKUN_H #define AIKUN_H#include <QWidget> #include <QIcon> //图标类 #include <QMovie> //动图类 #include <QLabel> //标签类 #include <QLineEdit> …

dockers安装rabbitmq

RabbitMQ: easy to use, flexible messaging and streaming — RabbitMQhttps://www.rabbitmq.com/ Downloading and Installing RabbitMQ — RabbitMQ docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.12-management 之后参照&#xff1a;dock…

HTTP、HTTPS、SSL协议以及报文讲解

目录 HTTP/HTTPS介绍 HTTP/HTTPS基本信息 HTTP请求与应答报文 HTTP请求报文 HTTP响应报文 SSL协议 SSL单向认证 SSL双向认证 HTTP连接建立与传输步骤 HTTP访问全过程相关报文&#xff08;以访问www.download.cucdccom为例子&#xff09; DNS报文解析 TCP三次握手连…

智能配电监控系统

智能配电监控系统是针对供配电系统中的变配电环节&#xff0c;利用现代计算机控制技术、通信技术和网络技术等&#xff0c;采用抗干扰能力强的通讯设备及智能电力仪表&#xff0c;经电力监控管理软件组态&#xff0c;实现的系统的监控和管理。依托电易云-智慧电力物联网&#x…

生成式人工智能笔记-AIGC笔记

生成式人工智能笔记-AIGC笔记 十多年前&#xff0c;人工智能还只是一个不被人看好的小众领域&#xff0c;但是现在&#xff0c;它却已经成了街头巷尾的热点谈资&#xff0c;几乎任何事情都可以和人工智能联系在一起。 人工智能包括基础层、技术层和应用层。 基础层是人工智能…

数字营销影响消费者行为的 6 种方式

如果您正在考虑转向在线市场&#xff0c;那么这个决定就好了&#xff01;没有什么比数字营销更强大的了。但是&#xff0c;在开始之前&#xff0c;请了解数字营销如何影响消费者行为。由于客户是任何企业的基石&#xff0c;因此跟踪消费者行为至关重要。 数据分析在识别潜在客…

LeetCode力扣每日一题(Java):20、有效的括号

一、题目 二、解题思路 1、我的思路 我看到题目之后&#xff0c;想着这可能是力扣里唯一一道我能秒杀的题目了 于是一波操作猛如虎写出了如下代码 public boolean isValid(String s) {char[] c s.toCharArray();for(int i0;i<c.length;i){switch (c[i]){case (:if(c[i]…

Git 配置文件(.gitignore)

前言 在使用 Git 分布式版本控制系统的时候&#xff0c;有些文件如&#xff1a;数据库的一些配置文件&#xff0c;我们不想让这类文件在远程仓库让 Git 来管理&#xff0c;不想让别人看到&#xff0c;此时就可以自己在 Git 仓库目录下创建 / 在远程仓库创建的时候就配置好 .git…

【从零开始学习JVM | 第五篇】快速了解运行时数据区

前言&#xff1a; 当谈论 Java 程序的运行机制时&#xff0c;JVM&#xff08;Java 虚拟机&#xff09;的运行时数据区是一个必不可少的话题。JVM 运行时数据区是 Java 程序在运行过程中分配内存和管理数据的重要区域&#xff0c;它包括了方法区、堆、虚拟机栈、程序计数器和本地…

TA-Lib学习研究笔记(九)——Pattern Recognition (4)

TA-Lib学习研究笔记&#xff08;九&#xff09;——Pattern Recognition &#xff08;4&#xff09; 最全面的形态识别的函数的应用&#xff0c;通过使用A股实际的数据&#xff0c;验证形态识别函数&#xff0c;用K线显示出现标志的形态走势&#xff0c;由于入口参数基本上是o…

js/jQuery常见操作 之 jQuery操作复选框的常见问题

js/jQuery常见操作 之 jQuery操作复选框的常见问题 1. js/jQuery的其他一些常见基础操作2. 全选/全不选问题2.1 效果2.2 实现代码2.2.1 简单js实现2.2.2 jQuery实现2.2.2.1 注意语法&#xff08;区别jQuery版本&#xff09;2.2.2.2 完整代码实现 3. jQuery实现点击 行tr 实现ch…

【GAMES101】三维变换

games101的第四节课讲了三维变换和观察变换&#xff0c;我们这里先记录一下三维变换的知识&#xff0c;后面再讲观察变换 齐次坐标下的三维变换 类似于解决之前二维变换平移的问题&#xff0c;三维变换下用齐次坐标通过增加一个维度来表示&#xff0c;第四个维度为1表示这是个…

自动数据增广论文笔记 | AutoAugment: Learning Augmentation Strategies from Data

谷歌大脑出品 paper: https://arxiv.org/abs/1805.09501 这里是个论文的阅读心得&#xff0c;笔记&#xff0c;不等同论文全部内容 文章目录 一、摘要1.1 翻译1.2 笔记 二、(第3部分)自动增强:直接在感兴趣的数据集上搜索最佳增强策略2.1 翻译2.2 笔记 三、跳出论文&#xff0c…