Updated: 03 September 2023
Deploy a Kubernetes App on ICP
You can do any of the following
- Install on your Machine (or on a VM)
- Reserve a VM on BlueDemos
- ICP Hosted Trial on BlueDemos
- Reserve a Hosted Trial
Deploy a an App to the Cluster
We can use kubectl
to deploy an application to ICP
Configure kubectl
We can use the configuration code from ICP as follows
1kubectl config set-cluster cluster.local --server=https://10.0.0.1:8001 --insecure-skip-tls-verify=true2kubectl config set-context cluster.local-context --cluster=cluster.local3kubectl config set-credentials admin --token=<YOUR TOKEN>kubectl config set-context cluster.local-context --user=admin --namespace=cert-manager4kubectl config use-context cluster.local-context
Deploy the Application
DeveloperWorks Article on Doing this
Then we need to get our deployment manifest file and run the deploy command, we will need the following
- Deployment manifest
- Service manifest
- Ingress manifest
We need the service to expose our app on a port, and an ingress rule to expose that externally
deployment.yaml
1apiVersion: extensions/v1beta12kind: Deployment3metadata:4 name: express-basic5spec:6 replicas: 17 template:8 metadata:9 labels:10 app: express-basic11 version: v212 spec:13 containers:14 - image: nabeelvalley/express-basic15 name: express-basic16 ports:17 - containerPort: 8080
service.yaml
1apiVersion: v12kind: Service3metadata:4 name: express-basic5 labels:6 app: express-basic7 version: v28spec:9 ports:10 - port: 808011 name: http12 selector:13 app: express-basic14 version: v2
ingress.yaml
1apiVersion: extensions/v1beta12kind: Ingress3metadata:4 name: express-basic-ingress5spec:6 rules:7 - http:8 paths:9 - path: /10 backend:11 serviceName: express-basic12 servicePort: 808013 - path: /test14 backend:15 serviceName: express-basic16 servicePort: 8080
We can then deploy these resource definitions on our cluster with
1kubectl apply -f deployment.yaml2kubectl apply -f service.yaml3kubectl apply -f ingress.yaml
Alternatively we can include all three in a single file and apply it as follows
deploy.yaml
1apiVersion: v12kind: Service3metadata:4 name: express-basic5 labels:6 app: express-basic7 version: v28spec:9 ports:10 - port: 808011 name: http12 selector:13 app: express-basic14 version: v215
16---17apiVersion: extensions/v1beta118kind: Deployment19metadata:20 name: express-basic21spec:22 replicas: 123 template:24 metadata:25 labels:26 app: express-basic27 version: v228 spec:29 containers:30 - image: nabeelvalley/express-basic31 name: express-basic32 ports:33 - containerPort: 808034---35apiVersion: extensions/v1beta136kind: Ingress37metadata:38 name: express-basic-ingress39spec:40 rules:41 - http:42 paths:43 - path: /44 backend:45 serviceName: express-basic46 servicePort: 808047 - path: /test48 backend:49 serviceName: express-basic50 servicePort: 808051---
1kubectl apply -f deploy.yaml