阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Kubernetes利用ReplicationController、Replica Set、Deployment管理Pod

395次阅读
没有评论

共计 3870 个字符,预计需要花费 10 分钟才能阅读完成。

Pod 直译是豆荚,我们可以把容器想像成豆荚里的豆子,把一个或多个关系紧密的豆子包在一起就是豆荚(一个 Pod)。在 k8s 中我们不会直接操作容器,而是把容器包装成 Pod,而对于 Pod,我们该如何管理?先看下面这个场景:

应用场景

假设有一个 Pod 正在提供线上服务,我们想想如何应对以下几个场景:

1. 节日活动,网站访问量突增

2. 遭到攻击,网站访问量突增

3. 运行 Pod 的节点发生故障

第 1 种情况,活动前预先多启动几个 Pod,活动结束后再结束掉多余的,虽然要启动和结束的 Pod 有点多,但也能有条不紊按计划进行。

第 2 种情况,正在睡觉突然手机响了说网站反应特慢卡得要死,赶紧爬起来边扩容边查找攻击模式、封 IP 等等……

第 3 种情况,正在休假突然手机又响了说网站上不去,赶紧打开电脑查看原因,启动新的 Pod。

Pod 需要手动管理,好累……

因此,我们需要一种方式,来自动管理 Pod 的伸缩。本文将介绍如何利用 ReplicationController、Replica Set、Deploymen 来管理 Pod,分为以下三部分:

  • 使用 ReplicationController 来部署、升级 Pod

  • Replica Set—下一代的 ReplicationController

  • Deployment — 更加方便的管理 Pod 和 Replica Set

一、使用 ReplicationController(rc)部署、升级 Pod

RC 保证在同一时间能够运行指定数量的 Pod 副本,保证 Pod 总是可用。如果实际 Pod 数量比指定的多就结束掉多余的,如果实际数量比指定的少就启动缺少的。当 Pod 失败、被删除或被终结时,RC 会自动创建新的 Pod 来保证副本数量,所以即使只有一个 Pod,也应该使用 RC 来进行管理。我们先看以下这个 rc.yaml 文件

apiVersion: v1
kind: ReplicationController
metadata:
  name: frontend
  labels:
    name: frontend
spec:
  replicas: 3
  selector:
    name: frontend
  template:
    metadata:
     labels:
       name: frontend
    spec:
     containers:
     - name: frontend
       image: kubeguide/guestbook-php-frontend:latest
       env :
       - name : GET_HOSTS_FROM
         value : env
       ports:
       - containerPort: 80
  1. yaml 字段的含义:
    spec.replicas:副本数量 3
    spec.selector:RC 通过 spec.selector 来筛选要控制的 Pod
    spec.template:这里写 Pod 的定义(但不需要 apiVersion 和 kind)
    spec.template.metadata.labels:Pod 的 label,可以看到这个 label 与 spec.selector 相同

  2. 这个文件的意思:
    定义一个 RC 对象,它的名字是 frontend(metadata.name:frontend),保证有 3 个 Pod 运行(spec.replicas:3),Pod 的镜像是 kubeguide/guestbook-PHP-frontend:latest(spec.template.spec.containers.image:kubeguide/guestbook-php-frontend:latest)

  3. 关键在于 spec.selector 与 spec.template.metadata.labels,这两个字段必须相同,否则下一步创建 RC 会失败。(也可以不写 spec.selector,这样默认与 spec.template.metadata.labels 相同)

接着我们来看操作 RC 的常用命令:

  • 通过 kubectl 创建 RC
# kubectl create -f rc.yaml
  • 查看 RC 具体信息
# kubectl describe rc frontend
  • 通过 RC 修改 Pod 副本数量(需要修改 yaml 文件的 spec.replicas 字段到目标值,然后替换旧的 yaml 文件)
# kubectl replace -f rc.yaml# kubect edit replicationcontroller frontend
  • 对 RC 使用滚动升级,来发布新功能或修复 BUG
# kubectl rolling-update frontend --image=kubeguide/guestbook-php-frontend:latest
  • 当 Pod 中只有一个容器时,通过–image 参数指定新的 Tag,如果有多个容器或其他字段修改时,需要指定 yaml 文件
# kubectl rolling-update frontend -f FILE.yaml

如果在升级过程中出现问题(如发现配置错误、长时间无响应),可以使用 CTRL+ C 退出,再进行回滚

# kubectl rolling-update frontend --image=kubeguide/guestbook-php-frontend:latest --rollback

但如果升级完成后出现问题(比如新版本程序出 core),此命令无能为力,需要使用同样方法“升级”为旧版本。

二、Deployment—更加方便的管理 Pod 和 Replica Set

k8s 是一个高速发展的项目,在新的版本中,官方推荐使用 Replica Set 和 Deployment 来代替 RC。那么它们优势在哪里,我们来看一看:

  1. RC 只支持基于等式的 selector(env=dev 或 environment!=qa)但 Replica Set 还支持新的、基于集合的 selector(version in (v1.0, v2.0) 或 env notin (dev, qa)),这对复杂的运维管理带来很大方便。

  2. 使用 Deployment 升级 Pod,只需要定义 Pod 的最终状态,k8s 会为你执行必要的操作,虽然能够使用命令 # kubectl rolling-update 完成升级,但它是在客户端与服务端多次交互控制 RC 完成的,所以 REST API 中并没有 rolling-update 的接口,这为定制自己的管理系统带来了一些麻烦。

  3. Deployment 拥有更加灵活强大的升级、回滚功能。

目前,Replica Set 与 RC 的区别只是支持的 selector 不同,后续肯定会加入更多功能。Deployment 使用了 Replica Set,是更高一层的概念。除非需要自定义升级功能或根本不需要升级 Pod,一般情况下,我们推荐使用 Deployment 而不直接使用 Replica Set。

  • 使用子命令 create,创建 Deployment
# kubectl create -f deployment.yaml --record

注意–record 参数,使用此参数将记录后续创建对象的操作,方便管理与问题追溯

  • 使用子命令 edit,编辑 spec.replicas/spec.template.spec.container.image 字段,完成 deployment 的扩缩容与滚动升级(这要比子命令 rolling-update 速度快很多)
# kubectl edit deployment hello-deployment
  • 使用 rollout history 命令,查看 Deployment 的历史信息
# kubectl rollout history deployment hello-deployment
  • 上面提到 RC 在 rolling-update 升级成功后不能直接回滚,而使用 Deployment 却可以回滚到上一版本,但要加上–revision 参数,指定版本号
# kubectl rollout history deployment hello-deployment --revision=2

使用 rollout undo 回滚到上一版本

# kubectl rollout undo deployment hello-deployment 

使用–to-revision 可以回滚到指定版本

# kubectl rollout undo deployment hello-deployment --to-revision=2

三、总结

通过对比,我们发现新的 Replica Set、Deployment,比 RC 要强大易用很多。

Docker 中部署 Kubernetes http://www.linuxidc.com/Linux/2016-07/133020.htm

Kubernetes 集群部署  http://www.linuxidc.com/Linux/2015-12/125770.htm

Kubernetes 滚动升级 http://www.linuxidc.com/Linux/2016-10/136041.htm

OpenStack, Kubernetes, Mesos 谁主沉浮  http://www.linuxidc.com/Linux/2015-09/122696.htm

Kubernetes 集群搭建过程中遇到的问题及解决  http://www.linuxidc.com/Linux/2015-12/125735.htm

在 Ubuntu 下部署 Kubernetes 集群  http://www.linuxidc.com/Linux/2016-09/135018.htm

Kubernetes 的详细介绍 :请点这里
Kubernetes 的下载地址 :请点这里

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-01/139668.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计3870字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7997520
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛 NAS-12:开源笔记的进化之路,效率玩家的新选择 前言 如何高效管理知识与笔记,已经成为技术...
免费领取huggingface的2核16G云服务器,超简单教程

免费领取huggingface的2核16G云服务器,超简单教程

免费领取 huggingface 的 2 核 16G 云服务器,超简单教程 前言 HuggingFace.co...
浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍 前言 在 AI 自动化快速发展的当下,浏览器早已不再只是...
安装并使用谷歌AI编程工具Antigravity(亲测有效)

安装并使用谷歌AI编程工具Antigravity(亲测有效)

  安装并使用谷歌 AI 编程工具 Antigravity(亲测有效) 引言 Antigravity...
2025年11月28日-Cloudflare史诗级事故:一次配置失误,引爆全球宕机

2025年11月28日-Cloudflare史诗级事故:一次配置失误,引爆全球宕机

2025 年 11 月 28 日 -Cloudflare 史诗级事故: 一次配置失误,引爆全球宕机 前言 继今...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站 - 手机博物馆 -CHAZ 3D Experience 一句话介绍:一个用 3D 方式重温...
星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛 NAS 硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话? 前言 在选择 NAS 用预...
开发者福利:免费 .frii.site 子域名,一分钟申请即用

开发者福利:免费 .frii.site 子域名,一分钟申请即用

  开发者福利:免费 .frii.site 子域名,一分钟申请即用 前言 在学习 Web 开发、部署...
免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

  免费无广告!这款跨平台 AI RSS 阅读器,拯救你的信息焦虑 在算法推荐主导信息流的时代,我们...
恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击 PHP-FPM(FastCGl Process M...