How Do I Use heapster in Clusters of v1.13.10?

After a cluster of v1.13.10 is created, you can use heapster only after rbac is enabled.

Procedure

  1. Connect to the cluster on which you need to use heapster.

  2. Delete the existing heapster cluster role.

    kubectl delete clusterrole system:heapster

  3. Create a heapster cluster role.

    Copy the following file to a server on which kubectl is supported, and name the file to heapster-cluster-role.yaml.

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      annotations:
        rbac.authorization.kubernetes.io/autoupdate: "true"
      labels:
        kubernetes.io/bootstrapping: rbac-defaults
      name: system:heapster
    rules:
    - apiGroups:
      - ""
      resources:
      - events
      - namespaces
      - nodes
      - pods
      - nodes/stats
      verbs:
      - create
      - get
      - list
      - watch
    - apiGroups:
      - extensions
      resources:
      - deployments
      verbs:
      - get
      - list
      - update
      - watch
    

    Run the following command to create a heapster cluster role.

    kubectl create -f heapster-cluster-role.yaml

  4. Create a heapster service account.

    Copy the following file to a server on which kubectl is supported, and name the file to heapster-serviceaccount.yaml.

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: heapster
      namespace: kube-system
    

    Run the following command to create a heapster service account.

    kubectl create -f heapster-serviceaccount.yaml

  5. Create a heapster cluster role binding.

    Copy the following file to a server on which kubectl is supported, and name the file to heapster-cluster-rolebinding.yaml.

    kind: ClusterRoleBinding
    apiVersion: rbac.authorization.k8s.io/v1beta1
    metadata:
      name: heapster
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: system:heapster
    subjects:
    - kind: ServiceAccount
      name: heapster
      namespace: kube-system
    

    Run the following command to create a heapster cluster role binding.

    kubectl create -f heapster-cluster-rolebinding.yaml

  6. Re-create the heapster deployment.

    Copy the following file to a server on which kubectl is supported, and name the file to heapster-apiserver.yaml.

    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      annotations:
        deployment.kubernetes.io/revision: "1"
      generation: 1
      labels:
        k8s-app: heapster
        module: apiserver
        version: v6
      name: heapster-apiserver
      namespace: kube-system
    spec:
      progressDeadlineSeconds: 2147483647
      replicas: 1
      revisionHistoryLimit: 2147483647
      selector:
        matchLabels:
          k8s-app: heapster
          module: apiserver
          version: v6
      strategy:
        rollingUpdate:
          maxSurge: 1
          maxUnavailable: 1
        type: RollingUpdate
      template:
        metadata:
          creationTimestamp: null
          labels:
            k8s-app: heapster
            module: apiserver
            version: v6
          name: heapster
        spec:
          containers:
          - command:
            - /heapster
            - --source=kubernetes.summary_api:''?useServiceAccount=true&kubeletPort=10250&kubeletHttps=true&insecure=true&auth=/srv/config
            - --api-server
            - --secure-port=6443
            image: k8s.gcr.io/heapster-amd64:v1.5.3
            imagePullPolicy: IfNotPresent
            name: heapster
            ports:
            - containerPort: 6443
              name: https
              protocol: TCP
            - containerPort: 8080
              name: http
              protocol: TCP
            resources: {}
            securityContext:
              runAsUser: 0
            terminationMessagePath: /dev/termination-log
            terminationMessagePolicy: File
            volumeMounts:
            - mountPath: /root/.kube
              name: config
            - mountPath: /srv/config
              name: heapster
              subPath: config
          dnsPolicy: ClusterFirst
          restartPolicy: Always
          schedulerName: default-scheduler
          securityContext: {}
          serviceAccount: heapster
          serviceAccountName: heapster
          terminationGracePeriodSeconds: 30
          volumes:
          - hostPath:
              path: /root/.kube
              type: ""
            name: config
          - configMap:
              defaultMode: 420
              items:
              - key: config
                path: config
              name: heapster
            name: heapster
    

    Run the following commands to re-create the heapster deployment.

    kubectl delete -f heapster-apiserver.yaml

    kubectl create -f heapster-apiserver.yaml

  7. Check whether heapster is enabled.

    kubectl top nodes

    heapster is enabled when statistics are displayed in the command output.