【问题标题】:Error when installing helm chart using terraform helm provider `User "client" cannot create deployments.extensions in the namespace "kube-system"`使用 terraform helm 提供程序安装 helm chart 时出错“用户“客户端”无法在命名空间“kube-system”中创建部署。扩展
【发布时间】:2019-08-13 16:42:07
【问题描述】:

我正在尝试使用以下 terraform 脚本使用 Helm Provider 安装 helm

data "google_client_config" "current" {}

provider "helm" {
  tiller_image = "gcr.io/kubernetes-helm/tiller:${var.helm_version}"
  max_history  = 250

  kubernetes {
    host                   = "${google_container_cluster.eu.endpoint}"
    token                  = "${data.google_client_config.current.access_token}"
    client_certificate     = "${base64decode(google_container_cluster.eu.master_auth.0.client_certificate)}"
    client_key             = "${base64decode(google_container_cluster.eu.master_auth.0.client_key)}"
    cluster_ca_certificate = "${base64decode(google_container_cluster.eu.master_auth.0.cluster_ca_certificate)}"
  }
}

resource "helm_release" "mydatabase" {
  name  = "mydatabase"
  chart = "stable/mariadb"

  set {
    name  = "mariadbUser"
    value = "foo"
  }

  set {
    name  = "mariadbPassword"
    value = "qux"
  }
}

但我收到以下错误

* helm_release.mydatabase: 1 error(s) occurred:

* helm_release.mydatabase: error installing: deployments.extensions is forbidden: User "client" cannot create deployments.extensions in the namespace "kube-system"

我认为当 terraform helm 提供者尝试安装分蘖时会发生这种情况,谁能帮忙

【问题讨论】:

    标签: google-cloud-platform terraform google-kubernetes-engine kubernetes-helm


    【解决方案1】:

    好吧,你是在正确的方式,但是..这里我同意@hk'。

    helm_release.mydatabase:安装时出错:deployments.extensions 是 禁止:用户“客户端”不能在 命名空间“kube-system”

    以上错误只属于授权。 很多人在安装和配置 Helm 提供者的过程中遇到了困难。例如github open issue。那里有几个想法可能会对您有所帮助。

    本文描述了可能对您有用的方法:helm provider is Pain。 它有一个适合人们的解决方案。

    尝试下一个:

    resource "kubernetes_service_account" "tiller" {
      metadata {
        name      = "tiller"
        namespace = "kube-system"
      }
    
      automount_service_account_token = true
    }
    
    resource "kubernetes_cluster_role_binding" "tiller" {
      metadata {
        name = "tiller"
      }
    
      role_ref {
        kind      = "ClusterRole"
        name      = "cluster-admin"
        api_group = "rbac.authorization.k8s.io"
      }
    
      subject {
        kind = "ServiceAccount"
        name = "tiller"
    
        api_group = ""
        namespace = "kube-system"
      }
    }
    
    provider "helm" {
      version = "~> 0.7"
    
      debug           = true
      install_tiller  = true
      service_account = "${kubernetes_service_account.tiller.metadata.0.name}"
      namespace       = "${kubernetes_service_account.tiller.metadata.0.namespace}"
      tiller_image    = "gcr.io/kubernetes-helm/tiller:v2.11.0"
    
      kubernetes {
        config_path = "~/.kube/${var.env}"
      }
    }
    

    resource "kubernetes_service_account" "tiller" {
      metadata {
        name = "tiller"
        namespace = "kube-system"
      }
    }
    resource "kubernetes_cluster_role_binding" "tiller" {
      metadata {
            name = "tiller"
      }
      subject {
        api_group = "rbac.authorization.k8s.io"
        kind      = "User"
        name      = "system:serviceaccount:kube-system:tiller"
      }
    
      role_ref {
        api_group = "rbac.authorization.k8s.io"
        kind  = "ClusterRole"
        name = "cluster-admin"
      }
      depends_on = ["kubernetes_service_account.tiller"]
    }
    
    provider "helm" {
        tiller_image = "gcr.io/kubernetes-helm/tiller:v2.12.3"
        install_tiller = true
        service_account = "tiller"
        namespace = "kube-system"
    }
    

    【讨论】:

      【解决方案2】:

      这是角色和授权相关的问题。使用“helm reset”重置 helm,然后运行以下命令来解决您的问题。

      curl https://raw.githubusercontent.com/helm/helm/master/scripts/get > get_helm.sh

      chmod 700 get_helm.sh

      ./get_helm.sh

      kubectl create serviceaccount --namespace kube-system tiller

      kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller

      掌舵初始化

      kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'

      【讨论】:

      • 我正在尝试通过 terraform 脚本安装分蘖,因此希望/需要使用 terraform 进行此操作或报告 helm 提供程序中的错误
      • 我认为你的脚本没有安装 helm tiller,而是通过脚本使用 helm 安装 mariadb
      • @hk' 它确实安装了分蘖,helm init 安装了分蘖,但作者要求仅通过 terraform helm 提供者安装分蘖
      猜你喜欢
      • 2019-11-13
      • 1970-01-01
      • 2020-12-04
      • 2018-03-22
      • 2021-10-31
      • 2019-12-17
      • 2020-01-24
      • 2022-10-08
      • 2021-04-27
      相关资源
      最近更新 更多