k8s学习-Deployment

Kubernetes通过各种Controller来管理Pod的生命周期 。 为了满足不同业 务 景 , Kubernetes 开发了Deployment、ReplicaSet、DaemonSet、StatefuleSet、Job等多种Controller。我们⾸先学习最常用Deployment。

1.1 Kubectl命令直接创建

第一种是通过kubectl命令直接创建:

kubectl run nginx-deployment --image=nginx:1.7.9 --replicas=2

在最新的 Kubernetes 版本中,kubectl create deployment 命令不再直接支持 --replicas 参数。副本数的指定现在通常是通过 kubectl scale 命令来完成。

kubectl create deployment nginx-deployment --image=nginx:1.7.9
#使用 kubectl scale 命令设置副本数:
kubectl scale deployment nginx-deployment --replicas=2

这样我们就部署了一个具有2个副本的nginx-deployment 。

1.2 YAML配置文件创建

第二种是通过配置文件+kubectl apply(kubectl create也可以)创建:
vi nginx.yml

apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deployment
spec:replicas: 2selector:matchLabels:app: web_servertemplate:metadata:labels:app: web_serverspec:containers:- name: nginximage: nginx:1.7.9

kubectl apply -f nginx.yml

[root@k8s-master kubernetes]# kubectl get deployment
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
busybox            2/2     2            2           32m
nginx-deployment   2/2     2            2           6m7s

1.3 删除deployment

kubectl delete deployment nginx-deployment

执行之后,K8S会自动帮我们删除相关Deployment、ReplicaSet(副本集)以及Pod。

1.4 Deployment配置⽂件简介

既然 用YAML配置文件 署应用 , 现在就很有必要了解⼀下Deployment的配置格式了,其他Controller(比如DaemonSet)非常类似。
vi nginx-deployment.yml

apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deployment
spec:replicas: 2selector:matchLabels:app: web_servertemplate:metadata:labels:app: web_serverspec:containers:- name: nginximage: nginx:1.7.9

这是一个Kubernetes Deployment的YAML文件,用于定义一个NGINX容器的部署。以下是每一行的解释:

  1. apiVersion: apps/v1: 指定使用的 Kubernetes API 版本,这里是 Apps API 的版本。

  2. kind: Deployment: 定义资源对象的类型,这是一个 Deployment 对象,用于在集群中管理 Pod 的部署。

  3. metadata: 定义 Deployment 元数据,包括资源的名称。

  4. name: nginx-deployment: 指定 Deployment 的名称为 “nginx-deployment”。

  5. spec: 定义 Deployment 的规范,包括副本数、选择器和模板。

  6. replicas: 2: 指定要创建的 Pod 副本数为 2,表示要在集群中运行两个相同的 NGINX Pod。

  7. selector: 定义标签选择器,用于选择属于该 Deployment 的 Pod。

  8. matchLabels: 指定 Pod 必须具有哪些标签以匹配该 Deployment 的选择器。

  9. app: web_server: 指定标签 “app” 的值必须为 “web_server”,用于匹配 Pod。

  10. template: 定义要创建的 Pod 的模板。

  11. metadata: 定义 Pod 模板的元数据,包括标签。

  12. labels: 指定 Pod 的标签,这里设置 “app” 标签的值为 “web_server”。

  13. spec: 定义 Pod 的规范,包括容器。

  14. containers: 定义 Pod 中运行的容器的列表。

  15. - name: nginx: 定义容器的名称为 “nginx”。

  16. image: nginx:1.7.9: 指定要使用的 NGINX 镜像及其版本。

因此,这个 YAML 文件描述了一个名为 “nginx-deployment” 的 Deployment,该 Deployment 负责管理两个运行 NGINX 容器的 Pod,并且这些 Pod 必须具有标签 “app: web_server”。容器使用 NGINX 1.7.9 版本的镜像。

1.5伸缩

伸缩是指在线增加或减少Pod的副本数。Deployment nginx-deployment初始是两个副本。

[root@k8s-master kubernetes]# kubectl get deployment nginx-deployment
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   2/2     2            2           21s

现在修改nginx.yml⽂件,将副本改成5个
spec:
replicas: 5
执行kubectl apply -f nginx-deployment.yml

[root@k8s-master kubernetes]# kubectl get deployment nginx-deployment
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   5/5     5            5           114s

1.6 Failover

下⾯我们模拟k8s-node2故障,关闭该节点,编辑yml文件恢复到3个节点。

[root@k8s-node2 ~]# halt -h
[root@k8s-master kubernetes]# kubectl get nodes
NAME         STATUS     ROLES    AGE   VERSION
k8s-master   Ready      master   57m   v1.18.0
k8s-node1    Ready      <none>   56m   v1.18.0
k8s-node2    NotReady   <none>   56m   v1.18.

查看pod(可能需要等待一会)

[root@k8s-master kubernetes]# kubectl get pod -o wide
NAME                                READY   STATUS        RESTARTS   AGE    IP            NODE        NOMINATED NODE   READINESS GATES
nginx-deployment-79c457c54b-js27q   1/1     Terminating   1          17m    10.244.2.10   k8s-node2   <none>           <none>
nginx-deployment-79c457c54b-r297k   1/1     Running       0          3m2s   10.244.1.11   k8s-node1   <none>           <none>
nginx-deployment-79c457c54b-vvvhr   1/1     Terminating   1          15m    10.244.2.9    k8s-node2   <none>           <none>
nginx-deployment-79c457c54b-whsp8   1/1     Running       0          17m    10.244.1.6    k8s-node1   <none>           <none>
nginx-deployment-79c457c54b-z5n54   1/1     Running       0          3m2s   10.244.1.12   k8s-node1   <none>           <none>

k8s-node2上的Pod最终标记为Terminating状态,并在k8s-node1上新建两个Pod,维持副本总数量为3。
当k8s-node2恢复后,Terminating的Pod会自动被删除,不过已经运行在k8s-node1的Pod是不会重新调度回k8s-node2的。

1.7用label控制Pod位置

默认情况下,K8S的Scheduler会均衡调度Pod到所有可用的Node节点,但是有些时候希望将指定的Pod部署到指定的Node节点。例如,一个I/O密集型的Pod可以尽量部署在配置了SSD的Node节点,又或者一个需要GPU的Pod可以尽量部署在配置了GPU的Node节点上。

不用担心,K8S为我们提供了label来实现这个功能,label是一个key/value对,可以灵活设置各种自定义的属性。比如,我们这里假设我们的k8s-demo示例项目是一个I/O密集型的API,还假设k8s-node1是一个配置了SSD的Node节点:
  
kubectl label node k8s-node1 disktype=ssd
kubectl get node --show-labels=true

在这里插入图片描述
修改yml文件

apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deployment
spec:replicas: 2selector:matchLabels:app: web_servertemplate:metadata:labels:app: web_serverspec:containers:- name: nginximage: nginx:1.7.9nodeSelector:disktype: ssd

然后,再次apply创建资源:

kubectl apply -f nginx-deployment.yml
验证一下,所有的k8s-demo的Pod全都调度到了k8s-node1上面,符合预期:

[root@k8s-master kubernetes]# kubectl get pod -o wide
NAME                                READY   STATUS    RESTARTS   AGE   IP            NODE        NOMINATED NODE   READINESS GATES
nginx-deployment-744c4bcdf6-4bzgh   1/1     Running   0          37s   10.244.1.13   k8s-node1   <none>           <none>
nginx-deployment-744c4bcdf6-b5t2f   1/1     Running   0          36s   10.244.1.14   k8s-node1   <none>           <none>
nginx-deployment-744c4bcdf6-ch65k   1/1     Running   0          35s   10.244.1.15   k8s-node1   <none>           <none>

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

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

相关文章

ROS第 9 课 编写简单的服务端 Server

文章目录 第 9 课 编写简单的服务端 Server1.创建服务器代码2.运行服务器节点 第 9 课 编写简单的服务端 Server 1.创建服务器代码 注意&#xff1a;在创建服务器代码之前&#xff0c;需要先创建工作空间和功能包&#xff0c;具体操作过程可前往目录“第4课 创建工作空间与功能…

蓝桥杯每日一题---基数排序

题目 分析 在实际的比赛过程中很少会自己手写排序&#xff0c;顶多是定义一下排序规则。之所以要练习一下基数排序&#xff0c;是因为在后续学习过程中学到后缀数组时需要自己手写基数排序&#xff0c;那么这里使用的方法也和后缀数组一致&#xff0c;理解这里也便于后缀数组的…

领域特定语言(Domain-Specific Language, DSL)在 Visual Studio 2022中的实验——建立领域模型

一、环境 dotnet --version 8.0.101 Microsoft Visual Studio Enterprise 2022 (64 位) - Current 版本 17.8.4 已安装组件 ComponentLinkVisual Studiohttp://go.microsoft.com/fwlink/?LinkId185579Visual Studio SDKhttps://go.microsoft.com/fwlink/?li…

RTC讲解

RTC&#xff08;Real Time Clock&#xff09;实时时钟 RTC实时时钟本质上是一个独立的定时器。RTC模块拥有一组连续计数的32位无符号计数器&#xff0c;在相应软件配置下&#xff0c;可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。 RTC模块和时钟配…

提升开发效率,Fiddler Everywhere for Mac助您解决网络调试难题

在现代软件开发中&#xff0c;网络调试是一个不可或缺的环节。无论是前端开发还是后端开发&#xff0c;我们经常需要对网络请求进行监控和调试&#xff0c;以便及时发现并解决问题。而Fiddler Everywhere for Mac作为一款强大的网络调试工具&#xff0c;能够帮助开发者提升工作…

Ubuntu重启后进入initramfs导致无法开机

今晚&#xff0c;我的电脑意外关机&#xff0c;重新开机后打开了虚拟机后出现initramfs&#xff0c;一直无法开机。该虚拟机使用的是 vm17,系统是ubuntu20, 解决方案 使用如下命令查看和识别磁盘、分区或文件系统的信息 在initramfs后面输入 fsck /dev/sdb4 ,即修复上面损坏的…

32 选择组件

效果演示 实现了一个复选框的动画效果&#xff0c;当复选框被选中时&#xff0c;复选框的前面会出现一个勾号&#xff0c;同时复选框的背景颜色会变成灰色&#xff0c;复选框旁边会出现一个火花效果。当复选框被取消选中时&#xff0c;复选框的勾号会消失&#xff0c;复选框的背…

线程同步--生产者消费者模型

文章目录 一.条件变量pthread线程库提供的条件变量操作 二.生产者消费者模型生产者消费者模型的高效性基于环形队列实现生产者消费者模型中的数据容器 一.条件变量 条件变量是线程间共享的全局变量,线程间可以通过条件变量进行同步控制条件变量的使用必须依赖于互斥锁以确保线…

Docker(三)使用 Docker 镜像

作者主页&#xff1a; 正函数的个人主页 文章收录专栏&#xff1a; Docker 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01; 使用 Docker 镜像 在之前的介绍中&#xff0c;我们知道镜像是 Docker 的三大组件之一。 Docker 运行容器前需要本地存在对应的镜像&#x…

行驶证OCR识别应用领域有哪些?

随着科技的不断发展&#xff0c;OCR技术已经逐渐成熟&#xff0c;并在各个领域得到了广泛的应用。其中&#xff0c;OCR技术在行驶证识别领域的应用也日益受到关注。本文将重点介绍行驶证OCR识别的应用领域&#xff0c;以便更好地了解这一技术的应用前景。 首先&#xff0c;行驶…

尚硅谷Nginx高级配置笔记

写在前面&#xff1a;本笔记是学习尚硅谷nginx可成的时候的笔记&#xff0c;不是原创&#xff0c;如有需要&#xff0c;可以去官网看视频&#xff0c;以下是pdf文件 Nginx高级 第一部分&#xff1a;扩容 通过扩容提升整体吞吐量 1.单机垂直扩容&#xff1a;硬件资源增加 云…

计算机毕业设计----SSH会议室管理系统

项目介绍 本系统为基于jspsshmysql的会议室管理系统&#xff0c;包含普通用户和管理员&#xff0c;系统功能如下&#xff1a; 普通用户&#xff1a;会议室管理、会议管理、用户管理、个人资料。 管理员用户&#xff1a;会议室管理、会议管理、用户管理、部门管理、设备管理、个…

基于docker创建nginx容器

docker一键安装可以参考我这个博客&#xff1a;一键安装docker 1.创建基础容器 docker run -p280:280 --name nginx -d nginx创建挂载到容器的宿主机文件夹 mkdir -p /home/000nginx-ebrms-ftp/html mkdir -p /home/000nginx-ebrms-ftp/logs mkdir -p /home/000nginx-ebrms-f…

三坐标平台对环境的温度有要求吗——河北北重

三坐标铸铁平台对环境的温度有一定的要求。通常情况下&#xff0c;三坐标平台在使用过程中要求环境的温度保持在一定范围内&#xff0c;以确保测量数据的准确性和稳定性。 具体的温度要求可能会因不同的三坐标铸铁平台型号和制造商而有所不同&#xff0c;一般来说&#xff0c;常…

Unity Mirror VR联机开发 实战篇(二)

一、迁移示例中的联机物体 1、将MirrorExamplesVR工程中的部分文件夹复制到自己的工程中。 1、打开MirrorExamplesVR中的 SceneVR-Common场景。 2、将场景中没用的东西都删掉&#xff0c;只留下面这些&#xff0c;新建一个空物体XR Mirror&#xff0c;将所有剩下的物体拖成XR …

汽车连接器接线端子和多芯线束连接界面

冷压接的开式压接和闭式压接以及热压接的超声波焊接对汽车连接器接线端子和多芯线束连接界面 连接器接线端子和多芯线束的连接是电子线束行业&#xff0c;特别是汽车行业常用的导线连接方式。汽车整车线束又由许多分支线束组成&#xff0c;而分支线束必须通过连接器实现连接&am…

绝地求生【违规处罚工作公示】1月8日-1月14日

1月8日至1月14日期间&#xff0c;共计对174,636个违规账号进行了封禁&#xff0c;其中164,757个账号因使用外挂被永久封禁。 若您游戏中遇到违规行为&#xff0c;建议您优先在游戏内进行举报&#xff1b; 另外您也可以在官方微信公众号【PUBG国际版】中点击“ 服务中心 - 举报…

python统计分析——样本均值的分布(上)

参考资料&#xff1a;用python动手学统计学 1、导入库 import numpy as np import pandas as pd import scipy as sp from scipy import statsfrom matplotlib import pyplot as plt import seaborn as sns 2、设置总体 本次研究总体是均值为4、标准差为0.8的正态总体。 po…

使用 MinIO 和 PostgreSQL 简化数据事件

本教程将教您如何使用 Docker 和 Docker Compose 在 MinIO 和 PostgreSQL 之间设置和管理数据事件&#xff0c;也称为存储桶或对象事件。 您可能已经在利用 MinIO 事件与外部服务进行通信&#xff0c;现在您将通过使用 PostgreSQL 自动化和简化数据事件管理来增强数据处理能力…

Linux--磁盘与文件系统

目录 1.什么是文件系统 2.磁盘 2.1什么时磁盘 2.2磁盘的物理存储结构 2.3磁盘的逻辑抽象结构 3.磁盘文件系统&#xff08;EXT2&#xff09; inode Table(i结点表) Data Block inode Bitmap(inode位图) Block Bitmap(块位图) 在Linux如何删除文件 Group Descriptor Ta…