如何获得更多的 Istio Running 副本?

问题描述

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

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

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

在 Istio GitHub 问题上有很长的 discussion 相关内容。这个问题已经持续了 2 年多。大多数讨论都围绕着说认值是错误的。很少有解决方法的建议。但大多数都是 1.4 之前的(以及 Istiod 的引入)。我能找到的可能与当前版本兼容的最接近的解决方法add some additional replicas 到 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 入口网关的副本数量,以便我可以在滚动节点升级时保持它运行?

解决方法

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

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

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

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