LoginSignup
1
0

More than 5 years have passed since last update.

AWS上でKubernetesクラスタを構築してアプリ運用してみた その1(クラスタ環境構築)

Last updated at Posted at 2016-09-26

Kubernetesを用いる機会が多くなってきたのですが、それをAWS上で構築してみた話。結構はまりますよね。。。

ゴール

以下のゴールを設定します。
- AWS上はCentOSを使う(本当はAmazon Linuxで試したいのですが、色々面倒だったので今回はCentOS7で。)
- 3台のマシンを借りてそれぞれMaster1台、Node2台とする(全てt2.microを選択)
- 上記3台はVPC内で通信させる
- 外部からのアクセスを捌けるところまでを構築する
- 使うKubernetesバージョンは1.2系(こちらもいずれは1.3系を試してみたい)

3台構成にした中で、マイクロサービス的なこともしてみたいのですが、それはまた今度。で、今回は「その1」として、マスタ / ノードをそれぞれ1台ずつで構成し、一旦つなげてみます。
ちなみにKubernetesのバージョン重要です。(バージョンが異なればPod作成の設定、手順などが異なることがままあるため)

AWSインスタンスの準備

2台準備します。とりあえずt2.microで組みます。それからVPCとサブネットも必要ですね。2インスタンスが所属するように設定します。VPCのインターネットゲートウェイアタッチとルートテーブルの設定忘れに注意。また事前に借りたインスタンスのSELinuxをOffにするなど設定しておきましょう。

またセキュリティグループも必要であれば環境に合わせて適宜設定をしてください。

インスタンス準備ができたら、各種インストールが必要です。

マスタ側のインストール

$ sudo yum install kubernetes
$ sudo yum install etcd
$ sudo yum install flannel

続いてファイル編集

$ sudo vi /etc/kubernetes/config
#KUBE_MASTER="--master=http://127.0.0.1:8080"
KUBE_MASTER="--master=http://172.17.0.62:8080"

KUBE_MASTERは自マシンのプライベートIPアドレスになります。

$ sudo vi /etc/kubernetes/apiserver
#KUBE_API_ADDRESS="--insecure-bind-address=127.0.0.1"
KUBE_API_ADDRESS="--insecure-bind-address=172.17.0.62"

#KUBE_ETCD_SERVERS="--etcd-servers=http://127.0.0.1:2379"
KUBE_ETCD_SERVERS="--etcd-servers=http://172.17.0.62:2379"

KUBE_ETCD_SERVERS(172.17.0.62)は自マシンのプライベートIPアドレスになります。

$ sudo vi /etc/kubernetes/kubelet
#KUBELET_HOSTNAME="--hostname-override=127.0.0.1"
KUBELET_HOSTNAME="--hostname-override=master"

#KUBELET_API_SERVER="--api-servers=http://127.0.0.1:8080"
KUBELET_API_SERVER="--api-servers=http://172.17.0.62:8080"

Kubernetesは/etc/hostsのファイルにある名前からホスト名を理解するので

172.17.0.62 master

を/etc/hostsに追記しておきましょう。(これはノードの設定でも一緒です)

続いてetcdに関連するファイルの変更です。

$ sudo vi /etc/etcd/etcd.conf
#ETCD_LISTEN_CLIENT_URLS="http://localhost:2379"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"

#ETCD_ADVERTISE_CLIENT_URLS="http://localhost:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://0.0.0.0:2379"
$ sudo etcdctl mk /atomic.io/network/config '{"Network":"172.16.0.0/16"}'

※172.17.0.0/16はAWS側がプライベートアドレスを割り振ることが多いので(例に漏れず今回もそうです)、今回の設定では172.16系を指定しています。

必要ファイルが編集できたら関連サービスを再起動します。ついでに起動時に動くようにしておきます。

$ sudo systemctl restart etcd
$ sudo systemctl restart kube-apiserver
$ sudo systemctl restart kubelet
$ sudo systemctl restart kube-controller-manager
$ sudo systemctl restart kube-scheduler
$ sudo systemctl restart kube-proxy
$ sudo systemctl restart flanneld
$ sudo systemctl enable etcd
$ sudo systemctl enable kube-apiserver
$ sudo systemctl enable kubelet
$ sudo systemctl enable kube-controller-manager
$ sudo systemctl enable kube-scheduler
$ sudo systemctl enable kube-proxy
$ sudo systemctl enable flanneld

以下のコマンドでmasterが動いているかどうかの確認ができます。

$ kubectl cluster-info
Kubernetes master is running at http://localhost:8080

ノード側の設定

$ sudo yum install kubernetes
$ sudo yum install docker
$ sudo yum install flannel

各種ファイルの設定です。

$ sudo vi /etc/kubernetes/config
#KUBE_MASTER="--master=http://127.0.0.1:8080"
KUBE_MASTER="--master=http://172.17.0.62:8080"
$ sudo vi /etc/kubernetes/kubelet
#KUBELET_ADDRESS="--address=127.0.0.1"
KUBELET_ADDRESS="--address=172.17.0.161"

#KUBELET_HOSTNAME="--hostname-override=127.0.0.1"
KUBELET_HOSTNAME="--hostname-override=node1"

#KUBELET_API_SERVER="--api-servers=http://127.0.0.1:8080"
KUBELET_API_SERVER="--api-servers=http://172.17.0.62:8080"

KUBELET_ADDRESSには自マシンのプライベートアドレスを定義してください。

$ sudo vi /etc/sysconfig/flanneld
#FLANNEL_ETCD="http://127.0.0.1:2379"
FLANNEL_ETCD="http://172.17.0.62:2379"

設定が完了したら以下のコマンドで必要なサービスを起動します。

$ sudo systemctl start docker
$ sudo systemctl start flanneld
$ sudo systemctl start kubelet
$ sudo systemctl start kube-proxy
$ sudo systemctl enable docker
$ sudo systemctl enable flanneld
$ sudo systemctl enable kubelet
$ sudo systemctl enable kube-proxy

マスタとノードの設定の確認

一通り設定が終わったらマスタがノードを認識しているかを確かめましょう。

[マスタ]

$ kubectl get nodes
NAME      STATUS    AGE
master    Ready     25m
node1     Ready     24s

同じ設定をすれば2台目のノードを構築することも可能です。まずはこれでKubernetesクラスタを利用するための準備が整いました。これからはこの環境にDashBoardをインストールし、各ノードやPodの状態を確認しつつ、各ノードでのアプリ起動、運用を目指します。

1
0
1

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
1
0