- docker (~17.03.1-ce-mac5)
- aws cli (~1.4.62)
- kubectl (~v1.5.5)
- kube-aws (>=v0.9.5 - please use proper version of kube-aws since this version had major config changes)
We will use AWS cli and tool called aws-kube for generating CloudFormation for cluster.
Write your credentials into the file ~/.aws/credentials using the following template:
[default]
aws_access_key_id = AKID1234567890
aws_secret_access_key = MY-SECRET-KEY
Create a unique key-pair for region in AWS console.
aws kms --region=<your-region> create-key --description="kube-aws assets"
aws s3api create-bucket --bucket bucket-name --region <your-region> --create-bucket-configuration LocationConstraint=<your-region>
Please generate cluster settings in kube-aws-assets folder.
cd kube-aws-assets
Generate config.yaml
kube-aws init \
--cluster-name=kube-dev \
--external-dns-name=kube.mydomain.com \
--region=<your-region> \
--availability-zone=eu-west-2a \
--key-name=id_aws \
--kms-key-arn="arn:aws:kms:eu-west-2:123456789:key/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
Render files templates
kube-aws render credentials --generate-ca
kube-aws render stack
Validate that everything is ok
kube-aws validate --s3-uri s3://<your-bucket-name>/<prefix>
Launch Kubernetes cluster
kube-aws up --s3-uri s3://<your-bucket-name>/<prefix>
Note: If you don't have external DNS you can just change host file on your machine to public IPs of your controller ELB load balancer.
Run to reveal DNS of load balancer:
kube-aws status
Then copy DNS and resolve to public IP:
dig <your-dns>.elb.amazonaws.com
Finally update host file: (for example: kube.mydomain.com)
sudo vim /etc/hosts
This is just work around kube-aws which requires external-dns-name in it's init phase.