【挫折】 Amazon EKS と spinnaker

基本はここを見てる

www.spinnaker.io

OSはUbuntu18.04を使用

初期設定

spinnakerのCloudFormationテンプレートでIAM等の初期設定をする

https://www.spinnaker.io/setup/install/providers/aws/aws-ec2/#option-1--use-aws-console-to-configure-aws ここのcloudformationをcreate-stackする


EKSの設定

https://www.spinnaker.io/setup/install/halyard/#install-on-debianubuntu-and-macos

HalyardはSpinnakerのオーケストレーションツールみたいなもの(たぶん)

$ curl -O https://raw.githubusercontent.com/spinnaker/halyard/master/install/debian/InstallHalyard.sh
$ sudo bash InstallHalyard.sh
$ hal -v

必要な環境変数を読み込む

先にcredentials設定を済ませます ~/.aws/credentials にそれぞれキーとシークレットを追加 https://www.spinnaker.io/setup/install/providers/kubernetes-v2/aws-eks/#set-up-the-managing-account --stack-name にはCloudFormationのスタック名に置換

VPC_ID=$(aws cloudformation describe-stacks --stack-name spinnaker-managing-infrastructure-setup --query 'Stacks[0].Outputs[?OutputKey==`VpcId`].OutputValue' --output text)
CONTROL_PLANE_SG=$(aws cloudformation describe-stacks --stack-name spinnaker-managing-infrastructure-setup --query 'Stacks[0].Outputs[?OutputKey==`SecurityGroups`].OutputValue' --output text)
AUTH_ARN=$(aws cloudformation describe-stacks --stack-name spinnaker-managing-infrastructure-setup --query 'Stacks[0].Outputs[?OutputKey==`AuthArn`].OutputValue' --output text)
SUBNETS=$(aws cloudformation describe-stacks --stack-name spinnaker-managing-infrastructure-setup --query 'Stacks[0].Outputs[?OutputKey==`SubnetIds`].OutputValue' --output text)
MANAGING_ACCOUNT_ID=$(aws cloudformation describe-stacks --stack-name spinnaker-managing-infrastructure-setup --query 'Stacks[0].Outputs[?OutputKey==`ManagingAccountId`].OutputValue' --output text)
EKS_CLUSTER_ENDPOINT=$(aws cloudformation describe-stacks --stack-name spinnaker-managing-infrastructure-setup --query 'Stacks[0].Outputs[?OutputKey==`EksClusterEndpoint`].OutputValue' --output text)
EKS_CLUSTER_NAME=$(aws cloudformation describe-stacks --stack-name spinnaker-managing-infrastructure-setup --query 'Stacks[0].Outputs[?OutputKey==`EksClusterName`].OutputValue' --output text)
EKS_CLUSTER_CA_DATA=$(aws cloudformation describe-stacks --stack-name spinnaker-managing-infrastructure-setup --query 'Stacks[0].Outputs[?OutputKey==`EksClusterCA`].OutputValue' --output text)
SPINNAKER_INSTANCE_PROFILE_ARN=$(aws cloudformation describe-stacks --stack-name spinnaker-managing-infrastructure-setup --query 'Stacks[0].Outputs[?OutputKey==`SpinnakerInstanceProfileArn`].OutputValue' --output text)

シェルにするとこんなのになります

#!/bin/sh

export VPC_ID=$(aws cloudformation describe-stacks --stack-name eks --query 'Stacks[0].Outputs[?OutputKey==`VpcId`].OutputValue' --output text)
export CONTROL_PLANE_SG=$(aws cloudformation describe-stacks --stack-name eks --query 'Stacks[0].Outputs[?OutputKey==`SecurityGroups`].OutputValue' --output text)
export AUTH_ARN=$(aws cloudformation describe-stacks --stack-name eks --query 'Stacks[0].Outputs[?OutputKey==`AuthArn`].OutputValue' --output text)
export SUBNETS=$(aws cloudformation describe-stacks --stack-name eks --query 'Stacks[0].Outputs[?OutputKey==`SubnetIds`].OutputValue' --output text)
export MANAGING_ACCOUNT_ID=$(aws cloudformation describe-stacks --stack-name eks --query 'Stacks[0].Outputs[?OutputKey==`ManagingAccountId`].OutputValue' --output text)
export EKS_CLUSTER_ENDPOINT=$(aws cloudformation describe-stacks --stack-name eks --query 'Stacks[0].Outputs[?OutputKey==`EksClusterEndpoint`].OutputValue' --output text)
export EKS_CLUSTER_NAME=$(aws cloudformation describe-stacks --stack-name eks --query 'Stacks[0].Outputs[?OutputKey==`EksClusterName`].OutputValue' --output text)
export EKS_CLUSTER_CA_DATA=$(aws cloudformation describe-stacks --stack-name eks --query 'Stacks[0].Outputs[?OutputKey==`EksClusterCA`].OutputValue' --output text)
export SPINNAKER_INSTANCE_PROFILE_ARN=$(aws cloudformation describe-stacks --stack-name eks --query 'Stacks[0].Outputs[?OutputKey==`SpinnakerInstanceProfileArn`].OutputValue' --output text)


EKSで使用するkubectlをインストール

https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/configure-kubectl.html

$ curl -o kubectl https://amazon-eks.s3-us-west-2.amazonaws.com/1.10.3/2018-07-26/bin/linux/amd64/kubectl
$ chmod +x ./kubectl
$ mkdir bin
$ cp ./kubectl $HOME/bin/kubectl && export PATH=$HOME/bin:$PATH
$ echo 'export PATH=$HOME/bin:$PATH' >> ~/.bashrc


EKSで使用する iam-authenticator をインストール

https://amazon-eks.s3-us-west-2.amazonaws.com/1.10.3/2018-07-26/bin/linux/amd64/aws-iam-authenticator

$ curl -O https://amazon-eks.s3-us-west-2.amazonaws.com/1.10.3/2018-07-26/bin/linux/amd64/aws-iam-authenticator
$  chmod +x aws-iam-authenticator
$ cp ./aws-iam-authenticator $HOME/bin/aws-iam-authenticator


EKSで使用するkubeconfigを作成

https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/create-kubeconfig.html

awscliで eks が使えなければ最新版入れましょう https://github.com/aws/aws-cli/releases

$ mkdir -p ~/.kube

kubeconfigを作る

apiVersion: v1
clusters:
- cluster:
    server: <endpoint-url>
    certificate-authority-data: <base64-encoded-ca-cert>
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: aws
  name: aws
current-context: aws
kind: Config
preferences: {}
users:
- name: aws
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1alpha1
      command: aws-iam-authenticator
      args:
        - "token"
        - "-i"
        - "<cluster-name>"
        # - "-r"
        # - "<role-arn>"
      # env:
        # - name: AWS_PROFILE
        #   value: "<aws-profile>"

<endpoint-url> <base64-encoded-ca-cert> <cluster-name> をそれぞれ作成したEKSの情報に書き換える

作成したファイルを.kubeにいれる

$ mv kubeconfig ./.kube/config-<cluster-name>
$ echo 'export KUBECONFIG=$KUBECONFIG:~/.kube/config-<cluster-name>' >> ~/.bashrc

デプロイ先のプロバイダを選択

https://www.spinnaker.io/setup/install/providers/

今回はECSを使う

# providerのリスト
$ hal config provider

$ hal config provider ecs

AWSのECSを使うアカウントを設定

https://www.spinnaker.io/setup/install/environment/

[ecs-account-name] はECSで利用するAWSのアカウントネーム [aws-account-name]は↑でなくspinnakerがAWSで使うアカウントネーム

$ hal config provider ecs account add [ecs-account-name] --aws-account [aws-account-name]


spinnakerをインストールする環境を選択

https://www.spinnaker.io/setup/install/environment/ 強く推奨されている Distributed installation を使いましょう

前項の aws-account-name を $ACCOUNT にいれる

$ hal config deploy edit --type distributed --account-name [aws-account-name]

日記はここで途切れている

アップデートしたい