IT干货网

Replication Controller

shasha 2022年03月19日 DevOps 1088 0

RC保证在同一时间能够运行指定数量的Pod副本,保证Pod总是可用。如果实际Pod数量比指定的多就结束掉多余的,如果实际数量比指定的少就启动缺少的。

当Pod失败、被删除或被终结时,RC会自动创建新的Pod来保证副本数量,所以即使只有一个Pod,也应该使用RC来进行管理。

来个简单例子:

 1 apiVersion: v1 
 2 kind: ReplicationController  //ReplicationController类型 
 3 metadata: 
 4   name: nginx               //pod名字 
 5 spec: 
 6   replicas: 2               //2个副本 
 7   selector:                  
 8     app: nginx              //通过这个标签找到生成的pod 
 9   template:                 //定义pod模板,在这里不需要定义pod名字,就算定义创建的时候也不会采用这个名字而是.metadata.generateName+5位随机数。 
10     metadata: 
11      labels:                //定义标签 
12       app: nginx            //key:v   这里必须和selector中定义的KV一样 
13     spec: 
14      containers:            //rc 的容器重启策略必须是Always(总是重启),这样才能保证容器的副本数正确 
15       - image: nginx 
16         name: nginx 
17         ports:   
18         - containerPort: 80

提示:

K8S 通过template来生成pod,创建完后模板和pod就没有任何关系了,rc通过 labels来找对应的pod,控制副本

查询rc

[root@kubernetes-master pods]# kubectl get rc nginx
NAME DESIRED CURRENT READY AGE
nginx      2              2                2        1m

查询pod容器

[root@kubernetes-master pods]# kubectl get pod --selector app=nginx 

NAME           READY       STATUS        RESTARTS          AGE
nginx-2jhlv      1/1              Running              0                     2m
nginx-hbtqj     1/1               Running              0                     2m

同时查询rc和rc创建的pod
[root@kubernetes-master pods]# kubectl get pod --selector app=nginx --label-columns app
NAME           READY            STATUS           RESTARTS          AGE       APP
nginx-2jhlv      1/1                  Running                 0                     2m       nginx
nginx-hbtqj     1/1                  Running                  0                    2m        nginx

删除pod会后会立刻在拉起一个pod

 删除rc后pod也被删除(--cascade=false只删除rc保留创建的pod)

[root@kubernetes-master pods]# kubectl delete rc nginx
replicationcontroller "nginx" deleted

模板和RC可意分别定义

1先定义一个模板,然后创建

 1 apiVersion: v1 
 2 kind: PodTemplate 
 3 metadata: 
 4   name: my-nginx 
 5 template: 
 6     metadata: 
 7      labels: 
 8       app: nginx 
 9     spec: 
10      containers: 
11       - image: nginx 
12         name: nginx 
13         ports:   
14         - containerPort: 80

创建后并不会把pod拉起来

[root@kubernetes-master pods]# kubectl create -f template.yml
podtemplate "my-nginx" created

查看模板池

2定义rc

1 apiVersion: v1 
2 kind: ReplicationController 
3 metadata: 
4   name: my-nginx 
5 spec: 
6  replicas: 2 
7  templateRef: 
8     app: nginx        

这个暂时有问题还无法通过RC拉起来templatekubectl create -f rc.yml 

修改rc模式下的一个pod label

[root@kubernetes-master pods]# kubectl label pod nginx-qqf16 app=debug --overwrite
pod "nginx-qqf16" labeled

当修改一个pod标签后就摆脱RC控制了,如果将标签在改回去那么将有一个POD被干掉,超过了RC最大副本数 

将标签改回去

弹性伸缩(手动):

kubectl scale replicationcontroller 【pod-name】 --replicas=1

自动伸缩:

Kubernetes有一个HPA(Horizontal Pod Autoscaler)的东东,可以实现基于CPU使用率的Pod自动伸缩的功能。 HPA基于Master Node上的kube-controller-manager服务启动参数--horizontal-pod-autoscaler-sync-period定义的时长(默认为30秒),周期性的检测Pod的CPU使用率(需要事先安装heapster)。使用kubeadm初始化的集群,如果需要设置--horizontal-pod-autoscaler-sync-period可以在Master Node上的/etc/kubernetes/manifests/kube-controller-manager.json中修改。

[root@kubernetes-master pods]# kubectl create -f nginx.yaml
replicationcontroller "my-nginx" created

cpu超过%80就会拉起一个pod,最大5个pod,当cpu使用率小于%80 pod就会缩小
[root@kubernetes-master pods]# kubectl autoscale rc my-nginx --min=1 --max=5 --cpu-percent=80   
replicationcontroller "my-nginx" autoscaled


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!