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…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...
