k8s控制器

Pod 的分类:

        自主式 Pod:Pod 退出后不会被创建 控制器管理的

        Pod:在控制器的生命周期里,始终要维持 Pod 的副本数目 

        控制器类型: Replication Controller和ReplicaSet Deployment DaemonSet StatefulSet Job CronJob HPA全称Horizontal Pod Autoscaler 

Replication Controller和ReplicaSet

ReplicaSet 是下一代的 Replication Controller,官方推荐使用ReplicaSet。 ReplicaSet 和 Replication Controller 的唯一区别是选择器的支持,ReplicaSet 支持新的基于集合的选择器需求。 ReplicaSet 确保任何时间都有指定数量的 Pod 副本在运行。 虽然 ReplicaSets 可以独立使用,但今天它主要被Deployments 用作协调 Pod 创建、删除和更新的机制。 
 

测试 ReplicaSet的脚本

[root@server2 pot]# cat rs.yaml 
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: replicaset-example
spec:
  replicas: 6
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: myapp:v1
[root@server2 pot]# kubectl apply -f rs.yaml 
replicaset.apps/replicaset-example created

[root@server2 pot]# kubectl  get pod --show-labels

 执行rs.yaml,查看pod信息

[root@server2 pot]# kubectl  describe rs replicaset-example 

 

[root@server2 pot]#  kubectl  label  pod replicaset-example-tkbxl  app=myapp --overwrite



[root@server2 pot]# kubectl  get pod --show-labels 

 

Replication Controller 会持续监控正在运行的pod列表, 并保证相应 ” 类型” 的 pod的数目与期望相符(多了删除,少了新增)。所谓的类型就是通过标签选择器监控模板中指定标签的pod的数量。

注意:在新版本的k8s中的副本控制器为Replica Set 完全替代了Replication Controller。在kubectl 命令中 Replication Controller 可简写为rc ,Replica Set  为rs。

 修改版本号为v2 模拟版本更新

[root@server2 pot]# vim rs.yaml 
[root@server2 pot]# kubectl apply -f rs.yaml 
[root@server2 pot]# kubectl  get pod -o wide
[root@server2 pot]# curl 10.244.22.29

 没有发生改变 因为rs只控制副本,当前运行容器不受控制

 

Deployment

        

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

  • 定义Deployment来创建Pod和ReplicaSet
  • 滚动升级和回滚应用
  • 扩容和缩容
  • 暂停和继续Deployment

Deployment中可以实现ReplicaSet 的全部功能,所以一般是一起使用

更改版本为v2,容器版本会发生变化

deployment.yml

[root@server2 pot]# kubectl apply -f deployment.yaml 
[root@server2 pot]# kubectl  get pod -o wide
[root@server2 pot]# curl 10.244.141.197
[root@server2 pot]# cat deployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: myapp:v2

 images: myapp:v1

版本回滚

[root@server2 pot]# vim deployment.yaml 
[root@server2 pot]# kubectl apply -f deployment.yaml 
deployment.apps/nginx-deployment configured
[root@server2 pot]# kubectl get pod
NAME                                READY   STATUS        RESTARTS   AGE
nginx-deployment-6456d7c676-26jmm   1/1     Running       0          8s
nginx-deployment-6456d7c676-jr6xw   1/1     Running       0          10s
nginx-deployment-6456d7c676-td8sc   1/1     Running       0          4s
nginx-deployment-6d4f5bf58f-4zcbc   1/1     Terminating   0          5m10s
nginx-deployment-6d4f5bf58f-jt7g6   0/1     Terminating   0          5m10s
[root@server2 pot]# kubectl  get pod -o wide
NAME                                READY   STATUS    RESTARTS   AGE   IP               NODE      NOMINATED NODE   READINESS GATES
nginx-deployment-6456d7c676-26jmm   1/1     Running   0          15s   10.244.141.199   server3   <none>           <none>
nginx-deployment-6456d7c676-jr6xw   1/1     Running   0          17s   10.244.22.36     server4   <none>           <none>
nginx-deployment-6456d7c676-td8sc   1/1     Running   0          11s   10.244.141.200   server3   <none>           <none>
[root@server2 pot]# curl 10.244.141.199
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
[root@server2 pot]# curl 10.244.141.199
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
[root@server2 pot]# curl 10.244.22.36
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
[root@server2 pot]# kubectl get pod
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-6456d7c676-26jmm   1/1     Running   0          46s
nginx-deployment-6456d7c676-jr6xw   1/1     Running   0          48s
nginx-deployment-6456d7c676-td8sc   1/1     Running   0          42s
[root@server2 pot]# kubectl get rs
NAME                          DESIRED   CURRENT   READY   AGE
nginx-deployment-6456d7c676   3         3         3       60s
nginx-deployment-6d4f5bf58f   0         0         0       6m

DaemonSet 

 DaemonSet DaemonSet 确保全部(或者某些)节点上运行一个 Pod 的副本。当有节点加入集群时, 也会为他们新增一个 Pod 。当有节点从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。  DaemonSet 的典型用法: 在每个节点上运行集群存储 DaemonSet,例如 glusterd、ceph。 在每个节点上运行日志收集 DaemonSet,例如 fluentd、logstash。 在每个节点上运行监控 DaemonSet,例如 Prometheus Node Exporter、zabbix agent等  一个简单的用法是在所有的节点上都启动一个 DaemonSet,将被作为每种类型的 daemon 使用。  一个稍微复杂的用法是单独对每种 daemon 类型使用多个 DaemonSet,但具有不同的标志, 并且对不同硬件类型具有不同的内存、CPU 要求。 

[root@server2 pod]# cat daemonset.yaml 
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: daemonset-example
  labels:
    k8s-app: zabbix-agent
spec:
  selector:
    matchLabels:
      name: zabbix-agent
  template:
    metadata:
      labels:
        name: zabbix-agent
    spec:
      containers:
      - name: zabbix-agent
        image: zabbix/zabbix-agent

 StatefulSet

StatefulSet 是用来管理有状态应用的工作负载 API 对象。实例之间有不对等关系,以及实例对外部数据有依赖关系的应用,称为“有状态应用”  StatefulSet 用来管理 Deployment 和扩展一组 Pod,并且能为这些 Pod 提供*序号和唯一性保证*。  StatefulSets 对于需要满足以下一个或多个需求的应用程序很有价值: 稳定的、唯一的网络标识符。 稳定的、持久的存储。 有序的、优雅的部署和缩放。 有序的、自动的滚动更新。

Job

Job 执行批处理任务,仅执行一次任务,保证任务的一个或多个Pod成功结束。  CronJob Cron Job 创建基于时间调度的 Jobs。  一个 CronJob 对象就像 crontab (cron table) 文件中的一行,它用 Cron 格式进行编写,并周期性地在给定的调度时间执行 Job。  HPA 根据资源利用率自动调整service中Pod数量,实现Pod水平自动缩放。 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值