其他分享
首页 > 其他分享> > K8S资源控制器

K8S资源控制器

作者:互联网

什么是控制器

kubernetes中建立了很多的controller(控制器),这相当于一个控制机,来管理pod的状态和行为。

控制器的类型

ReplicationController和ReplicaSet 

ReplicationController(RC)是用来确保容器应用的副本数始终保持在用户定义的副本数,即如果有容器异常退出,会创建新的pod来代替,如果异常多出来的容器也会回收;

在新版本的kubernetes中建议使用ReplicaSet来代替ReplicationController,ReplicaSet 跟ReplicationController没有本质的不同,只是ReplicaSet支持集合式的selector(通过标签来选择);而ReplicationController不支持。

Deployment

Deployment为Pod和ReplicaSet提供了一个声明式定义(declarative)方法,用来替代以前的ReplicationController来方便管理应用,典型的场景包括:

 例: 部署一个nginx应用

创建一个rs.ymal的文件,定义deployment来创建pod和replicaset

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
         - containerPort: 80
~                           

 

[root@master ~]# kubectl apply -f rs.yaml            #创建一个pod
deployment.apps/nginx-deployment created
[root@master ~]# kubectl get pods                    # 查看pod信息
NAME                                READY   STATUS              RESTARTS   AGE
nginx-6799fc88d8-d9p6h              1/1     Running             0          27m
nginx-deployment-7848d4b86f-bnvdg   0/1     ContainerCreating   0          13s
nginx-deployment-7848d4b86f-xwn6c   0/1     ContainerCreating   0          13s
nginx-deployment-7848d4b86f-zf4bh   1/1     Running             0          13s
[root@master ~]# vim rs.yaml              
[root@master ~]# kubectl get pods --show-labels        #查看pod的标签
NAME                                READY   STATUS    RESTARTS   AGE     LABELS
nginx-6799fc88d8-d9p6h              1/1     Running   0          30m     app=nginx,pod-template-hash=6799fc88d8
nginx-deployment-7848d4b86f-bnvdg   1/1     Running   0          3m42s   app=nginx,pod-template-hash=7848d4b86f
nginx-deployment-7848d4b86f-xwn6c   1/1     Running   0          3m42s   app=nginx,pod-template-hash=7848d4b86f
nginx-deployment-7848d4b86f-zf4bh   1/1     Running   0          3m42s   app=nginx,pod-template-hash=7848d4b86f
[root@master ~]# kubectl get deployment                                          
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx              1/1     1            1           56d
nginx-deployment   3/3     3            3           6m53s
[root@master ~]# kubectl get rs     #查看pod的rs信息
NAME                          DESIRED   CURRENT   READY   AGE
nginx-6799fc88d8              1         1         1       35m
nginx-deployment-7848d4b86f   3         3         3       8m40s
[root@master ~]# kubectl get pods -o wide            #查看pod的详细信息
NAME                                READY   STATUS    RESTARTS   AGE   IP             NODE    NOMINATED NODE   READINESS GATES
nginx-6799fc88d8-d9p6h              1/1     Running   0          39m   10.101.11.5    node2   <none>           <none>
nginx-deployment-7848d4b86f-bnvdg   1/1     Running   0          11m   10.101.149.5   node1   <none>           <none>
nginx-deployment-7848d4b86f-xwn6c   1/1     Running   0          11m   10.101.149.4   node1   <none>           <none>
nginx-deployment-7848d4b86f-zf4bh   1/1     Running   0          11m   10.101.11.6    node2   <none>           <none>

扩容或者缩容,比如我们把pod数目扩容到10个

[root@master ~]# kubectl scale deployment nginx-deployment --replicas 10
deployment.apps/nginx-deployment scaled
[root@master ~]# kubectl get pods 
NAME                                READY   STATUS    RESTARTS   AGE
nginx-6799fc88d8-d9p6h              1/1     Running   0          50m
nginx-deployment-7848d4b86f-bnvdg   1/1     Running   0          22m
nginx-deployment-7848d4b86f-fjhld   1/1     Running   0          92s
nginx-deployment-7848d4b86f-nld5c   1/1     Running   0          92s
nginx-deployment-7848d4b86f-nmxlf   1/1     Running   0          92s
nginx-deployment-7848d4b86f-vmjgl   1/1     Running   0          92s
nginx-deployment-7848d4b86f-wbfbq   1/1     Running   0          92s
nginx-deployment-7848d4b86f-x86hq   1/1     Running   0          92s
nginx-deployment-7848d4b86f-xngl5   1/1     Running   0          92s
nginx-deployment-7848d4b86f-xwn6c   1/1     Running   0          22m
nginx-deployment-7848d4b86f-zf4bh   1/1     Running   0          22m

更新镜像

kubectl set image deployment/nginx-deployment (需要更新的镜像deployment)   nginx=nginx:1.9.1    (新版本镜像名称)

 回滚

kubectl rollout undo deployment/nginx-deployment 

Deployment更新策略 

Deployment可以保证在升级时只有一定数量的pod是down的,默认的,他会确保至少比期望的pod数量少一个是up状态

DaemonSet

Daemonset确保全部(或者一些)Node上运行一个pod的副本。 当有Node加入集群时,也会为它新增一个pod。当有Node从集群中删除时,这些pod也会被回收。删除Daemonset时会删除它创建的所有pod。

使用Daemonset的一些典型用法:

 job

job负责批处理任务,即仅执行一次的任务,它保证批处理任务的一个或者多个pod成功结束

特殊说明:

cronjob

cronjob管理基于时间的job,即:

在给定时间点运行一次

周期性的在给定时间点运行

典型用法是:

在给定的时间点运行job

创建周期性的运行job,比如发送邮件,数据库备份等等。

 

StateFulSet

StateFulSet作为controller为pod提供唯一的标识,它可以保证部署和scale的顺序。

StateFulSet是为了解决有状态服务的问题(对应的deployment和Replicaset是为无状态服务而设计),应用场景包括:

 Horizontal  Pod Autoscaling 

应用的资源使用率通常有高峰和低谷的时候,如何肖峰填谷,提高集群的整体资源使用率,让service中的pod数量自动调整呢? 这就需要Horizontal  Pod Autoscaling ,顾名思义,使pod水平缩放。

 

标签:kubectl,控制器,7848d4b86f,nginx,Running,deployment,pod,K8S,资源
来源: https://www.cnblogs.com/xiaozhi1223/p/16395749.html