What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more

Step 08 of Kubernetes the Hard Way brings up the control plane on the controller machine: the API server, controller manager, and scheduler. It also configures permissions for the API server to access worker kubelet APIs. The Kubernetes project describes the API server as “the front end for the Kubernetes control plane”; the other two components schedule unassigned pods and reconcile cluster state.

What the three control-plane components do

kube-apiserver: the Kubernetes API front end

The API server exposes the Kubernetes API through which clients and cluster components interact with the control plane. In the documented architecture, the Kubernetes project calls it “the front end for the Kubernetes control plane.” etcd is the consistent, highly available key-value backing store for Kubernetes cluster data; it is distinct from the API server. A real cluster that uses etcd needs a backup plan for that data.

kube-scheduler: choosing a node for a pod

The scheduler watches for newly created pods that do not yet have an assigned node. It selects a node while taking the pod’s resource requirements and scheduling constraints into account. Scheduling is placement selection; it is not the same responsibility as handling API operations.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

kube-controller-manager: reconciling cluster state

The controller manager runs multiple controller processes compiled into one binary. These controllers are control loops that work to bring observed state closer to the desired state. For example, the node controller responds to nodes going down, while the job controller creates pods for Job objects.

What Step 08 sets up

The Kubernetes the Hard Way Step 08 guide installs the controller binaries and kubectl, provisions configuration and credentials, creates systemd service units, starts the services, and checks that the control plane responds. Its filesystem paths and commands describe that guide’s layout; they are not a universal Kubernetes deployment standard.

  • Controller binaries and kubectl go in /usr/local/bin.
  • API-server certificates and encryption configuration go under /var/lib/kubernetes.
  • Controller-manager and scheduler kubeconfig files are installed for their respective services.
  • Scheduler configuration is placed under /etc/kubernetes/config.
  • Systemd unit files define the services; systemd is then reloaded before the services are enabled and started.

How the API server gets worker kubelet access

The guide applies a ClusterRole and binding from kube-apiserver-to-kubelet.yaml. This RBAC setup authorizes the API server to access worker kubelet APIs for operations such as retrieving metrics and logs and executing commands in pods. The guide configures kubelet webhook authorization, which uses SubjectAccessReview requests to make authorization decisions. Kubernetes documents the role and binding model in its RBAC authorization reference.

Start and verify the services

After installing the files, the guide reloads systemd, enables and starts the API server, controller manager, and scheduler, and checks their service state. It then verifies the control plane with kubectl cluster-info --kubeconfig admin.kubeconfig. A service being active is useful, but an API request is a separate check that confirms the endpoint responds.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

The guide also tests the API endpoint over TLS using the cluster CA certificate:

curl --cacert ca.crt https://server.kubernetes.local:6443/version

The guide’s sample response reports Kubernetes v1.32.3, build date 2025-03-11, and platform linux/arm64. Those are metadata from that example response, not a claim about the latest Kubernetes release.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Troubleshoot an API server bind error on port 6443

In a lab note published on 2026-09-23, Luger Lex Pit-og reported that kube-apiserver repeatedly restarted after failing to bind 0.0.0.0:6443. The listener inspection identified k3s-server as already holding the port. The author had previously tried k3s on that same machine; stopping and disabling the leftover service resolved the conflict in that lab. This is one reported cause, not a universal explanation for API-server startup failures.

  1. Inspect the service state with systemctl status kube-apiserver.
  2. Read the service journal for the specific error with journalctl -u kube-apiserver.
  3. If the error reports an address or port already in use, inspect which process owns the listener on that port using the tools available on your system.
  4. Determine whether the listening service is intentional before stopping or disabling it. If it is a leftover service and you are sure it is not needed, stop it, disable it as appropriate for your setup, and check the API-server service again.

This sequence separates the observed failure from its cause: use the journal to identify a bind error, then inspect the actual listener rather than assuming another Kubernetes distribution is responsible.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.