Kubernetes Autostopping
This tutorial explains how to create and test an AutoStopping rule for your Kubernetes cluster.
Install a sample application
To test AutoStopping, you can use a sample nginx application.
To install this sample application, apply the following YAML in your Kubernetes cluster. This installs a demo application named autostopping-sample-app that runs three pods running nginx in the autostopping-sample namespace.
apiVersion: v1
kind: Namespace
metadata:
  name: autostopping-sample
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: autostopping-sample-app
  namespace: autostopping-sample
  labels:
    app: autostopping-sample-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: autostopping-sample-app
  template:
    metadata:
      labels:
        app: autostopping-sample-app
    spec:
      containers:
      - name: autostopping-sample-app
        image: nginx:1.14.2
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: autostopping-sample-svc
  namespace: autostopping-sample
spec:
  selector:
    app: autostopping-sample-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
Supported ingress controllers for Kubernetes AutoStopping
Kubernetes AutoStopping support is fully available for the following ingress controllers and API gateways:
- Nginx
- Istio
- Traefik
- Ambassador
- HAProxy
- Kubernetes AutoStopping for Nginx
- Kubernetes AutoStopping for Istio
- You will need the following options set on your NGINX Ingress Controller:
allow-snippet-annotations: true
annotations-risk-level: Critical
- Expose your application by creating an ingress rule. Apply the following YAML to the cluster.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: autostopping-sample-ig
  namespace: autostopping-sample
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx
  rules:
  - http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: autostopping-sample-svc
            port:
              number: 80
- Create an AutoStopping Rule. Before applying this YAML, make sure that the cloud-connector-idis updated and the namespace of the Rule is the same as theautostopping-sample-appapplication.
apiVersion: ccm.harness.io/v1
kind: AutoStoppingRule
metadata:
  name: autostopping-sample-rule
  namespace: autostopping-sample
  annotations:
      harness.io/cloud-connector-id: Lightwing_Non_Prod
spec:
    service:
        name: autostopping-sample-svc
        port: 80
    ingress:
        name: autostopping-sample-ig
        controllerName: nginx
    idleTimeMins: 5
    ahideProgressPage: false
Your sample application is now managed by an AutoStopping Rule called autostopping-sample-ru.
- Expose your application by creating an ingress rule.
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: httpbin
  namespace: autostopping-sample
spec:
  gateways:
  - http-gateway
  http:
  - match:
    - uri:
        prefix: /autostopping-test
    route:
    - destination:
        port:
          number: 80
        host: autostopping-sample-svc
- Create an AutoStopping Rule. Before applying this YAML, make sure that the cloud-connector-idis updated and the namespace of the Rule is the same as theautostopping-sample-appapplication.
apiVersion: ccm.harness.io/v1
kind: AutoStoppingRule
metadata:
    name: autostopping-sample-rule
    namespace: autostopping-sample
    annotations:
        harness.io/cloud-connector-id: [CloudConnectorID]
spec:
    service:
        name: autostopping-sample-svc
        port: 80
    istio:
        virtualServices:
          - httpbin
    idleTimeMins: 5
    hideProgressPage: false
Your sample application is now managed by an AutoStopping Rule called autostopping-sample-rule.