Last active
February 26, 2020 20:16
-
-
Save gmaliar/1e49b148b8adc12f051ff050396606a3 to your computer and use it in GitHub Desktop.
Spinning up a Kubernetes cluster
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # Some tools that make it easier to work with our templates | |
| brew install gettext --force | |
| brew install kubectl | |
| brew install kops | |
| brew install kubernetes-helm | |
| brew install terraform | |
| brew install awscli | |
| brew install jq | |
| awscli configure --profile kops | |
| # Environment values | |
| export STAGE=production | |
| export DNS_ZONE=tailor-brands-k8s.com # Change it to your domain | |
| export DNS_ZONE_DASH=$(echo $DNS_ZONE | sed 's/\./-/g') | |
| export REGION=<YOUR AWS REGION> # For example u | |
| export VPC=<YOUR VPC ID> | |
| export NODE_COUNT=3 | |
| export NODE_TYPE=<TYPE> # We've experimented from m4.xlarge to m4.10xlarge | |
| export MASTER_TYPE=<TYPE> # We've experimented from t2.large to m4.xlarge | |
| export AWS_DEFAULT_PROFILE=kops | |
| export S3_BUCKET_PREFIX=$STAGE-$DNS_ZONE_DASH | |
| export NAME=$STAGE.$DNS_ZONE | |
| export KOPS_STATE_STORE=$S3_BUCKET_PREFIX-kstate | |
| export TF_STATE_STORE=$S3_BUCKET_PREFIX-tfstate | |
| export K8S_CONFIG_STORE=$S3_BUCKET_PREFIX-config | |
| # Create some buckets that hold our different kops, k8s and terraform state | |
| aws s3api create-bucket --bucket ${KOPS_STATE_STORE} --region ${REGION} | |
| aws s3api create-bucket --bucket ${TF_STATE_STORE} --region ${REGION} | |
| aws s3api create-bucket --bucket ${K8S_CONFIG_STORE} --region ${REGION} | |
| aws s3api put-bucket-versioning --bucket ${KOPS_STATE_STORE} --versioning-configuration Status=Enabled | |
| aws s3api put-bucket-versioning --bucket ${TF_STATE_STORE} --versioning-configuration Status=Enabled | |
| aws s3api put-bucket-versioning --bucket ${K8S_CONFIG_STORE} --versioning-configuration Status=Enabled | |
| # Create a new ssh private/public keypair | |
| ssh-keygen -t rsa -C ${NAME} -f ${NAME}.pem | |
| PUBKEY=$(pwd)/${NAME}.pem.pub | |
| aws ec2 import-key-pair --key-name ${NAME} --public-key-material file://${PUBKEY} | |
| # Create the kops managed k8s cluster | |
| # Your region master and node availability zones could vary, for example on us-east-1 it might be us-east-1a, us-east-1b and us-east-1c | |
| kops create cluster \ | |
| --cloud=aws \ | |
| --state=s3://${KOPS_STATE_STORE} \ | |
| --node-count ${NODE_COUNT} \ | |
| --zones ${REGION}a,${REGION}b,${REGION}c \ | |
| --master-zones ${REGION}a,${REGION}b,${REGION}c \ | |
| --dns-zone ${DNS_ZONE} \ | |
| --node-size ${NODE_TYPE} \ | |
| --master-size ${MASTER_TYPE} \ | |
| --vpc=${VPC} \ | |
| --topology private \ | |
| --networking cni \ | |
| --ssh-public-key=${PUBKEY} \ | |
| --bastion \ | |
| --authorization=RBAC \ | |
| --out=terraform/${STAGE} \ | |
| --target=terraform \ | |
| ${NAME} | |
| # Configure terraform state | |
| cd terraform/${STAGE} | |
| cat << EOF > backend.tf | |
| terraform { | |
| backend "s3" { | |
| bucket = "${TF_STATE_STORE}" | |
| key = "terraform.tfstate" | |
| region = "${REGION}" | |
| } | |
| } | |
| EOF | |
| envsubst <../templates/sqs.tf > sqs.tf | |
| terraform init | |
| terraform plan | |
| terraform apply |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment