当前位置: 首页 > 知识库问答 >
问题:

kubernetes内部部署中副本序列的排序

秦安宁
2023-03-14

我有一个连接到外部数据库的应用服务器的吊舱。为了冗馀,我希望运行多个POD,所以我使用rolingupdate策略将部署扩展到3个(MAXSURABE=1和MAXUNAVABLE=1)。

有时(大多数情况下)pods在第一次创建时失败,因为我使用的是liquibase,所有pods都试图同时锁定数据库。

Name:                   jx-apollon
Namespace:              jx-staging
CreationTimestamp:      Sun, 27 Oct 2019 21:28:07 +0100
Labels:                 chart=apollon-1.0.348
                        draft=draft-app
                        jenkins.io/chart-release=jx
                        jenkins.io/namespace=jx-staging
                        jenkins.io/version=4
Annotations:            deployment.kubernetes.io/revision: 3
                        jenkins.io/chart: env
                        kubectl.kubernetes.io/last-applied-configuration:
                          {"apiVersion":"extensions/v1beta1","kind":"Deployment","metadata":{"annotations":{"jenkins.io/chart":"env"},"labels":{"chart":"apollon-1.0...
Selector:               app=jx-apollon,draft=draft-app
Replicas:               0 desired | 0 updated | 0 total | 0 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  1 max unavailable, 1 max surge
Pod Template:
  Labels:  app=jx-apollon
           draft=draft-app
  Init Containers:
   postgres-listener-short:
    Image:      alpine
    Port:       <none>
    Host Port:  <none>
    Command:
      sh
      -c
      echo 'Waiting in init container for DB to become available.'; echo $DB; for i in $(seq 1 5); do echo 'nc ping' $i && nc -z -w3 $DB 5432 && echo 'DB is available, continuing now to application initialization.' && exit 0 || sleep 3; done; echo 'DB is not yet available.'; exit 1
    Environment:
      DB:    jx-apollon-postgresql-db-alias
    Mounts:  <none>
   postgres-listener-longer:
    Image:      alpine
    Port:       <none>
    Host Port:  <none>
    Command:
      sh
      -c
      echo 'Waiting in init container for DB to become available.'; echo $DB; for i in $(seq 1 100); do echo 'nc ping' $i && nc -z -w3 $DB 5432 && echo 'DB is available, continuing now to application initialization.' && exit 0 || sleep 3; done; echo 'DB is not yet available.'; exit 1
    Environment:
      DB:    jx-apollon-postgresql-db-alias
    Mounts:  <none>
  Containers:
   apollon:
    Image:       <redacted>
    Ports:       8080/TCP, 8443/TCP
    Host Ports:  0/TCP, 0/TCP
    Limits:
      cpu:     2
      memory:  6Gi
    Requests:
      cpu:      100m
      memory:   3584Mi
    Liveness:   http-get http://:8080/ delay=60s timeout=1s period=10s #success=1 #failure=3
    Readiness:  http-get http://:8080/ delay=0s timeout=1s period=10s #success=1 #failure=3
    Environment:
      DB:                 jx-apollon-postgresql-db-alias
      POSTGRES_PASSWORD:  <redacted>
      RULES_CLIENT:       demo
      _JAVA_OPTIONS:      -XX:+UseContainerSupport -XX:MaxRAMPercentage=90.0 -XX:+UseG1GC
    Mounts:               <none>
  Volumes:                <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
OldReplicaSets:  <none>
NewReplicaSet:   jx-apollon-95b4c77cb (0/0 replicas created)
Events:          <none>

共有1个答案

甄越
2023-03-14

我将initContainer部分更改为以下代码,该代码一直等待,直到从LiquiBase创建的databasechangeloglock表中读取一个false值。

      initContainers:
      - name: postgres-listener
        image: postgres
        env:
        - name: DB
          value: jx-apollon-postgresql-db-alias
        command: ['sh', '-c', '\
         until psql -qtAX -h $DB -d postgres -c \ 
         "select count(locked) from databasechangeloglock where locked = false group by locked"; 
         do echo  waiting for dbchangeloglock of postgres db to be false; sleep 2; done;
         ']
 类似资料:
  • 现在我们已经将服务部署为具有多个副本的库伯内特斯部署。一旦服务器崩溃,库伯内特斯将其容器迁移到另一台可用的服务器,该服务器的任务约为3~5分钟。 迁移时,客户端可以访问部署服务,因为我们还有其他正在运行的副本。但有时请求会失败,因为负载均衡器重定向到死亡或迁移容器。 如果Kubernetes能够自动启动死副本,并在其他服务器上运行后添加它们,那就太好了。否则,我们需要像haproxy一样设置LB,

  • 环境说明 CentOS 7.4 购买自阿里云普通的 ECS 华南地区(如果你是购买美国地区的服务器,则直接使用 kubespray 原项目,那些镜像地址不用修改,其他照着文档即可) 所有机子都是干净的不需要先安装 Docker 等其他容器相关的东西 机器简称 内网 IP 地址 部署软件 系统环境 硬件配置 操作机 172.18.243.242 ansible CentOS 7.4 1 vCPU +

  • 这是我第一次尝试将微服务体系结构部署到Kubernetes中。起初,我正在考虑使用大使作为我的API网关。我还有一个身份验证服务,它验证用户并生成JWT令牌,但是,每次调用服务时,我都需要验证这个令牌。这代表了一个过载问题(因为每次API网关接收流量时,它都会转到该外部身份验证服务以验证JWT令牌),并且大使没有选择在不使用外部服务的情况下执行此过滤。 在这种情况下,使用Zuul网关似乎是最好的选

  • 在几乎所有面向业务的应用程序中,对文件中的数据进行排序或合并两个或多个文件是常见的必要条件。 排序用于按升序或降序排列记录,以便可以执行顺序处理。 有两种技术可用于在COBOL中对文件进行排序 - External sort用于通过使用JCL中的SORT实用程序对文件进行排序。 我们在JCL章节中讨论过这个问题。 截至目前,我们将专注于内部排序。 Internal sort用于对COBOL程序中的

  • 我只是试图在一个名为“test”的名称空间中部署kubernetes仪表板。 https://raw.githubusercontent.com/kubernetes/dashboard/v1.8.3/src/deploy/recommended/kubernetes-dashboard.yaml kubectl应用-f Kubernetes-Dashboard.YAML-N测试 但是,它仍然试图

  • 本系列文档介绍使用二进制部署最新 kubernetes v1.6.2 集群的所有步骤,而不是使用 kubeadm 等自动化方式来部署集群。 在部署的过程中,将详细列出各组件的启动参数,它们的含义和可能遇到的问题。 部署完成后,你将理解系统各组件的交互原理,进而能快速解决实际问题。 所以本文档主要适合于那些有一定 kubernetes 基础,想通过一步步部署的方式来学习和了解系统配置、运行原理的人。