Creating a Kubernetes Cluster on AWS Using Kubernetes Operations
Small talk about getting a Kubernetes cluster up & running on AWS. In this talk, I describe about few gotchas that you might run into when setting up a k8s cluster
Kubernetes Operations (“kops”) ● Kubernetes Operations ○ Current recommended/supported for AWS ○ “Production grade” ○ Can create single/HA Master node ○ Kubectl for the cluster
What else can kops do? ● Output config ○ Terraform ○ Cloudformation ○ Actually launch the instances ● Dry run by default ● Create Bastion host ● Tear down the cluster ● Many more. Read the docs!
Way kops works ● Creates an IAM group ● Attach below group policies ○ AmazonEC2FullAccess ○ AmazonRoute53FullAccess ○ AmazonS3FullAccess ○ IAMFullAccess ○ AmazonVPCFullAccess ● Creates a user to this group ● Creates S3 bucket to store state
Points to note ● You do not* need control over domain ○ *caveat: kops needs to be v1.6.2 & above ■ Cluster name must end in .k8s.local ● Kops creates security groups for SSH open to all ○ Always review what kops does with kops edit cluster $NAME ● Kops creates masters & nodes in public subnet
Points to note ● Kops creates m3.medium for master and 2x t2.medium for nodes by default. ○ Size accordingly. ● Kops creates a new VPC, IGW, subnet but you can make it reuse existing VPC & subnets ○ export VPC_ID=vpc-12345678 ○ export NETWORK_CIDR=10.100.0.0/16 ○ kops create cluster ${NAME} --vpc=${VPC_ID}
Instance Groups ● Groups of similar machines ● Master IG, Node IG ● Edit IG, changes reflect on all instances ○ kops get instancegroups ○ kops edit ig ○ kops update cluster ${NAME} ● Changes apply to new instances only! ○ Do a rolling update to update existing instances