千家信息网

如何解析k8s中pod控制器的Deployment、DaemonSet、StatefulSet

发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,本篇文章为大家展示了如何解析k8s中pod控制器的Deployment、DaemonSet、StatefulSet,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获
千家信息网最后更新 2025年12月01日如何解析k8s中pod控制器的Deployment、DaemonSet、StatefulSet

本篇文章为大家展示了如何解析k8s中pod控制器的Deployment、DaemonSet、StatefulSet,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

pod控制器分类:
1、ReplicationController
2、ReplicaSet
3、Deployment
4、StatefulSet
5、DaemonSet
6、Job,Cronjob
7、HPA
pod控制器:一般包括3部分
1、标签选择器
2、期望的副本数(DaemonSet控制器不需要)
3、pod模板
deploy控制器构建于rs控制器之上,新特性包括:
1、事件和状态查看
2、回滚
3、版本记录
4、暂停和启动
5、支持两种自动更新方案
Recreate删除重建
RollingUpdate回滚升级(默认方式)

创建deploy
$ kubectl run --help
$ kubectl run nginx --image=nginx --port=80 --replicas=2 #用命令直接创建
$ kubectl run nginx --image=nginx --port=80 --dry-run -o yaml

apiVersion: apps/v1kind: Deploymentmetadata:  labels:    run: nginx  name: nginxspec:  replicas: 1  selector:    matchLabels:      run: nginx  template:    metadata:      labels:        run: nginx    spec:      containers:      - image: nginx        name: nginx        ports:        - containerPort: 80

创建deploy控制器时会自动创建rs控制器,二者具有相同的标签选择器
$ kubectl get deploy
nginx 1/1 1 1 7s
$ kubectl get rs

修改pod副本数的方式
1、kubectl edit deploy nginx
2、kubectl scale deploy nginx --replicas=5
3、修改yaml文件

升级pod镜像的方法:
1、直接修改yaml
2、kubectl edit deploy nginx
3、kubectl set image deploy/nginx nginx=nginx:1.9 --record #升级并记录,可实现回滚,推荐使用该方法

滚动升级是deployment pod升级时的默认策略,也可以修改默认值
用命令kubectl edit deploy nginx可以查看默认值

  replicas: 3  selector:    matchLabels:      run: nginx  minReadySeconds: 5       #默认看不到,需要手工添加  strategy:    rollingUpdate:      maxSurge: 25%      maxUnavailable: 25%    type: RollingUpdate

默认情况下,当6个pod副本需要升级时:Kubernetes 将终止1个实例(625%=1.5个实例,向下舍去=1),创建3个新实例(625%=1.5个实例,向上舍入=2,加1个实例来弥补1个终止实例=3个实例),此时总共运行8个副本。一旦新的pod就绪,它将从旧的副本集中终止另外2个实例,以便将部署恢复到所需的副本数,然后重复这个过程,直到部署完成为止。
minReadySeconds:Kubernetes在等待设置的时间后才进行升级
maxSurge:升级过程中最多可以比原先设置多出的POD数量
maxUnavaible:升级过程中最多有多少个POD处于无法提供服务的状态

滚动升级相关命令
$ kubectl set image deploy/nginx nginx=nginx:1.7.9 --record
$ kubectl set image deploy/nginx nginx=nginx --record
$ kubectl rollout status deploy nginx #查看升级状态
$ kubectl rollout pause deployment nginx #升级暂停
$ kubectl rollout resume deployment nginx #恢复升级
$ kubectl describe deploy nginx #查看升级详情
$ kubectl rollout history deploy/nginx #查看升级历史
deployment.extensions/nginx
REVISION CHANGE-CAUSE
4 kubectl set image deploy/nginx nginx=nginx:1.7.9 --record=true
5 kubectl set image deploy/nginx nginx=nginx --record=true
$ kubectl rollout history deployment nginx --revision=5
$ kubectl rollout undo deployment/nginx --to-revision=4 #回滚到指定版本
$ kubectl rollout undo deployment nginx-deploy #回滚到前一个版本

显式指定滚动升级参数

apiVersion: apps/v1kind: Deploymentmetadata:  labels:    run: nginx  name: nginxspec:  replicas: 1  selector:    matchLabels:      run: nginx    minReadySeconds: 5        strategy:    rollingUpdate:      maxSurge: 1      maxUnavailable: 1    type: RollingUpdate  template:    metadata:      labels:        run: nginx    spec:      containers:      - image: nginx        name: nginx        ports:        - containerPort: 80

DaemonSet用于在每个Kubernetes节点中将守护进程的副本作为后台进程运行,说白了就是在每个节点部署一个Pod副本,当节点加入到Kubernetes集群中,Pod会被自动调度到该节点上运行。
每个节点有一个ds pod,新加入的节点也会自动生成一个ds pod
ds pod不受调度策略控制
使用DaemonSe场景:
1、集群存储守护程序,如glusterd、ceph要部署在每个节点上以提供持久性存储;
2、节点监视守护进程,如Prometheus监控集群,可以在每个节点上运行一个node-exporter进程来收集监控节点的信息;
3、日志收集守护程序,如fluentd或logstash,在每个节点上运行以收集容器的日志
示例:

kind: DaemonSetapiVersion: extensions/v1beta1metadata:  name: nginx-ds  labels:    k8s-app: nginxspec:  template:    metadata:      labels:        k8s-app: nginx    spec:      containers:      - image: nginx:1.7.9        name: nginx        ports:        - name: http          containerPort: 80

无状态服务(Stateless Service):所有pod只需要共享一个持久存储,并不需要每个pod一个持久存储,并且多个实例对于同一个请求响应的结果是完全一致的
有状态服务(Stateful Service):每个pod都需要一个独立的持久存储,对于这种类型的资源,我们一般是通过创建一个Headless Service类型的服务来暴露服务,将clusterIP设置为None就是一个无头的服务。
1、有状态服务一般使用pvc模板和存储类为每个pod自动生成一对pv和pvc来实现持久化存储。
2、也可以手动创建pv,然后和利用StatefulSet中的volumeClaimTemplates自动生成的pvc进行配对。

手动创建pv用于StatefulSet
1、创建两个pv

apiVersion: v1kind: PersistentVolumemetadata:  name: pv001        #第二个是pv002  labels:    release: stablespec:  capacity:    storage: 1Gi  accessModes:  - ReadWriteOnce  persistentVolumeReclaimPolicy: Recycle  hostPath:    path: /tmp/data

2、先创建无头服务

apiVersion: v1kind: Servicemetadata:  name: nginxspec:  ports:  - port: 80    name: web  clusterIP: None  selector:    app: nginx    role: stateful

3、创建StatefulSet pod使用pv

apiVersion: apps/v1beta1kind: StatefulSetmetadata:  name: webspec:  serviceName: "nginx"        #使用上面创建的无头服务  replicas: 2  template:    metadata:      labels:        app: nginx        role: stateful    spec:      containers:      - name: nginx        image: cnych/nginx-slim:0.8        ports:        - containerPort: 80          name: web        volumeMounts:        - name: www          mountPath: /usr/share/nginx/html  volumeClaimTemplates:  - metadata:      name: www    spec:      accessModes: [ "ReadWriteOnce" ]      resources:        requests:          storage: 1Gi

volumeClaimTemplates会根据其对应的pv自动生成pvc并自动配对,数量由replicas: 2决定。

使用pvc模板和存储类自动生成pv和pvc
1、创建存储类

apiVersion: storage.k8s.io/v1kind: StorageClassmetadata:  name: course-nfs-storageprovisioner: fuseim.pri/ifs

2、先创建无头服务

apiVersion: v1kind: Servicemetadata:  name: nfs-webspec:  ports:  - port: 80    name: web  clusterIP: None  selector:    app: nginx    role: stateful

3、使用存储类创建StatefulSet pod

apiVersion: apps/v1beta1kind: StatefulSetmetadata:  name: nfs-webspec:  serviceName: "nfs-web"         #使用上面创建的无头服务  replicas: 2  template:    metadata:      labels:        app: nfs-web    spec:      terminationGracePeriodSeconds: 10      containers:      - name: nginx        image: nginx        ports:        - containerPort: 80          name: web        volumeMounts:        - name: www          mountPath: /usr/share/nginx/html  volumeClaimTemplates:  - metadata:      name: www      annotations:        volume.beta.kubernetes.io/storage-class: course-nfs-storage    spec:      accessModes: [ "ReadWriteOnce" ]            #storageClassName: course-nfs-storage        使用存储类      resources:        requests:          storage: 1Gi

会自动生成两对pv和pvc

上述内容就是如何解析k8s中pod控制器的Deployment、DaemonSet、StatefulSet,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

升级 节点 存储 服务 控制 控制器 实例 副本 状态 自动生成 生成 无头 运行 进程 命令 就是 模板 版本 过程 集群 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 变电运维班网络安全 网络安全活动周领导小组 程序员认不全软件开发定律 计算机网络技术逻辑思维导图 护苗行动网络安全视频 南京有技校学软件开发吗 呼市新华互联网科技学校多大 网络安全宣传海报手绘漫画大学 h3c服务器硬盘是自己生产的吗 长沙严辉洪软件开发有限公司 数据库实体关系图教程 互联网科技名词含义是什么 软件开发哪个公司比较厉害 服务器管理器记录 信息技术考试系统无法连接服务器 面试数据库优化的几种方式 服务器的邮件怎么读取 试述软件开发工具软件工程 常州高科技软件开发技术指导 互联网十大品牌服务器 数据库对读者的优点 千锋网络安全主要培训什么 涉密网络安全域 王牌战争各个服务器 网络技术开发叫什么 app定制软件开发台州 佛跳墙服务器 网络安全模型有哪种 流量计费服务器 计算机软件开发监管维护平台
0