You can create a deployment by defining a manifest file in the YAML format. The manifest file defines a cluster’s desired state, like which container images to run.
To create all the necessary pods, ingress, and services for running a PowerBuilder installable cloud app, you will need the following manifest files:
-
deployment-pscloudapp.yml: This file defines a deployment of the pod that runs the client app.
-
deployment-pswebapi.yml: This file defines a deployment of the pod that runs the PowerServer Web APIs.
-
ingress-pscloudapp-appeon.com.yml: This file defines an ingress that sends the HTTP/HTTPS requests of the client app to the service.
-
ingress-pswebapi-appeon.com.yml: This file defines an ingress that sends the HTTP/HTTPS requests of the PowerServer Web APIs to the service.
-
service-pscloudapp.yml: This file exposes the pod running the client app as a Kubernetes service.
-
service-pswebapi.yml: This file exposes the pod running the PowerServer Web APIs as a Kubernetes service.
-
secret-env-connectstrings.yml: This file defines a secret that contains the sensitive data, environment variables etc. that can be used by the deployments.
You can use Visual Studio Code or a text editor to create and edit the YAML file.
The following sample files only provide the minimal required settings; you can modify the files according to your needs. You can change the file name as you like but keep the file extension as yaml or yml.
Create a manifest file named
deployment-pscloudapp.yml
and copy in the following
example YAML:
-
It defines a pod named
deployment-pscloudapp.
-
The pod runs the container of the client app and it pulls the container image from the Azure container registry:
pscloudapp.azurecr.io/powerservercloudapp:001.
apiVersion: apps/v1 kind: Deployment metadata: name: deployment-pscloudapp spec: selector: matchLabels: app: pscloudapp template: metadata: labels: app: pscloudapp spec: containers: - name: pscloudapp image: pscloudapp.azurecr.io/powerservercloudapp:001 resources: limits: memory: "128Mi" cpu: "500m" ports: - containerPort: 80
Create a manifest file named
deployment-pswebapi.yml
and copy in the following
example YAML:
-
It defines a pod named
deployment-pswebapi.
-
The pod runs the container for the PowerServer Web APIs and it pulls the container image from the Azure container registry:
pscloudapp.azurecr.io/powerserverwebapi:001.
-
It uses the PowerServer license key and code from the secret
secret-env-connectionstrings
.
apiVersion: apps/v1 kind: Deployment metadata: name: deployment-pswebapi spec: replicas: 3 selector: matchLabels: app: pswebapi template: metadata: labels: app: pswebapi spec: containers: - name: pswebapi image: pscloudapp.azurecr.io/powerserverwebapi:001 resources: limits: memory: "128Mi" cpu: "500m" ports: - containerPort: 9005 env: - name: PowerServer__LicenseKey valueFrom: secretKeyRef: key: PowerServer__LicenseKey name: secret-env-connectionstrings - name: PowerServer__LicenseCode valueFrom: secretKeyRef: key: PowerServer__LicenseCode name: secret-env-connectionstrings
Create a manifest file named
ingress-pscloudapp-appeon.com.yml
and copy in the
following example YAML:
-
It defines an ingress named
ingress-pscloudapp-appeon.com
and a list of rules that match against the incoming requests and route the requests to the service.In the following example, requests to the host
pbexam.appeon.com
is routed to the service namedservice-pscloudapp
(listening on port 80).
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-pscloudapp-appeon.com labels: name: ingress-pscloudapp-appeon.com annotations: kubernetes.io/ingress.class: nginx spec: rules: - host: pbexam.appeon.com http: paths: - pathType: Prefix path: "/" backend: service: name: service-pscloudapp port: number: 80
Create a manifest file named
ingress-pswebapi-appeon.com.yml
and copy in the
following example YAML:
-
It defines an ingress named
ingress-pswebapi-appeon.com
and a list of rules that match against the incoming requests and route the requests to the service.In the following example, requests to the host
demok8s.appeon.com
is routed to the service namedservice-pswebapi
(listening on port 9005). -
The port must be the same one that you specified in the PowerServer project settings > .NET Server page > Web API URL in the PowerBuilder IDE (in this tutorial, 9005).
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-pswebapi-appeon.com labels: name: ingress-pswebapi-appeon.com annotations: kubernetes.io/ingress.class: nginx spec: rules: - host: demok8s.appeon.com http: paths: - pathType: Prefix path: "/" backend: service: name: service-pswebapi port: number: 9005
Create a manifest file named
service-pscloudapp.yml
and copy in the following
example YAML:
-
It exposes the pod running the client app as a service so that it can be accessible from the public internet.
apiVersion: v1 kind: Service metadata: name: service-pscloudapp spec: selector: app: pscloudapp ports: - port: 80 targetPort: 80
Create a manifest file named
service-pswebapi.yml
and copy in the following
example YAML:
-
It exposes the pod running the PowerServer Web APIs as a service so that it can be accessible from the public internet.
apiVersion: v1 kind: Service metadata: name: service-pswebapi spec: selector: app: pswebapi ports: - port: 9005 targetPort: 9005
Create a manifest file named
secret-env-connectstrings.yml
and copy in the
following example YAML:
-
It defines the environment variables for the PowerServer license key and code, which makes it possible for you to update the PowerServer license key and code whenever necessary.
apiVersion: v1 stringData: PowerServer__LicenseKey: $YOURLICENSEKEY PowerServer__LicenseCode: $YOURLICENSECODE kind: Secret metadata: name: secret-env-connectionstrings namespace: default type: Opaque