diff --git a/services/k8s.go b/services/k8s.go
index 7b62c6efa32956d94a9776c24b579ce5777d9eef..2f0d8b4de3923de9c76b6669d86de741aeb981e6 100644
--- a/services/k8s.go
+++ b/services/k8s.go
@@ -8,6 +8,7 @@ import (
 	"github.com/spf13/pflag"
 	"go.acides.org/hepto/utils"
 	core "k8s.io/api/core/v1"
+	meta "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/apiserver/pkg/util/feature"
 	"k8s.io/client-go/dynamic"
 	"k8s.io/client-go/dynamic/dynamicinformer"
@@ -91,6 +92,26 @@ var kubeApiserver = &Unit{
 		}
 		return prepared.Run(ctx.Done())
 	},
+	Ready: func(u *Unit, c *Cluster) bool {
+		u.Logger.Info("checking if apiserver is ready")
+		kc := &rest.Config{
+			Host: fmt.Sprintf("https://[%s]:6443", c.networking.NodeAddress.IP.String()),
+			TLSClientConfig: rest.TLSClientConfig{
+				CAFile:   c.pki.TLS.CertPath(),
+				CertFile: c.masterCerts.SchedulerAPI.CertPath(),
+				KeyFile:  c.masterCerts.SchedulerAPI.KeyPath(),
+			},
+		}
+		client, err := kubernetes.NewForConfig(rest.AddUserAgent(kc, "scheduler"))
+		if err != nil {
+			return false
+		}
+		_, err = client.CoreV1().Nodes().List(context.Background(), meta.ListOptions{})
+		if err != nil {
+			return false
+		}
+		return true
+	},
 }
 
 var kubeControllerManager = &Unit{