k8s之控制器

一、控制器

控制器也是管理pod的一种手段

  • 自主式pod:pod退出或意外关闭后不会被重新创建

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

Pod控制器是管理pod的中间层,使用Pod控制器之后,只需要告诉Pod控制器,想要多少个什么样的Pod就可以了,它会创建出满足条件的Pod并确保每一个Pod资源处于用户期望的目标状态。如果Pod资源在运行中出现故障,它会基于指定策略重新编排Pod

当建立控制器后,会把期望值写入etcd,k8s中的apiserver检索etcd中我们保存的期望状态,并对比pod的当前状态,如果出现差异代码自驱动立即恢复

二、控制器常见类型

控制器名称 控制器用途
Replication Controller 比较原始的pod控制器,已经被废弃,由ReplicaSet替代
ReplicaSet ReplicaSet 确保任何时间都有指定数量的 Pod 副本在运行
Deployment 一个 Deployment 为 PodReplicaSet 提供声明式的更新能力
DaemonSet DaemonSet 确保全指定节点上运行一个 Pod 的副本
StatefulSet StatefulSet 是用来管理有状态应用的工作负载 API 对象。
Job 执行批处理任务,仅执行一次任务,保证任务的一个或多个Pod成功结束
CronJob Cron Job 创建基于时间调度的 Jobs。
HPA全称Horizontal Pod Autoscaler 根据资源利用率自动调整service中Pod数量,实现Pod水平自动缩放

三、replicaset控制器

3.1 replicaset功能

  • ReplicaSet 是下一代的 Replication Controller,官方推荐使用ReplicaSet

  • ReplicaSet和Replication Controller的唯一区别是选择器的支持,ReplicaSet支持新的基于集合的选择器需求

  • ReplicaSet 确保任何时间都有指定数量的 Pod 副本在运行

  • 虽然 ReplicaSets 可以独立使用,但今天它主要被Deployments 用作协调 Pod 创建、删除和更新的机制

3.2 replicaset参数

参数名称 字段类型 参数说明
spec Object 详细定义对象,固定值就写Spec
spec.replicas integer 指定维护pod数量
spec.selector Object Selector是对pod的标签查询,与pod数量匹配
spec.selector.matchLabels string 指定Selector查询标签的名称和值,以key:value方式指定
spec.template Object 指定对pod的描述信息,比如lab标签,运行容器的信息等
spec.template.metadata Object 指定pod属性
spec.template.metadata.labels string 指定pod标签
spec.template.spec Object 详细定义对象
spec.template.spec.containers list Spec对象的容器列表定义
spec.template.spec.containers.name string 指定容器名称
spec.template.spec.containers.image string 指定容器镜像

3.3 replicaset示例

通过标签识别

[root@k8s-master deployment]# kubectl create deployment replicaset --image myapp:v1 --dry-run=client -o yaml > replicaset.yml
[root@k8s-master deployment]# vim replicaset.yml 
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: replicaset
  name: replicaset
spec:
  replicas: 2
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - image: myapp:v1
        name: myapp                    
[root@k8s-master deployment]# kubectl get pod --show-labels 
NAME                          READY   STATUS    RESTARTS   AGE   LABELS
replicaset-5d886954d4-dllz2   1/1     Running   0          50s   app=myapp,pod-template-hash=5d886954d4
replicaset-5d886954d4-rz9l7   1/1     Running   0          50s   app=myapp,pod-template-hash=5d886954d4

# 修改标签
[root@k8s-master deployment]# kubectl label pod replicaset-5d886954d4-dllz2 app=replicaset --overwrite 
pod/replicaset-5d886954d4-dllz2 labeled
# 通过标签识别,如果标签改变,就不属于原来的控制器管理了,会重新生成新的pod
[root@k8s-master deployment]# kubectl get pod --show-labels 
NAME                          READY   STATUS    RESTARTS   AGE   LABELS
replicaset-5d886954d4-dllz2   1/1     Running   0          80s   app=replicaset,pod-template-hash=5d886954d4
replicaset-5d886954d4-rz9l7   1/1     Running   0          80s   app=myapp,pod-template-hash=5d886954d4
replicaset-5d886954d4-v5gjf   1/1     Running   0          2s    app=myapp,pod-template-hash=5d886954d4        # 开启新的pod
# 删除app标签
[root@k8s-master deployment]# kubectl label pod replicaset-5d886954d4-dllz2 app-
pod/replicaset-5d886954d4-dllz2 unlabeled
[root@k8s-master deployment]# kubectl get pod --show-labels 
NAME                          READY   STATUS    RESTARTS   AGE    LABELS
replicaset-5d886954d4-dllz2   1/1     Running   0          110s   pod-template-hash=5d886954d4
replicaset-5d886954d4-rz9l7   1/1     Running   0          110s   app=myapp,pod-template-hash=5d886954d4
replicaset-5d886954d4-v5gjf   1
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值