Kubernetes学习笔记12

news2024/11/26 8:43:03

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-app3
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginxapp3
        image: nginx:latest
        imagePullPolicy: IfNotPresent
        ports:
        - name: nginxapp3
          containerPort: 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.coloradmin.cn/o/1590917.html

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

相关文章

搭建个人智能家居 4 -WS2812B-RGB灯

搭建个人智能家居 4 - WS2812B-RGB灯 前言说明ESPHomeHomeAssistant 前言 上一篇文章我们已经完成了第一个外设的添加&#xff08;一个LED灯&#xff09;&#xff0c;今天接着来“壮大”这个系统&#xff0c;添加第二个外设“RGB灯”。 环境搭建可以回顾前面的文章。前文回顾&…

界面控件DevExtreme JS ASP.NET Core 2024年度产品规划预览(二)

在本文中我们将介绍今年即将发布的v24.1附带的主要特性&#xff0c;这些特性既适用于DevExtreme JavaScript (Angular、React、Vue、jQuery)&#xff0c;也适用于基于DevExtreme的ASP.NET MVC/Core控件。 注意&#xff1a;本文中列出的功能和特性说明官方当前/预计的发展计划&a…

PrimeKG:为精准医学分析设计的多模态知识图谱

PrimeKG&#xff1a;为精准医学分析设计的多模态知识图谱 PrimeKG简介数据资源和覆盖范围构建方法和技术细节PrimeKG多模态知识图谱的概览构建PrimeKG的过程PrimeKG 数据 多模态特性和临床应用PrimeKG 设计逻辑 论文&#xff1a;https://www.nature.com/articles/s41597-023-01…

盘点“整容”成功的国漫男主,唐三萧炎谁才是顶级颜值?

国漫男主千千万&#xff0c;可不是每一位都能做到颜值与实力并存&#xff01;有些男性角色的建模起初受限于技术和审美等原因&#xff0c;呈现出的效果并不理想&#xff0c;好在越来越多的作品开始尝试给角色模型更新换代&#xff0c;本期为您盘点那些成功更换模型的国漫男主&a…

Acrobat Pro DC 2023 for mac直装激活版 pdf编辑处理工具

Acrobat Pro DC 2023 for Mac是一款功能强大的PDF编辑器&#xff0c;为用户提供了全面且高效的PDF处理体验。 软件下载&#xff1a;Acrobat Pro DC 2023 for mac直装激活版下载 首先&#xff0c;它支持用户从现有文档创建PDF&#xff0c;或者将其他文件格式如图片、网页等轻松转…

【fastapi】搭建第一个fastapi后端项目

本篇文章介绍一下fastapi后端项目的搭建。其实没有什么好说的&#xff0c;按照官方教程来即可&#xff1a;https://fastapi.tiangolo.com/zh/ 安装依赖 这也是我觉得python项目的槽点之一。所有依赖都安装在本地&#xff0c;一旦在别人电脑上编写项目就又要安装一遍。很扯淡。…

JavaSEhomework2

题目&#xff0c;上图&#xff01;&#xff01; 上代码 import java.util.Scanner; public class homework01 {public static void main(String[] args) {Scanner input new Scanner(System.in);System.out.print("Enter the number of values: ");int num input.…

MySQL 表管理

目录 建库 语法&#xff1a; 库名命名规则&#xff1a; 相关命令&#xff1a; 建表 语法&#xff1a; 相关命令&#xff1a; 修改表 语法&#xff1a; 常用操作命令 复制表 数据类型 MySQL的10种常用数据类型&#xff1a; 数据的导入和导出 导入&#xff1a; 格…

CSS特效---HTML+CSS实现3D旋转卡片

1、演示 2、一切尽在代码中 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>Document</title&…

MongoDB爬虫:(某扑)实战

https://bbs.hupu.com/bxj网页地址: https://bbs.hupu.com/bxj 然后我们在网页上定义帖子名称、帖子链接、创建时间、回复数、最后回复用户...... 除此之外,我们发现虎扑步行街最多显示的页数(20): 、 当我们打开第3页的时候,网页的URL的地址变为了:https://bbs.hupu.…

迭代器模式:统一访问集合元素的优雅方式

在面向对象的软件开发中&#xff0c;迭代器模式是一种行为型设计模式&#xff0c;它提供了一种方法来顺序访问一个聚合对象中的各个元素&#xff0c;而又无需暴露该对象的内部表示。这种模式是集合处理特别是遍历集合的核心机制。本文将详细介绍迭代器模式的定义、实现、应用场…

RISC-V技术变革:一颗芯片,CPU与GPU合二为一

一颗万能的RISC-V芯片: 将CPU和GPU整合到一个核中 X-Silicon 推出创新的 RISC-V 芯片架构,将 CPU、矢量功能和 GPU 加速无缝集成。这种开源混合芯片专为多功能工作负载而设计,包括人工智能,旨在通过高效处理提升性能。 革命性的 CPU/GPU 混合处理器全新的 RISC-V CPU/GPU 混…

单片机之蓝牙通信

目录 蓝牙介绍 HC05蓝牙模块 HC05参数 HC05引脚 各个引脚功能 HC05模块的作用 工作模式 配置模式 引脚接线 用AT指令进行配置 常用的AT指令 正常模式 测试步骤 烧录的程序 前言&#xff1a; keil文件 蓝牙介绍 蓝牙&#xff1a;Bluetooth&#xff0c;其是低成…

Day:007(1) | Python爬虫:高效数据抓取的编程技术(scrapy框架使用)

Scrapy的介绍 Scrapy 是一个用于抓取网站和提取结构化数据的应用程序框架&#xff0c;可用于各种有用的应用程序&#xff0c;如数据挖掘、信息处理或历史存档。 尽管 Scrapy 最初是为网络抓取而设计的&#xff0c;但它也可用于使用API提取数据或用作通用网络爬虫。 Scrapy的优势…

20240409在全志H3平台的Nano Pi NEO CORE开发板上运行Ubuntu Core16.04时跑通4G模块EC200A-CN【PPP模式】

20240409在全志H3平台的Nano Pi NEO CORE开发板上运行Ubuntu Core16.04时跑通4G模块EC200A-CN【PPP模式】 2024/4/9 14:25 【不建议使用ppp模式&#xff0c;功耗大&#xff0c;貌似更过分的&#xff01;网速还低&#xff01;】 【唯一的优点&#xff1a;ppp模式下是通过脚本配置…

【深度学习实战(3)】打印自己模型的推理帧率

一、FPS(每秒传输帧数-Frames Per Second) FPS就是目标网络每秒可以处理&#xff08;检测&#xff09;多少帧(多少张图片),FPS简单来理解就是图像的刷新频率&#xff0c;也就是每秒多少帧,假设目标检测网络处理1帧要0.02s&#xff0c;此时FPS就是1/0.0250 其中Processing tim…

【示例】MySQL-MySQL中常见的锁

前言 本文主要讲述MySQL中常见的锁。 总结 | 各类别锁的名字 锁级别锁名字解释全局锁read lock全局锁只有可读锁表级锁 - 表锁read lock 表共享读锁write lock 表独占写锁表级锁 - 元数据锁&#xff08;meta data lock&#xff0c;MDL&#xff09;SHARED_READ_ONLYSHARED_NO…

突破像素限制,尽显照片细腻之美——Topaz Gigapixel AI for Mac/Win

在这个数字化的时代&#xff0c;我们都热爱用照片记录生活中的美好瞬间。然而&#xff0c;有时候我们会发现&#xff0c;由于各种原因&#xff0c;照片的像素可能无法满足我们的需求。这时候&#xff0c;Topaz Gigapixel AI for Mac/Win 这款强大的照片放大工具应运而生。 Top…

09-ARM开发板的HelloWorld

在ARM开发板上运行x86_64平台程序 前面在Ubuntu系统编译生成了X86_64平台的HelloWorld程序&#xff0c;通过NFS服务器&#xff0c;尝试在开发板上直接运行。 如图所示&#xff0c;程序无法正常运行&#xff0c;终端提示ARM开发板在执行x86架构&#xff08;Intel或AMD&#xff…

童年女神大盘点:谁是第一个让你心动的动漫女神?

每当提起我们的童年记忆&#xff0c;总有一抹亮丽的色彩来自于那些国产动漫中的女性角色&#xff0c;她们以其独特的魅力、鲜明的性格和卓越的才智&#xff0c;深深地烙印在了我们的心底&#xff0c;成为了一代人的集体回忆。今天&#xff0c;让我们一同回首&#xff0c;盘点那…