K8S—Pod控制器

目录

1.什么是POD控制器

2.POD控制器有几种类型

3.POD与控制器之间的关系

4.示例

4.1 Deployment

4.2 SatefulSet

①为什么要有headless?

②为什么要有volumeClainTemplate?

③服务发现:就是应用服务之间相互定位的过程。

④K8S里服务发现的方式---DNS,使K8S集群能够自动关联Service资源的“名称”和“CLUSTER-IP”,从而达到服务被集群自动发现的目的。

4.3 安装CoreDNS,仅二进制部署环境需要安装CoreDNS

无状态应用(Stateless Applications):

有状态应用(Stateful Applications):

常规 Service 和无头服务(Headless Service)的区别:

4.4 DaemonSet

4.5 Job

4.6 CronJob 


1.什么是POD控制器

Pod控制器是 Kubernetes 中用于管理和控制 Pod 的重要资源,包括 ReplicaSet 和 Deployment 等。它们通过定义 Pod 模板来创建和管理 Pod 副本,实现自动扩缩容、滚动更新、故障恢复等功能。Pod 控制器负责监控 Pod 的运行状态,确保其符合用户定义的规则和策略。

Pod 控制器是 Kubernetes 应用生命周期管理的关键组件,提供了丰富的功能和灵活的配置选项,帮助用户轻松管理和运维应用程序的 Pod 资源。在 Pod 控制器中,用户可以指定副本数量、滚动更新策略、健康检查等参数,以确保应用程序的高可用性、伸缩性和稳定性。

总的来说,Pod 控制器是 Kubernetes 中实现工作负载管理的中间层,保证 Pod 资源处于预期状态。当 Pod 出现故障时,Pod 控制器会尝试重启或重新创建 Pod 资源,根据配置的重启策略进行相应的处理。这样可以确保应用程序持续可用并按照用户期望的方式运行。


2.POD控制器有几种类型

  • ReplicaSet:用于创建指定数量的 Pod 副本,确保 Pod 数量符合预期状态。主要组成包括用户定义的副本数量、标签选择器和根据 Pod 模板创建新的 Pod 资源。虽然 ReplicaSet 不是直接使用的控制器,但通常与 Deployment 结合使用。

  • Deployment:在 ReplicaSet 的基础上,用于管理无状态应用程序,支持滚动更新、回滚功能,并提供声明式配置。Deployment 是目前应用最广泛的控制器,逐渐取代之前的 ReplicationController。

  • DaemonSet:确保集群中每个节点运行特定的 Pod 副本,通常用于实现系统级后台任务。适用于无状态服务和守护进程类应用。

  • StatefulSet:用于管理有状态应用程序,为每个 Pod 分配唯一标识符,确保状态的稳定性和持久性。

  • Job:执行一次性任务,任务完成后立即退出,不需要重启或重新创建。适用于一次性作业。

  • CronJob:用于周期性任务控制,按照预定的时间表周期性地执行任务,不需要持续后台运行。


3.POD与控制器之间的关系

Pod 控制器在 Kubernetes 集群中起着至关重要的作用,用于管理和运行容器化应用程序的 Pod 对象。Pod 通过标签选择器(label-selector)与控制器相关联,控制器负责监控、调度和维护一组 Pod,确保它们符合用户定义的期望状态。

Pod 控制器为用户提供了一种抽象层,通过控制器可以实现对应用程序的运维管理,包括但不限于:

  • 伸缩:控制器可以根据用户定义的策略自动扩展或缩减 Pod 的数量,以应对流量变化或负载情况。

  • 升级:控制器支持滚动升级功能,可以逐步替换旧版本的 Pod 为新版本,确保应用程序的平稳升级。

  • 故障恢复:当 Pod 发生故障或所在节点不可用时,控制器会重新调度 Pod 到其他可用节点上,确保应用程序的高可靠性。

  • 负载均衡:控制器可以结合服务发现机制实现负载均衡,确保请求能够均匀分布到各个 Pod 上。

Pod 控制器是 Kubernetes 中实现应用程序管理和运维的核心组件,通过控制器可以轻松实现对应用程序的自动化管理,减少人工干预,提高系统的稳定性和可靠性。


4.示例

4.1 Deployment

  • 部署无状态应用:Deployment 控制器通常用于部署无状态应用程序,它通过管理 Pod 和 ReplicaSet 来确保应用程序的可用性和健康运行。

  • 管理 Pod 和 ReplicaSet:Deployment 控制器负责创建并管理多个 Pod 的副本(ReplicaSet),以确保根据用户定义的副本数来维持应用程序的运行状态。

  • 具有上线部署、副本设定、滚动升级、回滚等功能:Deployment 控制器提供了丰富的功能,包括支持灰度发布(rolling updates)、副本数量配置、滚动升级(rolling upgrades)以及回滚到先前版本等操作。

  • 提供声明式更新:Deployment 控制器支持声明式配置更新,用户可以只更新一个新的容器镜像(image),而不必关心具体的升级操作步骤,简化了应用程序的更新流程。

  • 应用场景:Deployment 控制器适用于部署需要水平扩展、自动恢复、灵活升级的应用场景,特别适合用于部署 Web 服务等无状态应用程序。

Deployment 控制器是 Kubernetes 中用于管理应用程序部署和更新的关键组件,通过 Deployment 控制器,用户可以方便地进行应用程序的部署、扩展、更新和回滚,提高了应用程序的可靠性和可管理性。

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,rs

#查看控制器配置

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
......

#查看历史版本

kubectl rollout history deployment/nginx-deployment
deployment.apps/nginx-deployment
REVISION  CHANGE-CAUSE
1         <none>

4.2 SatefulSet

  • 部署有状态应用:StatefulSet 适用于需要持久化数据和稳定标识的有状态应用,如数据库、消息队列等。

  • 稳定的持久化存储:StatefulSet 可以通过 PersistentVolumeClaim(PVC)来实现稳定的持久化存储,确保 Pod 在重新调度后仍能访问相同的持久化数据。

  • 稳定的网络标志:通过 Headless Service(无 Cluster IP 的 Service)来实现稳定的网络标志,确保 Pod 在重新调度后其 PodName 和 HostName 不变。

  • 有序部署和扩展:StatefulSet 支持有序部署和扩展,即在部署或者扩展时,Pod 将按照定义的顺序依次进行,init container

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值