не нашел документации по нему. Подозреваю, что это как-то связано с nodeInfo кешем и используется kubelet'ом.
Собственно чего спрашиваю, после обновления на 1.11 появилась проблема с kube-scheduler'ом, срабатывает PodFitsHostPorts predicate (FailedScheduling didn't have free ports) при обновлении deployment'а часть подов не скедулится на ноды и висят бесконечное количество времени в статусе Pending пока не ребутнешь kube-scheduler. Собрал свой скедулер, чтобы он выводил дебаг инфо по функции PodFitsHostPorts, вот так:
func PodFitsHostPorts(pod *v1.Pod, meta algorithm.PredicateMetadata, nodeInfo *schedulercache.NodeInfo) (bool, []algorithm.PredicateFailureReason, error) {
var wantPorts []*v1.ContainerPort
if predicateMeta, ok := meta.(*predicateMetadata); ok {
wantPorts = predicateMeta.podPorts
} else {
// We couldn't parse metadata - fallback to computing it.
wantPorts = schedutil.GetContainerPorts(pod)
}
if len(wantPorts) == 0 {
return true, nil, nil
}
existingPorts := nodeInfo.UsedPorts()
// try to see whether existingPorts and wantPorts will conflict or not
if portsConflict(existingPorts, wantPorts) {
fmt.Printf(" nodeInfo: %+v ================ existingPorts: %+v ================ wantPorts: %+v ================ podName: %+v\n\n======================\n\n", nodeInfo.Node().Name, existingPorts["0.0.0.0"], wantPorts, pod.Name)
return false, []algorithm.PredicateFailureReason{ErrPodNotFitsHostPorts}, nil
}
return true, nil, nil
}
Если portsConflict то выводит значения existingPorts на ноде и wantPorts контейнера. Так вот existingPorts выводит закешированые значения, порты давно не слушаются, а он говорит что слушаются. Если поменять версию скедулера на v1.10.5 такой проблемы не возникает.
Kubernetes 1.11.0, calico 3.1 (ibgp full mesh), containerd 1.1.2, ~100 нод в кластере
Мой issuse https://github.com/kubernetes/kubernetes/issues/66568
Может кто-то сталкивался с такой проблемой?
https://github.com/kubernetes/kubernetes/blob/b6f75ac30e863531ac73cfd02a0edd57983cc5c0/staging/src/k8s.io/api/core/v1/annotation_key_constants.go#L59-L62
Обсуждают сегодня