首页 > 解决方案 > 如何获得更多 Istio Running 的副本?

问题描述

我正在尝试升级 Kubernetes 集群中的节点。当我这样做时,我会收到一条通知:

命名空间 istio-system 中的 PDB istio-ingressgateway 允许 0 个 pod 中断

PDB 是 Pod 中断预算。基本上, istio 是说它不能松开那个 pod 并保持一切正常。

在 Istio GitHub 问题上对此进行了很长时间的讨论。这个问题已经持续了2年多。大多数讨论都围绕着说默认设置是错误的。几乎没有解决方法的建议。但其中大部分是 1.4 之前的版本(以及 Istiod 的引入)。我能找到的可能与当前版本兼容的最接近的解决方法是向IstioOperator添加一些额外的副本。

我尝试了一个补丁操作(在 PowerShell 中运行):

kubectl patch IstioOperator installed-state --patch $(Get-Content istio-ha-patch.yaml -Raw) --type=merge -n istio-system

在哪里istio-ha-patch.yaml

spec:
  components:
    egressGateways:
    - enabled: true
      k8s:
        hpaSpec:
          minReplicas: 2
      name: istio-egressgateway
    ingressGateways:
    - enabled: true
      k8s:
        hpaSpec:
          minReplicas: 2
      name: istio-ingressgateway    
    pilot:
      enabled: true
      k8s:
        hpaSpec:
          minReplicas: 2

我应用了它,并检查了 IstioOperator 的 yaml,它确实适用于资源的 yaml。但是入口 pod 的副本数没有增加。(它保持在 1 of 1。)

此时,我唯一的选择是卸载 Istio,应用我的更新,然后重新安装 Istio。(呸)

有没有办法让 Istio 的入口网关的副本数增加,这样我就可以在滚动节点升级时保持它的运行?

标签: kubernetesistioistio-gatewayistio-operator

解决方案


事实证明,如果您没有使用 Istio Kubernetes Operator 安装 Istio,则无法使用我尝试过的选项。

一旦我卸载了 Istio 并使用 Operator 重新安装它,我就可以让它工作了。

虽然我没有使用 Patch 操作,但我只是做了一个kubectl apply -f istio-operator-spec.yamlwhere istio-operator-spec.yamlis:

apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
  name: istio-controlplane
  namespace: istio-system
spec:
  components:    
    ingressGateways:
    - enabled: true
      k8s:
        hpaSpec:
          minReplicas: 2
      name: istio-ingressgateway
    pilot:
      enabled: true
      k8s:
        hpaSpec:
          minReplicas: 2
  profile: default

推荐阅读