Reputation: 386
I have a hosted VPS and I would like to use this machine as a single node Kubernetes test environment. Is it possible to create a single-node Kubernetes cluster on the VPS, deploy pods to it using, for example, GitLab and test the application from outside the machine? I would like to locally develop, push to git and then deploy on this testing/staging environment.
Thank you
Upvotes: 2
Views: 1889
Reputation: 9877
Answering the part of whole question:
I have a hosted VPS and I would like to use this machine as a single node kubernetes test environment.
A good starting point could be to cite the parts of my own answer from Serverfault:
There are a lot of options to choose from. Each solution will have it's advantages and disadvantages. It will also depend on the operating system your VM is deployed with.
Some of the options are the following:
- MicroK8S - as pointed by user @Sekru
- Minikube
- Kind
- Kubeadm
- Kubespray
- Kelsey Hightower: Kubernetes the hard way
Each of the solutions linked above have a link to it's respective homepage. You can find there installation steps/tips. Each solution is different and I encourage you to check if selected option suits your needs.
You'll need to review the networking part of each of above solutions as some of them will have easier/more difficult process to expose your workload outside of the environment (make it accessible from the Internet).
It all boils down to what are your requirements/expectations and what are the requirements for each of the solutions.
I do agree with an answer provided by community member @Sekru but I also think it could be beneficiary to add an example for such setup. Assuming that you have a microk8s
compatible OS:
sudo snap install microk8s --classic
sudo microk8s enable ingress
sudo microk8s kubectl create deployment nginx --image=nginx
sudo microk8s kubectl expose deployment nginx --port=80 --type=NodePort
sudo microk8s kubectl apply -f ingress.yaml
where ingress.yaml
is a file with following content:apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: minimal-ingress
spec:
ingressClassName: public # <-- IMPORTANT
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx
port:
number: 80
After above steps you should be able to contact your Deployment
from the place outside of your host by:
curl http://IP-ADDRESS
Side notes!
- A setup like that will allow expose your workload on a
NodePort
(allocated port on each node from30000
to32767
).- From the security perspective I would consider using your
VPS
provider firewalls to limit the traffic coming to your instance to allow only subnets that you are connecting from.
From the perspective of Gitlab integration with Kubernetes, I'd reckon you could find useful information by following it's page:
Additional resources about Kubernetes:
Upvotes: 2