Kubernetes学习笔记12
k8s核心概念:控制器:
我们删除Pod是可以直接删除的,如果生产环境中的误操作,Pod同样也会被轻易地被删除掉。
所以,在K8s中引入另外一个概念:Controller(控制器)的概念,用于在k8s集群中以loop的方式监视pod状态,如果其发现Pod被删除,将会重新拉起一个Pod,以让Pod一直保持在用户期望的状态。
学习目标:
了解Controller作用
了解Controller分类:
了解Deployment控制器的作用:
掌握创建Deployment控制器类型应用方法:
掌握删除Deployment控制器类型应用方法:
课程内容:
Controller介绍:
控制器:
用于对应用运行的资源对象进行监控。使用Loop方式对资源对象Pod监控。
当Pod出现问题的时候,会把Pod重新拉起,以达到用户的期望状态。
Controller分类:
常见Pod控制器:

Deployment控制器介绍:
具有上线部署、滚动升级、创建副本、回滚到以前的某一个版本(成功/稳定)等功能。
Deployment包含ReplicaSet,除非需要自定义升级功能或者根本不需要升级Pod,否则还是建议使用Deployment而不直接使用ReplicaSet。
创建Deployment控制类型的应用:
1)通过kubectl命令行控制:
[root@master1 ~]# kubectl run nginx-app --image=nginx:latest --image-pull-policy=IfNotPresent
pod/nginx-app created
[root@master1 ~]#
[root@master1 ~]#
[root@master1 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-app 1/1 Running 0 10s
pod1 1/1 Running 0 31m
查看了一下kubectl run --help,发现已经没有--replicas选项了。网上建议使用kubectl create deployment。
--image-pull-policy=IfNotPresent: 是container容器镜像的下载策略,如果本地有镜像,使用本地,如果本地没有镜像,下载镜像。
[root@master1 ~]# kubectl create deployment nginx-app2 --image=nginx:latest --port=8080 --replicas=2
deployment.apps/nginx-app2 created
[root@master1 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-app 1/1 Running 0 4m38s
nginx-app2-5b87d59766-86dhn 1/1 Running 0 6s
nginx-app2-5b87d59766-ww9w9 1/1 Running 0 6s
pod1 1/1 Running 0 36m
[root@master1 ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-app 1/1 Running 0 4m50s 10.244.189.70 worker2 <none> <none>
nginx-app2-5b87d59766-86dhn 1/1 Running 0 18s 10.244.189.71 worker2 <none> <none>
nginx-app2-5b87d59766-ww9w9 1/1 Running 0 18s 10.244.235.134 worker1 <none> <none>
pod1 1/1 Running 0 36m 10.244.235.133 worker1 <none> <none>
[root@master1 ~]#
--replicas=2: 是指应用运行的Pod共计2个副本,这是用户的期望值,Deployment控制器中的ReplicaSet控制器会一直监控此应用运行的Pod副本状态,如果数量达不到用户期望,就会重新拉起一个新的Pod,会让Pod数量一直维持在用户期望值数量。
查看Deployment控制器类型的应用,查看Replicaset控制器类型:
Deployment控制器是部署应用的,由Replicaset控制器把它部署为两份。
[root@master1 ~]# kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-app2 2/2 2 2 167m[root@master1 ~]# kubectl get deployment.apps
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-app2 2/2 2 2 167m
查看Replicaset控制器类型:
[root@master1 ~]# kubectl get replicaset
NAME DESIRED CURRENT READY AGE
nginx-app2-5b87d59766 2 2 2 164m[root@master1 ~]# kubectl get rs
NAME DESIRED CURRENT READY AGE
nginx-app2-5b87d59766 2 2 2 169m
在名称后面多了一个16进制字符串。
查看Pod状态:
[root@master1 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-app 1/1 Running 0 171m
nginx-app2-5b87d59766-86dhn 1/1 Running 0 166m
nginx-app2-5b87d59766-ww9w9 1/1 Running 0 166m
pod1 1/1 Running 0 3h22m
不建议直接在K8s中直接访问Pod,因为Pod的IP地址是经常发生变化的。
[root@master1 ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-app 1/1 Running 0 176m 10.244.189.70 worker2 <none> <none>
nginx-app2-5b87d59766-86dhn 1/1 Running 0 171m 10.244.189.71 worker2 <none> <none>
nginx-app2-5b87d59766-ww9w9 1/1 Running 0 171m 10.244.235.134 worker1 <none> <none>
pod1 1/1 Running 0 3h27m 10.244.235.133 worker1 <none> [root@master1 ~]# curl http://10.244.189.71
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p><p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p>
</body>
</html>
二、通过资源清单文件创建
编写用于创建Deployment控制器类型应用清单文件:
[root@master1 ~]# cat 03_create_app.yaml
apiVersion: app/v1
kind: Deployment
metadata:name: nginx-app3labels:app: nginx
spec:replicas: 1selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginxapp3image: nginx:latestimagePullPolicy: IfNotPresentports:- name: nginxapp3containerPort: 80
kind:部署应用类型:
spec:应用期望
replicas:副本数
template:Pod模板
Pod必须加标签,不然没法选择它
selector:选择器
应用来做应用,是通过标签选择器来做选择的。
selector中的标签的值必须要跟模板中的标签的值是一样的。不然选择不上。
imagePullPolicy:IfNotPresent:在生产环境中,我们还是希望每次都进行下载的。
[root@master1 ~]# kubectl apply -f 03_create_app.yaml
deployment.apps/nginx-app3 created
查看deployment控制器类型的应用:
[root@master1 ~]# kubectl get deployment.apps
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-app2 2/2 2 2 3h17m
nginx-app3 1/1 1 1 44s
查看replicaset类型控制器的应用:
[root@master1 ~]# kubectl get rs
NAME DESIRED CURRENT READY AGE
nginx-app2-5b87d59766 2 2 2 3h18m
nginx-app3-657dcc8694 1 1 1 95s
查看所对应的Pods:
[root@master1 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-app 1/1 Running 0 3h24m
nginx-app2-5b87d59766-86dhn 1/1 Running 0 3h19m
nginx-app2-5b87d59766-ww9w9 1/1 Running 0 3h19m
nginx-app3-657dcc8694-4722k 1/1 Running 0 2m49s
pod1 1/1 Running 0 3h55m
[root@master1 ~]#
[root@master1 ~]#
[root@master1 ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-app 1/1 Running 0 3h24m 10.244.189.70 worker2 <none> <none>
nginx-app2-5b87d59766-86dhn 1/1 Running 0 3h19m 10.244.189.71 worker2 <none> <none>
nginx-app2-5b87d59766-ww9w9 1/1 Running 0 3h19m 10.244.235.134 worker1 <none> <none>
nginx-app3-657dcc8694-4722k 1/1 Running 0 2m59s 10.244.235.135 worker1 <none> <none>
pod1 1/1 Running 0 3h55m 10.244.235.133 worker1 <none> <none>
[root@master1 ~]#
删除Deployment控制器类型的应用:
带有控制器类型的Pod不能随便删除,如果必须删除,请删除控制器类型的应用名称。
[root@master1 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-app 1/1 Running 0 3h28m
nginx-app2-5b87d59766-86dhn 1/1 Running 0 3h23m
nginx-app2-5b87d59766-ww9w9 1/1 Running 0 3h23m
nginx-app3-657dcc8694-4722k 1/1 Running 0 6m54s
pod1 1/1 Running 0 3h59m
[root@master1 ~]#
[root@master1 ~]#
[root@master1 ~]# kubectl delete pods nginx-app
pod "nginx-app" deleted
[root@master1 ~]#
[root@master1 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-app2-5b87d59766-86dhn 1/1 Running 0 3h24m
nginx-app2-5b87d59766-ww9w9 1/1 Running 0 3h24m
nginx-app3-657dcc8694-4722k 1/1 Running 0 7m47s
pod1 1/1 Running 0 4h
[root@master1 ~]# kubectl get pods nginx-app2-5b87d59766-86dhn
NAME READY STATUS RESTARTS AGE
nginx-app2-5b87d59766-86dhn 1/1 Running 0 3h25m
[root@master1 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-app2-5b87d59766-86dhn 1/1 Running 0 3h25m
nginx-app2-5b87d59766-ww9w9 1/1 Running 0 3h25m
nginx-app3-657dcc8694-4722k 1/1 Running 0 8m23s
pod1 1/1 Running 0 4h1m
我们发现deployment类型的Pod是无法删除的,删除之后,就立即重新启动了一个Pod。
从这个地方,我们可以看出K8s集群默认就实现了高可用状态。再也不用在主机时代让虚拟机处于高可用状态。
那我们该如何删除Pods呢?
通过命令行kubectl删除:
[root@master1 ~]# kubectl get deployment.apps
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-app2 2/2 2 2 3h28m
nginx-app3 1/1 1 1 11m[root@master1 ~]# kubectl delete deployment nginx-app2
deployment.apps "nginx-app2" deleted[root@master1 ~]# kubectl get deployment.apps
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-app3 1/1 1 1 11m
可以看到nginx-app2的Pod已经被删除了。
注意:在删除的时候一定要加上类型的名称。
通过kubectl应用资源清单文件删除:
资源清单文件需要进行确认。
[root@master1 ~]# kubectl get deployment.apps
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-app3 1/1 1 1 13m[root@master1 ~]# kubectl delete -f 03_create_app.yaml
deployment.apps "nginx-app3" deleted[root@master1 ~]# kubectl get deployment.apps
No resources found in default namespace.
学习总结:

相关文章:
Kubernetes学习笔记12
k8s核心概念:控制器: 我们删除Pod是可以直接删除的,如果生产环境中的误操作,Pod同样也会被轻易地被删除掉。 所以,在K8s中引入另外一个概念:Controller(控制器)的概念,…...
Qt Designer 控件箱中的控件介绍及布局比列分配
控件箱介绍 Qt Designer的控件箱(Widget Box)包含了各种常用的控件,用户可以通过拖放的方式将这些控件添加到窗体设计器中,用于构建用户界面。以下是一些常见控件箱中的控件及其功能的讲解: 1.基本控件&#…...
蓝桥集训之三国游戏
蓝桥集训之三国游戏 核心思想:贪心 将每个事件的贡献值求出 降序排序从大到小求和为正是即可 #include <iostream>#include <cstring>#include <algorithm>using namespace std;typedef long long LL;const int N 100010;int a[N],b[N],c[N];…...
MySQL知识整理
MySQL知识整理 基础第一讲:基础架构:一条SQL查询语句是如何执行的?架构尽量减少长连接的原因和方案为什么尽量不要依赖查询缓存 索引第四讲:深入浅出索引(上)第五讲:深入浅出索引(下…...
代码随想录算法训练营第36天| 435. 无重叠区间、 763.划分字母区间*、56. 合并区间
435. 无重叠区间 力扣题目链接 代码 示例代码 class Solution { public:// 按照区间右边界排序static bool cmp (const vector<int>& a, const vector<int>& b) {return a[1] < b[1];}int eraseOverlapIntervals(vector<vector<int>>&a…...
SpringBoot整合Nacos
文章目录 nacosnacos下载nacos启动nacos相关配置demo-dev.yamldemo-test.yamluser.yaml 代码pom.xmlUserConfigBeanAutoRefreshConfigExampleValueAnnotationExampleDemoApplicationbootstrap.yml测试结果补充.刷新静态配置 nacos nacos下载 下载地址 一键傻瓜试安装即可,官…...
vue3 浅学
一、toRefs 问题: reactive 对象取出的所有属性值都是⾮响应式的 解决: 利⽤ toRefs 可以将⼀个响应式 reactive 对象的所有原始属性转换为 响应式的 ref 属性 二、hook函数 将可复⽤的功能代码进⾏封装,类似与vue2混⼊。 三、ref:获取元素或者组件 let …...
三小时使用鸿蒙OS模仿羊了个羊,附源码
学习鸿蒙arkTS语言,决定直接通过实践的方式上手,而不是一点点进行观看视频再来实现。 结合羊了个羊的开发思路,准备好相应的卡片素材后进行开发。遇到了需要arkTS进行解决的问题,再去查看相应的文档。 首先需要准备卡片对应的图片…...
如何使用 ArcGIS Pro 制作热力图
热力图是一种用颜色表示数据密度的地图,通常用来显示空间分布数据的热度或密度,我们可以通过 ArcGIS Pro 来制作热力图,这里为大家介绍一下制作的方法,希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载的POI数…...
SpringBoot之集成Redis
SpringBoot之集成Redis 一、Redis集成简介二、集成步骤2.1 添加依赖2.2 添加配置2.3 项目中使用 三、工具类封装四、序列化 (正常都需要自定义序列化)五、分布式锁(一)RedisTemplate 去实现场景一:单体应用场景二&…...
mybatis-plus与mybatis同时使用别名问题
在整合mybatis和mybatis-plus的时候发现一个小坑,单独使用mybatis,配置别名如下: #配置映射文件中指定的实体类的别名 mybatis.type-aliases-packagecom.jk.entity XML映射文件如下: <update id"update" paramete…...
MySQL基础知识——MySQL日志
一条查询语句的执行过程一般是经过连接器、 分析器、 优化器、 执行器等功能模块, 最后到达存储引擎。 那么, 一条更新语句的执行流程又是怎样的呢? 下面我们从一个表的一条更新语句进行具体介绍: 假设这个表有一个主键ID和一个…...
uniapp 地图分幅网格生成 小程序基于map组件
// 获取小数部分 const fractional function(x) {x Math.abs(x);return x - Math.floor(x); } const formatInt function(x, len) {let result x;len len - result.length;while (len > 0) {result 0 result;len--;}return result; }/*** 创建标准分幅网格* param …...
python项目练习——22、人脸识别软件
功能分析: 人脸检测: 识别图像或视频中的人脸,并标记出人脸的位置和边界框。 人脸识别: 识别人脸的身份或特征,通常使用已知的人脸数据库进行训练,然后在新的图像或视频中识别出人脸并匹配到相应的身份。 表情识别: 识别人脸的表情,如高兴、悲伤、愤怒等,并给出相应…...
Linux中账号登陆报错access denied
“Access denied” 是一个权限拒绝的错误提示,意味着用户无法获得所请求资源的访问权限。出现 “Access denied” 错误的原因可以有多种可能性,包括以下几种常见原因: 错误的用户名或密码:输入的用户名或密码不正确,导…...
python语言之round(num, n)小数四舍五入
文章目录 python round(num, n)小数四舍五入python round(num, n)基础银行家舍入(Bankers Rounding)利息被银行四舍五入后,你到底是赚了还是亏了? python小数位的使用decimal模块四舍五入(解决round 遇5不进) python round(num, n…...
安全风险攻击面管理如何提升企业网络弹性?
从研究人员近些年的调查结果来看,威胁攻击者目前非常善于识别和利用最具有成本效益的网络入侵方法,这就凸显出了企业实施资产识别并了解其资产与整个资产相关的安全态势的迫切需要。 目前来看,为了在如此复杂的网络环境中受到最小程度上的网络…...
常用的几款性能测试软件
Apache JMeter是一款免费、开源的性能测试工具,广泛应用于Web应用程序和服务的性能测试。它支持模拟多种不同类型的负载,可以测试应用程序在不同压力下的性能表现,并提供丰富的图表和报告来分析测试结果。 优点: 免费且开源&…...
谷歌google浏览器无法更新Chrome至最新版本怎么办?浏览器Chrome无法更新至最新版本
打开谷歌google浏览器提示:无法更新Chrome,Chrome无法更新至最新版本,因此您未能获得最新的功能和安全修复程序。点击「重新安装Chrome」后无法访问此网站,造成谷歌浏览器每天提示却无法更新Chrome至最新版本。 谷歌google浏览器无…...
认识异常(1)
❤️❤️前言~🥳🎉🎉🎉 hellohello~,大家好💕💕,这里是E绵绵呀✋✋ ,如果觉得这篇文章还不错的话还请点赞❤️❤️收藏💞 💞 关注💥&a…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
