一起来学k8s 08.Replication Controller 和 Replica Set

2024-03-14 14:32

本文主要是介绍一起来学k8s 08.Replication Controller 和 Replica Set,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Replication Controller Replica Set

如果我们都人工的去解决遇到的pod重启问题,似乎又回到了以前刀耕火种的时代了是吧,如果有一种工具能够来帮助我们管理Pod就好了,Pod不够了自动帮我新增一个,Pod挂了自动帮我在合适的节点上重新启动一个Pod,这样是不是遇到重启问题我们都不需要手动去解决了。

幸运的是,Kubernetes就为我们提供了这样的资源对象:

  • Replication Controller:用来部署、升级Pod
  • Replica Set:下一代的Replication Controller
  • Deployment:可以更加方便的管理PodReplica Set

环境

192.168.48.101 master01
192.168.48.201 node01
192.168.48.202 node02

Replication Controller

Replication Controller简称RCRCKubernetes系统中的核心概念之一,简单来说,RC可以保证在任意时间运行Pod的副本数量,能够保证Pod总是可用的。如果实际Pod数量比指定的多那就结束掉多余的,如果实际数量比指定的少就新启动一些Pod,当Pod失败、被删除或者挂掉后,RC都会去自动创建新的Pod来保证副本数量,所以即使只有一个Pod,我们也应该使用RC来管理我们的Pod

编写myapp-rc.yaml

 vim myapp-rc.yamlapiVersion: v1
kind: ReplicationController
metadata:name: myapp-rclabels:app: myapptype: rc
spec:replicas: 2selector:app: myapptype: rctemplate:metadata:name: myapp-podlabels:app: myapptype: rcspec:containers:- name: myappimage: ikubernetes/myapp:v1ports:- name: httpcontainerPort: 80

上面的YAML文件:

  • kind:ReplicationController
  • spec.replicas: 指定Pod副本数量,默认为1
  • spec.selector: RC通过该属性来筛选要控制的Pod
  • spec.template: 这里就是我们之前的Pod的定义的模块,但是不需要apiVersionkind
  • spec.template.metadata.labels: 注意这里的Podlabels要和spec.selector相同,这样RC就可以来控制当前这个Pod了。

创建myapp-rc.yaml

[root@master01 deploy_yaml]# kubectl apply -f myapp-rc.yaml 
replicationcontroller/myapp-rc created[root@master01 deploy_yaml]# kubectl get pod
NAME                           READY   STATUS    RESTARTS   AGE
demo-deploy-8675c97685-vhncn   1/1     Running   0          8d
demo-deploy-8675c97685-w7md2   1/1     Running   0          8d
demo-rc-l9c8r                  1/1     Running   0          4m49s
demo-rc-qvdd7                  1/1     Running   0          4m49s
myapp-rc-hzsxm                 1/1     Running   0          7s
myapp-rc-w5k7r                 1/1     Running   0          7s

查看rc

[root@master01 deploy_yaml]# kubectl get rc
NAME       DESIRED   CURRENT   READY   AGE
demo-rc    2         2         2       6m18s
myapp-rc   2         2         2       96s

查看具体信息

[root@master01 deploy_yaml]# kubectl describe rc myapp-rc 
Name:         myapp-rc
Namespace:    default
Selector:     app=myapp,type=rc
Labels:       app=myapptype=rc
Annotations:  kubectl.kubernetes.io/last-applied-configuration:{"apiVersion":"v1","kind":"ReplicationController","metadata":{"annotations":{},"labels":{"app":"myapp","type":"rc"},"name":"myapp-rc","nam...
Replicas:     2 current / 2 desired
Pods Status:  2 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:Labels:  app=myapptype=rcContainers:myapp:Image:        ikubernetes/myapp:v1Port:         80/TCPHost Port:    0/TCPEnvironment:  <none>Mounts:       <none>Volumes:        <none>
Events:Type    Reason            Age   From                    Message----    ------            ----  ----                    -------Normal  SuccessfulCreate  2m8s  replication-controller  Created pod: myapp-rc-hzsxmNormal  SuccessfulCreate  2m8s  replication-controller  Created pod: myapp-rc-w5k7r

修改yaml下Pod的副本数量为3:

vim myapp-rc.yaml
....
replicas: 3
[root@master01 deploy_yaml]# kubectl apply -f myapp-rc.yaml 
replicationcontroller/myapp-rc configured
[root@master01 deploy_yaml]# kubectl get rc
NAME       DESIRED   CURRENT   READY   AGE
demo-rc    2         2         2       8m48s
myapp-rc   3         3         3       4m6s
[root@master01 deploy_yaml]# 

滚动升级

[root@master01 deploy_yaml]# kubectl rolling-update myapp-rc --image=ikubernetes/myapp:v2
Command "rolling-update" is deprecated, use "rollout" instead
Created myapp-rc-df879e42cfe882821bb7b680abe0f890
Scaling up myapp-rc-df879e42cfe882821bb7b680abe0f890 from 0 to 3, scaling down myapp-rc from 3 to 0 (keep 3 pods available, don't exceed 4 pods)
Scaling myapp-rc-df879e42cfe882821bb7b680abe0f890 up to 1
Scaling myapp-rc down to 2
Scaling myapp-rc-df879e42cfe882821bb7b680abe0f890 up to 2
Scaling myapp-rc down to 1
Scaling myapp-rc-df879e42cfe882821bb7b680abe0f890 up to 3
Scaling myapp-rc down to 0
Update succeeded. Deleting old controller: myapp-rc
Renaming myapp-rc-df879e42cfe882821bb7b680abe0f890 to myapp-rc
replicationcontroller/myapp-rc rolling updated

Replication Set

Replication Set简称RS,随着Kubernetes的高速发展,官方已经推荐我们使用RSDeployment来代替RC了,实际上RSRC的功能基本一致,目前唯一的一个区别就是RC只支持基于等式的selector(env=dev或environment!=qa),但RS还支持基于集合的selector(version in (v1.0, v2.0)),这对复杂的运维管理就非常方便了。

kubectl命令行工具中关于RC的大部分命令同样适用于我们的RS资源对象。不过我们也很少会去单独使用RS,它主要被Deployment这个更加高层的资源对象使用,除非用户需要自定义升级功能或根本不需要升级Pod,在一般情况下,我们推荐使用Deployment而不直接使用Replica Set

最后我们总结下关于RC/RS的一些特性和作用吧:

  • 大部分情况下,我们可以通过定义一个RC实现的Pod的创建和副本数量的控制
  • RC中包含一个完整的Pod定义模块(不包含apiversionkind
  • RC是通过label selector机制来实现对Pod副本的控制的
  • 通过改变RC里面的Pod副本数量,可以实现Pod的扩缩容功能
  • 通过改变RC里面的Pod模板中镜像版本,可以实现Pod的滚动升级功能(但是不支持一键回滚,需要用相同的方法去修改镜像地址)

编写myapp-rs.yaml

vim myapp-rs.yamlapiVersion: apps/v1
kind: ReplicaSet
metadata:name: myapp-replicasetnamespace: defaultlabels:app: myapptype: replicaset
spec:replicas: 2selector:matchLabels:app: myapptype: replicasettemplate:metadata:name: myapp-podlabels:app: myapptype: replicasetspec:containers:- name: myappimage: ikubernetes/myapp:v1ports:- name: httpcontainerPort: 80

创建myapp-rs.yaml

[root@master01 deploy_yaml]# kubectl apply -f myapp-rs.yaml 
replicaset.apps/myapp-replicaset created
[root@master01 deploy_yaml]# kubectl get pod
NAME                           READY   STATUS    RESTARTS   AGE
demo-deploy-8675c97685-vhncn   1/1     Running   0          8d
demo-deploy-8675c97685-w7md2   1/1     Running   0          8d
demo-rc-l9c8r                  1/1     Running   0          23m
demo-rc-qvdd7                  1/1     Running   0          23m
myapp-rc-brbm2                 1/1     Running   0          4m14s
myapp-rc-c78nt                 1/1     Running   0          4m14s
myapp-rc-lkbxw                 1/1     Running   0          4m14s
myapp-replicaset-h4g92         1/1     Running   0          8s
myapp-replicaset-l24ff         1/1     Running   0          8s

查看rs

[root@master01 deploy_yaml]# kubectl get rs
NAME                     DESIRED   CURRENT   READY   AGE
demo-deploy-8675c97685   2         2         2       8d
myapp-replicaset         2         2         2       48s

查看具体信息

[root@master01 deploy_yaml]# kubectl describe rs myapp-replicaset 
Name:         myapp-replicaset
Namespace:    default
Selector:     app=myapp,type=replicaset
Labels:       app=myapptype=replicaset
Annotations:  kubectl.kubernetes.io/last-applied-configuration:{"apiVersion":"apps/v1","kind":"ReplicaSet","metadata":{"annotations":{},"labels":{"app":"myapp","type":"replicaset"},"name":"myapp-replic...
Replicas:     2 current / 2 desired
Pods Status:  2 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:Labels:  app=myapptype=replicasetContainers:myapp:Image:        ikubernetes/myapp:v1Port:         80/TCPHost Port:    0/TCPEnvironment:  <none>Mounts:       <none>Volumes:        <none>
Events:Type    Reason            Age    From                   Message----    ------            ----   ----                   -------Normal  SuccessfulCreate  5m45s  replicaset-controller  Created pod: myapp-replicaset-h4g92Normal  SuccessfulCreate  5m45s  replicaset-controller  Created pod: myapp-replicaset-l24ff

修改yaml下Pod的副本数量为3:

vim myapp-rs.yaml
.....
replicas: 3
[root@master01 deploy_yaml]# kubectl apply -f myapp-rs.yaml 
replicaset.apps/myapp-replicaset configured
[root@master01 deploy_yaml]# kubectl get rs
NAME                     DESIRED   CURRENT   READY   AGE
demo-deploy-8675c97685   2         2         2       8d
myapp-replicaset         3         3         3       6m11s
[root@master01 deploy_yaml]# 

这篇关于一起来学k8s 08.Replication Controller 和 Replica Set的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/808715

相关文章

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

90、k8s之secret+configMap

一、secret配置管理 配置管理: 加密配置:保存密码,token,其他敏感信息的k8s资源 应用配置:我们需要定制化的给应用进行配置,我们需要把定制好的配置文件同步到pod当中容器 1.1、加密配置: secret: [root@master01 ~]# kubectl get secrets ##查看加密配置[root@master01 ~]# kubectl get se

poj 3050 dfs + set的妙用

题意: 给一个5x5的矩阵,求由多少个由连续6个元素组成的不一样的字符的个数。 解析: dfs + set去重搞定。 代码: #include <iostream>#include <cstdio>#include <set>#include <cstdlib>#include <algorithm>#include <cstring>#include <cm

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

Collection List Set Map的区别和联系

Collection List Set Map的区别和联系 这些都代表了Java中的集合,这里主要从其元素是否有序,是否可重复来进行区别记忆,以便恰当地使用,当然还存在同步方面的差异,见上一篇相关文章。 有序否 允许元素重复否 Collection 否 是 List 是 是 Set AbstractSet 否

【Kubernetes】K8s 的安全框架和用户认证

K8s 的安全框架和用户认证 1.Kubernetes 的安全框架1.1 认证:Authentication1.2 鉴权:Authorization1.3 准入控制:Admission Control 2.Kubernetes 的用户认证2.1 Kubernetes 的用户认证方式2.2 配置 Kubernetes 集群使用密码认证 Kubernetes 作为一个分布式的虚拟

用Unity2D制作一个人物,实现移动、跳起、人物静止和动起来时的动画:中(人物移动、跳起、静止动作)

上回我们学到创建一个地形和一个人物,今天我们实现一下人物实现移动和跳起,依次点击,我们准备创建一个C#文件 创建好我们点击进去,就会跳转到我们的Vision Studio,然后输入这些代码 using UnityEngine;public class Move : MonoBehaviour // 定义一个名为Move的类,继承自MonoBehaviour{private Rigidbo

论文翻译:ICLR-2024 PROVING TEST SET CONTAMINATION IN BLACK BOX LANGUAGE MODELS

PROVING TEST SET CONTAMINATION IN BLACK BOX LANGUAGE MODELS https://openreview.net/forum?id=KS8mIvetg2 验证测试集污染在黑盒语言模型中 文章目录 验证测试集污染在黑盒语言模型中摘要1 引言 摘要 大型语言模型是在大量互联网数据上训练的,这引发了人们的担忧和猜测,即它们可能已

多路转接之select(fd_set介绍,参数详细介绍),实现非阻塞式网络通信

目录 多路转接之select 引入 介绍 fd_set 函数原型 nfds readfds / writefds / exceptfds readfds  总结  fd_set操作接口  timeout timevalue 结构体 传入值 返回值 代码 注意点 -- 调用函数 select的参数填充  获取新连接 注意点 -- 通信时的调用函数 添加新fd到