I found answer for myself, but I'm not sure whether it is correct or not.
In projectcaclico/node/cmd/calico-node/main.go Line 98, there are commands about checking liveness and readiness.
if *felixLive || *birdReady || *bird6Ready || *felixReady || *birdLive || *bird6Live {
health.Run(*birdReady, *bird6Ready, *felixReady, *felixLive, *birdLive, *bird6Live, *thresholdTime)
os.Exit(0)
}
and then I looked into Run() function. In there, I found code about felixReady.
if felixReady {
g.Go(func() error {
if err := checkFelixHealth(ctx, felixReadinessEp, "readiness"); err != nil {
return fmt.Errorf("calico/node is not ready: felix is not ready: %+v", err)
}
return nil
})
}
As you can see, it returns nil when there is no problem. That's why I think that no returning means felix is ready.