Kubernetes对象之ReplicaSet

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kubernetes对象之ReplicaSet相关的知识,希望对你有一定的参考价值。

参考技术A

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

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

ReplicationController和Pod一样,都是Kubernetes中的对象,因此创建方式类似。通过yaml或json描述文件来定义一个ReplicationController对象。一个最简单的ReplicationController的定义如下:

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

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

由于ReplicaSet是ReplicationController的代替物,因此用法基本相同,唯一的区别在于ReplicaSet支持集合式的selector。一个典型的RS描述文件如下:

以上RS描述文件中,selector除了可以使用matchLabels,还支持集合式的操作:

使用 kubectl delete 命令会删除此RS以及它管理的Pod。在Kubernetes删除RS前,会将RS的replica调整为0,等待所有的Pod被删除后,在执行RS对象的删除。

如果希望仅仅删除RS对象(保留Pod),请使用 kubectl delete 命令时添加 --cascade=false 选项。

通过修改 .spec.replicas 的值可以实时修改RS运行的Pod数量。

RS可以通过HPA来根据一些运行时指标实现自动伸缩,下面是一个简单的例子:

上面的描述文件会创建一个名为frontend-scaler的HorizontalPodAutoscaler,它会根据CPU的运行参数来对名为frontend的RS进行自动伸缩。

更过关于HPA的信息请参考:

Kubernetes概念之deployment

一整天一整天的坐在办公室,真的很~~~,懵圈中....,求解救。

本文通过《Kubernetes权威指南》的概念部分学习总结 

Deployment作用

Deployment与RC的作用其实是一样的,都是为了管理Pod的副本数
 

Deployment的使用场景

1)创建一个Deployment对象来生成对应的Replica Set并完成Pod副本的创建过程。
2)检查Deployment的状态来看部署动作是否完成(Pod副本的数量是否达到了预期的值)
3)更新Deployment以创建新的Pod
4)如果当前Deployment不稳定,则回滚到一个早先的Deployment版本
5)挂起或者恢复一个Deployment
 

例子

创建一个deployment,管理一个运行tomcat的pod
 
1、创建deployment.yaml文件
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: frontend
spec:
  replicas: 1
  selector:
    matchLabels:
      tier: frontend
    matchExpressions:
      - key: tier, operator: In, values: [frontend]

  template:
    metadata:
      labels:
        app: app-demo
        tier: frontend
    spec:
      containers:
      - name: tomcat-demo
        image: tomcat
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 8080 

 

2、创建deployment
[root@master ~]# kubectl create -f tomcat-deployment.yaml 
deployment.extensions/frontend created

 

3、查看deployment信息
[root@master ~]# kubectl get deployment
NAME       DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
frontend   1         1         1            1           23s

 

输出结果的含义:
DESIRED:Pod副本数量的期望值,即deployment里定义的Replica
CURRENT:当前Replica的值,这个值会不断的增加,直到达到DESIRED为止,表明整个部署过程完成
UP-TO-DATE:最新版本的Pod的副本数量,用于指示在滚动升级过程中,有多少个Pod副本已经成功升级
AVAILABEL:当前集群中可用的Pod副本数量,即集群中当前存活的Pod数量
 
4、查看Pods信息
[root@master ~]# kubectl get pods
NAME                        READY     STATUS    RESTARTS   AGE
frontend-6cfdb4d686-j8jj7   1/1       Running   0          9m

 

5、查看deployment的详细信息
[root@master ~]# kubectl describe deployment
Name:                   frontend
Namespace:              default
CreationTimestamp:      Fri, 20 Sep 2019 06:40:40 +0000
Labels:                 app=app-demo
                        tier=frontend
Annotations:            deployment.kubernetes.io/revision=1
Selector:               tier=frontend,tier in (frontend)
Replicas:               1 desired | 1 updated | 1 total | 1 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  1 max unavailable, 1 max surge
Pod Template:
  Labels:  app=app-demo
           tier=frontend
  Containers:
   tomcat-demo:
    Image:        tomcat
    Port:         8080/TCP
    Host Port:    0/TCP
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
OldReplicaSets:  <none>
NewReplicaSet:   frontend-6cfdb4d686 (1/1 replicas created)
Events:
  Type    Reason             Age   From                   Message
  ----    ------             ----  ----                   -------
  Normal  ScalingReplicaSet  9m    deployment-controller  Scaled up replica set frontend-6cfdb4d686 to 1

 

以上是关于Kubernetes对象之ReplicaSet的主要内容,如果未能解决你的问题,请参考以下文章

Kubernetes资源对象之Deployment

kubernetes对象之Job

Kubernetes对象之Pod

云原生之kubernetes实战k8s集群核心资源对象之Pod

云原生 | kubernetes 资源对象 - 控制器模型之Deployment

Kubernetes对象之Pod详解(附安装部署方法)