ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

K8S资源控制器

2022-07-06 14:01:20  阅读:187  来源: 互联网

标签:kubectl 控制器 7848d4b86f nginx Running deployment pod K8S 资源


什么是控制器

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

控制器的类型

  • ReplicationController和ReplicaSet          
  • Deployment                                             无状态负载
  • DaemonSet                                              守护进程集
  • StateFulSet                                              有状态负载
  • Job/cronJob                                              普通任务/计划任务
  • Horizontal  Pod Autoscaling                     自动扩展 

ReplicationController和ReplicaSet 

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

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

Deployment

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

  • 定义deployment来创建pod和replicaset
  • 扩容和缩容
  • 部署无状态应用,只关心数量,不论角色等,称无状态
  • 具有上线部署、副本设定、滚动升级、回滚等功能
  • 提供声明式更新,例如只更新一个新的image

 例: 部署一个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的一些典型用法:

  • 运行集群存储daemon,例如在每个Node上运行ceph、glusterd
  • 在每个Node上运行日志收集daemon,例如logstash、fluentd
  • 在每个Node上运行监控daemon,例如Prometheus Node Exporter

 job

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

特殊说明:

  • spec.template格式同pod一样
  • restartpolicy仅支持never或 onfailure
  • 单个pod时,默认pod成功运行job即 结束

cronjob

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

在给定时间点运行一次

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

典型用法是:

在给定的时间点运行job

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

 

StateFulSet

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

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

  • 稳定的持久化存储,即pod重新调度后还是能访问到相同的持久化数据,基于PVC来实现
  • 稳定的网络标识,即pod重新调度后其PodName和HostName不变,基于headless  service(即没有cluster IP 的service)来实现
  • 有序部署,有序扩展,即pod是有顺序的,在部署或者扩展时要依据定义的顺序依次进行(即从0到N-1,在下一个pod运行之前所有之前的pod都是running或者ready状态),基于init container来实现。
  • 有序收缩,有序删除

 Horizontal  Pod Autoscaling 

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

 

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有