Mr. Cappuccino的第42杯咖啡——Kubernetes之Pod控制器(一)

news2024/11/15 17:25:25

Kubernetes之Pod控制器

      • Pod控制器介绍
      • ReplicaSet
        • 弹性扩容
        • 弹性缩容
        • 使用scale命令进行扩容或者缩容
        • 更新镜像
        • 删除ReplicaSet
      • Deployment
        • 弹性扩容与缩容
        • 删除Deployment
        • 更新镜像
          • 重建更新
          • 滚动更新
        • 版本回退

Pod控制器介绍

Pod是Kubernetes集群中能够被创建和管理的最小部署单元。所以需要有工具去操作和管理它们的生命周期,这里就需要用到控制器了。
Pod 控制器由Master的kube-controller-manager组件提供,常见的控制器有 Replication Controller、ReplicaSet、Deployment、DaemonSet、StatefulSet、Job 和 CronJob 等,它们分别以不同的方式管理 Pod 资源对象。

ReplicationController:比较原始的Pod控制器,已经被废弃,由ReplicaSet替代;
ReplicaSet:保证指定数量的Pod运行,并支持Pod数量变更,镜像版本变更;
Deployment:通过控制ReplicaSet来控制Pod,并支持滚动升级、版本回退; Horizontal Pod
Autoscaler:可以根据集群负载自动调整Pod的数量,实现削峰填谷;
DaemonSet:在集群中的指定Node上都运行一个副本,一般用于守护进程类的任务;
Job:它创建出来的Pod只要完成任务就立即退出,用于执行一次性任务; CronJob:它创建的Pod会周期性的执行,用于执行周期性的任务;
StatefulSet:管理有状态的应用;

ReplicaSet

ReplicaSet的主要作用是保证一定数量的Pod能够正常运行,它会持续监听这些Pod的运行状态,一旦Pod发生故障,就会重启或重建。同时它还支持对Pod数量的扩缩容和版本镜像的升级。

apiVersion: apps/v1 # 版本号
kind: ReplicaSet # 类型
metadata:
  name: pc-replicaset # rs名称
  namespace: bubble-dev # 命名空间
spec:
  replicas: 3 # 副本数量
  selector: # 选择器,通过它指定该控制器可以管理哪些Pod
    matchLabels: # 标签匹配规则
      app: nginx-pod 
  template: # 启动pod的模板
    metadata:
      labels:
        app: nginx-pod
    spec:
      containers:
      - name: nginx
        image: nginx:1.17.9
kubectl delete ns bubble-dev
kubectl create ns bubble-dev
vi pc-replicaset.yaml
cat pc-replicaset.yaml
kubectl create -f pc-replicaset.yaml
kubectl describe pods -n bubble-dev
kubectl get pods -n bubble-dev

在这里插入图片描述
在这里插入图片描述

查看ReplicaSet

kubectl get rs pc-replicaset -n bubble-dev -o wide

在这里插入图片描述

弹性扩容

kubectl edit rs pc-replicaset -n bubble-dev

在这里插入图片描述

kubectl get pods -n bubble-dev
kubectl get rs pc-replicaset -n bubble-dev -o wide

在这里插入图片描述

弹性缩容

操作同上(弹性扩容)

kubectl edit rs pc-replicaset -n bubble-dev
kubectl get pods -n bubble-dev
kubectl get rs pc-replicaset -n bubble-dev -o wide

在这里插入图片描述

使用scale命令进行扩容或者缩容

kubectl scale rs pc-replicaset --replicas=4 -n bubble-dev
kubectl get pods -n bubble-dev
kubectl get rs pc-replicaset -n bubble-dev -o wide

在这里插入图片描述

更新镜像

kubectl edit rs pc-replicaset -n bubble-dev
kubectl get rs pc-replicaset -n bubble-dev -o wide

调整nginx的版本
在这里插入图片描述
在这里插入图片描述

删除ReplicaSet

kubectl delete rs pc-replicaset -n bubble-dev

k8s删除ReplicaSet前,会将ReplicaSet的replicas调整为0,等待所有的Pod被删除后,再删除ReplicaSet。

kubectl get rs pc-replicaset -n bubble-dev -o wide

在这里插入图片描述

Deployment

Deployment为Pod和Replica Set(下一代Replication Controller)提供声明式更新。
在这里插入图片描述

Deployment的主要功能如下:

支持ReplicaSet的所有功能;
支持发布的停止、继续;
支持版本滚动更新和版本回退;

apiVersion: apps/v1
kind: Deployment
metadata:
  name: pc-deployment
  namespace: bubble-dev
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx-pod
  template:
    metadata:
      labels:
        app: nginx-pod
    spec:
      containers:
      - name: nginx
        image: nginx:1.17.9
kubectl delete ns bubble-dev
kubectl create ns bubble-dev
vi pc-deployment.yaml
cat pc-deployment.yaml
kubectl create -f pc-deployment.yaml
kubectl describe pods -n bubble-dev
kubectl get pods -n bubble-dev

在这里插入图片描述
在这里插入图片描述

查看Deployment

kubectl get deploy pc-deployment -n bubble-dev -o wide

在这里插入图片描述

弹性扩容与缩容

Deployment也和ReplicaSet一样可以使用命令或者编辑的形式管理Pod的数量

使用编辑配置清单的方式

kubectl edit deploy pc-deployment -n bubble-dev

在这里插入图片描述
在这里插入图片描述
使用scale命令的方式

kubectl scale deploy pc-deployment --replicas=4 -n bubble-dev

在这里插入图片描述

删除Deployment

kubectl delete deploy pc-deployment -n bubble-dev

在这里插入图片描述

更新镜像

Deployment支持两种方式修改镜像:分别是重建更新和滚动更新

重建更新

先杀掉所有已存在的Pod,再创建出新的Pod。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: pc-deployment-recreate
  namespace: bubble-dev
spec:
  strategy: 
    type: Recreate # 重建更新
  replicas: 3
  selector:
    matchLabels:
      app: nginx-pod
  template:
    metadata:
      labels:
        app: nginx-pod
    spec:
      containers:
      - name: nginx
        image: nginx:1.17.9
vi pc-deployment-recreate.yaml
cat pc-deployment-recreate.yaml
kubectl create -f pc-deployment-recreate.yaml

在这里插入图片描述
单独打开一个shell窗口监听

kubectl get pods -n bubble-dev -w

修改镜像版本

kubectl set image deploy pc-deployment-recreate nginx=nginx:1.17.8 -n bubble-dev

在这里插入图片描述
从单独打开的shell窗口中可以看到Deployment是先把Pod全部杀死,然后再重新创建并启动新的Pod。
在这里插入图片描述

滚动更新

先杀死一部分,再启动一部分,直到全部更新完成。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: pc-deployment-rollingupdate
  namespace: bubble-dev
spec:
  strategy: 
    type: RollingUpdate # 滚动更新
    rollingUpdate: # 当type为RollingUpdate时生效,用于为RollingUpdate设置参数
      maxUnavailable: 25% # 用来指定在升级过程中不可用Pod的最大数量,默认为25%
      maxSurge: 25% # 用来指定在升级过程中,可以超过期望的Pod的最大数量,默认为25%
  replicas: 3
  selector:
    matchLabels:
      app: nginx-pod
  template:
    metadata:
      labels:
        app: nginx-pod
    spec:
      containers:
      - name: nginx
        image: nginx:1.17.9
kubectl delete deploy pc-deployment-recreate -n bubble-dev
vi pc-deployment-rollingupdate.yaml
cat pc-deployment-rollingupdate.yaml
kubectl create -f pc-deployment-rollingupdate.yaml

在这里插入图片描述

单独打开一个shell窗口监听

kubectl get pods -n bubble-dev -w

修改镜像版本

kubectl set image deploy pc-deployment-rollingupdate nginx=nginx:1.17.8 -n bubble-dev

在这里插入图片描述

kubectl get deploy pc-deployment-rollingupdate -n bubble-dev -o wide

在这里插入图片描述
从单独打开的shell窗口中可以看到Deployment是先杀死掉部分Pod,然后再重新创建并启动部分Pod,直至全部更新完成。
在这里插入图片描述

版本回退

kubetl rollout 参数 deploy xx  # 支持下面的选择
# status 显示当前升级的状态
# history 显示升级历史记录
# pause 暂停版本升级过程
# resume 继续已经暂停的版本升级过程
# restart 重启版本升级过程
# undo 回滚到上一级版本 (可以使用--to-revision回滚到指定的版本)

如果需要实现版本回退功能,在执行yaml文件时需要携带附加参数(–record)

kubectl delete deploy pc-deployment-rollingupdate -n bubble-dev
kubectl create -f pc-deployment-rollingupdate.yaml --record

修改镜像版本

kubectl set image deploy pc-deployment-rollingupdate nginx=nginx:1.17.8 -n bubble-dev

查看rs

kubectl get rs -n bubble-dev

查看版本更新的状态

kubectl rollout status deploy pc-deployment-rollingupdate -n bubble-dev

查看所有版本

kubectl rollout history deploy pc-deployment-rollingupdate -n bubble-dev

根据指定的版本回退

kubectl rollout undo deployment pc-deployment-rollingupdate --to-revision=1 -n bubble-dev

查看当前版本

kubectl get deploy -n bubble-dev -o wide

在这里插入图片描述
当前版本已经回退到1.17.9啦!

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

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

相关文章

Beats:使用 fingerprint 来连接 Beats/Logstash 和 Elasticsearch

针对带有 HTTPS 访问的 Elasticsearch 集群来说,在我之前的很多文章,我都习惯于使用集群的证书来访问 Elasticsearch。你可以参考我之前的文章 “Elastic Stack 8.0 安装 - 保护你的 Elastic Stack 现在比以往任何时候都简单”。这是一种非常简便的方法。…

一文搞懂 DevOps

前言 DevOps作为一个热门的概念,近年来频频出现在各大技术社区和媒体的文章中,备受行业大咖的追捧,也吸引了很多吃瓜群众的围观。 那么,DevOps是什么呢? 有人说它是一种方法,也有人说它是一种工具&#…

github上传本地文件详细过程

repository 也就是俗称的仓库 声明:后续操作基于win10系统 前提:有一个github账号、电脑安装了git(官方安装地址) 目的: 把图中pdf文件上传到github上的个人仓库中 效果: 温馨提示: git中复制: ctrl insert&#xf…

【JavaWeb】一文学会JPA

✅✅作者主页:🔗孙不坚1208的博客 🔥🔥精选专栏:🔗JavaWeb从入门到精通(持续更新中) 📋📋 本文摘要:本篇文章主要介绍JPA的概念、注解实现ORM规范…

微信小程序学习第11天——Vant Weapp组件库、API Promise化、全局数据共享Mobx、分包

目录一、小程序对npm 的限制二、使用Vant Weapp组件库1、安装组件2、使用组件3、定制全局样式三、API Promise化1、下载miniprogram-api-promise2、引入3、使用四、全局数据共享五、分包1、分包概念2、使用分包3、独立分包4、分包预下载一、小程序对npm 的限制 在小程序中使用…

数值方法笔记2:解决非线性方程

1. 不动点定理及其条件验证2. 收敛阶、收敛检测与收敛加速2.1 如何估计不动点迭代的收敛阶xk1g(xk){x}_{{k}1}{g}\left({x}_{{k}}\right)xk1​g(xk​)2.2 给定精度的情况下,如何预测不动点迭代需要迭代的次数2.3 如何加快收敛的速度2.4 停止不定点迭代的条件2.5 不动…

基于Transformer的NLP处理管线

HuggingFace transformers 是一个整合了跨语言、视觉、音频和多模式模态与最先进的预训练模型并且提供用户友好的 API 的AI开发库。 它由 170 多个预训练模型组成,支持 PyTorch、TensorFlow 和 JAX 等框架,能够在代码之间进行互操作。 这个库还易于部署&…

【Leedcode】数据结构中链表必备的面试题(第一期)

链表必备的面试题 (附图解和源码)(第一期) 文章目录链表必备的面试题 (附图解和源码)(第一期)一、第一题1.题目2.思路图解(1)pos是首链表(2&#…

基于SpringBoot+Vue的鲜花商场管理系统

【辰兮要努力】:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行! 博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端、后台、…

【Vue3源码】第三章 readonly详解 从零实现Vue3 readonly API

【Vue3源码】第三章 readonly详解 从零实现Vue3 readonly API 前言 上一章节我们实现了effect函数的stop和onstop功能,至此effect函数源码的编写就暂时告一段落了,这一章我们继续解读Vue3源码,开始实现Vue3 Reactivity :core 中…

Java基础361问14问——为什么非静态内部类会默认持有外部类的引用?

在内存泄露问题排查中最常遇到就是 【非静态内部类默认持有外部类的引用】 文章目录1 字节码分析javac Activity.javajavap -c Activity.class2 静态内部类会持有外部类引用吗?参考文档// 简化处理相关代码 public class Activity {private Handler inner new Handler();priv…

C++面向对象(中)

文章目录前言1.类的6个默认成员函数介绍2.构造函数3.析构函数1.概念2.析构函数特征4.拷贝构造1.概念2.拷贝构造函数特征3.注意事项5.赋值运算符重载1.概念6.补充知识const成员函数7.取地址运算符和const取地址运算符重载8.总结前言 本文主要介绍C中的六个天选之子,…

MicroBlaze系列教程(6):AXI_IIC的使用

文章目录 @[toc]AXI_IIC简介MicroBlaze硬件配置常用函数使用示例波形实测参考资料工程下载本文是Xilinx MicroBlaze系列教程的第6篇文章。 AXI_IIC简介 一般情况下,使用FPGA实现I2C协议主要有两种方式:一种是基于Verilog实现起始位、停止位、ACK产生和判断、数据的发送和接收…

程终止、进程睡眠、进程对信号处理过程中等的方法

上一章学习了调度的方式,分为主调度器和周期性调度器,明白了进程切换分为自愿(voluntary)和强制(involuntary)两种。 自愿切换: 是指任务由于等待某种资源,将state改为非running状态后,主动调用schedule让出CPU 任务…

html中元素居中的五种方法

在网页开发中,经常会有嵌套元素中将子元素居中的要求。下边将五种常用的居中方法进行总结。 1:原始图(父子元素无border,无padding): 2:实现居中效果: 一:使用margin…

一篇文章带你学会Anisble中的如何处理失败任务

目录 一、循环 1、简单循环 2、循环散列或字典列表 3、练习 二、条件 三、触发器 四、处理失败任务 1、ignore_errors 2、force_handlers 3、changed_when 4、failed_when 5、block 练习 一、循环 作用:循环迭代任务 1、简单循环 loop: ##赋值列表 -…

[软件工程导论(第六版)]第4章 形式化说明技术(复习笔记)

文章目录4.1 概述4.2 有穷状态机4.3 Petri网4.4 Z语言按照形式化程度,可以把软件工程使用的方法划分成非形式化、半形式化、形式化三类非形式化方法:使用自然语言描述需求规格说明半形式化方法:使用数据流图或实体-联系图建立模型形式化方法&…

P2P视频聊天技术分析

整个P2P视频过程需要知道双方的媒体类型、流和候选者,所以这里就会用到一下技术: ​ 信令服务器socket.io ​ 状态机 ​ ICE服务器 ​ WebRTC框架 ​ 媒体协商 信令服务器Socket.io 信令服务器说白了作用就是发消息的中转站,A把msg发到…

网络流与图(二)

上一节我们讲到了退化圈方向搜索算法,它能得到全局最优解。然而算法运行过程中需要选择一个可行改进圈方向,对于一个大型网络流来说,这并非容易的。我们需要找到在每次循环中确认可行改进圈方向或者证明不存在的方法。我们现在就来探讨这个问…

Andriod入门级开发

这学期有个课设,我们组我负责一个手机APP的开发,虽然刚开始说要实现什么智能导航,类似高德地图那种,但最后阉割的只剩一个Socket通信了,因为之前没有接触过(可能之后也不会再接触),记…