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/kopscurl -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/kubectlS3 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-21. 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.k8sThen run the command to reflect variables added to .bashrc file
source ~/.bashrc
This keypair will be used for ssh into kubernetes cluster
ssh-keygenMake 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.yamlkops create secret --name test.domain.name sshpublickey admin -i ~/.ssh/id_rsa.pubPlease 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 clusterFor 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 clustersNow 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 nodeskops delete cluster test.domain.name --yes