在Helm安装中运行包含kubectl命令的运行脚本

时间:2018-06-25 15:02:01

标签: docker kubernetes kubernetes-helm

我有一个包含几个kubectl命令的shell脚本,我需要在头盔安装过程中执行它。

#!/bin/bash kubectl create secret generic mysecret --from-literal=username=$USER_NAME --from-literal=password=$passwrd

我写了一份执行该脚本的工作。

apiVersion: batch/v1
kind: Job
metadata:
  name: "sagdfghd"

spec:
  template:        
    spec:
      containers:
        - name: sagdfghd
          image: {{ .Values.jobs.dockerRegistry }}
          command: ["sh", "-c", {{ .Files.Get "scripts/myscript.sh" | quote }} ]

但是由于脚本正在容器中运行,因此无法找到kubectl命令。

任何想法我如何运行此脚本?

TIA

2 个答案:

答案 0 :(得分:1)

{{ .Values.jobs.dockerRegistry }}解析为什么图像,并且是否安装了kubectl工具?它很可能没有安装kubectl,因此您必须在Dockerfile中添加kubectl安装说明。这些说明将取决于您的基本Docker映像是什么。请参见以下链接:

https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl

答案 1 :(得分:1)

@ericstaples提供了link to installation documentation,它有助于解决问题:

  

{{.Values.jobs.dockerRegistry}}解析并执行什么图像   它上面安装了kubectl工具吗?

它很可能没有安装kubectl,因此您必须在Dockerfile中添加kubectl安装说明。这些说明将取决于您的基本Docker映像是什么。

由于由Job创建的Pod将附加有ServiceAccount,因此在容器中运行的kubectl工具将通过ServiceAccount令牌调用其正在其中运行的集群,并且实际上将在集群中创建Secret ,而不是容器(假设它具有正确的RBAC权限)。

尝试一下。从容器调用kube-apiserver(例如通过kubectl)并不少见。

侧面说明:在容器中创建Secret对象绝对没有任何意义。