How to Setup Cluster Using kops On AWS EC2
You must have aws cli installed on your server and an access key and secret key with admin access permission in it and it should be configured on your ec2 instance, for doing this execute the below command:-
sudo apt-get install awscli
Now configure you awscli (it’s a part of AWS, if you are new to AWS, please refer our AWS tutorial section) by entering your access key and your secret key along with the region(where your ec2 instance is running), after that it will ask for the output format which is optional with default value of json but here we are explicitly using json just for demo purpose after that you are all set to create a cluster in kubernetes on AWS.
aws configure
You also need to install docker on the server and login to your docker registry, for installing docker use the command below
sudo apt install docker.io -y
After that login to your docker registry
sudo docker login
FOR CREATING CLUSTER FOLLOW THE BELOW STEPS:-
KOPS installation in AWS::
KOPS – Kubernetes Operations
1. Launch Ubuntu based instance to execute below commands to install kops.
2. Kops binary download
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
3. Create an IAM user with admin permissions and make a note of access key & security key and then create S3 bucket and enable versioning.
[FOR CREATING IAM USER AND S3 BUCKET PLEASE FOLLOW THE AWS TUTORIAL MENTIONED HERE IN salesforcedrillers.com]
4. Kubectl installation (K8s cli).
sudo apt-get update && sudo apt-get install -y apt-transport-https curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list sudo apt-get update sudo apt-get install -y kubectl
5. Now create a ssh key for creating cluster it will act as a pem file for accessing your master and nodes server and it is also essential for creating your kubernetes cluster, for creating it execute the below command:-
ssh-keygen -f .ssh/id_rsa
6. Setting up of Environment variables – Cluster name should always end with k8s.local. Update .bashrc and .profile in ~dir with these two variables.
Cluster name should end with .k8s.local and if you have your own domain then provide it at the end of your cluster name instead of .k8s.local
export KOPS_CLUSTER_NAME=<cluster name> export KOPS_STATE_STORE=s3://s3-bucket-name
After this restart your bash rc . ~/.bashrc.
7. Create cluster:: — This will actually prepare the configuration files.
kops create cluster \ --node-count=1 \ --node-size=t2.micro \ --master-size=t2.micro \ --zones=us-east-1a \ --name=${KOPS_CLUSTER_NAME}
If you want to create your cluster without associating public ip to your master as well as worker nodes, then execute the below command
kops create cluster \ --node-count=1 \ --zones=us-east-1a \ --node-size=t2.micro \ --master-size=t2.micro \ --master-zones=us-east-1b \ --networking=weave \ --topology=private \ --name=${KOPS_CLUSTER_NAME} \ --yes
(optional) if you wanted to review & edit the cluster configuration:
kops edit cluster --name ${KOPS_CLUSTER_NAME}
RUN if you’re okay with the configuration run the command with –yes as like below:
kops update cluster --name ${KOPS_CLUSTER_NAME} --yes
Output shows like below..
Cluster is starting. It should be ready in a few minutes. Suggestions: • validate cluster: kops validate cluster • list nodes: kubectl get nodes --show-labels • ssh to the master: ssh -i ~/.ssh/id_rsa admin@api.salesforcedrillers.k8s.local • the admin user is specific to Debian. If not using Debian please use the appropriate user based on your OS. • read about installing addons at: https://github.com/kubernetes/kops/blob/master/docs/addons.md.
To validate the cluster::
kops validate cluster
8. Deploying dashboard feature.
The Dashboard UI is not deployed by default. To deploy it, run the following command:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta8/aio/deploy/recommended.yaml
To access it you need to enable command line proxy.
kubectl proxy
Kubectl will make Dashboard available at.
http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/.
9. To get admin user’s password::
kops get secrets kube --type secret -oplaintext
You will get a password on your screen like this
srlmyMCrxeIWfV6fhdElz1alo7lKWTeg
10. Token generation for admin:
kops get secrets admin --type secret -oplaintext
TO DELETE YOUR CLUSTER
kops delete cluster --name=<cluster-name> --yes
NOTE:- For allowing kubernetes to pull image from your docker private registry you need to provide the credentials path to kubernetes so that it should read the docker config.json other it will show error failed to pull images from your registry, to overcome this issue execute the below command.
kubectl create secret generic regcred \ --from-file=.dockerconfigjson=<path/to/.docker/ config.json> \ --type=kubernetes.io/dockerconfigjson