一起来学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

相关文章

C++中unordered_set哈希集合的实现

《C++中unordered_set哈希集合的实现》std::unordered_set是C++标准库中的无序关联容器,基于哈希表实现,具有元素唯一性和无序性特点,本文就来详细的介绍一下unorder... 目录一、概述二、头文件与命名空间三、常用方法与示例1. 构造与析构2. 迭代器与遍历3. 容量相关4

k8s按需创建PV和使用PVC详解

《k8s按需创建PV和使用PVC详解》Kubernetes中,PV和PVC用于管理持久存储,StorageClass实现动态PV分配,PVC声明存储需求并绑定PV,通过kubectl验证状态,注意回收... 目录1.按需创建 PV(使用 StorageClass)创建 StorageClass2.创建 PV

Redis中Set结构使用过程与原理说明

《Redis中Set结构使用过程与原理说明》本文解析了RedisSet数据结构,涵盖其基本操作(如添加、查找)、集合运算(交并差)、底层实现(intset与hashtable自动切换机制)、典型应用场... 目录开篇:从购物车到Redis Set一、Redis Set的基本操作1.1 编程常用命令1.2 集

k8s中实现mysql主备过程详解

《k8s中实现mysql主备过程详解》文章讲解了在K8s中使用StatefulSet部署MySQL主备架构,包含NFS安装、storageClass配置、MySQL部署及同步检查步骤,确保主备数据一致... 目录一、k8s中实现mysql主备1.1 环境信息1.2 部署nfs-provisioner1.2.

Spring Boot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)

《SpringBoot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)》本文将以一个实际案例(用户管理系统)为例,详细解析SpringBoot中Co... 目录引言:为什么学习Spring Boot分层架构?第一部分:Spring Boot的整体架构1.1

k8s admin用户生成token方式

《k8sadmin用户生成token方式》用户使用Kubernetes1.28创建admin命名空间并部署,通过ClusterRoleBinding为jenkins用户授权集群级权限,生成并获取其t... 目录k8s admin用户生成token创建一个admin的命名空间查看k8s namespace 的

k8s搭建nfs共享存储实践

《k8s搭建nfs共享存储实践》本文介绍NFS服务端搭建与客户端配置,涵盖安装工具、目录设置及服务启动,随后讲解K8S中NFS动态存储部署,包括创建命名空间、ServiceAccount、RBAC权限... 目录1. NFS搭建1.1 部署NFS服务端1.1.1 下载nfs-utils和rpcbind1.1

k8s容器放开锁内存限制问题

《k8s容器放开锁内存限制问题》nccl-test容器运行mpirun时因NCCL_BUFFSIZE过大导致OOM,需通过修改docker服务配置文件,将LimitMEMLOCK设为infinity并... 目录问题问题确认放开容器max locked memory限制总结参考:https://Access

c++中的set容器介绍及操作大全

《c++中的set容器介绍及操作大全》:本文主要介绍c++中的set容器介绍及操作大全,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录​​一、核心特性​​️ ​​二、基本操作​​​​1. 初始化与赋值​​​​2. 增删查操作​​​​3. 遍历方

shell中set -u、set -x、set -e的使用

《shell中set-u、set-x、set-e的使用》本文主要介绍了shell中set-u、set-x、set-e的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录✅ 1. set -u:防止使用未定义变量 作用: 示例:❌ 报错示例输出:✅ 推荐使用场景:✅ 2. se