Skip to content

Instantly share code, notes, and snippets.

@gmaliar
Last active February 26, 2020 20:16
Show Gist options
  • Select an option

  • Save gmaliar/1e49b148b8adc12f051ff050396606a3 to your computer and use it in GitHub Desktop.

Select an option

Save gmaliar/1e49b148b8adc12f051ff050396606a3 to your computer and use it in GitHub Desktop.
Spinning up a Kubernetes cluster
# 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