首页 > 其他分享 >k8s~pod单副本的平滑部署

k8s~pod单副本的平滑部署

时间:2024-04-11 16:14:28浏览次数:40  
标签:容器 副本 配置 探测 readinessProbe pod k8s

如果你的服务器资源紧张,pod可能只能是单副本了,这时在进行平滑的滚动部署时,应该如何配置呢?总不能在部署期间503吧,这是不能接受的!

maxUnavailable来配置不可用数量

我们可以在spec.strategy.strategy.rollingUpdate中,将不可用数maxUnavailable改成0即可实现平滑部署,配置如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: keycloak-deployment
  namespace: kc
spec:
  replicas: 1
  #滚动升级策略
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 0 #当副本为1时,我们采用这个配置,即不允许有多余的pod

如果是多个副本,你也可以通过rollingUpdate中的maxSurge来控制可用节点数,maxUnavailable来控制不可用数,如下面的配置,在副本为3个时,可用数至少为1个,不可用也是0个,相当于1个1个的副本去启动,整个deployment对外始终是3个可用的pod。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: keycloak-deployment
  namespace: kc
spec:
  replicas: 3
  #滚动升级策略
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0

部署过程如图,1个副本时,在发布期间,也始终有1个是可用的

k8s如何探测pod启动了

readinessProbe 是 Kubernetes 中用来检查容器是否准备好接收流量的机制。通过配置 readinessProbe,Kubernetes 可以确保只有在容器完全就绪并能够处理请求时才会将流量引导到该容器。以下是关于 readinessProbe 的总结:

  1. 作用readinessProbe 用于确定容器是否已经准备好接收流量。如果容器的 readinessProbe 失败,Kubernetes 将不会将流量路由到该容器。

  2. 配置方式readinessProbe 可以通过 HTTP、TCP 或执行命令的方式进行配置。你可以指定一个 HTTP 请求路径、端口号或自定义命令,并设置相应的超时时间和周期。

  3. 成功条件readinessProbe 根据配置的方式来判断容器的就绪状态。例如,对于 HTTP 探测,返回状态码在200-399之间表示成功;对于 TCP 探测,连接成功即为成功;对于执行命令探测,返回值为0表示成功。

  4. 失败处理:当 readinessProbe 失败时,Kubernetes 不会将流量路由到该容器。容器可能会被标记为 Unready 状态,并从 Service 的负载均衡中剔除。

  5. 重试策略:如果 readinessProbe 失败,Kubernetes 将按照配置的间隔时间进行重试。只有当连续多次探测失败后,容器才会被认定为不可用。

  6. 应用场景:适用于需要一段时间来启动服务或加载数据的应用程序,以确保在容器完全就绪之前不接收流量。

  7. 常见配置:示例配置如下,包括 HTTP 探测、TCP 探测和执行命令探测:

    readinessProbe:
      httpGet:
        path: /healthz
        port: 8080
      initialDelaySeconds: 5
      periodSeconds: 10
    

通过合理配置 readinessProbe,可以提高容器的稳定性和可靠性,确保应用程序在容器就绪后再接收流量,避免因为服务未完全启动而导致的请求失败。希望这个总结对你有所帮助。如果还有其他问题,请随时告诉我。

标签:容器,副本,配置,探测,readinessProbe,pod,k8s
From: https://www.cnblogs.com/lori/p/18129433

相关文章

  • Podman Compose 新手指南
    技术人员多数又呆板又花心不长久。我知道你可能已经厌倦了Docker,但是系统还没有复杂到需要高攀K8S的地步。那我建议您,有空的话可以约一下Podman。Podman使用起来是足够简单的,直接把它当做改了名字的Docker就可以了。所以以下只介绍一下它的编排工具,也就是podman-compose......
  • k8s更新pod4中模式
    k8s更新策略四种部署方案滚动更新:先上v2版本,然后慢慢干掉v1版本(每当一个v2版本的Pod变成Running,再干掉一个v1版本的Pod)优点:不存在某段时间内服务不可用缺点:切换过程中,存在pod新老版本共存(解决:v2代码需要做兼容性)补充:默认是滚动更新缺省是滚动更新重新创建:v1版本都干......
  • 基于k8s的高性能高可用的web集群
    目录项目信息项目架构图项目描述项目环境项目步骤ip规划一、部署k8s集群内的机器,一台master,两台node修改主机名添加域名解析关闭firewalld、selinux配置静态的IP地址关闭交换分区修改Linux内核参数更新和配置软件源配置ipvs功能同步时间安装docker环境配置docker配置k8s......
  • k8s自用命令记录
    获取所有命令空间kubectlgetnamespaces如果需要更加详细的信息:kubectlgetnamespaces-owide 获取命名空间的所有podkubectlgetpods--namespaces=xxx k8s命令获取某个pod的日志要获取Kubernetes集群中某个Pod的日志,可以使用kubectllogs命令。以下是获取日......
  • 关于配置单机k8s 创建nginx时出现pod 0/1一直pending的情况
    这个事情困扰了我一整天,创建nginx时出现pod0/1pending,一开始是以为flannel网卡出现了问题,一直去选择用calico网卡,但是calico这个玩意配置的路上全是坑,所以一直配不出calico,疯狂重启,疯狂报错,发现flannel网卡没有问题。于是出搜索是怎么回事,删除了nginx重新创建了nginx(这个......
  • 副本集replicaSet
    mongodb高可用架构https://www.mongodb.com/docs/manual/tutorial/deploy-replica-set/复制是跨多个服务器同步数据的过程。复制提供冗余,并通过不同数据库服务器上的多个数据副本增加数据可用性。复制保护数据库免受单个服务器的丢失。复制还允许从硬件故障和服务中断中恢......
  • windows环境安装Podman
    打开虚拟设置选择启用或关闭Windows功能勾选“适用于Linux的Windows子系统”和“虚拟机平台”两个选项。 安装WSL管理员模式启动powershell设置wsl版本:wsl--set-default-version2-更新wsl核:wsl--update【若干分钟】安装wsl:wsl--install【若干分钟】完成后需要设置......
  • 如何监控容器或K8s中的OpenSearch
    概述当前OpenSearch使用的越来越多,但是OpenSearch生态还不尽完善.针对如下情况:监控容器化或运行在K8s中的OpenSearch我查了下,官方还没有提供完备的方案.这里如何监控K8s中的OpenSearch,包括安装exporter插件、采集、展示全环节。OpenSearch简介OpenS......
  • 【云原生篇】深入理解K8S CNI、CRI 和 CSI
    在Kubernetes(K8s)生态系统中,CNI、CRI和CSI是三个关键的接口,它们分别代表ContainerNetworkInterface、ContainerRuntimeInterface和ContainerStorageInterface。这些接口定义了Kubernetes如何与网络、容器运行时和存储系统进行交互,使得Kubernetes能够与......
  • k8s和docker的关系
    Docker和Kubernetes(通常简称为K8s)是两个独立的技术,但它们之间存在密切的关系。Docker是一种容器化平台,可以将应用程序和它们的依赖项打包到一个独立的、可移植的容器中。Docker容器封装了应用程序代码、运行时环境、系统工具和依赖项,使应用程序能够在不同的环境中以一致......