k8s 控制器

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 创建、删除和更新的机制。
Deployment
  • Deployment 为 Pod 和 ReplicaSet 提供了一个申明式的定义方法。
  • 典型的应用场景:
    • 用来创建Pod和ReplicaSet
    • 滚动更新和回滚
    • 扩容和缩容
    • 暂停与恢复
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 要求。

Job
  • 执行批处理任务,仅执行一次任务,保证任务的一个或多个Pod成功结束。
CronJob
  • Cron Job 创建基于时间调度的 Jobs。

  • 一个 CronJob 对象就像 crontab (cron table) 文件中的一行,它用 Cron 格式进行编写,并周期性地在给定的调度时间执行 Job。

HPA
  • 根据资源利用率自动调整service中Pod数量,实现Pod水平自动缩放。

实验

deployment 控制器

# 创建deployment 控制器资源清单
kubectl explain deployment.apiVersion
kubectl explain deployment.spec
kubectl explain deployment.spec.template.spec
# 编写资源清单
vim pod.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      run: nginx
  template:
    metadata:
      labels:
        run: nginx
    spec:
      containers:
      - name: nginx
        image: myapp:v1
        imagePullPolicy: IfNotPresent

# 推送
 kubectl apply -f pod.yml
# 查看
 kubectl get deployments.apps 
# 查看pod 标签
 kubectl get pod --show-labels
# 删除
 kubectl delete -f pod.yml

# 手动创建deployment 控制器
 kubectl create deployment nginx --image=myapp:v1
# 以yml 格式输出deployment 创建过程 
 kubectl get deployments.apps nginx -o yaml
# 删除
 kuectel delete deployment nginx

标签操作

# 标签操作
# 查看标签
kubectl get nodes server3 --show-labels
# 添加标签
kubectl label nodes server3 app=nginx
# 重写
kubectl label nodes server3 app=myapp --overwrite
# 删除
kubectl label nodes server3 app-

daemonset 控制器

# daemonset 控制器资源清单
vim daemonset.yml
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-agent
# 推送
kubectl apply -f daemonset.yml
# 查看
kubectl get pod -o wide
# 删除
kubectl delete -f daemonset.yml

cronjob 控制器

# cronjob 控制器资源清单
vim cronjob.yml
apiVersion: batch/v1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busyboxplus
            imagePullPolicy: IfNotPresent
            args:
            - /bin/sh
            - -c
            - date; echo Hello from the kubernetes cluster
          restartPolicy: OnFailure
# 查看default namespace 下所有
kubectl get all
# 查看控制器日志
kubectl logs job.batch/hello-27085815
 	Thu Jul  1 14:15:02 UTC 2021
	Hello from the kubernetes cluster
# 删除
kubectl delete -f cronjob.yml 

job 控制器

# job 控制器资源清单
vim job-example.yaml
apiVersion: batch/v1
kind: Job
metadata:
  name: pi
spec:
  template:
    spec:
      containers:
      - name: pi
        image: perl
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never
  backoffLimit: 4

# 推送
kubectl apply -f job-example.yaml 
# 查看
kubectl get pod
	NAME       READY   STATUS              RESTARTS   AGE
	pi-mxjbh   1/1  	running              0        10s
# 输出为圆周率
kubectl logs pi-mxjbh
# 删除
kubectl delete -f job-example.yaml 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值