k8s - statefulset+daemonset
statefulsetstatefulset 为管理有状态服务而设计的有状态: 服务名称不能变化,每个pod要有单独的存储,多用于数据库使用。无状态:管理的Pod的IP、名字,启停顺序等都是随机的。个体对整体无影响,所有pod都是共用一个数据卷的statefulset 由以下几个部分组成:1 Headless Service: 用来定义Pod网络标识,生成可解析的DNS记录,被DNS解析后返回所有
statefulset
statefulset 为管理有状态服务而设计的
有状态: 服务名称不能变化,每个pod要有单独的存储,多用于数据库使用。
无状态:管理的Pod的IP、名字,启停顺序等都是随机的。个体对整体无影响,所有pod都是共用一个数据卷的
statefulset 由以下几个部分组成:
1 Headless Service: 用来定义Pod网络标识,生成可解析的DNS记录,被DNS解析后返回所有绑定的pod的IP,普通service 解析返回的是ClusterIP,pod名称是pod唯一性的标识符,必须持久稳定有效
2 volumeClaimTemplates: 存储申请模板,创建pvc,指定pvc名称大小,自动创建pvc,且pvc由存储类供应
3 statefulset 管理pod的
资源清单示例:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: state-test
spec:
replicas: 3
selector:
matchLabels:
app: state
serviceName: my-state
template:
metadata:
name: state
labels:
app: state
spec:
containers:
- name: state-cont
image: nginx
volumeMounts:
- name: vol-test
mountPath: /tmpdir
# 通过卷模板创建pvc,可以达到每个pod一个独立的存储卷的效果
volumeClaimTemplates:
- metadata:
name: vol-test
spec:
accessModes:
- "ReadWriteOnce"
storageClassName: nfs
resources:
requests:
storage: 1Gi
使用 kubectl explain statefulset.spec.template.spec.volumes挂载只能挂载已经创建好的pvc
通过使用 volumeClaimTemplates 完成动态创建pvc
通过statefulset创建出来的pod是有序的从0开始有序排列,扩容从小到大增长,缩容从大到小减少
扩容直接使用edit编辑statefulst即可或修改yaml文件副本数后apply更新
有头service 解析的是service对应的IP,无头service解析结果是后端所有pod的ip
daemonset
daemonset可以确保k8s中每个节点都运行一个相同的pod,当节点数量变化时,pod也会随着节点的数量怎加减少。
daemonset 的控制器会监听 kuberntes 的 daemonset 对象、pod 对象、node 对象,这
些被监听的对象之变动,就会触发 syncLoop 循环让 kubernetes 集群朝着 daemonset 对象
描述的状态进行演进。
在集群的每个节点上运行存储,比如:glusterd 或 ceph。
在每个节点上运行日志收集组件,比如:flunentd 、 logstash、filebeat 等。
在每个节点上运行监控组件,比如:Prometheus、 Node Exporter 、collectd 等。
资源清单示例:
通过 kubectl explain 资源名称查看帮助
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: daem-test
labels:
app1: daem
spec:
selector:
matchLabels:
app1: daem
template:
metadata:
name: daem-pod
labels:
app1: daem
spec:
containers:
- name: daem-pod-nginx
image: nginx
# 容忍污点,调度也受污点的影响
tolerations:
- effect: NoSchedule
operator: Exists
deamonset也支持滚动更新,先删除后创建。
更多推荐
所有评论(0)