k8s之Deployment

news2024/11/26 9:41:51

写在前面

本文一起看下Deployment API对象,该对象的作用是保证POD的高可用,即保证POD的可用数量一直维持在某个期望状态中,比如期望状态是有3个POD,当有一个POD意外终止时,则会自动再启动一个新POD,所以Deployment和POD之间是一种松散的引用关系,另外被引用的POD也可能被负载均衡组件引用,所以并非专属于Deployment,这点不同于Job和CronJob,Job和CronJob同POD是一种强绑定的关系,POD只为Job或CronJob所用。下面我们一起来看下。

1:创建Deployment

首先生成yaml模板,如下:

dongyunqi@mongodaddy:~/k8s$ export out="--dry-run=client -o yaml" && kubectl create deploy ngx-dep --image=nginx:alpine $out
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: ngx-dep
  name: ngx-dep
spec:
  replicas: 2
  selector:
    matchLabels:
      app: ngx-dep
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: ngx-dep
    spec:
      containers:
      - image: nginx:alpine
        name: nginx
        resources: {}
status: {}

修改完善后如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: ngx-dep
  name: ngx-dep
  
spec:
  replicas: 2
  selector:
    matchLabels:
      app: ngx-dep
      
  template:
    metadata:
      labels:
        app: ngx-dep
    spec:
      containers:
      - image: nginx:alpine
        name: nginx

主要字段:

selector:用来选择要管理的POD,类似于spring的<bean ref=""/>中的ref,但是这里是通过labels.app选择
replicas:POD的副本数量,即POD的期望状态,如果是2则代表必须有2个POD

对于selector比较绕,可以参考下图:

在这里插入图片描述

apply应用:

dongyunqi@mongodaddy:~/k8s$ kubectl apply -f deploy.yml 
deployment.apps/ngx-dep created

查看:

dongyunqi@mongodaddy:~/k8s$ kubectl get deploy
NAME      READY   UP-TO-DATE   AVAILABLE   AGE
ngx-dep   2/2     2            2           20s

看下主要信息,READY表示正常POD和期望POD信息,格式是正常POD数/期望POD数,UP-TO-DATE是部署完成的POD数(部署完成不一定健康,如内部应用不可用),AVAILABEL是健康的POD数(可正常对外提供服务),AGE是从apply完成到当前经过的时间。看下内部的POD:

dongyunqi@mongodaddy:~/k8s$ kubectl get pod
NAME                      READY   STATUS    RESTARTS   AGE
ngx-dep-bfbb5f64b-ds78j   1/1     Running   0          6s
ngx-dep-bfbb5f64b-xr6gw   1/1     Running   0          6s

主要看下POD的NAME命名规则,规则是deployment API对象的name-POD模板哈希值-5位随机字符串,直接对号入座即可。

2:期望状态测试

前面我们提到了Deployment会维护POD数量在一个期望的状态,此时我们的期望状态是2,为了方便对比,先看下当前的状态:

dongyunqi@mongodaddy:~/k8s$ kubectl get pod
NAME                      READY   STATUS    RESTARTS   AGE
ngx-dep-bfbb5f64b-ds78j   1/1     Running   0          6s
ngx-dep-bfbb5f64b-xr6gw   1/1     Running   0          6s

此时有2个PDO,ds78jds78j,然后我们模拟误删除ds78j:

dongyunqi@mongodaddy:~/k8s$ kubectl delete pod ngx-dep-bfbb5f64b-ds78j && kubectl get pod ## 这里使用&& kubectl get pod是为了快速看到创建中的新POD
pod "ngx-dep-bfbb5f64b-chqhp" deleted
NAME                      READY   STATUS              RESTARTS   AGE
ngx-dep-bfbb5f64b-ds78j   1/1     Running             0          12m
ngx-dep-bfbb5f64b-lvdgz   0/1     ContainerCreating   0          1s ## 新创建的POD,此时容器创建中
dongyunqi@mongodaddy:~/k8s$ kubectl get pod 
NAME                      READY   STATUS    RESTARTS   AGE
ngx-dep-bfbb5f64b-ds78j   1/1     Running   0          13m
ngx-dep-bfbb5f64b-lvdgz   1/1     Running   0          42s

可以看到很快就新建一个POD并进入状态ContainerCreating,并很快创建完成进入RUNNING状态,到了2这个期望状态,不得不说真的很强。

3:扩容测试

扩容也比较简单,直接使用kubectl scale --replicas=新POD数,如从2变为3,如下:

dongyunqi@mongodaddy:~/k8s$ kubectl scale --replicas=3 deploy ngx-dep
deployment.apps/ngx-dep scaled
dongyunqi@mongodaddy:~/k8s$ kubectl get pod
NAME                      READY   STATUS    RESTARTS   AGE
ngx-dep-bfbb5f64b-ds78j   1/1     Running   0          16m
ngx-dep-bfbb5f64b-lvdgz   1/1     Running   0          3m43s
ngx-dep-bfbb5f64b-vj9qk   1/1     Running   0          3s

可以看到POD的个数就变成3了。但是这种方式只是临时的,如果是重新apply的话,又会变回去,所以最好的办法是直接修改yaml文件,然后重新apply,但如果是线上应急的话,也可以临时采用这种方法,总之,具体情况具体分析,灵活应对。

写在后面

多知道一点

1:Deployment只能用于无状态服务,因为会随时老的退出,增加新的,对于有状态服务,如redis,kafka,es等不能使用Deployment,不然会造成数据丢失
2:Deployment用来处理无状态在线业务,和Job,CronJob处理离线业务相对应
3:Deployment仅仅负责维持POD在一个期望的状态,不具备负载均衡等功能,这符合单一职责的原则,其它功能k8s提供了对应的其它API对象,如负载均衡提供了Ingress
4:如果发现POD处于异常状态,如一直PENDING,则可执行kubectl describe pod <pod名> -n <namespace>定位问题
5:可以根据POD的label来过滤POD,支持使用==、!=、in、notin等表达式,如下:
    dongyunqi@mongodaddy:~/k8s$ kubectl get pod -l 'app in (ngx, nginx, ngx-dep)'
    NAME                      READY   STATUS    RESTARTS   AGE
    ngx-dep-bfbb5f64b-ds78j   1/1     Running   0          19m
    ngx-dep-bfbb5f64b-lvdgz   1/1     Running   0          6m44s
    ngx-dep-bfbb5f64b-vj9qk   1/1     Running   0          3m4s
    dongyunqi@mongodaddy:~/k8s$ kubectl get pod -l 'app=ngx-dep'
    NAME                      READY   STATUS    RESTARTS   AGE
    ngx-dep-bfbb5f64b-ds78j   1/1     Running   0          20m
    ngx-dep-bfbb5f64b-lvdgz   1/1     Running   0          7m22s
    ngx-dep-bfbb5f64b-vj9qk   1/1     Running   0          3m42s

参考文章列表

k8s上pod一次pending解决过程 。

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

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

相关文章

Makefile 如何构建Go项目

前言 &#x1f4da; 请问你是如何打包Go语言开发的项目呢&#xff1f; 是直接命令行输入&#xff1f; go build . 开发调试时&#xff1f; go run main.go 但是我们看到开源的Go语言项目运行时是&#xff1a; make build || make install 我们打包运行的这个过程&#xff0…

Mask RCNN网络源码解读(Ⅵ) --- Mask分支及Loss计算

目录 0.先决知识 1.简介 2.mask_rcnn.py解析 2.1 初始化函数 2.2 MaskRCNNHeads类 2.3 MaskRCNNPredictor类 3.RoIHeads类解析 3.1 正向传播过程 3.2 mask部分损失 3.3 maskrcnn_inference 0.先决知识 学习此篇博客之前&#xff0c;读者应有&#xff1a; ①一定的p…

MySQL常用命令 (这些命令专属于MySQL 不属于标准SQL语句)

1、查看MySQL版本 &#xff1a;select version(); ​​​​​​​ ​​​​​​​ ​​​​​​​ 2、创建数据库 &#xff1a;create database 数据库名称; 3、使用/指定数据库&#xff1a;use 数据库名称; 4、查看当前使用的数据库…

硬件系统工程师宝典(3)-----信号完整性分析是个啥?

各位同学大家好&#xff0c;欢迎继续做客电子工程学习圈&#xff0c;今天我们继续来讲这本书&#xff0c;硬件系统工程师宝典。上篇我们读到硬件电路的概要设计需要考虑的问题&#xff0c;相关的可行性分析可以使开发工作事半功倍。信号完整性分析概述今天我们开始学习在高速电…

上海亚商投顾:两市震荡引分化 汽车产业链获青睐

上海亚商投顾前言&#xff1a;无惧大盘大跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。市场情绪大小指数今日走势分化&#xff0c;沪指全天弱势震荡&#xff0c;创业板指在权重股助力下&#xff0c;午后一度冲高涨…

靶机测试 0s-hackNos-2笔记

简介靶机地址https://www.vulnhub.com/entry/hacknos-os-hacknos-2,403/#Difficulty : Easy to IntermediateFlag : 2 Flag first user And second rootLearning : Web Application | Enumeration | Password Cracking测试过程信息收集nmap扫描端口nmap -p- -A 192.168.1.103 -…

如何在 Zorin OS 上安装 ONLYOFFICE 桌面编辑器

ONLYOFFICE 桌面应用是一款开源办公套件&#xff0c;包括用于文本文档、电子表格、演示文稿和表单的编辑器。除了离线工作&#xff0c;您还可以将该应用连接到云端进行在线文档协作。这款套件的源代码可在 GitHub 上获得&#xff0c;是根据 AGPL v.3.0 许可。 ONLYOFFICE桌面编…

golang中new与make的区别

new和make new // The new built-in function allocates memory. The first argument // is a type,not a value, and the value returned is a pointer to a // newly // allocated zero value of that type. func new(Type) *Type对于官方是这么解释new的&#xff1a;这个…

(6)go-micro微服务consul配置、注册中心

文章目录一 Consul介绍1. 注册中心Consul基本介绍2.注册中心Consul关键功能3.注册中心Consul两个重要协议二 Consul安装1.使用docker拉取镜像三 Config配置四 Consul代码编写1.设置consul配置中心2.获取consul配置中心的数据3.consul可视化界面数据编写4. main.go代码编写五 最…

微信小程序-页面导航

小程序实现页面导航的两种方式 声明式导航(tabBar 页面&#xff0c;在app.json中配置) 在页面上声明一个<navigator>导航组件通过点击<navigator> 组件实现页面跳转 app.json中 "tabBar": {"list": [{"pagePath": "pages/home…

【胖虎的逆向之路】02——Android整体加壳原理详解实现

【胖虎的逆向之路】(02)——Android整体加壳原理详解&实现 Android Apk的加壳原理流程及详解 文章目录【胖虎的逆向之路】(02)——Android整体加壳原理详解&实现前言一、加壳前的知识储备1. Android 应用的启动流程2. Android 应用的安装3. Android应用的启动流程&…

09-JAVA四种引用类型?

在JDK1.2版之后&#xff0c;Java对引用的概念进行了扩充&#xff0c;将引用分为强引用&#xff08;Strongly Reference&#xff09;、软引用&#xff08;Soft Reference&#xff09;、弱引用&#xff08;Weak Reference&#xff09;和虚引用&#xff08;Phantom Reference&…

使用Deep Q-Network学习如何玩《飞行的小鸟》游戏

目录概述效果需要的依赖如何运行算法原理实验输入处理网络结构训练代码概述 使用DQN实现《飞行的小鸟》游戏&#xff0c;代码可修改扩展为其他游戏&#xff0c;适合学习研究用。 效果 需要的依赖 Python 2.7 or 3 TensorFlow 0.7 pygame OpenCV-Python 如何运行 运行主函数…

目标追踪综述

目标追踪综述 - 知乎目标跟踪是计算机视觉领域的一个重要问题&#xff0c;目前广泛应用在体育赛事转播、安防监控和无人机、无人车、机器人等领域。下面是一些应用的例子。 体育赛事转播 无人车 目标跟踪任务分类了解了目标跟踪的用途&#xff0c;我们接下…https://zhuanlan.z…

Java(SpringBoot)项目打包(构建)成`Docker`镜像的几种方式

前置说明 最为原始的打包方式spring-boot-maven-plugin插件jib-maven-plugin插件dockerfle-maven-plugin插件 最为原始的方式 也就是使用Docker的打包命令去打包&#xff0c;麻烦&#xff0c;我这里不多说。 spring-boot-maven-plugin插件打包 SpringBoot自己内置了一个Docker镜…

有了这些软件测试面试话术,offer想不拿到都难

软件测试是一个复杂且重要的技术岗位&#xff0c;因此&#xff0c;大多数互联网企业在面试时&#xff0c;都会严谨对待每一个面试者。而&#xff0c;作为即将去进行面试测试人来说&#xff0c;想要在面试中&#xff0c;沉着稳定地回答好面试官们提出的问题&#xff0c;前期的软…

P5 内积 -- 通讯原理

目录内积内积和傅里叶变换正交能量帕瑟瓦尔定理互能量一 内积定义&#xff1a;任意信号 内积定义为&#xff1a;如果都是实信号例&#xff1a;二 内积和傅里叶变换的关系傅里叶变换 和逆变换 本质上就是求两个函数的内积傅里叶变换傅里叶逆变换时域的内积等于频域的内积假设 则…

再获殊荣!维视智造斩获2022年度光能杯最具影响力“智造”企业奖

近日&#xff0c;由光伏行业权威媒体和机构——索比光伏网、索比咨询联合主办的2022年度“光能杯”影响力大奖榜单发布&#xff0c;维视智造凭借硬件与AI算法能力、凭借在光伏行业具有创新性的智能制造产品方案与落地的标杆案例&#xff0c;斩获“2022年最具影响力“智造”企业…

Windows下Canal.deployer-1.1.6安装部署

canal [kənl]&#xff0c;译意为水道/管道/沟渠&#xff0c;主要用途是基于 MySQL 数据库增量日志解析&#xff0c;提供增量数据订阅和消费 早期阿里巴巴因为杭州和美国双机房部署&#xff0c;存在跨机房同步的业务需求&#xff0c;实现方式主要是基于业务 trigger 获取增量变…

多线程之线程控制与互斥

1.线程的缺点有哪些&#xff1f; 第一点 健壮性低------ 一个线程挂了容易影响另外的线程 第二点 缺乏访问控制----- 不像进程是独立的&#xff0c;可以写时拷贝&#xff0c;线程随进随出有点危险哦 第三点 编写难度上升----- 编写一个多线程的代码和调试可比单线程难多了 ——…