# Control plane provisioning failed

**URL:** <https://discuss.kubernetes.io/t/control-plane-provisioning-failed/8323>\
**Category:** General Discussions\
**Created:** [October 14, 2019, 6:27pm UTC](https://discuss.kubernetes.io/t/control-plane-provisioning-failed/8323 "2019-10-14T18:27:46Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![raj.152](https://avatars.discourse-cdn.com/v4/letter/r/b782af/32.png) [@raj.152](https://discuss.kubernetes.io/u/raj.152)\
**Post date:** [October 14, 2019, 6:27pm UTC](https://discuss.kubernetes.io/t/control-plane-provisioning-failed/8323/1 "2019-10-14T18:27:46Z")

</div>

I followed the below procedure for Control plane provision.

## Provision the Kubernetes Control Plane

**Create the Kubernetes configuration directory:**

```auto
sudo mkdir -p /etc/kubernetes/config

```

**### Download and Install the Kubernetes Controller Binaries**

Download the official Kubernetes release binaries:

```auto
wget -q --show-progress --https-only --timestamping \
  "https://storage.googleapis.com/kubernetes-release/release/v1.13.0/bin/linux/amd64/kube-apiserver" \
  "https://storage.googleapis.com/kubernetes-release/release/v1.13.0/bin/linux/amd64/kube-controller-manager" \
  "https://storage.googleapis.com/kubernetes-release/release/v1.13.0/bin/linux/amd64/kube-scheduler" \
  "https://storage.googleapis.com/kubernetes-release/release/v1.13.0/bin/linux/amd64/kubectl"

```

**Install the Kubernetes binaries:**

```auto
{
  chmod +x kube-apiserver kube-controller-manager kube-scheduler kubectl
  sudo mv kube-apiserver kube-controller-manager kube-scheduler kubectl /usr/local/bin/
}

```

### Configure the Kubernetes API Server

```auto
{
  sudo mkdir -p /var/lib/kubernetes/

  sudo cp ca.crt ca.key kube-apiserver.crt kube-apiserver.key \
    service-account.key service-account.crt \
    etcd-server.key etcd-server.crt \
    encryption-config.yaml /var/lib/kubernetes/
}

```

The instance internal IP address will be used to advertise the API Server to members of the cluster. Retrieve the internal IP address for the current compute instance:

```auto
INTERNAL_IP=$(ip addr show enp0s8 | grep "inet " | awk '{print $2}' | cut -d / -f 1)

```

Verify it is set

```auto
echo $INTERNAL_IP

```

**Create the `kube-apiserver.service` systemd unit file:**

```auto
cat <<EOF | sudo tee /etc/systemd/system/kube-apiserver.service
[Unit]
Description=Kubernetes API Server
Documentation=https://github.com/kubernetes/kubernetes

[Service]
ExecStart=/usr/local/bin/kube-apiserver \\
  --advertise-address=${INTERNAL_IP} \\
  --allow-privileged=true \\
  --apiserver-count=3 \\
  --audit-log-maxage=30 \\
  --audit-log-maxbackup=3 \\
  --audit-log-maxsize=100 \\
  --audit-log-path=/var/log/audit.log \\
  --authorization-mode=Node,RBAC \\
  --bind-address=0.0.0.0 \\
  --client-ca-file=/var/lib/kubernetes/ca.crt \\
  --enable-admission-plugins=NodeRestriction,ServiceAccount \\
  --enable-swagger-ui=true \\
  --enable-bootstrap-token-auth=true \\
  --etcd-cafile=/var/lib/kubernetes/ca.crt \\
  --etcd-certfile=/var/lib/kubernetes/etcd-server.crt \\
  --etcd-keyfile=/var/lib/kubernetes/etcd-server.key \\
  --etcd-servers=https://192.168.5.11:2379,https://192.168.5.12:2379 \\
  --event-ttl=1h \\
  --encryption-provider-config=/var/lib/kubernetes/encryption-config.yaml \\
  --kubelet-certificate-authority=/var/lib/kubernetes/ca.crt \\
  --kubelet-client-certificate=/var/lib/kubernetes/kube-apiserver.crt \\
  --kubelet-client-key=/var/lib/kubernetes/kube-apiserver.key \\
  --kubelet-https=true \\
  --runtime-config=api/all \\
  --service-account-key-file=/var/lib/kubernetes/service-account.crt \\
  --service-cluster-ip-range=10.96.0.0/24 \\
  --service-node-port-range=30000-32767 \\
  --tls-cert-file=/var/lib/kubernetes/kube-apiserver.crt \\
  --tls-private-key-file=/var/lib/kubernetes/kube-apiserver.key \\
  --v=2
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

```

### **The kube-controller-manager Kubernetes Configuration File**

Generate a kubeconfig file for the `kube-controller-manager` service:

```auto
{
  kubectl config set-cluster kubernetes-the-hard-way \
    --certificate-authority=ca.crt \
    --embed-certs=true \
    --server=https://127.0.0.1:6443 \
    --kubeconfig=kube-controller-manager.kubeconfig

  kubectl config set-credentials system:kube-controller-manager \
    --client-certificate=kube-controller-manager.crt \
    --client-key=kube-controller-manager.key \
    --embed-certs=true \
    --kubeconfig=kube-controller-manager.kubeconfig

  kubectl config set-context default \
    --cluster=kubernetes-the-hard-way \
    --user=system:kube-controller-manager \
    --kubeconfig=kube-controller-manager.kubeconfig

  kubectl config use-context default --kubeconfig=kube-controller-manager.kubeconfig
}

```

Results:

```auto
kube-controller-manager.kubeconfig

```

### **The kube-scheduler Kubernetes Configuration File**

Generate a kubeconfig file for the `kube-scheduler` service:

```auto
{
  kubectl config set-cluster kubernetes-the-hard-way \
    --certificate-authority=ca.crt \
    --embed-certs=true \
    --server=https://127.0.0.1:6443 \
    --kubeconfig=kube-scheduler.kubeconfig

  kubectl config set-credentials system:kube-scheduler \
    --client-certificate=kube-scheduler.crt \
    --client-key=kube-scheduler.key \
    --embed-certs=true \
    --kubeconfig=kube-scheduler.kubeconfig

  kubectl config set-context default \
    --cluster=kubernetes-the-hard-way \
    --user=system:kube-scheduler \
    --kubeconfig=kube-scheduler.kubeconfig

  kubectl config use-context default --kubeconfig=kube-scheduler.kubeconfig
}

```

**### Configure the Kubernetes Controller Manager**

Move the `kube-controller-manager` kubeconfig into place:

```auto
sudo mv kube-controller-manager.kubeconfig /var/lib/kubernetes/

```

**Create the `kube-controller-manager.service` systemd unit file** :

```auto
cat <<EOF | sudo tee /etc/systemd/system/kube-controller-manager.service
[Unit]
Description=Kubernetes Controller Manager
Documentation=https://github.com/kubernetes/kubernetes

[Service]
ExecStart=/usr/local/bin/kube-controller-manager \\
  --address=0.0.0.0 \\
  --cluster-cidr=192.168.5.0/24 \\
  --cluster-name=kubernetes \\
  --cluster-signing-cert-file=/var/lib/kubernetes/ca.crt \\
  --cluster-signing-key-file=/var/lib/kubernetes/ca.key \\
  --kubeconfig=/var/lib/kubernetes/kube-controller-manager.kubeconfig \\
  --leader-elect=true \\
  --root-ca-file=/var/lib/kubernetes/ca.crt \\
  --service-account-private-key-file=/var/lib/kubernetes/service-account.key \\
  --service-cluster-ip-range=10.96.0.0/24 \\
  --use-service-account-credentials=true \\
  --v=2
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

```

**### Configure the Kubernetes Scheduler**

Move the `kube-scheduler` kubeconfig into place:

```auto
sudo mv kube-scheduler.kubeconfig /var/lib/kubernetes/

```

**Create the `kube-scheduler.service` systemd unit file:**

```auto
cat <<EOF | sudo tee /etc/systemd/system/kube-scheduler.service
[Unit]
Description=Kubernetes Scheduler
Documentation=https://github.com/kubernetes/kubernetes

[Service]
ExecStart=/usr/local/bin/kube-scheduler \\
  --kubeconfig=/var/lib/kubernetes/kube-scheduler.kubeconfig \\
  --address=127.0.0.1 \\
  --leader-elect=true \\
  --v=2
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

```

### Start the Controller Services

```auto
{
  sudo systemctl daemon-reload
  sudo systemctl enable kube-apiserver kube-controller-manager kube-scheduler
  sudo systemctl start kube-apiserver kube-controller-manager kube-scheduler
}

```

### Verification

kubectl get componentstatuses --kubeconfig admin.kubeconfig

But this is giving the statuses UNKNOWN, not sure where did it go wrong. As far as I know I followed all the steps without fail, but the API server is not coming up.

---

<div class="post-metadata">

**Author:** ![riking](https://sea2.discourse-cdn.com/flex016/user_avatar/discuss.kubernetes.io/riking/32/3661_2.png) [@riking](https://discuss.kubernetes.io/u/riking)\
**Post date:** [October 15, 2019, 9:49pm UTC](https://discuss.kubernetes.io/t/control-plane-provisioning-failed/8323/3 "2019-10-15T21:49:10Z")

</div>

You may want to keep all your support threads on the same project linked together.

[https://discuss.kubernetes.io/t/broken-cluster/8319/7](https://discuss.kubernetes.io/t/broken-cluster/8319/7)
