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的使用场景
例子
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
[root@master ~]# kubectl create -f tomcat-deployment.yaml
deployment.extensions/frontend created
[root@master ~]# kubectl get deployment NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE frontend 1 1 1 1 23s
[root@master ~]# kubectl get pods NAME READY STATUS RESTARTS AGE frontend-6cfdb4d686-j8jj7 1/1 Running 0 9m
[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实战k8s集群核心资源对象之Pod