Kubernetes Pod 控制器

控制器:  k8s中内建了很多controller控制器,相当于一个状态机,用来控制Pod的具体状态和行为
Pod 的分类
1)自主式Pod : Pod退出, 此类型Pod不会被创建。
2)控制器Pod : 在控制器的生命周期始终维持Pod的副本数量. (就算Pod死亡, 也会自动创建维持Pod的数量)
    
命令式编程:侧重于如何实现程序,就像我们刚接触编程的时候,需要把程序的实现过程按照逻辑结果一步一步写下来。
声明式编程:侧重于定义想要什么,然后告诉计算机/引擎去帮你实现。
申明式编程 (Deployment)  apply(优)    create
命令式    (rs)                create(优)   apply
    
ReplicationController和ReplicaSet
ReplicationController(RC)用来确保容器应用的副本数始终保持在用户定义的副本数,即如果有容器异常退出,会自动创建新的pod来替代,而异常多出来的容器也会自动回收。
在新版本的k8s中建议使用ReplicaSet来取代ReplicationController。ReplicaSet跟ReplicationContriller没有本质的不同,只是名字一样,并且replicaSet支持集合式的selector

例子:
[root@k8smaster k8s]# more rs.yaml 
apiVersion: extensions/v1beta1
kind: ReplicaSet
metadata:
  name: rs-test
spec:
  replicas: 3
  selector:
    matchLabels:
      tier: mytest
  template:
    metadata:
      labels:
        tier: mytest
    spec:
      containers:
      - name: nginx
        image: 192.168.23.100:5000/nginx:v1
        ports:
        - containerPort: 80
[root@k8smaster k8s]#
[root@k8smaster k8s]# kubectl create -f rs.yaml 
replicaset.extensions/rs-test created
[root@k8smaster k8s]# kubectl get pod -o wide
NAME            READY   STATUS    RESTARTS   AGE   IP           NODE        NOMINATED NODE   READINESS GATES
rs-test-277jh   1/1     Running   0          30s   10.244.2.8   k8snode02   <none>           <none>
rs-test-8sw48   1/1     Running   0          30s   10.244.1.9   k8snode01   <none>           <none>
rs-test-dfhsn   1/1     Running   0          30s   10.244.2.9   k8snode02   <none>           <none>
[root@k8smaster k8s]# kubectl get pod --show-labels
NAME            READY   STATUS    RESTARTS   AGE     LABELS
rs-test-4k2f4   1/1     Running   0          6m54s   tier=mytest
rs-test-m6sjs   1/1     Running   0          6m54s   tier=mytest
rs-test-sqcwg   1/1     Running   0          6m54s   tier=mytest
[root@k8smaster k8s]# kubectl get rs
NAME      DESIRED   CURRENT   READY   AGE
rs-test   3         3         3       41s

Deployment 
 为Pod和ReplicaSet提供一个声明式方法,用来代替ReplicationController来方便管理应用,典型的场景有:
 1)定义Deployment来创建Pod和ReplicaSet
 2)滚动升级和回滚应用
 3)扩容和缩容
 4)暂停和继续Deploment

例子:
[root@k8smaster k8s]# more deployment.yaml 
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: deployment-test
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: 192.168.23.100:5000/nginx:v1
        ports:
        - containerPort: 80
[root@k8smaster k8s]# 
[root@k8smaster k8s]# kubectl apply -f deployment.yaml 
deployment.extensions/deployment-test created
[root@k8smaster k8s]# kubectl get pod
NAME                               READY   STATUS    RESTARTS   AGE
deployment-test-745d95487d-dchkr   1/1     Running   0          40s
deployment-test-745d95487d-jzn4h   1/1     Running   0          40s
deployment-test-745d95487d-mkwgm   1/1     Running   0          40s
[root@k8smaster k8s]# kubectl get rs
NAME                         DESIRED   CURRENT   READY   AGE
deployment-test-745d95487d   3         3         3       43s
[root@k8smaster k8s]# kubectl get deployment
NAME              READY   UP-TO-DATE   AVAILABLE   AGE
deployment-test   3/3     3            3           50s
[root@k8smaster k8s]#

DaemonSet
确保全部(一些)Node上运行一个Pod副本.  当有Node加入集群,会为他们新增一个Pod,当有Node从集群移除时,pod也会被回收,删除DaemonSet将会删除它创建的Pod.
使用场景:
1)运行集群的存储daemon
2)每个Node的日志收集, fluentd ,logtash
3)每个Node的监控程序

Job
负责批量任务,仅执行一次任务,保证批处理任务一个或多个Pod成功结束

CronJob
定时调度某个时间执行一次或循环多次执行

StatefulSet
作为Controller为Pod提供唯一的标识 , 保证部署和scale的顺序.
StatefulSet用来解决有状态服务的问题, 场景如下:
1)稳定的持久化存储, 即Pod重新调度后能访问持久化数据,基于PCV实现,
2)稳定的网络标识, 即Pod重新调度后PodName和HostName不变, 基于Headless Services(即没有Cluster IP的Service) 来实现.
3)有序部署和有序扩展, 0-> N  下一个执行基于前一个已经Running或Ready, 基于InitC实现
4)有序删除N->0

Horizontal Pod Autosacling
应用的资源使用率通常都有高峰和低谷的时候,如何削峰填谷,提高集群的整体资源利用率,让service中的pod个数自动调整?这就有赖于Horizontal pod Autoscaling,使pod水平缩放

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值