This repostory contains all the detailed instruction to create a production grade kubernetes cluster using Kops in AWS. To create a k8s cluster, please follow the following steps -
Please attach these policies to IAM role created as these are required by Kops
AmazonS3FullAccess
IAMFullAccess
AmazonRoute53FullAccess
AmazonEC2FullAccess
AmazonVPCFullAccess
curl -LO https://github.com/kubernetes/kops/releases/download/$(curl -s https://api.github.com/repos/kubernetes/kops/releases/latest | grep tag_name | cut -d '"' -f 4)/kops-linux-amd64
chmod +x kops-linux-amd64
sudo mv kops-linux-amd64 /usr/local/bin/kops
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
S3 bucket is used by kubernetes to persist cluster state, lets create s3 bucket using aws cli Note: Make sure you choose bucket name that is uniqe accross all aws accounts
aws s3 mb s3://abhi.in.k8s --region us-east-2
1. Head over to aws Route53 and create hostedzone
2. Choose name for example (abhi.in.k8s)
3. Choose type as privated hosted zone for VPC
4. Select default vpc in the region you are setting up your cluster
5. Hit create
1. Head over to aws Route53 and create hostedzone
2. Choose your domain name for example (abhi.in)
3. Choose type as public hosted zone for VPC
4. Give description
5. Hit create
Open .bashrc file
vi ~/.bashrc
Add following content into .bashrc file, and make sure bucket name matches the one you created in step 5.
export KOPS_STATE_STORE=s3://abhi.in.k8s
Then run the command to reflect variables added to .bashrc file
source ~/.bashrc
This keypair will be used for ssh into kubernetes cluster
ssh-keygen
Make sure to change config file with your cluster config file (if any) and make neccessary changes in config file as per your requirements.
kops create -f cluster-setup.yaml
kops create secret --name test.domain.name sshpublickey admin -i ~/.ssh/id_rsa.pub
Please don't forget to replace cluster name with your cluster name which you have given in your config file.
kops update cluster test.domain.name --yes
Above command may take some time to create the required infrastructure resources on AWS. Execute the validate command to check its status and wait until the cluster becomes ready
kops validate cluster
For the above above command, you might see validation failed error initially when you create cluster and it is expected behaviour, you have to wait for some more time and check again.
kops get clusters
Now you can run all your kubectl commands and start deploying your applications over kubernetes. Run the following commands to check the cluster created and see the nodes available.
kubectl cluster-info
kubectl get nodes
kops delete cluster test.domain.name --yes