目录
1. Pod控制器的介绍
- 1. Pod控制器的介绍
- 2. ReplicaSet(RS)
- 2.1 概述
- 2.2 ReplicaSet的创建
- 2.2.1 查看ReplicaSet
- 3. ReplicaSet扩缩容
- 4. 删除ReplicaSet
在kubernetes中,Pod的创建方式可以分为两类:
- 自主式Pod:kubernetes直接创建的Pod,这种Pod删除后不会重建
- 控制器创建的Pod:通过Pod控制器创建的Pod,这种Pod删除之后还会自动重建
Pod控制器是管理Pod的中间层,通过Pod控制器创建符合用户期望状态的指定数量Pod。如果Pod在运行中出现故障,Pod控制器会基于指定的策略重启或重建Pod
有下面几种Pod控制器:
- ReplicaSet:保证指定数量的Pod运行,并支持Pod数量变更
- Deployment:通过控制ReplicaSet来控制Pod,并支持镜像版本滚动变更、版本回退
- Horizontal Pod Autoscaler:可以根据集群负载自动调整Pod的数量,实现削峰填谷
- DaemonSet:在集群中的指定Node上都运行一个副本,一般用于守护进程类的任务
- Job:创建出来的Pod只要完成任务就立即退出,用于执行一次性任务
- CronJob:创建的Pod会周期性的执行,用于执行周期性的任务
ReplicaSet的主要作用是保证一定数量的Pod能够正常运行,一旦Pod发生故障,就会重启或重建。还支持对Pod数量的扩缩容
ReplicaSet的资源清单文件模板
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: pod-controller # rs名称
namespace: dev # rs所属命名空间
labels: # 给rs打标签
controller: rs
spec:
replicas: 3 # pod副本数量。默认是1
selector: # 选择器,指定该控制器管理哪些pod
matchLabels: # Labels匹配规则。和matchExpressions类似
app: nginx-pod
matchExpressions: # Expressions匹配规则。和matchLabels类似
- {key: app, operator: In, values: ["nginx-pod"]}
template: # pod副本创建模板。属性和Pod的属性一样
metadata:
labels:
app: nginx-pod
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- name: nginx-port
containerPort: 80
protocol: TCP
2.2 ReplicaSet的创建
新建pod-controller.yaml,内容如下:
[root@k8s-master ~]# cat pod-controller.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: pod-controller
namespace: dev
labels:
controller: rs
spec:
replicas: 3
selector:
matchLabels:
app: nginx-pod
template:
metadata:
labels:
app: nginx-pod
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- name: nginx-port
containerPort: 80
protocol: TCP
[root@k8s-master ~]#
[root@k8s-master ~]# kubectl apply -f pod-controller.yaml
replicaset.apps/pod-controller created
[root@k8s-master ~]#
2.2.1 查看ReplicaSet
[root@k8s-master ~]# kubectl get rs pod-controller -n dev -o wide
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
pod-controller 3 3 3 2m20s nginx nginx:latest app=nginx-pod
[root@k8s-master ~]#
[root@k8s-master ~]# kubectl get pod -n dev -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod-controller-54hd6 1/1 Running 0 3m35s 10.244.169.170 k8s-node2
pod-controller-hwr7j 1/1 Running 0 3m35s 10.244.169.171 k8s-node2
pod-controller-r4d56 1/1 Running 0 3m35s 10.244.36.102 k8s-node1
[root@k8s-master ~]#
3. ReplicaSet扩缩容
方式一:使用以下命令,编辑文本内容:spec: replicas: 4
[root@k8s-master ~]# kubectl edit rs pod-controller -n dev
replicaset.apps/pod-controller edited
[root@k8s-master ~]#
方式二:直接使用命令
[root@k8s-master ~]# kubectl scale rs pod-controller --replicas=2 -n dev
replicaset.apps/pod-controller scaled
[root@k8s-master ~]#
4. 删除ReplicaSet
会同时删除其管理的Pod。原理是删除ReplicaSet前,会将ReplicaSet的replicas调整为0,等到所有的Pod被删除后,再执行ReplicaSet对象的删除
方式一:直接通过命令
[root@k8s-master ~]# kubectl delete rs pod-controller -n dev
replicaset.apps "pod-controller" deleted
[root@k8s-master ~]#
方式二:通过yaml文件删除
[root@k8s-master ~]# kubectl delete -f pod-controller.yaml
replicaset.apps "pod-controller" deleted
[root@k8s-master ~]#
也可以仅删除ReplicaSet,而不删除Pod
[root@k8s-master ~]# kubectl delete rs pod-controller -n dev --cascade=false
warning: --cascade=false is deprecated (boolean value) and can be replaced with --cascade=orphan.
replicaset.apps "pod-controller" deleted
[root@k8s-master ~]#