当前位置: 首页 > news >正文

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>

相关文章:

k8s学习-Deployment

Kubernetes通过各种Controller来管理Pod的生命周期 。 为了满足不同业 务 景 &#xff0c; Kubernetes 开发了Deployment、ReplicaSet、DaemonSet、StatefuleSet、Job等多种Controller。我们⾸先学习最常用Deployment。 1.1 Kubectl命令直接创建 第一种是通过kubectl命令直接…...

Unity之四元数

欧拉角 万向节死锁 四元数是什么 Unity中四元数的初始化 四元数和欧拉角的互相转换 补充 四元数相乘代表旋转四元数...

【计算机硬件】3、输入输出技术、总线结构

文章目录 输入输出技术内存与接口地址的编址方法1、 内存与接口地址独立编址方法2、内存与接口地址统一编址方法 计算机和外设间的数据交互方式1、程序控制(查询)方式2、程序中断方式3、DMA方式&#xff08;直接主存存取&#xff09; 总线结构 输入输出技术 内存与接口地址的编…...

k8s的对外服务--ingress

service作用体现在两个方面 1、集群内部 不断跟踪pod的变化&#xff0c;更新endpoint中的pod对象&#xff0c;基于pod的IP地址不断变化的一种服务发现机制 2、集群外部 类似负载均衡器&#xff0c;把流量ip端口&#xff0c;不涉及转发url&#xff08;http&#xff0c;https&a…...

CSS 雷达监测效果

<template><view class="center"><view class="loader"><view></view></view></view></template><script></script><style>/* 设置整个页面的背景颜色为深灰色 */body {background-col…...

C# System.MissingMethodException

C#应用程序工程调用C#类库工程生成的动态链接库调试时报错&#xff1a; System.MissingMethodException HResult0xFFFFFFFF Message找不到方法…… 软件结构如下&#xff1a; using System; using System.Collections.Generic; using System.Linq; using System.Text; usi…...

Redis面试题23

Redis 的持久化机制是什么&#xff1f; 答&#xff1a;Redis 提供了两种持久化机制来保证数据的持久性&#xff0c;即 RDB&#xff08;Redis Database&#xff09;和 AOF&#xff08;Append Only File&#xff09;。 RDB 持久化&#xff1a;RDB 是 Redis 默认的持久化方式。它…...

Linux中的yum源仓库和NFS文件共享服务

一.yum简介 1.1 yum简介 yum&#xff0c;全称“Yellow dog Updater, Modified”&#xff0c;是一个专门为了解决包的依赖关系而存在的软件包管理器。类似于windows系统的中电脑软件关键&#xff0c;可以一键下载&#xff0c;一键安装和卸载。yum 是改进型的 RPM 软件管理器&am…...

【LeetCode2744】最大字符串配对数目

1、题目描述 【题目链接】 标签&#xff1a;数组&#xff0c;哈希表&#xff0c;字符串&#xff0c;模拟  给你一个下标从 0 开始的数组 words &#xff0c;数组中包含 互不相同 的字符串。  如果字符串 words[i] 与字符串 words[j] 满足以下条件&#xff0c;我们称它们可以…...

安全加速SCDN是什么

安全加速SCDN&#xff08;Secure Content Delivery Network&#xff0c;SCDN&#xff09; 是集分布式DDoS防护、CC防护、WAF防护、BOT行为分析为一体的安全加速解决方案。已使用内容分发网络&#xff08;CDN&#xff09;或全站加速网络&#xff08;ECDN&#xff09;的用户&…...

Android 布局菜鸟 android中的布局类型和特点?

一、LinearLayout(线性布局) 1、 特点: 主要以水平或垂直方式来排列界面中的控件。并将控件排列到一条直线上。在线性布局中,如果水平排列,垂直方向上只能放一个控件,如果垂直排列,水平方向上也只能放一个控件。 2、适⽤场景: Android开发中最常见的 ⼀种布局⽅式,排列…...

2023总结与2024寒假计划

王泽政 2023 的总结 学习总结 关于 2023 学习总体上来讲&#xff0c;2023 学的东西还是不少的&#xff0c;有对技术栈广度的扩展&#xff0c;也有对计算机深度的挖掘。 学习内容总结&#xff1a; 学习 React 学习浏览器渲染原理 学习计算机网络 学习 Next.js 学习 Nest.…...

016-Vue-黑马2023:前后端分离开发(在线接口文档),前端工程化、Element、vue编写一个完成页面、Vue路由、vue打包部署到nginx

第三节 前后端分离开发 1、介绍 开发模式 前后端混合开发&#xff1a;传统开发模式 前后端分离开发&#xff1a;当前最为主流的开发模式 页面原型需求案例&#xff1a;分析出接口文档 离线开发文档示例&#xff1a; 2、YAPI&#xff08;官网已停用&#xff09; 202…...

如何给新华网投稿发稿?新华网的媒体发稿方法步骤

现如今&#xff0c;互联网已经成为了人们获取信息的主要途径&#xff0c;各大媒体网站也成为了发布自己作品的首选平台。其中&#xff0c;新华网作为中国最具影响力的新闻媒体之一&#xff0c;其内容覆盖面广、触及人群众多&#xff0c;因此&#xff0c;能够在新华网上发表文章…...

为什么 macOS 比 Windows 稳定?

在计算机操作系统领域&#xff0c;macOS 和 Windows 分别是苹果公司和微软公司的主打产品。尽管两者都拥有大量的用户群体&#xff0c;但在稳定性和用户体验方面&#xff0c;macOS 常常被认为优于 Windows。那么&#xff0c;为什么 macOS 比 Windows 更稳定呢&#xff1f; 我们…...

从matlab的fig图像文件中提取数据

这里用的是openfig&#xff08;&#xff09;函数打开的fig文件 →→→【matlab 中 fig 数据提取】 很简洁 →→→【MATLAB提取 .fig 文件中的数据】 这个给出了包含多个曲线的情况 →→→【提取matlab fig文件里的数据和legend】 chatgpt给出的方法 打开fig文件并保存数据 我的…...

基于网络爬虫的微博热点分析,包括文本分析和主题分析

基于Python的网络爬虫的微博热点分析是一项技术上具有挑战性的任务。我们使用requests库来获取微博热点数据&#xff0c;并使用pandas对数据进行处理和分析。为了更好地理解微博热点话题&#xff0c;我们采用LDA主题分析方法&#xff0c;结合jieba分词工具将文本分割成有意义的…...

前端图片转base64 方法

在uni-app、Vue.js或其他前端框架中&#xff0c;将图片转换为Base64编码的过程是相似的。以下是一个简单的示例&#xff0c;说明如何在这些环境中使用JavaScript将图片转换为Base64编码。 1. HTML部分 首先&#xff0c;你需要在HTML中放置一个文件输入元素&#xff0c;用于选…...

Go语言数据结构(一)双向链表

list容器 Go语言中list容器定义在"container/list"包中&#xff0c;实现了一个双向链表。本文第一部分总结源码包中的方法&#xff0c;第二部分展示使用list包的常见示例用法以及刷题时的用法。 食用指南&#xff1a;先看第二部分的常用示例用法然后再用到时在第一部…...

【MySql】MySQL 如何创建新用户

具体代码与实现方法 登录 MySQL&#xff1a; 使用 root 用户或具有相应权限的用户登录到 MySQL。可以使用以下命令&#xff1a; mysql -u root -p这里 -u 后面跟的是用户名&#xff0c;-p 表示提示输入密码。 创建新用户&#xff1a; 使用以下 SQL 命令创建新用户&#xff1a;…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...

LangFlow技术架构分析

&#x1f527; LangFlow 的可视化技术栈 前端节点编辑器 底层框架&#xff1a;基于 &#xff08;一个现代化的 React 节点绘图库&#xff09; 功能&#xff1a; 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...

离线语音识别方案分析

随着人工智能技术的不断发展&#xff0c;语音识别技术也得到了广泛的应用&#xff0c;从智能家居到车载系统&#xff0c;语音识别正在改变我们与设备的交互方式。尤其是离线语音识别&#xff0c;由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力&#xff0c;广…...