LoginSignup
36

More than 5 years have passed since last update.

Kubernetes の学習 (1) ~ AWS上でのクラスタ構築

Last updated at Posted at 2015-06-28

概要

Kubernetes の学習をするためにまずは実環境がほしかったので、AWS EC2 上に Kubernetes のクラスターを構築してみた。今回は作業用のEC2 インスタンスを作成して、そこから Kubernetes のセットアップスクリプトを実行して、クラスターを構築した。

作業用インスタンスの作成

Kubernetes のクラスターを構築するための作業用インスタンスを作成する。

IAM Role の作成

作業用インスタンスに割り当てる Role を作成する。Kubernetes の セットアップスクリプトは、自動で EC2インスタンス、VPC、S3バケットなどを作成するため、事前に Role を割り当てておく必要がある。

面倒であればフルアクセス権を持つ Role を作ればいいが、最低限以下のように EC2, S3, IAM へのアクセス権を持つ Role を作成すればいい。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": "ec2:*",
      "Effect": "Allow",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "elasticloadbalancing:*",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "autoscaling:*",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "iam:*",
      "Resource": "*"
    }
  ]
}

iam_role.PNG

作業用インスタンスの作成

EC2インスタンスを作成。 作成時に、上の手順で作成した Role を IAM Role として指定する。
assign_role.PNG

起動後、作業用インスタンスにSSHで接続する。

クラスターセットアップ

環境変数の設定

基本的には作業用インスタンスから https://get.k8s.io のセットアップスクリプトを実行するだけなのだが、このスクリプトが様々なリソースを作るため、AZ名やS3のバケット名などを環境変数で設定しておく。

# クラウドプロバイダー名の指定(aws)。 このスクリプトは、AWS だけでなく、
# Google Cloud Engine(gce) や Microsoft Azure(azure)にも対応しているため、
# この変数の指定は必要。
export KUBERNETES_PROVIDER=aws  

# 使用するAZの名前。デフォルトは us-west-2a になっているため、必要に応じて変更。
# なお、使用するリージョンは、このAZ名から判断される。
export KUBE_AWS_ZONE=ap-northeast-1a

# Master と Minon のインスタンスサイズ。デフォルトで t2.micro にはなっているが
# 念のため設定。
export MASTER_SIZE=t2.micro
export MINION_SIZE=t2.micro

# Minion の台数(作成するインスタンス数)。デフォルトで4台なので、2台にしておいた。
export NUM_MINIONS=2

# S3 のバケット名。すでに存在しればそれが使われ、存在しなければ作成される。
# なお、この環境変数を指定しなくても、名前を自動生成してバットを作成してくれる。
export AWS_S3_BUCKET=arturias-kube

# S3 のリージョン。バケットをスクリプトに生成させる場合に指定する。
export AWS_S3_REGION=ap-northeast-1

<補足> デフォルトでは Master や Minion は ubuntu の AMI を使って構築される。AWS_IMAGE という環境変数で使用する AMI を指定することはできるが、現在セットアップスクリプトでサポートされているのは ubuntu と CoreOS だけらしいので、それ以外は動作しない可能性がある。

クラスターの構築

環境変数の設定が終わったら、Kubernets のセットアップスクリプトを実行する。

curl -sS https://get.k8s.io | bash

あとは自動的に進んでいき、クラスターが構築される。Master や Minon のアドレス、ユーザー名・パスワードが記載されたファイルなどの情報が出力される。

$ curl -sS https://get.k8s.io | bash
Downloading kubernetes release v0.19.3 to /home/ec2-user/kubernetes.tar.gz

・・・()

Kubernetes cluster is running.  The master is running at:

  https://52.68.83.XX

The user name and password to use is located in /home/ec2-user/.kube/config.

... calling validate-cluster
Found 2 nodes.
        NAME                                             LABELS                                                                  STATUS
     1  ip-172-20-0-10.ap-northeast-1.compute.internal   kubernetes.io/hostname=ip-172-20-0-10.ap-northeast-1.compute.internal   Ready
     2  ip-172-20-0-11.ap-northeast-1.compute.internal   kubernetes.io/hostname=ip-172-20-0-11.ap-northeast-1.compute.internal   Ready

・・・()

Done, listing cluster services:

Kubernetes master is running at https://52.68.83.XX
Elasticsearch is running at https://52.68.83.XX/api/v1beta3/proxy/namespaces/default/services/elasticsearch-logging
Kibana is running at https://52.68.83.XX/api/v1beta3/proxy/namespaces/default/services/kibana-logging
KubeDNS is running at https://52.68.83.XX/api/v1beta3/proxy/namespaces/default/services/kube-dns
Grafana is running at https://52.68.83.XX/api/v1beta3/proxy/namespaces/default/services/monitoring-grafana
 is running at https://52.68.83.XX/api/v1beta3/proxy/namespaces/default/services/monitoring-heapster
influxGrafana is running at https://52.68.83.XX/api/v1beta3/proxy/namespaces/default/services/monitoring-influxdb

Kubernetes binaries at /home/ec2-user/kubernetes/kubernetes/cluster/
You may want to add this directory to your PATH in $HOME/.profile
Installation successful!

AWS コンソールを見ると、以下のようにEC2インスタンスが作成されていることが分かる(kubernetes-* が自動で作成されたインスタンス)。セットアップスクリプトは EC2 の AutoScaling Group を作成し、その機能によりこれらのインスタンスが作成される。
kube-nodes-ec2.PNG

他にもセットアップスクリプトにより、VPC、S3バケット、IAM Role が作成される。

動作確認

作業用インスタンスから、Master のアドレスにアクセスしてみる。ユーザー名とパスワードは、作業用インスタンスの ~/.kube/config に書かれている。

$ curl -u admin:XXXXXXX -k https://52.68.83.XX
{
  "paths": [
    "/api",
    "/api/v1",
    "/api/v1beta3",
    "/healthz",
    "/healthz/ping",
    "/logs/",
    "/metrics",
    "/static/",
    "/swagger-ui/",
    "/swaggerapi/",
    "/ui/",
    "/version"
  ]
}

$ curl -u admin:XXXXXXX -k https://52.68.83.XX/version
{
  "major": "0",
  "minor": "19",
  "gitVersion": "v0.19.3",
  "gitCommit": "3103c8ca0f24514bc39b6e2b7d909bbf46af8d11",
  "gitTreeState": "clean"
}

Pod を表示してみる。Kubernetes クラスタを管理するツールである kubectl は、セットアップを実行したディレクトリにある kubernetes/platforms/ 配下に置かれている。

$ ./kubernetes/platforms/linux/amd64/kubectl get pods
NAME                                                                   READY     REASON    RESTARTS   AGE
elasticsearch-logging-v1-atfii                                         1/1       Running   0          35m
elasticsearch-logging-v1-f3rge                                         1/1       Running   0          35m
fluentd-elasticsearch-ip-172-20-0-10.ap-northeast-1.compute.internal   1/1       Running   0          31m
fluentd-elasticsearch-ip-172-20-0-11.ap-northeast-1.compute.internal   1/1       Running   0          31m
kibana-logging-v1-4ije5                                                1/1       Running   0          35m
kube-apiserver-ip-172-20-0-9                                           0/1       Pending   0          11m
kube-controller-manager-ip-172-20-0-9                                  0/1       Pending   0          11m
kube-dns-v3-7rw1g                                                      3/3       Running   1          35m
kube-scheduler-ip-172-20-0-9                                           0/1       Pending   0          11m
monitoring-heapster-v3-uz6oy                                           1/1       Running   1          35m
monitoring-influx-grafana-v1-7agvr                                     2/2       Running   0          35m

クラスターの削除

セットアップスクリプトは、AWS の AutoScaling Group や VPC など様々なリソースを作成しているので、手動でクラスターや各種リソースを削除するのは面倒。作業用インスタンスにダウンロードされている Kubernetes パッケージに含まれる cluster/kube-down.sh を使うのが簡単。

$ export KUBERNETES_PROVIDER=aws
$ export KUBE_AWS_ZONE=ap-northeast-1a
$ kubernetes/cluster/kube-down.sh
Bringing down cluster using provider: aws
Deleting auto-scaling group: kubernetes-minion-group
Deleting auto-scaling launch configuration: kubernetes-minion-group
Deleting instances in VPC: vpc-97e249f2
(中略)
Deleting security group: sg-f1700f94
Deleting security group: sg-f2700f97
Done

参考サイト

Getting started on AWS EC2

修正履歴

2015/8/11 「クラスターの削除」を追記

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
36