Minikube + Cloud Code + VSCode
As a developer, you can deploy your Docker containers to a local Kubernetes cluster on your laptop using minikube. You can then use the Google Cloud Code extension for Visual Studio Code.
You can then make real time changes to your code and the app will deploy in the background automatically.
- Install kubectl – https://kubernetes.io/docs/tasks/tools/install-kubectl/
- Install minikube – https://kubernetes.io/docs/tasks/tools/install-minikube/
- For Windows users, I recommend the Chocolaty approach
- Configure Google Cloud Code to use minikube.
- Deploy your application to your local minikube cluster in Visual Studio Code
- Ensure you add your container registry in the .vscode\launch.json file – See Appendix
Also, ensure you are running Visual Studio Code as an Administrator.
Once deployed, you can make changes to your code, and it will automatically be deployed to the cluster.
Create a minikube Cluster in Windows (Hyper-V) and Deploy a Simple Web Server
x
minikube start --vm-driver=hyperv
kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.10
kubectl expose deployment hello-minikube --type=NodePort --port=8080
kubectl get pod
minikube service hello-minikube --url
minikube dashboard
Grab the output from the minikube hello-minikube –url
and browse your web app/service.
Appendix
Starting the minikube Cluster and Deploying a Default Container
VS Code Deployment
- Setup your Container Registry in the
.vscode\launch.json
(detailed below) - Click Cloud Code on the bottom tray
- Click "Run on Kubernetes "
- Open a separate command prompt as administrator
.vscode\launch.json:
x
{
"version": "0.2.0",
"configurations": [
{
"name": "Run on Kubernetes",
"type": "cloudcode.kubernetes",
"request": "launch",
"skaffoldConfig": "${workspaceFolder}\\skaffold.yaml",
"watch": true,
"cleanUp": true,
"portForward": true,
"imageRegistry": "romikocontainerregistry/minikube"
},
{
"podSelector": {
"app": "node-hello-world"
},
"type": "cloudcode",
"language": "Node",
"request": "attach",
"debugPort": 9229,
"localRoot": "${workspaceFolder}",
"remoteRoot": "/hello-world",
"name": "Debug on Kubernetes"
}
]
}
xxxxxxxxxx
minikube dashboard
We can see our new service is being deployed by VSCode Cloud Code extension. Whenever we make changes to the code, it will automatically deploy.
x
minikube service nodejs-hello-world-external --url
The above command will give us the URL to browse the web app.
If I now change the text for "Hello, world!" it will automatically deploy. Just refresh the browser.
Here in the status bar, we can see deployments as we update code.
Debugging
Once you have deployed your app to minikube, you can then kick off debugging. This is pretty awesome. Basically, your development environment is now a full Kubernetes stack with attached debugging proving a seamless experience.
Check out https://cloud.google.com/code/docs/vscode/debug#nodejs for more information.
You will notice that in the launch.json file, we set up the debugger port, etc. Below, I am using port 9229. So all I need to do is start the app with:
x
CMD [“node”, “–inspect=9229”, “app.js”]
Or, in the launch.json file, I can set set "args": ["-inspect=9229"]
. This is only supported in launch request type.
Also, ensure the Pod Selector is correct. You can use the pod name or label. You can confirm the pod name using the minikube dashboard.
http://127.0.0.1:61668/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/#/pod?namespace=defaultx
{
"version": "0.2.0",
"configurations": [
{
"name": "Run on Kubernetes",
"type": "cloudcode.kubernetes",
"request": "launch",
"skaffoldConfig": "${workspaceFolder}\\skaffold.yaml",
"watch": true,
"cleanUp": true,
"portForward": true,
"imageRegistry": "dccausbcontainerregistry/minikube",
"args": ["--inspect=9229"]
},
{
"name": "Debug on Kubernetes",
"podSelector": {
"app": "nodejs-hello-world"
},
"type": "cloudcode",
"language": "Node",
"request": "attach",
"debugPort": 9229,
"localRoot": "${workspaceFolder}",
"remoteRoot": "/hello-world"
}
]
}
Now we can do the following
- Click Run on Kubernetes
- Set a Break Point
- Click Debug on Kubernetes
Tips
- Run the command prompt, PowerShell and VSCode as Administrator
- Use Choco for Windows installs
- If you are going to reboot/sleep/shut down your machine. Please run:
xxxxxxxxxx
minikube stop
If you do not, you risk corrupting Hyper-V and you will get all sorts of issues.
Further Reading
Microservices With Kubernetes and Docker