Kubernetes控制器之ReplicaSet

  参考:https://www.jianshu.com/p/fd8d8d51741e

    https://kubernetes.io/zh/docs/concepts/workloads/controllers/replicaset/

  说到ReplicaSet对象,得先说说ReplicationController(简称为RC)。在旧版本的Kubernetes中,只有ReplicationController对象。它的主要作用是确保Pod以你指定的副本数运行,即如果有容器异常退出,会自动创建新的 Pod 来替代;而异常多出来的容器也会自动回收。可以说,通过ReplicationController,Kubernetes实现了集群的高可用性。

  在新版本的 Kubernetes 中建议使用 ReplicaSet(简称为RS )来取代 ReplicationController。ReplicaSet 跟 ReplicationController 没有本质的不同,只是名字不一样,并且 ReplicaSet 支持集合式的 selector(ReplicationController 仅支持等式)。

  虽然也 ReplicaSet 可以独立使用,但建议使用 Deployment 来自动管理 ReplicaSet,这样就无需担心跟其他机制的不兼容问题(比如 ReplicaSet 不支持 rolling-update 但 Deployment 支持),并且Deployment还支持版本记录、回滚、暂停升级等高级特性。

  1.ReplicationController的创建

  ReplicationController和Pod一样,都是Kubernetes中的对象。通过yaml或json描述文件创建一个ReplicationController。一个简单的ReplicationController如下

# cat ReplicationController.yaml
apiVersion: v1
kind: ReplicationController
metadata:
  name: nginx
spec:
  replicas: 3
  selector:
    app: nginx
  template:
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80

  下面简要解释一下上述ReplicationController描述文件中的关键点:

  • kind字段代表你要新建的对象类型。此处指定为ReplicationController。
  • spec.selector对指定为你需要管理的Pod的label(label的意义体现在此处)。这里将spec.selector设置为app:nginx,意味着所有包含label:app:nginx的Pod都将被这个RC管理。
  • spec.replicas字段代表了受此RC管理的Pod需要运行的副本数本次设置为3。
  • template模块用于定义Pod,包括Pod名字本次是nginx,Podlabel以及Pod中运行的应用

  上面的RC通过kubectl apply命令创建成功后,Kubernetes会在所有可用的Node上,新建三个Pod。每个Pod都有一个app: nginx的label,并且每个Pod中都运行一个nginx容器。一旦其中某个Pod发生故障停止运行了,Controller Manager都能够及时发现,然后根据当前RC定义,创建出一个新的Pod,从而使包含label:app: nginx的Pod的运行副本数始终为3。

  创建ReplicationController

kubectl apply -f ReplicationController.yaml

  查看创建的RC和Pod

# kubectl get ReplicationController
NAME    DESIRED   CURRENT   READY   AGE
nginx   3         3         3       25m
[[email protected] replicaset]# kubectl get pod
NAME                                      READY   STATUS    RESTARTS   AGE
db-0                                      1/1     Running   1          3d
nfs-client-provisioner-7665588bd7-5ll74   1/1     Running   1          3d
nginx-442b2                               1/1     Running   0          26m
nginx-5pnr9                               1/1     Running   0          26m
nginx-dkjjq                               1/1     Running   0          26m
redis                                     1/1     Running   0          6h49m

  为该RC创建svc

# cat svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  type: NodePort

  解释

  • kind对应Kubernetes对象此次创建的是Service
  • metadata.name是此Service的名字可以自定义kubectl expose创建yaml文件是加参数--name= 如未自定义则默认的名称为RC名即本次的nginx
  • metadata.labels对应标签选择器对应的是labels: app:nginx
  • spec.ports.port指定后端容器的端口,本次为nginx即80端口
  • spec.port.targetPort为本Service访问入口通过该入口负载均衡之后端的3个Pod,集群内部可以通过该Service生成的IP加端口访问
  • spec.type指定外部访问模式为NodePort即随机生成外部访问端口

  可以使用命名生成此yaml文件

kubectl expose rc nginx --port=80 --target-port=80 --type=NodePort --dry-run -o yaml>svc.yaml

  应用

kubectl apply -f svc.yaml

  查看

  可以在web页面通过nodeIP加端口访问nginx

  验证svc的targetport端口

原文地址:https://www.cnblogs.com/minseo/p/12525799.html

时间: 2024-08-01 08:20:21

Kubernetes控制器之ReplicaSet的相关文章

Kubernetes 控制器之 Deployment 介绍(六)

一.Deployment.ReplicaSet.Pod之间的关系 我们接着前面的文章说,如果不清楚的请查看之前的博文:http://blog.51cto.com/wzlinux/2322616 前面我们已经了解到,Kubernetes 通过各种 Controller 来管理 Pod 的生命周期.为了满足不同业务场景,Kubernetes 开发了 Deployment.ReplicaSet.DaemonSet.StatefuleSet.Job 等多种 Controller.我们首先学习最常用的 D

Kubernetes控制器之StatefulSet

参考:https://kubernetes.io/zh/docs/concepts/workloads/controllers/statefulset/ https://www.kubernetes.org.cn/deployment StatefulSet StatefulSet是为了解决有状态服务的问题(对应Deployments和ReplicaSets是为无状态服务而设计),其应用场景包括 稳定的持久化存储,即Pod重新调度后还是能访问到相同的持久化数据,基于PVC来实现 稳定的网络标志,

Kubernetes 控制器之 Service 讲解(七)

一.背景介绍 我们这里准备三台机器,一台master,两台node,采用kubeadm的方式进行安装的,安装过程大家可以参照我之前的博文. IP 角色 版本 192.168.1.200 master kubeadm v1.13.0 192.168.1.201 node01 kubeadm v1.13.0 192.168.1.202 node02 kubeadm v1.13.0 我们不应该期望 Kubernetes Pod 是健壮的,而是要假设 Pod 中的容器很可能因为各种原因发生故障而死掉.D

Kubernetes的pod控制器之DaemonSet

DaemonSet 顶级参数介绍 [[email protected] manifests]# kubectl explain ds KIND: DaemonSet VERSION: extensions/v1beta1 DESCRIPTION: DEPRECATED - This group version of DaemonSet is deprecated by apps/v1beta2/DaemonSet. See the release notes for more informati

kubernetes学习控制器之StatefulSet控制器

StatefulSet介绍 一.StatefulSet概述StatefulSet是用来管理stateful(有状态)应用的StatefulSet管理Pod时,确保Pod有一个按序增长的ID与Deployment最大的不同是StatefulSet始终将一系列不变的名字分配给Pod.这些Pod从一个模板创建,但是并不能相互替换二.StatefulSet使用场景对于有如下要求的应用程序,StatefulSet非常适用需要稳定.唯一的网络标识(dnsname)每个Pod始终对应各自的存储路径(Persi

k8s中的pod控制器之Deployment、DaemonSet、StatefulSet

pod控制器分类:1.ReplicationController2.ReplicaSet3.Deployment4.StatefulSet5.DaemonSet6.Job,Cronjob7.HPApod控制器:一般包括3部分1.标签选择器2.期望的副本数(DaemonSet控制器不需要)3.pod模板deploy控制器构建于rs控制器之上,新特性包括:1.事件和状态查看2.回滚3.版本记录4.暂停和启动5.支持两种自动更新方案Recreate删除重建RollingUpdate回滚升级(默认方式)

菜鸟学四轴控制器之1:插补是啥东西

之前看过运动控制芯片的手册,包括了NOVA的MCX314和PCL6045等,知道插补的概念. 但是插补到底是啥玩意,其实一直是有点疑惑的,然后就傻乎乎的去问一些专家,他们的说法是: 插补可以同时多轴输出,速度很快.然后就不知道问啥了. 基于我之前做步进电机的经验,以及测试步进电机驱动器的经验,我一般情况下都是通过单片机发一个固定脉冲来测试驱动器的性能.如果需要测试电机各种速度下的力矩特性,最多采用了S加减速曲线,在我看来,要画一个直线,那太简单了,直接X轴和Y轴同时给不同速度的脉冲不就OK了么?

菜鸟学四轴控制器之2:逐点比较法

逐点比较法是基准脉冲插补算法中,最简单和直接的一种方式. 简单粗暴,速度快! 可以实现直线插补,圆形插补和其他的插补,比如椭圆形等. 逐点比较法,顾名思义,就是每走一步都要将加工点的瞬时坐标同规定的图形轨迹相比较,判断其偏差,然后决定下一步的走向,如果加工点走到图形外面去了,那么下一步就要向图形里面走:如果加工点在图形里面,那么下一步就要向图形外面走,以缩小偏差.这样就能得出一个非常接近规定图形的轨迹,最大偏差不超过一个脉冲当量. 所以说,一般的雕刻机应该可以满足要求吧,关键是速度也快啊,比如说

菜鸟学四轴控制器之3:数字积分法DDA实现直线插补

上一篇的逐点比较法显然是无法画一条有倾角的直线的.因为X轴和Y轴永远都不同步,也就是像打台球一样,你打一个,我打一个,如果我进了球,我再接着打一个. 也就是说,如果直线为45度,也是没有办法画出来的,只能是锯齿形状. 如何实现X和Y同时动?也就是说,如果要画一条45度的线,X和Y同时动不就行了么? 比如起点为0,0,终点为5,5,如果采用逐点比较法,则需要运动10次,如果两轴同时运动,则5步就可以实现了.实现的途径如下: 初始值为0,0,然后下一步,我们每个坐标增加5,则结果为5,5,这样会溢出