web-dev-qa-db-ja.com

kops / kubectl-別のサーバーで作成された状態をインポートするにはどうすればよいですか?

kopsを使用してkubernetesクラスターをセットアップしましたが、ローカルマシンからセットアップしました。だから私の.kubeディレクトリはローカルマシンに保存されていますが、kopss3

私は今CIサーバーをセットアップしている最中です。そのボックスからkubectlコマンドを実行したいと思います。サーバーに既存の状態をインポートするにはどうすればよいですか?

11
djt

kubectlコマンドを実行するには、認証のためにクラスターのapiServer URLと関連する認証情報が必要です。これらのデータは慣例により~/.kube/configファイルに保存されます。 kubectl config viewコマンドを使用して表示することもできます。

CIサーバーでkubectlを実行するには、~/.kube/configファイルにkubectlクライアントが必要とするすべての情報が含まれていることを確認する必要があります。

Kopsの場合、単純な単純な解決策は次のとおりです。

1)CIサーバーにkops、kubectlをインストールします

2)CIサーバーのAWSアクセス認証情報を(IAMロールまたは単にenv varsを介して)構成し、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サーバーマシンに配置する必要があります。

13
Parano

.kube/configはほとんど「状態」ではなく、単なるクライアント構成であるため、その内容(またはローカルにコンテキストがある場合はその一部)を取得して別のマシンで使用することが可能です。 CI専用のユーザー(キー/証明書)を作成する場合を除きます。その場合、別の資格情報を作成する必要があり、キー/証明書を使用する場合、それらは別の証明書「サブジェクト」用である必要があるため、ユーザーは別のユーザーとして認識できます