【问题标题】:How to import state created on another server?如何导入在另一台服务器上创建的状态?
【发布时间】:2018-06-13 13:09:48
【问题描述】:

我使用 kops 设置了我的 Kubernetes 集群,并且是从本地机器上完成的。所以我的.kube 目录存储在我的本地机器上,但我在s3 中设置了kops 用于状态存储。

我现在正在设置我的 CI 服务器,我想从该框中运行我的 kubectl 命令。如何将现有状态导入该服务器?

【问题讨论】:

    标签: kubernetes kubectl kops


    【解决方案1】:

    要运行kubectl 命令,您需要集群的 apiServer URL 和相关凭据进行身份验证。这些数据按照惯例存储在~/.kube/config 文件中。您也可以通过kubectl config view 命令查看。

    为了在 CI 服务器上运行 kubectl,您需要确保 ~/.kube/config 文件包含 kubectl 客户端所需的所有信息。

    使用 kops,一个简单的天真的解决方案是:

    1) 在你的 CI 服务器上安装 kops、kubectl

    2) 在您的 CI 服务器上配置 AWS 访问凭证(通过 IAM 角色或简单的环境变量),确保它可以访问您的 s3 状态存储路径

    3) 为 kops 设置 env var 以访问您的集群:

      export NAME=${YOUR_CLUSTER_NAME}
      export KOPS_STATE_STORE=s3://${YOUR_CLUSTER_KOPS_STATE_STORE}
    

    4) 使用 kops export 命令获取运行 kubectl 所需的 kubecfg

      kops export kubecfg ${YOUR_CLUSTER_NAME}
    

    https://github.com/kubernetes/kops/blob/master/docs/cli/kops_export.md

    现在,CI 服务器上的 ~/.kube/config 文件应该包含 kubectl 访问集群所需的所有信息。

    请注意,这将使用 CI 服务器上的默认管理员帐户。要实现更安全的 CI/CD 环境,您应该创建一个绑定到所需权限范围(例如命名空间或类型或资源)的服务帐户,并将其凭据放在您的 CI 服务器计算机上。

    【讨论】:

    • 当我这样做时,我得到cannot find CA certificate。我试着在国营商店里找,但在那里看不到。关于我是否错过了一步,或者其他设置是否错误的任何建议? ~/.kube/config 似乎不知道我的集群,但 kops 知道。
    • @szeitlin 您是否运行了 kops 导出步骤?如果它成功导出,那么您应该期望 ~/.kube/config 文件包含您的集群信息
    • 是的,我尝试运行它,但我收到错误消息说它找不到证书。
    【解决方案2】:

    .kube/config 几乎不是一个“状态”,它只是一个客户端配置,所以可以只获取它的内容(或者如果你有更多的本地上下文,它的一部分)并在另一台机器上使用。除非您想为 CI 创建一个专用用户(密钥/证书),在这种情况下,您需要创建一个单独的凭据,并且如果您使用密钥/证书,它们需要用于不同的证书“主题”,因此用户可以被识别为不同的用户

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-20
      相关资源
      最近更新 更多