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.

学习总结:

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

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

相关文章

html基础——CSS

在HTML中&#xff0c;CSS的作用是用于控制网页的样式&#xff0c;包括字体、颜色、背景、布局等方面的设计。通过一个样例来说明CSS的作用&#xff1a; 如下是一个名为global.css的CSS文件&#xff1a; .C1{font-size: 10px;color: blue;border:1px solid red;height: 200px;…

顺序表C语言、C#代码实现

以下是使用C语言、C#、Java、JavaScript、Python和Go实现顺序表&#xff08;即数组&#xff09;的基本操作的示例代码。 C语言实现&#xff1a; #include <stdio.h> #include <stdlib.h>#define MAX_SIZE 100typedef struct {int data[MAX_SIZE];int length; } S…

Springboot+Vue项目-基于Java+MySQL的旅游网站系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…

C# 接口和抽象类有效的搭配使用建议

在面向对象设计中&#xff0c;接口&#xff08;Interfaces&#xff09;和抽象类&#xff08;Abstract Classes&#xff09;都是用来实现抽象概念的机制&#xff0c;但它们的使用和目的有所不同。选择先定义接口还是抽象类&#xff0c;或者是如何组合使用它们&#xff0c;主要取…

免费升级至HTTPS协议教程

一、前言 HTTPS协议以其安全性和数据加密特性&#xff0c;逐渐取代HTTP成为互联网通信的主流协议。本文将为您简洁明了地介绍如何免费升级至HTTPS协议。 二、获取免费SSL证书 选择证书提供商&#xff1a;如JoySSL等提供免费SSL证书的服务。 免费申请地址https://www.joyssl.…

一键开启Scrum回顾会议的精彩时刻

其实回顾会议作为一个检视、反馈、改进环节&#xff0c;不仅在传统的瀑布管理模式中&#xff0c;还是在Scrum一类的敏捷管理流程中&#xff0c;都是非常重要的活动。一些团队认为它无法产生直接的价值&#xff0c;所以有意忽略了这个会议&#xff1b;一些团队在越来越多的回顾中…

如何强制复制网站上的文字

文章目录 拖拽复制利用开发者工具利用js脚本禁用js执行开发者工具不能打开 平时浏览网页和查找资料时&#xff0c;总会需要复制一些文字内容&#xff0c;用来引用、收藏、摘抄啊什么的&#xff0c;但是偶尔会遇到一些网站会禁止复制文字&#xff0c;一般都是让你开会员或者注册…

java快速构建飞书API消息推送、消息加急等功能

文章目录 飞书机器人自定义机器人自定义应用机器人 自定义应用发送消息普通文本 text富文本 post图片 image文件 file语音 audio视频 media消息卡片 interactive分享群名片 share_chat分享个人名片 share_user 批量发送消息消息加急发送应用内加急发送短信加急 发送电话加急spr…

2024年第十四届MathorCup数学应用挑战赛A题思路分享(妈妈杯)

A题 移动通信网络中PCI规划问题 物理小区识别码(PCI)规划是移动通信网络中下行链路层上,对各覆盖小区编号进行合理配置,以避免PCI冲突、PCI混淆以及PCI模3干扰等现象。PCI规划对于减少物理层的小区间互相干扰(ICI),增加物理下行控制信道(PDCCH)的吞吐量有着重要的作用,尤其…

JavaScript入门--变量

JavaScript入门--变量 一、JS变量二、变量命名三、常量四、局部变量 一、JS变量 定义变量a, b, c&#xff0c;并输出到控制台。 var a 1; var b 13.14; var c hello Js;console.log(a, b, c) //console.log()语句用于输出结果到控制台&#xff0c;类似python的print语句…

市面上常用财务软件有哪些?

云会计财务软件&#xff0c;免安装免维护&#xff0c;节省成本&#xff0c;受到很多小微企业欢迎。那么&#xff0c;常用财务软件有哪些&#xff1f; 1、易舟云财务软件 小微企业常用财务软件&#xff0c;便宜好用&#xff0c;极致的用户体验&#xff01;一键录入凭证&#xff…

redis的过期策略和内存淘汰机制(redis篇)

分享并学习一下redis的过期策略和内存淘汰机制 在平时的工作或者学习中&#xff0c;即便自己没有实打实的用过redis。但是能有对这方面的思考&#xff0c;再结合一些实际场景和理论&#xff0c;那么我相信自己或者你都会越来越厉害的。 首先&#xff0c;我们需要认清为啥redis要…

【Java】Set集合的基本使用

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 一、HashSet集合 1.HashSet集合的特点 2.HashSet常用方法 ①&#xff1a;add(Object o)&#xff1a;向Set集合中添加元素&#xff0c;不允许添加重复数据。 ②&#xff1a;size()&#xff1a;返回Set集合中的元素个数…

Android8.1 MTK平台 修改蓝牙默认名称

的默认蓝牙名称为 Android Bluedroid 通过搜索你会找到如下文件 device/generic/common/bluetooth/bdroid_buildcfg.h #ifndef _BDROID_BUILDCFG_H #define _BDROID_BUILDCFG_H#define BTM_DEF_LOCAL_NAME "Android Bluedroid"#endif 如果单一情况你修改此处即可…

Ubuntu无网络标识的解决方法

1.出现的情况的特点 2.解决办法 2.1 进入root并输入密码 sudo su 2.2 更新NetworkManager的配置 得先有gedit或者vim&#xff0c;两个随意一个&#xff0c;这里用的gedit&#xff0c;没有就先弄gedit&#xff0c;有的话直接下一步 apt-get install gedit 或者vim apt-get ins…

Docker部署Logstash同步Mysql数据到ES

1、准备配置文件文件夹 2、部署logstash & elasticsearch docker pull docker.elastic.co/logstash/logstash:7.15.0 ## 替换{你的ES地址}为ES地址 docker run -d --name logstash -p 5044:5044 -p 9600:9600 -v D:\logstash\data\:/usr/share/logstash/data -v D:\logst…

vue2中echarts横向柱状图一个柱子多个颜色渐变(渲染在页面上)

一、渲染到页面的准备 1、设置渲染节点&#xff08;这里使用了ref&#xff09; <div class"index" ref"lineStyle"></div> 2、寻找到节点并初始化 let ref this.$refs.lineStyle; this.myChart1 echarts.init(ref); 3、尝试渲染 this.myC…

Flink学习(四)-数据管道 ETL

一、状态转换 map() 只适用于一对一的转换&#xff0c;即对每个进入算子的流元素&#xff0c;map() 将仅输出一个转换后的元素。 flatmap() 可以输出任意数量的元素&#xff0c;也可以一个都不发。 二、Keyed Streams keyBy() 相当于 sql 中的 group by&#xff0c;通过…

图片合成二维码怎么实现?图片二维码的生成技巧

图片合成二维码如何制作呢&#xff1f;现在很多的二维码都会提供图片预览的功能&#xff0c;我们可以用手机扫描二维码来查看图片的信息&#xff0c;比如很多的产品信息、旅游攻略、产品海报等等类型经常会制作这种类型的二维码。 其实图片制作二维码的方法很简单&#xff0c;…

生产者和消费者模型 | 阻塞队列 | 信号量 | 环形队列

文章目录 1.生产者和消费者模型2.生产者和消费者模型优点3.阻塞队列4.POSIX信号量5.基于环形队列的生产消费模型 本文完整的代码放在了这&#xff1a; Gitee链接 1.生产者和消费者模型 生产者和消费者模型&#xff0c;概括起来其实是一个321原则&#xff1a;3是&#xff1a;三…