2026/4/18 10:23:36
网站建设
项目流程
成都网站建设推广在,外贸展示型模板网站模板,设计师应该看的网站,好的公司网站制作目录
一、Pod控制器
1、Pod 控制器概述
2、Pod 控制器的类型
3、Deployment 控制器
3.1 特点
3.2 案列
3.3 查看控制器配置
4、StatefulSet 控制器#xff08;有状态#xff09;
4.1 特点
4.2 三个核心组件
4.3 StatefulSet NFS 持久卷(案列)
4.3.1 定义 Headle…目录一、Pod控制器1、Pod 控制器概述2、Pod 控制器的类型3、Deployment 控制器3.1 特点3.2 案列3.3 查看控制器配置4、StatefulSet 控制器有状态4.1 特点4.2 三个核心组件4.3 StatefulSet NFS 持久卷(案列)4.3.1 定义 Headless Service4.3.2 定义 StatefulSet 动态4.3.3 创建与验证4.3.4 滚动更新4.3.5 总结5、DaemonSet 控制器5.1 功能5.2 案列6、Job 控制器6.1 功能7、CronJob 控制器7.1 功能8、无状态 vs 有状态 应用对比9、常规 Service 与 Headless Service 对比10、总结一、Pod控制器1、Pod 控制器概述Pod 控制器Controller又称为工作负载Workload是 Kubernetes 中用于 管理 Pod 的中间层。它的职责是确保集群中的 Pod 资源始终符合用户定义的“期望状态”。功能保证 Pod 副本数量与期望一致Pod 异常退出时自动根据重启策略重建支持伸缩扩容/缩容、滚动更新、回滚2、Pod 控制器的类型控制器功能应用场景ReplicaSet保证指定数量的 Pod 副本存在支持滚动扩缩容。通常不直接使用由 Deployment 管理。无状态应用Deployment管理 ReplicaSet实现声明式部署、滚动升级、回滚等。Web 服务StatefulSet管理有状态应用提供稳定的网络标识与存储。数据库、ZookeeperDaemonSet每个 Node 上运行一个 Pod。日志、监控、AgentJob执行一次性任务。定期备份、通知CronJob周期性任务类似 Crontab。定期备份、通知3、Deployment 控制器3.1 特点管理无状态应用支持滚动更新与回滚声明式配置更新与 ReplicaSet 协作使用3.2 案列vim nginx-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.15.4 ports: - containerPort: 80 kubectl create -f nginx-deployment.yaml kubectl get pods,deploy,rs3.3 查看控制器配置kubectl edit deployment/nginx-deployment apiVersion: apps/v1 kind: Deployment metadata: annotations: deployment.kubernetes.io/revision: 1 creationTimestamp: 2021-04-19T08:13:50Z generation: 1 labels: app: nginx #Deployment资源的标签 name: nginx-deployment namespace: default resourceVersion: 167208 selfLink: /apis/extensions/v1beta1/namespaces/default/deployments/nginx- deployment uid: d9d3fef9-20d2-4196-95fb-0e21e65af24a spec: progressDeadlineSeconds: 600 replicas: 3 #期望的pod数量默认是1 revisionHistoryLimit: 10 selector: matchLabels: app: nginx strategy: rollingUpdate: maxSurge: 25% #升级过程中会先启动的新Pod的数量不超过期望的Pod数量的25%也可以是一个绝对值 maxUnavailable: 25% #升级过程中在新的Pod启动好后销毁的旧Pod的数量不超过期望的Pod数量的25%也可以是一个绝对值 type: RollingUpdate #滚动升级 template: metadata: creationTimestamp: null labels: app: nginx #Pod副本关联的标签 spec: containers: - image: nginx:1.15.4 #镜像名称 imagePullPolicy: IfNotPresent #镜像拉取策略 name: nginx ports: - containerPort: 80 #容器暴露的监听端口 protocol: TCP resources: {} terminationMessagePath: /dev/termination-log terminationMessagePolicy: File dnsPolicy: ClusterFirst restartPolicy: Always #容器重启策略 schedulerName: default-scheduler securityContext: {} terminationGracePeriodSeconds: 30 ...... ##查看历史版本 [rootmaster01 ~]# kubectl rollout history deployment nginx-deployment deployment.apps/nginx-deployment REVISION CHANGE-CAUSE 1 none4、StatefulSet 控制器有状态4.1 特点1. 稳定存储基于 PVC 实现每个 Pod 独立存储2. 稳定网络标识Pod 名称和 DNS 名称固定3. 有序部署/删除从 0 → N-1 创建从 N-1 → 0 删除4. 依赖 Headless Service4.2 三个核心组件1. Headless Service无头服务用于为Pod资源标识符生成可解析的DNS记录。2. volumeClaimTemplates存储卷申请模板基于静态或动态PV供给方式为Pod资源提供专有的固定存储。3. StatefulSet用于管控Pod资源。4.3 StatefulSet NFS 持久卷(案列)4.3.1 定义 Headless Servicevim stateful-headless.yaml apiVersion: v1 kind: Service metadata: name: myapp-svc spec: ports: - port: 80 name: web clusterIP: None selector: app: myapp-pod kubectl apply -f stateful-headless.yaml4.3.2 定义 StatefulSet 动态vim stateful-demo.yaml 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 annotations: #动态PV创建时使用annotations在PVC里声明一个StorageClass对象的标识进行关联 volume.beta.kubernetes.io/storage-class: nfs-client-storageclass spec: accessModes: [ReadWriteOnce] resources: requests: storage: 2Gi解析上例由于 StatefulSet 资源依赖于一个实现存在的 Headless 类型的 Service 资源所以需要先定义一个名为 myapp-svc 的 Headless Service 资源用于为关联到每个 Pod 资源创建 DNS 资源记录。接着定义了一个名为 myapp 的 StatefulSet 资源它通过 Pod 模板创建了 3 个 Pod 资源副本并基于 volumeClaimTemplates 向前面创建的PV进行了请求大小为 2Gi 的专用存储卷。4.3.3 创建与验证kubectl apply -f stateful-demo.yamlkubectl get sts,pvc,pv,pods4.3.4 滚动更新#StatefulSet 控制器将在 StatefulSet 中删除并重新创建每个 Pod。它将以与 Pod 终止相同的顺序进行从最大的序数到最小的序数每次更新一个 Pod。在更新其前身之前它将等待正在更新的 Pod 状态变成正在运行并就绪。如下操作的滚动更新是按照2-0的顺序更新。# 修改镜像版本kubectl edit sts myappkubectl get pods -w# 观察按序更新 2→1→04.3.5 总结无状态1deployment 认为所有的pod都是一样的2不用考虑顺序的要求3不用考虑在哪个node节点上运行4可以随意扩容和缩容有状态1实例之间有差别每个实例都有自己的独特性元数据不同例如etcdzookeeper2实例之间不对等的关系以及依靠外部存储的应用。常规service和无头服务区别service一组Pod访问策略提供cluster-IP群集之间通讯还提供负载均衡和服务发现。Headless service无头服务不需要cluster-IP而是直接以DNS记录的方式解析出被代理Pod的IP地址。5、DaemonSet 控制器5.1 功能确保每个 Node 上都运行一个 Pod 副本。常用于运行系统级后台任务守护进程。典型场景Fluentd / Logstash 日志收集Prometheus Node Exporter、collectd、Datadog 代理、New Relic 代理或 Ganglia gmond 监控代理存储服务如 Ceph、GlusterFS5.2 案列vim ds.yaml apiVersion: apps/v1 kind: DaemonSet metadata: name: nginx-daemonSet 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 DaemonSet会在每个node节点都创建一个Pod kubectl get pods nginx-deployment-4kr6h 1/1 Running 0 35s nginx-deployment-8jrg5 1/1 Running 0 35s6、Job 控制器6.1 功能用于执行一次性任务任务完成后即退出。应用场景数据迁移批处理安全扫描离线数据处理7、CronJob 控制器7.1 功能周期性任务类似 Linux Crontab。应用场景定期备份定时通知日志清理8、无状态 vs 有状态 应用对比对比项无状态Deployment有状态StatefulSetPod 名称随机生成固定、有序0→N-1存储共享存储或无持久卷每个 Pod 独立 PVC网络标识不固定稳定 DNS 名称扩缩容顺序无序有序依次创建/删除应用示例Web、APIMySQL、ZooKeeper9、常规 Service 与 Headless Service 对比类型是否有ClusterIP访问方式作用Service有负载均衡 服务发现集群统一访问入口Headless Service无直接解析到 Pod IPStatefulSet 中 DNS 定位10、总结