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容器的部署。以下是每一行的解释:
-
apiVersion: apps/v1: 指定使用的 Kubernetes API 版本,这里是 Apps API 的版本。 -
kind: Deployment: 定义资源对象的类型,这是一个 Deployment 对象,用于在集群中管理 Pod 的部署。 -
metadata: 定义 Deployment 元数据,包括资源的名称。 -
name: nginx-deployment: 指定 Deployment 的名称为 “nginx-deployment”。 -
spec: 定义 Deployment 的规范,包括副本数、选择器和模板。 -
replicas: 2: 指定要创建的 Pod 副本数为 2,表示要在集群中运行两个相同的 NGINX Pod。 -
selector: 定义标签选择器,用于选择属于该 Deployment 的 Pod。 -
matchLabels: 指定 Pod 必须具有哪些标签以匹配该 Deployment 的选择器。 -
app: web_server: 指定标签 “app” 的值必须为 “web_server”,用于匹配 Pod。 -
template: 定义要创建的 Pod 的模板。 -
metadata: 定义 Pod 模板的元数据,包括标签。 -
labels: 指定 Pod 的标签,这里设置 “app” 标签的值为 “web_server”。 -
spec: 定义 Pod 的规范,包括容器。 -
containers: 定义 Pod 中运行的容器的列表。 -
- name: nginx: 定义容器的名称为 “nginx”。 -
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的生命周期 。 为了满足不同业 务 景 , Kubernetes 开发了Deployment、ReplicaSet、DaemonSet、StatefuleSet、Job等多种Controller。我们⾸先学习最常用Deployment。 1.1 Kubectl命令直接创建 第一种是通过kubectl命令直接…...
Unity之四元数
欧拉角 万向节死锁 四元数是什么 Unity中四元数的初始化 四元数和欧拉角的互相转换 补充 四元数相乘代表旋转四元数...
【计算机硬件】3、输入输出技术、总线结构
文章目录 输入输出技术内存与接口地址的编址方法1、 内存与接口地址独立编址方法2、内存与接口地址统一编址方法 计算机和外设间的数据交互方式1、程序控制(查询)方式2、程序中断方式3、DMA方式(直接主存存取) 总线结构 输入输出技术 内存与接口地址的编…...
k8s的对外服务--ingress
service作用体现在两个方面 1、集群内部 不断跟踪pod的变化,更新endpoint中的pod对象,基于pod的IP地址不断变化的一种服务发现机制 2、集群外部 类似负载均衡器,把流量ip端口,不涉及转发url(http,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#类库工程生成的动态链接库调试时报错: System.MissingMethodException HResult0xFFFFFFFF Message找不到方法…… 软件结构如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; usi…...
Redis面试题23
Redis 的持久化机制是什么? 答:Redis 提供了两种持久化机制来保证数据的持久性,即 RDB(Redis Database)和 AOF(Append Only File)。 RDB 持久化:RDB 是 Redis 默认的持久化方式。它…...
Linux中的yum源仓库和NFS文件共享服务
一.yum简介 1.1 yum简介 yum,全称“Yellow dog Updater, Modified”,是一个专门为了解决包的依赖关系而存在的软件包管理器。类似于windows系统的中电脑软件关键,可以一键下载,一键安装和卸载。yum 是改进型的 RPM 软件管理器&am…...
【LeetCode2744】最大字符串配对数目
1、题目描述 【题目链接】 标签:数组,哈希表,字符串,模拟 给你一个下标从 0 开始的数组 words ,数组中包含 互不相同 的字符串。 如果字符串 words[i] 与字符串 words[j] 满足以下条件,我们称它们可以…...
安全加速SCDN是什么
安全加速SCDN(Secure Content Delivery Network,SCDN) 是集分布式DDoS防护、CC防护、WAF防护、BOT行为分析为一体的安全加速解决方案。已使用内容分发网络(CDN)或全站加速网络(ECDN)的用户&…...
Android 布局菜鸟 android中的布局类型和特点?
一、LinearLayout(线性布局) 1、 特点: 主要以水平或垂直方式来排列界面中的控件。并将控件排列到一条直线上。在线性布局中,如果水平排列,垂直方向上只能放一个控件,如果垂直排列,水平方向上也只能放一个控件。 2、适⽤场景: Android开发中最常见的 ⼀种布局⽅式,排列…...
2023总结与2024寒假计划
王泽政 2023 的总结 学习总结 关于 2023 学习总体上来讲,2023 学的东西还是不少的,有对技术栈广度的扩展,也有对计算机深度的挖掘。 学习内容总结: 学习 React 学习浏览器渲染原理 学习计算机网络 学习 Next.js 学习 Nest.…...
016-Vue-黑马2023:前后端分离开发(在线接口文档),前端工程化、Element、vue编写一个完成页面、Vue路由、vue打包部署到nginx
第三节 前后端分离开发 1、介绍 开发模式 前后端混合开发:传统开发模式 前后端分离开发:当前最为主流的开发模式 页面原型需求案例:分析出接口文档 离线开发文档示例: 2、YAPI(官网已停用) 202…...
如何给新华网投稿发稿?新华网的媒体发稿方法步骤
现如今,互联网已经成为了人们获取信息的主要途径,各大媒体网站也成为了发布自己作品的首选平台。其中,新华网作为中国最具影响力的新闻媒体之一,其内容覆盖面广、触及人群众多,因此,能够在新华网上发表文章…...
为什么 macOS 比 Windows 稳定?
在计算机操作系统领域,macOS 和 Windows 分别是苹果公司和微软公司的主打产品。尽管两者都拥有大量的用户群体,但在稳定性和用户体验方面,macOS 常常被认为优于 Windows。那么,为什么 macOS 比 Windows 更稳定呢? 我们…...
从matlab的fig图像文件中提取数据
这里用的是openfig()函数打开的fig文件 →→→【matlab 中 fig 数据提取】 很简洁 →→→【MATLAB提取 .fig 文件中的数据】 这个给出了包含多个曲线的情况 →→→【提取matlab fig文件里的数据和legend】 chatgpt给出的方法 打开fig文件并保存数据 我的…...
基于网络爬虫的微博热点分析,包括文本分析和主题分析
基于Python的网络爬虫的微博热点分析是一项技术上具有挑战性的任务。我们使用requests库来获取微博热点数据,并使用pandas对数据进行处理和分析。为了更好地理解微博热点话题,我们采用LDA主题分析方法,结合jieba分词工具将文本分割成有意义的…...
前端图片转base64 方法
在uni-app、Vue.js或其他前端框架中,将图片转换为Base64编码的过程是相似的。以下是一个简单的示例,说明如何在这些环境中使用JavaScript将图片转换为Base64编码。 1. HTML部分 首先,你需要在HTML中放置一个文件输入元素,用于选…...
Go语言数据结构(一)双向链表
list容器 Go语言中list容器定义在"container/list"包中,实现了一个双向链表。本文第一部分总结源码包中的方法,第二部分展示使用list包的常见示例用法以及刷题时的用法。 食用指南:先看第二部分的常用示例用法然后再用到时在第一部…...
【MySql】MySQL 如何创建新用户
具体代码与实现方法 登录 MySQL: 使用 root 用户或具有相应权限的用户登录到 MySQL。可以使用以下命令: mysql -u root -p这里 -u 后面跟的是用户名,-p 表示提示输入密码。 创建新用户: 使用以下 SQL 命令创建新用户:…...
【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...
Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...
R 语言科研绘图第 55 期 --- 网络图-聚类
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...
【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅
目录 前言 操作系统与驱动程序 是什么,为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中,我们在使用电子设备时,我们所输入执行的每一条指令最终大多都会作用到硬件上,比如下载一款软件最终会下载到硬盘上&am…...
水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关
在水泥厂的生产流程中,工业自动化网关起着至关重要的作用,尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关,为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多,其中不少设备采用Devicenet协议。Devicen…...
DAY 26 函数专题1
函数定义与参数知识点回顾:1. 函数的定义2. 变量作用域:局部变量和全局变量3. 函数的参数类型:位置参数、默认参数、不定参数4. 传递参数的手段:关键词参数5 题目1:计算圆的面积 任务: 编写一…...
渗透实战PortSwigger Labs指南:自定义标签XSS和SVG XSS利用
阻止除自定义标签之外的所有标签 先输入一些标签测试,说是全部标签都被禁了 除了自定义的 自定义<my-tag onmouseoveralert(xss)> <my-tag idx onfocusalert(document.cookie) tabindex1> onfocus 当元素获得焦点时(如通过点击或键盘导航&…...
华为OD机考- 简单的自动曝光/平均像素
import java.util.Arrays; import java.util.Scanner;public class DemoTest4 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint[] arr Array…...
