Docker(十五)--Docker k8s--pod管理-控制器
目录1. pod分类2. 控制器类型2.1 deployment控制器2.1.1 拉伸2.1.2 版本更新2.2 DaemonSet控制器2.3 Job2.4 CronJob1. pod分类- Pod 的分类:自主式 Pod:Pod 退出后不会被创建控制器管理的 Pod:在控制器的生命周期里,始终要维持 Pod 的副本数目2. 控制器类型- 控制器类型-Replication Controlle
·
目录
1. pod分类
- Pod 的分类: 自主式 Pod:Pod 退出后不会被创建 控制器管理的 Pod:在控制器的生命周期里,始终要维持 Pod 的副本数目
2. 控制器类型
- 控制器类型 - Replication Controller和ReplicaSet(RS一般不会单独用,一般都是和deployment一起使用) 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 -> ReplicaSet -> 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 要求。 - StatefulSet StatefulSet 是用来管理有状态应用的工作负载 API 对象。实例之间有不对等关系,以及实例对外部数据有依赖关系的应用,称为“有状态应用” StatefulSet 用来管理 Deployment 和扩展一组 Pod,并且能为这些 Pod 提供*序号和唯一性保证*。 StatefulSets 对于需要满足以下一个或多个需求的应用程序很有价值: 稳定的、唯一的网络标识符。 稳定的、持久的存储。 有序的、优雅的部署和缩放。 有序的、自动的滚动更新。 - Job 执行批处理任务,仅执行一次任务,保证任务的一个或多个Pod成功结束。 - CronJob Cron Job 创建基于时间调度的 Jobs。 一个 CronJob 对象就像 crontab (cron table) 文件中的一行,它用 Cron 格式进行编写,并周期性地在给定的调度时间执行 Job。 - HPA 根据资源利用率自动调整service中Pod数量,实现Pod水平自动缩放。
2.1 deployment控制器
[root@server2 pod]# vim deploy.yml [root@server2 pod]# cat deploy.yml apiVersion: apps/v1 kind: Deployment metadata: name: myapp-deployment labels: app: myapp spec: replicas: 3 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: myapp image: myapp:v1 [root@server2 ~]# kubectl apply -f deploy.yml ##创建 deployment.apps/deployment created [root@server2 ~]# kubectl get pod ##查看pod NAME READY STATUS RESTARTS AGE demo 1/1 Running 1 7h49m deployment-6456d7c676-mfrxb 1/1 Running 0 12s deployment-6456d7c676-xlxw5 1/1 Running 0 12s deployment-6456d7c676-xn2dp 1/1 Running 0 12s ## deployment -> rs控制器 -> pod [root@server2 ~]# kubectl get pod [root@server2 ~]# kubectl get pod --show-labels ##显示所有标签 [root@server2 ~]# kubectl label nodes server3 app=nginx--overwrite ##重新覆盖 pod/myapp-deployment-678fcbc488-d42zm labeled [root@server2 pod]# kubectl get pod --show-labels NAME READY STATUS RESTARTS AGE LABELS myapp-deployment-678fcbc488-7zmhq 1/1 Running 0 2s app=myapp,pod-template-hash=678fcbc488 myapp-deployment-678fcbc488-d42zm 1/1 Running 0 5m17s app=nginx,pod-template-hash=678fcbc488 myapp-deployment-678fcbc488-t2ppb 1/1 Running 0 5m17s app=myapp,pod-template-hash=678fcbc488 myapp-deployment-678fcbc488-ztj99 1/1 Running 0 5m17s app=myapp,pod-template-hash=678fcbc488
2.1.1 拉伸
2.1.2 版本更新
2.2 DaemonSet控制器
[root@server2 ~]# vim daemonset.yml [root@server2 ~]# cat 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 [root@server2 ~]# kubectl apply -f daemonset.yml ##执行之后会在每一个节点上都运行一个zabbix [root@server2 ~]# kubectl get pod [root@server2 ~]# kubectl get pod -o wide ##发现server3和server4上都运行有zabbix NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES daemonset-example-69mgd 1/1 Running 0 2m31s 10.244.1.9 server3 <none> <none> daemonset-example-btstx 1/1 Running 0 2m31s 10.244.2.21 server4 <none> <none> demo 1/1 Running 1 9h 10.244.1.3 server3 <none> ##环境清理 [root@server2 ~]# kubectl delete -f daemonset.yml
2.3 Job
[root@server2 ~]# vim job.yml [root@server2 ~]# cat job.yml apiVersion: batch/v1 kind: Job metadata: name: pi spec: template: spec: containers: - name: pi image: perl ##server1上拉取上传到仓库 command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"] ##显示pi后面2000位小数 restartPolicy: Never ##不会重启 backoffLimit: 4 ##出错次数限制为4次 [root@server2 ~]# kubectl create -f job.yml job.batch/pi created [root@server2 ~]# kubectl get pod NAME READY STATUS RESTARTS AGE demo 1/1 Running 1 9h pi-hjkcl 0/1 ContainerCreating 0 9s [root@server2 ~]# kubectl describe pod pi-hjkcl [root@server2 ~]# kubectl logs pi-hjkcl ##查看生成的日志信息 ##清理环境 [root@server2 ~]# kubectl delete -f job.yml
2.4 CronJob
[root@server2 ~]# vim cronjob.yml [root@server2 ~]# cat cronjob.yml apiVersion: batch/v1beta1 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 [root@server2 ~]# kubectl create -f cronjob.yml cronjob.batch/hello created [root@server2 ~]# kubectl get all NAME READY STATUS RESTARTS AGE pod/demo 1/1 Running 1 9h NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2d5h NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE cronjob.batch/hello */1 * * * * False 0 <none> 10s ##间隔1分钟后 [root@server2 ~]# kubectl get pod ##发生了调度 NAME READY STATUS RESTARTS AGE demo 1/1 Running 1 9h hello-1613912160-z66tx 0/1 Completed 0 3s [root@server2 ~]# kubectl get all ##发生了调度 NAME READY STATUS RESTARTS AGE pod/demo 1/1 Running 1 9h pod/hello-1613912160-z66tx 0/1 Completed 0 5s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2d5h NAME COMPLETIONS DURATION AGE job.batch/hello-1613912160 1/1 1s 5s NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE cronjob.batch/hello */1 * * * * False 1 14s 68s [root@server2 ~]# kubectl get cronjob NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE hello */1 * * * * False 0 42s 5m36s [root@server2 ~]# kubectl logs hello-1613912160-z66tx Sun Feb 21 12:56:10 UTC 2021 Hello from the Kubernetes cluster [root@server2 ~]# kubectl delete cronjob hello ##可以通过单条命令删除,时间任务名称要看对 [root@server2 ~]# kubectl delete -f cronjob.yml ##也可以通过文件删除
更多推荐
已为社区贡献16条内容
所有评论(0)