pod控制器
Posted 敲击岁月
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pod控制器相关的知识,希望对你有一定的参考价值。
pod控制器简介
pod控制器,又称为工作负载(workload),是用于实现管理pod的中间层,确保pod资源符合预期的状态,pod的资源出现故障时,会尝试进行重启,当重启策略无效,会重新创建新的pod。
pod控制器分为有状态和无状态的
有状态:
1.实例之间有差别,每个实例都有自己的独特性,元数据不同,例如etcd,zookeeper
2.实例之间不对等的关系,以及依靠外部存储的应用
无状态:
1.deployment认为所有的pod都是一样的
2.不用考虑顺序的要求
3.不用考虑在哪个node节点上运行
4.可以随意扩容和缩容
常规service和无头服务的区别
service:一组pod访问策略,提供cluster-ip集群之间通讯,还提供负载均衡和服务发现
Headless service:无头服务,不需要cluster-ip,直接绑定具体的pod的IP
pod控制器有多种类型:
ReplicaSet | 代用户创建指定数量的pod副本数量,确保pod副本数量符合预期状态,并且支持滚动式自动扩容和缩容功能 |
---|---|
Deployment | 工作在ReplicaSet之上,用于管理无状态应用,目前来说最好的控制器。支持滚动更新和回滚功能 |
DaemonSet | 用于确保集群中的每一个节点只运行特定的pod副本,通常用于实现系统级后台任务。比如ELK服务。管理的服务是无状态的,服务是守护进程 |
StatefulSet | 管理有状态应用 |
Job | 只要完成就立即退出,不需要重启或重建 |
Cronjob | 周期性任务控制,不需要持续后台运行 |
pod与控制器之间的关系
pod通过控制器实现应用的运维,如伸缩,升级等
Deployment
部署无状态应用
管理pod和replicaset
具有上线部署,副本设定,滚动升级,回滚等功能
提供声明式更新,例如只更新一个新的image
应用场景:web服务
statefulset
部署有状态应用
稳定的持久化存储,即pod重新调度后还是能访问到相同的持久化数据,基于PVC来实现
稳定的网络标志,即pod重新调度后其podname和hostname不变,基于headless service(无头服务,没有cluster IP的service)来实现有序部署,有序扩展,即pod是有顺序的,在部署或者扩展的时候要依据定义的顺序依次进行(即从1到N-1,在下一个pod运行之前所有之前的pod必须都是running和ready状态),基于init containers来实现
有序收缩,有序删除
常见的应用场景:数据库
无论是Kube-dns还是CoreDNS,基本原理都是利用监听Kubernetes的Service和Pod,生成DNS记录,然后通过重新配置Kubelet的DNS选项让新启动的Pod使用Kube-dns或CoreDNS提供的Kubernetes集群内域名解析服务
vim statefulset.yaml
apiVersion: v1
kind: Service
metadata:
name: myapp-svc
labels:
app: myapp-svc
spec:
ports:
- port: 80
name: web
clusterIP: None
selector:
app: myapp-pod
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: myapp
spec:
serviceName: myapp-svc
replicas: 3
selector:
matchLabels:
app: myapp-pod
template:
metadata:
labels:
app: myapp-pod
spec:
containers:
- name: myapp
image: ikubernetes/myapp:v1
ports:
- containerPort: 80
name: web
volumeMounts:
- name: myappdata
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: myappdata
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 2Gi
daemonset
daemonset确保全部(或者一些)node上运行一个pod副本,当有node加入集群时,也会为他们新增一个pod。当有node从集群移除时,这些pod也会被回收。删除daemonset将会删除它创建的所有的pod
应用场景:运行日志收集,监控,集群存储daemon
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: nginx-daemon
labels:
app: nginx
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.15.4
ports:
- containerPort: 80
job
分为普通任务和定时任务
常用语运行哪些仅需要执行一次的任务
应用场景:数据库迁移,批处理脚本,视频解码,离线数据处理,kube-bench扫描
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
cronjob
周期性任务
应用场景:通知,备份
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: hello
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
args:
- /bin/sh
- -c
- date; echo Hello from the Kubernetes cluster
restartPolicy: OnFailure
以上是关于pod控制器的主要内容,如果未能解决你的问题,请参考以下文章