mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-29 06:27:05 +00:00
Merge pull request #19942 from yujuhong/mirror_creation
Auto commit by PR queue bot
This commit is contained in:
commit
126f798699
@ -1641,24 +1641,22 @@ func (kl *Kubelet) syncPod(pod *api.Pod, mirrorPod *api.Pod, runningPod kubecont
|
|||||||
// Create Mirror Pod for Static Pod if it doesn't already exist
|
// Create Mirror Pod for Static Pod if it doesn't already exist
|
||||||
if kubepod.IsStaticPod(pod) {
|
if kubepod.IsStaticPod(pod) {
|
||||||
podFullName := kubecontainer.GetPodFullName(pod)
|
podFullName := kubecontainer.GetPodFullName(pod)
|
||||||
|
deleted := false
|
||||||
if mirrorPod != nil && !kl.podManager.IsMirrorPodOf(mirrorPod, pod) {
|
if mirrorPod != nil && !kl.podManager.IsMirrorPodOf(mirrorPod, pod) {
|
||||||
// The mirror pod is semantically different from the static pod. Remove
|
// The mirror pod is semantically different from the static pod. Remove
|
||||||
// it. The mirror pod will get recreated later.
|
// it. The mirror pod will get recreated later.
|
||||||
glog.Errorf("Deleting mirror pod %q because it is outdated", format.Pod(mirrorPod))
|
glog.Errorf("Deleting mirror pod %q because it is outdated", format.Pod(mirrorPod))
|
||||||
if err := kl.podManager.DeleteMirrorPod(podFullName); err != nil {
|
if err := kl.podManager.DeleteMirrorPod(podFullName); err != nil {
|
||||||
glog.Errorf("Failed deleting mirror pod %q: %v", format.Pod(mirrorPod), err)
|
glog.Errorf("Failed deleting mirror pod %q: %v", format.Pod(mirrorPod), err)
|
||||||
|
} else {
|
||||||
|
deleted = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if mirrorPod == nil {
|
if mirrorPod == nil || deleted {
|
||||||
glog.V(3).Infof("Creating a mirror pod for static pod %q", format.Pod(pod))
|
glog.V(3).Infof("Creating a mirror pod for static pod %q", format.Pod(pod))
|
||||||
if err := kl.podManager.CreateMirrorPod(pod); err != nil {
|
if err := kl.podManager.CreateMirrorPod(pod); err != nil {
|
||||||
glog.Errorf("Failed creating a mirror pod for %q: %v", format.Pod(pod), err)
|
glog.Errorf("Failed creating a mirror pod for %q: %v", format.Pod(pod), err)
|
||||||
}
|
}
|
||||||
|
|
||||||
_, ok := kl.podManager.GetMirrorPodByPod(pod)
|
|
||||||
if !ok {
|
|
||||||
glog.Errorf("Mirror pod not available")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3454,8 +3454,8 @@ func TestDeleteOutdatedMirrorPod(t *testing.T) {
|
|||||||
}
|
}
|
||||||
name := kubecontainer.GetPodFullName(pod)
|
name := kubecontainer.GetPodFullName(pod)
|
||||||
creates, deletes := manager.GetCounts(name)
|
creates, deletes := manager.GetCounts(name)
|
||||||
if creates != 0 || deletes != 1 {
|
if creates != 1 || deletes != 1 {
|
||||||
t.Errorf("expected 0 creation and 1 deletion of %q, got %d, %d", name, creates, deletes)
|
t.Errorf("expected 1 creation and 1 deletion of %q, got %d, %d", name, creates, deletes)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,6 +19,7 @@ package pod
|
|||||||
import (
|
import (
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
|
"k8s.io/kubernetes/pkg/api/errors"
|
||||||
client "k8s.io/kubernetes/pkg/client/unversioned"
|
client "k8s.io/kubernetes/pkg/client/unversioned"
|
||||||
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
|
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
|
||||||
kubetypes "k8s.io/kubernetes/pkg/kubelet/types"
|
kubetypes "k8s.io/kubernetes/pkg/kubelet/types"
|
||||||
@ -52,9 +53,15 @@ func (mc *basicMirrorClient) CreateMirrorPod(pod *api.Pod) error {
|
|||||||
for k, v := range pod.Annotations {
|
for k, v := range pod.Annotations {
|
||||||
copyPod.Annotations[k] = v
|
copyPod.Annotations[k] = v
|
||||||
}
|
}
|
||||||
copyPod.Annotations[kubetypes.ConfigMirrorAnnotationKey] = getPodHash(pod)
|
hash := getPodHash(pod)
|
||||||
|
copyPod.Annotations[kubetypes.ConfigMirrorAnnotationKey] = hash
|
||||||
_, err := mc.apiserverClient.Pods(copyPod.Namespace).Create(©Pod)
|
apiPod, err := mc.apiserverClient.Pods(copyPod.Namespace).Create(©Pod)
|
||||||
|
if err != nil && errors.IsAlreadyExists(err) {
|
||||||
|
// Check if the existing pod is the same as the pod we want to create.
|
||||||
|
if h, ok := apiPod.Annotations[kubetypes.ConfigMirrorAnnotationKey]; ok && h == hash {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -69,7 +76,7 @@ func (mc *basicMirrorClient) DeleteMirrorPod(podFullName string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
glog.V(4).Infof("Deleting a mirror pod %q", podFullName)
|
glog.V(4).Infof("Deleting a mirror pod %q", podFullName)
|
||||||
if err := mc.apiserverClient.Pods(namespace).Delete(name, api.NewDeleteOptions(0)); err != nil {
|
if err := mc.apiserverClient.Pods(namespace).Delete(name, api.NewDeleteOptions(0)); err != nil && !errors.IsNotFound(err) {
|
||||||
glog.Errorf("Failed deleting a mirror pod %q: %v", podFullName, err)
|
glog.Errorf("Failed deleting a mirror pod %q: %v", podFullName, err)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
Loading…
Reference in New Issue
Block a user