惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Help Net Security
Help Net Security
G
Google Developers Blog
雷峰网
雷峰网
WordPress大学
WordPress大学
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Engineering at Meta
Engineering at Meta
Security Latest
Security Latest
T
Threat Research - Cisco Blogs
AWS News Blog
AWS News Blog
F
Full Disclosure
C
Cybersecurity and Infrastructure Security Agency CISA
T
The Exploit Database - CXSecurity.com
J
Java Code Geeks
U
Unit 42
C
Cyber Attacks, Cyber Crime and Cyber Security
V
V2EX
C
Cisco Blogs
博客园 - 司徒正美
Project Zero
Project Zero
L
LINUX DO - 热门话题
阮一峰的网络日志
阮一峰的网络日志
Blog — PlanetScale
Blog — PlanetScale
Scott Helme
Scott Helme
A
About on SuperTechFans
Hugging Face - Blog
Hugging Face - Blog
S
Securelist
小众软件
小众软件
aimingoo的专栏
aimingoo的专栏
S
Schneier on Security
G
GRAHAM CLULEY
酷 壳 – CoolShell
酷 壳 – CoolShell
Cyberwarzone
Cyberwarzone
MongoDB | Blog
MongoDB | Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 叶小钗
T
Threatpost
Recorded Future
Recorded Future
C
CXSECURITY Database RSS Feed - CXSecurity.com
宝玉的分享
宝玉的分享
N
News and Events Feed by Topic
人人都是产品经理
人人都是产品经理
The Register - Security
The Register - Security
S
Security Archives - TechRepublic
博客园 - Franky
N
News | PayPal Newsroom
Simon Willison's Weblog
Simon Willison's Weblog
S
SegmentFault 最新的问题
W
WeLiveSecurity
A
Arctic Wolf
B
Blog

云野开源志

OpenClaw npm 升级踩坑记:从版本冲突到模块丢失 免责声明 openclaw(moltbot、Clawdbot)常见异常 大模型配置-千问免费版 初始化OpenClaw 安装openclaw记录 大年初一桃花谷 CheckSSL.sh - SSL证书到期时间监控脚本 g.sh - Go语言环境管理工具安装脚本 install-cri-docker.sh - cri-dockerd安装脚本 install-docker.sh - Docker Engine快速安装脚本 install-docker2.sh - Docker 交互式安装脚本 install-nginx.sh - Nginx官方源快速安装脚本 install-zerotier.sh - ZeroTier 虚拟网络快速安装脚本 mng.sh - Nginx配置文件合并脚本 OpenSSL.sh - 自签名 SSL 证书生成脚本 SystemInfoMonitor.sh - 系统资源监控告警脚本 UpdateImages.sh - Docker 镜像批量更新脚本 为Hugo Next主题添加Umami统计支持 解忧杂货铺 - 栏目声明 Certd - 解决多平台SSL证书管理难题的神器 轻量级网络端口监控工具 GeoLite2 自动搬运仓库使用手册 MaxMind 免费账号注册 CloudFlare Accel Docker 搭建私有 DNS 服务器 hugo-theme-stack集成Umami openresty编译添加geoip2模块支持 GPU加速云原生应用,开启高性能计算新纪元 5. K8S Service与Ingress Rancher搭建 3. K8S Pod 资源管理 2. K8S 基础资源管理 1. K8S 简介和认证介绍 Rancher集成AzureAD认证 Harbor 部署搭建 站点留言板 关于 友情链接
4. K8S 控制器
云野开源志 · 2023-07-24 · via 云野开源志

总结摘要

本文系统介绍了 Kubernetes 中的核心控制器类型及其作用机制,重点对比了 ReplicaSet 与 Deployment 的功能差异,并详细说明了 DaemonSet、Job、CronJob 和 StatefulSet 等控制器的适用场景。通过 YAML 配置示例,展示了如何使用 ReplicaSet 管理 Pod 副本数量,以及如何通过 Deployment 实现声明式部署、滚动更新与版本回滚,强调了在生产环境中优先使用 Deployment 而非直接操作 ReplicaSet 的最佳实践。

Kubernetes 控制器

控制器类型

  • ReplicaSet(RS):代用户创建指定数量的pod副本数量,确保pod副本数量符合预期状态,并且支持滚动式自动扩容和缩容功能。

    ReplicaSet主要的三个组件:

    • 用户期望的Pod数量

    • 标签选择器,判断哪个Pod归自己管理

    • 当现存的Pod数量不足时,会根据Pod资源模板进行新建

      注意:RS帮助用户管理无状态的Pod资源,精确反应用户定义的目标数量,但是RelicaSet因为不可以滚动更新和回滚,所以使用Deployment。

  • Deployment:工作在ReplicaSet之上,用与管理无状态应用,目前来说最好的控制器。支持滚动更新和回滚功能,还能提供声明式配置。

  • DaemonSet:用于确保集群中的每一个节点只运行特定的pod副本,通常用于实现系统级后台任务。比如ELK服务

    • 特性:
      • 服务是无状态的
      • 服务必须是守护进程
  • Job:只要完成就立即退出,不需要重启或重建

  • Cronjob:周期性任务控制退出,不需要支持后台运行

  • StatefulSet:管理有状态应用

ReplicaSet 控制器

在k8s早期版本仅有ReplicationController(RC)一种Pod控制器,后来陆陆续续引入了更多的控制器,其中就包括ReolicaSet(RS)用于取代RC,RC与RS功能基本上相同,但是强烈要求使用RS,目前RC早已经被废弃。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: frontend
  labels:
    app: guestbook
    tier: frontend
spec:
# modify replicas according to your case
  replicas: 3
  selector:
    matchLabels:
    tier: frontend
  template:
    metadata:
      labels:
      tier: frontend
    spec:
      containers:
        - name: php-redis
          image: gcr.io/google_samples/gb-frontend:v3

==注意:==

  • RS控制器是基于标签控制POD资源的
  • 缺少了POD副本会自己补全
  • 多出的POD副本会自己删除
  • 在更新Pod模板及升级应用时们需要手动删除老的版本
  • ReplicaSet确保任何时间都有指定数量的Pod副本在运行。然而Deployment是一个更高级的概念,它管理RepliceSet,并向Pod提供声明式的更新以及许多其他有的功能。因此,建议使用Deployment而不是直接使用RepliceSet,除非你需要自定义更新业务流程或根本不与要更新。

Deployment 控制器

Deployment是一个可以拥有ReplicaSet并使用声明方式在服务器端完成对Pods滚动更新的对象。尽管ReplicaSet可以独立使用,目前它们的主要用途是提供给Deployment作为编排Pod创建、删除和更新的一种机制。当使用Deployment时,你不必关心如何管理它所创建的ReplicaSet,Dempolyment拥有并管理其ReplicaSet。因此,建议在需要ReplicaSet时使用Deployment。

只需要在Deployment中描述想要的目标状态是什么,Deployment controller就会将Pod和ReplicaSet的实际状态改变到您的目标状态。也可以定义一个全新的Deployment来创建ReplicaSet或者删除已有的Deployment并创建一个新的来替换。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80