K8S横向扩展功能:ReplicationController和ReplicaSet
1. ReplicationController
ReplicationController(简称为RC)。在旧版本的Kubernetes中,只有ReplicationController对象。它的主要作用是确保Pod以你指定的副本数运行,即如果有容器异常退出,会自动创建新的 Pod 来替代;而异常多出来的容器也会自动回收。可以说,通过ReplicationController,Kubernetes实现了集群的高可用性。
1.1 开始演示
#启动k8s
minikube start
#删除上次的pod
kubectl delete -f pod_nginx.yml
1.2 rc_nginx.yml
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的横向扩展
kubectl create -f rc_nginx.yml
kubectl get pods
kubectl get rc
1.3 删除pod
删除一个看看效果如何,通过delete pods 的方式删除一个容器,立刻就有一个新的容器起来
kubectl get rc
kubectl get pod
kubectl delete pods nginx-h2qbt
kubectl get pods
kubectl get rc
1.4 scale 水平扩展
kubectl scale rc nginx --replicas=2
kubectl get rc
kubectl scale rc nginx --replicas=4
kubectl get pods -o wide
2. ReplicaSet
Kubernetes官方强烈建议避免直接使用ReplicaSet,而应该通过Deployment来创建RS和Pod。
由于ReplicaSet是ReplicationController的代替物,因此用法基本相同,唯一的区别在于ReplicaSet支持集合式的selector。
2.1 rs_nginx.yml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: nginx
labels:
tier: frontend
spec:
replicas: 3
selector:
matchLabels:
tier: frontend
template:
metadata:
name: nginx
labels:
tier: frontend
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
kubectl create -f rs_nginx.yml
kubectl get pods -o wide
kubectl get pods
kubectl get rc
2.2 scale 水平扩展
kubectl scale rs nginx --replicas=2
kubectl get rs
kubectl scale rs nginx --replicas=5
kubectl get pods -o wide