k8s pod控制器之StatefulSet和DaemonSet
StatefulSet 创建的Pod的名称格式为-,例如名为web的3副本的StatefulSet其创建的Pod对象的名称依次为web-0、web-1、web-2。在测试pod中对statefulset-svc解析,会直接返回3个Pod的地址。查看StatefulSet创建的Pod,名称都是按顺序编号的,格式为-,另外Pod的主机名和Pod的名称也是一致的。
StatefulSet
StatefulSet官方文档:https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/statefulset/
StatefulSet控制器主要用来部署有状态应用,StatefulSet创建的每个Pod对象都具有唯一且固定的Pod名称,这些Pod对象的数据一般都会通过PVC保存在持久存储中。StatefulSet可以用来部署mysql、redis和kafka这类服务。
StatefulSet会按照顺序对Pod进行启停和伸缩操作。对于拥有N个副本的StatefulSet的资源来说,它会以{0…N-1}对各个Pod进行编号并按顺序创建,当前Pod就绪后才能创建下一个,删除的时候以相反的顺序进行,当前Pod删除完成后才能删除前一个。
一般来说StatefulSet还需要结合Headless Service使用,Headless Service就是没有ClusterIP的Service对象。Headle Service对象负责为每个Pod对象固定的名称标识符生成可解析的DNS记录,StatefulSet负责编排Pod对象,并且借助PVC模板为Pod提供专用且固定的存储资源。
StatefulSet 创建的Pod的名称格式为<statefulset-name>-<serial-number>,例如名为web的3副本的StatefulSet其创建的Pod对象的名称依次为web-0、web-1、web-2。域名后缀是StatefulSet对应的HeadLess Service的域名,<svc-name>.<ns>.svc.cluster.local
StatefulSet的资源规范文件如下:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: ...
namespace: ...
spec:
replicas: <int> #期望Pod副本数,默认为1
selector: <Object> #标签选择器,用于筛选Pod
template: <Object> #Pod模板
revisionHistoryLimit: <int> #滚动更新历史记录保留数量,默认为10
serviceName: <string> #StatefulSet对应的HeadLess Service对象的名称
volumeClaimTemplates: #PVC模板,会根据此模板自动创建PVC,然后挂载到Pod使用
- apiVersion: <string> #PVC资源API版本,可省略
kind: <string> #PVC资源标识,可省略
metadata: <Object> #PVC资源对象元数据
spec: <Object> #PVC资源对象期望状态,可用字段同PVC
updateStrategy: #更新策略配置
type: <string> #滚动更新类型,可用值有OnDelete和RollingUpdate
rollingUpdate: #专用于RollingUpdate的更新参数
partition: <int> #分区指示索引值,默认为0
podManagementPolicy: <string> #Pod管理策略,默认为OrderedReady表示顺序创建逆序删除,另一个值Parallel表示并行模式
StatefulSet示例:
apiVersion: v1
kind: Service
metadata:
name: statefulset-svc
spec:
selector:
app: statefulset-demo
ports:
- name: http
protocol: TCP
port: 80
targetPort: 80
clusterIP: None
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: statefulset-demo
spec:
serviceName: statefulset-svc
replicas: 3
selector:
matchLabels:
app: statefulset-demo
template:
metadata:
labels:
app: statefulset-demo
spec:
containers:
- name: nginx
image: nginx
ports:
- name: http
containerPort: 80
volumeClaimTemplates:
- metadata:
name: date
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 1Gi
limits:
storage: 1Gi
storageClassName: managed-nfs-storage
查看StatefulSet创建的Pod,名称都是按顺序编号的,格式为<statefulset-name>-<serial-number>,另外Pod的主机名和Pod的名称也是一致的
创建的pvc资源也一样按顺序编号
在测试pod中对statefulset-svc解析,会直接返回3个Pod的地址。也可以直接解析pod对应的域名,pod的域名格式是<pod-name>.<svc-name>.<ns>.svc.cluster.local
访问statefulset测试
DaemonSet
DaemonSet官方文档:https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/daemonset/
DaemonSet控制器是一种特殊的控制器,它可以在集群中的每个节点上运行同一个Pod,当有新的节点加入集群时DaemonSet也会在新节点上创建相同的Pod;当从集群中移除节点时,节点上的Pod也会被自动删除。删除DaemonSet将会删除其创建的所有Pod。DaemonSet主要用来运行那些系统级守护进程,例如监控代理进程和日志收集进程等
DaemonSet的资源规范文件常用字段如下:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: ...
namespace: ...
spec:
selector: <Object> #标签选择器,用于筛选Pod
template: <Object> #Pod模板
minReadySeconds: <int> #Pod就绪多少秒内无任一容器崩溃方可视为就绪
updateStrategy: #更新策略配置
type: <string> #更新方式,可用值有OnDelete和RollingUpdate
rollingUpdate: #用于滚动更新的配置
maxUnavailable: <string> #更新期间可比期望的Pod数量缺少的数量或百分比
DaemonSet示例,在每个节点部署prometheus node-expoter:
apiVersion: v1
kind: Namespace
metadata:
name: monitoring
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: prometheus-node-expoter
namespace: monitoring
spec:
selector:
matchLabels:
app: prometheus-node-expoter
template:
metadata:
labels:
app: prometheus-node-expoter
spec:
containers:
- name: prometheus-node-expoter
image: prom/node-exporter:v1.3.1
args:
- --path.procfs=/host/proc
- --path.sysfs=/host/sys
- --path.rootfs=/host
ports:
- name: metrics
containerPort: 9100
protocol: TCP
hostPort: 9100
volumeMounts:
- name: proc
mountPath: /host/proc
readOnly: true
- name: sys
mountPath: /host/sys
readOnly: true
- name: rootfs
mountPath: /host
readOnly: true
volumes:
- name: proc
hostPath:
path: /proc
- name: sys
hostPath:
path: /sys
- name: rootfs
hostPath:
path: /
hostNetwork: true
hostPID: true
查看Pod,DaemonSet会在每个节点都创建一个对应的Pod
访问任意节点的9100端口的/metrics路径测试,可以看到已经有和监控数据
更多推荐
所有评论(0)