現在利用していて、複数のsubnetがすでに登録されているAWS環境に、kopsでkubernetesを構築する方法をまとめてみました。また東京リージョンでmaster冗長化も試してみました。
環境
Mac OS 10.12.6
kops 1.8.1
設定
今回の環境では以下の設定になっています。適宜読み替えてください。
項目 | 値 | 備考 |
---|---|---|
vpc-id | vpc-xxxxxxxx | 既存アカウントで作成済のvpc-idを利用 |
region | ap-northeast-1 | 東京リージョン |
cidr | 10.16.0.0/16 | |
zone | ap-northeast-1a,ap-northeast-1c,ap-northeast-1d | 3つのzoneを利用 |
master-zonesの指定を2つにすると以下のようなエラーになります。
etcdが「The recommended etcd cluster size is 3, 5 or 7・・・」という制約に引っかかってるんでしょうか。
ap-northeast-1dがあってよかった。
There should be an odd number of master-zones, for etcd's quorum. Hint: Use --zones and --master-zones to declare node zones and master zones separately.
バケット作成
terraformだとこんな感じかとおもいます。
resource "aws_s3_bucket" "k8s-dev" {
bucket = "k8s-dev.example.com"
acl = "private"
tags {
Name = "k8s-dev.example.com"
Environment = "Dev"
}
}
Route53設定
terraformだとこんな感じかとおもいます。
resource "aws_route53_zone" "k8s-dev" {
name = "k8s-dev.example.com"
}
登録が終わったらちゃんと名前解決ができるように上位のDNSにNSレコードを登録しておきます。
環境変数の設定
# 権限のあるIDとKEYを設定
export AWS_ACCESS_KEY_ID=XXXXXXXXXXXXXXXXXXXXXX
export AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXX
# リージョン設定
export AWS_DEFAULT_REGION=ap-northeast-1
export ZONES="ap-northeast-1a,ap-northeast-1c,ap-northeast-1d"
# 各ノードのサイズ
export NODE_SIZE=${NODE_SIZE:-m4.large}
export MASTER_SIZE=${MASTER_SIZE:-m4.large}
# kopsの設定が保存されるバケット(さきほど作ったもの)
export KOPS_STATE_STORE="s3://k8s-dev.example.com"
kops create
--yesをつけない
$ kops create cluster k8s-test.example.com \
--vpc=vpc-xxxxxxxx \
--network-cidr=10.16.0.0/16 \
--node-count 3 \
--zones $ZONES \
--node-size $NODE_SIZE \
--master-size $MASTER_SIZE \
--master-zones $ZONES
kops edit
ここで既存のサブネットとぶつからないように書き換える
$ kops edit cluster k8s-test.example.com
subnets:
- cidr: 10.16.100.0/24 #ここを書き換える
name: ap-northeast-1a
type: Public
zone: ap-northeast-1a
- cidr: 10.16.101.0/24 #ここを書き換える
name: ap-northeast-1c
type: Public
zone: ap-northeast-1c
- cidr: 10.16.102.0/24 #ここを書き換える
name: ap-northeast-1d
type: Public
zone: ap-northeast-1d
念のため設定確認
--yesはつけない
$ kops update cluster k8s-test.example.com
kops update
ここで構築される
$ kops update cluster k8s-test.example.com --yes
しばらくまつと出来上がる
確認
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
ip-10-16-100-217.ap-northeast-1.compute.internal Ready node 1h v1.8.7
ip-10-16-100-72.ap-northeast-1.compute.internal Ready master 1h v1.8.7
ip-10-16-101-229.ap-northeast-1.compute.internal Ready master 1h v1.8.7
ip-10-16-101-86.ap-northeast-1.compute.internal Ready node 1h v1.8.7
ip-10-16-102-136.ap-northeast-1.compute.internal Ready node 1h v1.8.7
ip-10-16-102-154.ap-northeast-1.compute.internal Ready master 1h v1.8.7