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…...
C++矩阵
C矩阵【基本】(will循环) #include<iostream> #include<string.h> using namespace std; int main() {int a[100][100]{0};int k 1;int i 0;int j 0;while(k<100){if(j>10){j0;i;}a[i][j]k;j;k;}i 0;j 0;while(true){if(i 9&am…...
解锁智能未来:用Ollama开启你的本地AI之旅
Ollama是一个用于在本地运行大型语言模型(LLM)的开源框架。它旨在简化在Docker容器中部署LLM的过程,使得管理和运行这些模型变得更加容易。Ollama提供了类似OpenAI的API接口和聊天界面,可以非常方便地部署最新版本的GPT模型并通过…...
CSS实现卡片在鼠标悬停时突出效果
在CSS中,实现卡片在鼠标悬停时突出,通常使用:hover伪类选择器。 :hover伪类选择器用于指定当鼠标指针悬停在某个元素上时,该元素的状态变化。通过:hover选择器,你可以定义鼠标悬停在元素上时元素的样式,比如改变颜色、…...
GPT建模与预测实战
代码链接见文末 效果图: 1.数据样本生成方法 训练配置参数: --epochs 40 --batch_size 8 --device 0 --train_path data/train.pkl 其中train.pkl是处理后的文件 因此,我们首先需要执行preprocess.py进行预处理操作,配置参数…...
传统方法(OpenCV)_车道线识别
一、思路 基于OpenCV的库:对视频中的车道线进行识别 1、视频处理:视频读取 2、图像转换:图像转换为灰度图 3、噪声去除:高斯模糊对图像进行去噪,提高边缘检测的准确性 4、边缘检测:Canny算法进行边缘检测…...
Git以及Gitlab的快速使用文档
优质博文:IT-BLOG-CN 安装git 【1】Windows为例,去百度下载安装包。或者去官网下载。安装过秳返里略过,一直下一步即可。丌要忉记设置环境发量。 【2】打开cmd,输入git –version正确输出版本后则git安装成功。 配置ssh Git和s…...
MyBatis Interceptor拦截器高级用法
拦截插入操作 场景描述:插入当前数据时,同时复制当前数据插入多行。比如平台权限的用户,可以同时给其他国家级别用户直接插入数据 实现: import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.executor.Executor; impor…...
Python学习入门(2)——进阶功能
14. 迭代器和迭代协议 在Python中,迭代器是支持迭代操作的对象,即它们可以一次返回其成员中的一个。任何实现了 __iter__() 和 __next__() 方法的对象都是迭代器。 class Count:def __init__(self, low, high):self.current lowself.high highdef __i…...
华为改进点
华为公司可以在员工福利方面做出改进,提高员工的工作满意度和忠诚度。例如,可以增加员工福利,如提供更多灵活的工作时间、提供更好的培训和发展机会、加大健康保障和福利待遇等。 此外,华为公司也可以加强与客户的沟通与合作&…...
分布式技术---------------消息队列中间件之 Kafka
目录 一、Kafka 概述 1.1为什么需要消息队列(MQ) 1.2使用消息队列的好处 1.2.1解耦 1.2.2可恢复性 1.2.3缓冲 1.2.4灵活性 & 峰值处理能力 1.2.5异步通信 1.3消息队列的两种模式 1.3.1点对点模式(一对一,消费者主动…...
网站开发 外包空心/站长工具同大全站
概述:泛海微AS4120是一款面向5V供电输出高达2A锂离子电池充电芯片。它是采用1.5MHz固定频率的同步降压型转换器,因此具有高达90%以上的充电效率,自身发热量极小。芯片包括完整的充电终止电路、自动再充电和一个精确度达1%的4.2V/4.35V预设充电…...
商标查询网站/短视频营销策划方案
一.冒泡排序 冒泡排序是运行最慢点排序算法,但是确实最简单的。 下图可以理解为队员排队。 遵循的规则: 1. 比较两个队员。 2. 如果左边的队员高,则两队员位置交换。 3. 向右移动一个位置,比较下…...
好多公司为啥只做网站 不考虑推广/个人主页网页设计模板
一、参数说明 登陆微信开放平台(注意是开放平台,不是公众平台);https://open.weixin.qq.com 做app首先需要在微信开放平台后台创建应用,第二步勾选ios和Android应用平台,其中Android应用需要填写应用签名、…...
住房和城乡建设网站方案/百度今日排行榜
安装php时候遇到的问题: dpkg: 处理软件包 php7.1-opcache (--configure)时出错: 依赖关系问题 - 仍未被配置dpkg: 依赖关系问题使得 php7.1-readline 的配置工作不能继续: php7.1-readline 依赖于 php7.1-common;然而:…...
go生物网站做蛋白定位/优化设计六年级上册数学答案
最近我发现当我访问 Mac 文件共享的时候,发现我的 Mac 名称变掉了,我不知道这是怎么回事,虽然无关大事,但是我想让它变回原本的名称,那样的话,在进行 AirDrop 的时候,我就很快从一堆设备中一眼辨…...
如何做影视网站的标题/网站维护需要学什么
通过使用zabbix 日志监控 我发现一个问题 例如oracle的日志有报错的情况 ,通常不会去手动清理 这样的话当第二次有日志写进来的时候 zabbix的机制是回去检查全部日志,这样的话之前已经告警过的错误日志,又会被检查到,这样就会出现重复告警,而…...