AWS EKS 使ってみた

# 目次

1. 事前準備
    1. AWS CLI インストール
    2. kubectl インストール
    3. heptio-authenticator-aws インストール
2. EKS利用のための前提条件
    1. サービスロール作成
    2. VPC作成
3. EKSクラスター作成

# 環境
クライアントマシン：Mac

# 事前準備

## AWS CLI インストール

```
$ curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"
$ python get-pip.py
$ pip install awscli
$ aws --version
```

## kubectlインストール

[Docker for Mac](https://www.docker.com/docker-mac)のedgeバージョンをインストールし、Kubernetesを有効にする。

## heptio-authenticator-aws インストール

kubectl実行時のEKS認証のために必要となる「heptio-authenticator-aws」をインストールする。

```
$ curl -o heptio-authenticator-aws https://amazon-eks.s3-us-west-2.amazonaws.com/1.10.3/2018-06-05/bin/darwin/amd64/heptio-authenticator-aws
$ chmod +x ./heptio-authenticator-aws
$ mv ./heptio-authenticator-aws $HOME/bin/heptio-authenticator-aws && export PATH=$HOME/bin:$PATH
$ heptio-authenticator-aws help
```

# EKS利用のための前提条件

## サービスロール作成
https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/getting-started.html

## VPC作成
https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/getting-started.html

## IAMポリシーの作成
https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/getting-started.html

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "eks:*",
                "iam:PassRole" ※この設定も必要と思われる。
            ],
            "Resource": "*"
        }
    ]
}
```

# EKSクラスター作成

## 事前準備

aws configure コマンドで接続情報を設定しておくこと。
EKSを利用できるリージョンは以下。(2018/7/10時点)

- 米国西部 (オレゴン) (us-west-2)
- 米国東部 (バージニア北部) (us-east-1)

## クラスターの作成
以下のコマンドでクラスターを作成する。
以降の手順では、クラスター名は「eks-cluster-sample-1」とする。

```
$ aws eks create-cluster \
  --name <クラスタ名(eks-cluster-sample-1)> \
  --role-arn <作成したサービスロールのARN> \
  --resources-vpc-config \
    subnetIds=<作成したVPCより>,<作成したVPCより>,securityGroupIds=<作成したVPCより>

{
    "cluster": {
        "name": "eks-cluster-sample-1",
        "arn": "arn:aws:eks:us-west-2:************:cluster/eks-cluster-sample-1",
        "createdAt": **********.***,
        "version": "1.10",
        "roleArn": "arn:aws:iam::************:role/**************",
        "resourcesVpcConfig": {
            "subnetIds": [
                "subnet-********",
                "subnet-********"
            ],
            "securityGroupIds": [
                "sg-********"
            ],
            "vpcId": "vpc-********"
        },
        "status": "CREATING",
        "certificateAuthority": {}
    }
}

```

以下のコマンドでクラスター状態を確認する。

```
$ aws eks describe-cluster --name eks-cluster-sample-1 --query cluster.status
"ACTIVE"
```

##　 EKSクラスターの情報取得
kubectlで作成したクラスターと通信できるように、endpoint および certificateAuthority.data を取得する。

以下のコマンドでendopointを取得する。

```
$ aws eks describe-cluster --name eks-cluster-sample-1 --query cluster.endpoint
```

以下のコマンドでcertificateAuthority.dataを取得する。

```
$ aws eks describe-cluster --name eks-cluster-sample-1 --query cluster.certificateAuthority.data
```

## kubectlの設定

```
$ cd ~/.kube
$ vi config_eks-cluster-sample-1
```

以下を設定。

```
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: heptio-authenticator-aws
      args:
        - "token"
        - "-i"
        - "<cluster-name>"
        # - "-r"
        # - "<role-arn>"

```

作成したkubectlの定義を設定する。

```
$ export KUBECONFIG=$KUBECONFIG:~/.kube/config_eks-cluster-sample-1 
```

EKSにアクセス確認をする。

```
$ kubectl get all
NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.100.0.1   <none>        443/TCP   53m
```

# worker node の作成

https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/launch-workers.html