本文整理汇总了Golang中k8s/io/kubernetes/pkg/kubelet/container.ConvertPodStatusToRunningPod函数的典型用法代码示例。如果您正苦于以下问题:Golang ConvertPodStatusToRunningPod函数的具体用法?Golang ConvertPodStatusToRunningPod怎么用?Golang ConvertPodStatusToRunningPod使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了ConvertPodStatusToRunningPod函数的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: killPod
// One of the following arguments must be non-nil: runningPod, status.
// TODO: Modify containerRuntime.KillPod() to accept the right arguments.
func (kl *Kubelet) killPod(pod *api.Pod, runningPod *kubecontainer.Pod, status *kubecontainer.PodStatus, gracePeriodOverride *int64) error {
var p kubecontainer.Pod
if runningPod != nil {
p = *runningPod
} else if status != nil {
p = kubecontainer.ConvertPodStatusToRunningPod(kl.GetRuntime().Type(), status)
}
return kl.containerRuntime.KillPod(pod, p, gracePeriodOverride)
}
示例2: SyncPod
// SyncPod syncs the running pod to match the specified desired pod.
func (r *Runtime) SyncPod(pod *api.Pod, podStatus api.PodStatus, internalPodStatus *kubecontainer.PodStatus, pullSecrets []api.Secret, backOff *util.Backoff) error {
// TODO: (random-liu) Stop using running pod in SyncPod()
// TODO: (random-liu) Rename podStatus to apiPodStatus, rename internalPodStatus to podStatus, and use new pod status as much as possible,
// we may stop using apiPodStatus someday.
runningPod := kubecontainer.ConvertPodStatusToRunningPod(internalPodStatus)
// Add references to all containers.
unidentifiedContainers := make(map[kubecontainer.ContainerID]*kubecontainer.Container)
for _, c := range runningPod.Containers {
unidentifiedContainers[c.ID] = c
}
restartPod := false
for _, container := range pod.Spec.Containers {
expectedHash := kubecontainer.HashContainer(&container)
c := runningPod.FindContainerByName(container.Name)
if c == nil {
if kubecontainer.ShouldContainerBeRestartedOldVersion(&container, pod, &podStatus) {
glog.V(3).Infof("Container %+v is dead, but RestartPolicy says that we should restart it.", container)
// TODO(yifan): Containers in one pod are fate-sharing at this moment, see:
// https://github.com/appc/spec/issues/276.
restartPod = true
break
}
continue
}
// TODO: check for non-root image directives. See ../docker/manager.go#SyncPod
// TODO(yifan): Take care of host network change.
containerChanged := c.Hash != 0 && c.Hash != expectedHash
if containerChanged {
glog.Infof("Pod %q container %q hash changed (%d vs %d), it will be killed and re-created.", format.Pod(pod), container.Name, c.Hash, expectedHash)
restartPod = true
break
}
liveness, found := r.livenessManager.Get(c.ID)
if found && liveness != proberesults.Success && pod.Spec.RestartPolicy != api.RestartPolicyNever {
glog.Infof("Pod %q container %q is unhealthy, it will be killed and re-created.", format.Pod(pod), container.Name)
restartPod = true
break
}
delete(unidentifiedContainers, c.ID)
}
// If there is any unidentified containers, restart the pod.
if len(unidentifiedContainers) > 0 {
restartPod = true
}
if restartPod {
// Kill the pod only if the pod is actually running.
if len(runningPod.Containers) > 0 {
if err := r.KillPod(pod, runningPod); err != nil {
return err
}
}
if err := r.RunPod(pod, pullSecrets); err != nil {
return err
}
}
return nil
}
示例3: SyncPod
// Syncs the running pod into the desired pod.
func (r *runtime) SyncPod(pod *api.Pod, podStatus api.PodStatus, internalPodStatus *kubecontainer.PodStatus, pullSecrets []api.Secret, backOff *util.Backoff) error {
// TODO: (random-liu) Stop using running pod in SyncPod()
// TODO: (random-liu) Rename podStatus to apiPodStatus, rename internalPodStatus to podStatus, and use new pod status as much as possible,
// we may stop using apiPodStatus someday.
runningPod := kubecontainer.ConvertPodStatusToRunningPod(internalPodStatus)
podFullName := kubecontainer.BuildPodFullName(pod.Name, pod.Namespace)
// Add references to all containers.
unidentifiedContainers := make(map[kubecontainer.ContainerID]*kubecontainer.Container)
for _, c := range runningPod.Containers {
unidentifiedContainers[c.ID] = c
}
restartPod := false
for _, container := range pod.Spec.Containers {
expectedHash := kubecontainer.HashContainer(&container)
c := runningPod.FindContainerByName(container.Name)
if c == nil {
if kubecontainer.ShouldContainerBeRestartedOldVersion(&container, pod, &podStatus) {
glog.V(3).Infof("Container %+v is dead, but RestartPolicy says that we should restart it.", container)
restartPod = true
break
}
continue
}
containerChanged := c.Hash != 0 && c.Hash != expectedHash
if containerChanged {
glog.V(4).Infof("Pod %q container %q hash changed (%d vs %d), it will be killed and re-created.",
podFullName, container.Name, c.Hash, expectedHash)
restartPod = true
break
}
liveness, found := r.livenessManager.Get(c.ID)
if found && liveness != proberesults.Success && pod.Spec.RestartPolicy != api.RestartPolicyNever {
glog.Infof("Pod %q container %q is unhealthy, it will be killed and re-created.", podFullName, container.Name)
restartPod = true
break
}
delete(unidentifiedContainers, c.ID)
}
// If there is any unidentified containers, restart the pod.
if len(unidentifiedContainers) > 0 {
restartPod = true
}
if restartPod {
restartCount := 0
// Only kill existing pod
podID, err := r.hyperClient.GetPodIDByName(podFullName)
if err == nil && len(podID) > 0 {
// Update pod restart count
restartCount, err = r.GetPodStartCount(podID)
if err != nil {
glog.Errorf("Hyper: get pod startcount failed: %v", err)
return err
}
restartCount += 1
if err := r.KillPod(nil, runningPod); err != nil {
glog.Errorf("Hyper: kill pod %s failed, error: %s", runningPod.Name, err)
return err
}
}
if err := r.RunPod(pod, restartCount, pullSecrets); err != nil {
glog.Errorf("Hyper: run pod %s failed, error: %s", pod.Name, err)
return err
}
}
return nil
}
示例4: RunPod
func (r *runtime) RunPod(pod *api.Pod, restartCount int, pullSecrets []api.Secret) error {
var (
err error
podData []byte
podFullName string
podID string
podStatus *kubecontainer.PodStatus
)
podData, err = r.buildHyperPod(pod, restartCount, pullSecrets)
if err != nil {
glog.Errorf("Hyper: buildHyperPod failed, error: %v", err)
return err
}
podFullName = kubecontainer.BuildPodFullName(pod.Name, pod.Namespace)
err = r.savePodSpec(string(podData), podFullName)
if err != nil {
glog.Errorf("Hyper: savePodSpec failed, error: %v", err)
return err
}
defer func() {
if err != nil {
specFileName := path.Join(hyperPodSpecDir, podFullName)
_, err = os.Stat(specFileName)
if err == nil {
e := os.Remove(specFileName)
if e != nil {
glog.Warningf("Hyper: delete spec file for %s failed, error: %v", podFullName, e)
}
}
if podID != "" {
destroyErr := r.hyperClient.RemovePod(podID)
if destroyErr != nil {
glog.Errorf("Hyper: destory pod %s (ID:%s) failed: %v", pod.Name, podID, destroyErr)
}
}
tearDownError := r.networkPlugin.TearDownPod(pod.Namespace, pod.Name, kubecontainer.ContainerID{}, "hyper")
if tearDownError != nil {
glog.Warningf("Hyper: networkPlugin.TearDownPod failed: %v, kubelet will continue to rm pod %s", tearDownError, pod.Name)
}
}
}()
// Setup pod's network by network plugin
err = r.networkPlugin.SetUpPod(pod.Namespace, pod.Name, kubecontainer.ContainerID{}, "hyper")
if err != nil {
glog.Errorf("Hyper: networkPlugin.SetUpPod %s failed, error: %v", pod.Name, err)
return err
}
// Create and start hyper pod
specData, err := r.getPodSpec(podFullName)
if err != nil {
glog.Errorf("Hyper: create pod %s failed, error: %v", podFullName, err)
return err
}
var podSpec grpctypes.UserPod
err = json.Unmarshal([]byte(specData), &podSpec)
if err != nil {
glog.Errorf("Hyper: marshal pod %s from specData error: %v", podFullName, err)
}
podID, err = r.hyperClient.CreatePod(&podSpec)
if err != nil {
glog.Errorf("Hyper: create pod %s failed, error: %v", podData, err)
return err
}
err = r.hyperClient.StartPod(podID)
if err != nil {
glog.Errorf("Hyper: start pod %s (ID:%s) failed, error: %v", pod.Name, podID, err)
return err
}
podStatus, err = r.GetPodStatus(pod.UID, pod.Name, pod.Namespace)
if err != nil {
return err
}
runningPod := kubecontainer.ConvertPodStatusToRunningPod(podStatus)
for _, container := range pod.Spec.Containers {
var containerID kubecontainer.ContainerID
for _, runningContainer := range runningPod.Containers {
if container.Name == runningContainer.Name {
containerID = runningContainer.ID
}
}
// Update container references
ref, err := kubecontainer.GenerateContainerRef(pod, &container)
if err != nil {
glog.Errorf("Couldn't make a ref to pod %q, container %v: '%v'", pod.Name, container.Name, err)
} else {
r.containerRefManager.SetRef(containerID, ref)
//.........这里部分代码省略.........
示例5: RunPod
func (r *runtime) RunPod(pod *api.Pod, restartCount int, pullSecrets []api.Secret) error {
podFullName := kubecontainer.BuildPodFullName(pod.Name, pod.Namespace)
podData, err := r.buildHyperPod(pod, restartCount, pullSecrets)
if err != nil {
glog.Errorf("Hyper: buildHyperPod failed, error: %v", err)
return err
}
err = r.savePodSpec(string(podData), podFullName)
if err != nil {
glog.Errorf("Hyper: savePodSpec failed, error: %v", err)
return err
}
// Setup pod's network by network plugin
err = r.networkPlugin.SetUpPod(pod.Namespace, pod.Name, "", "hyper")
if err != nil {
glog.Errorf("Hyper: networkPlugin.SetUpPod %s failed, error: %v", pod.Name, err)
return err
}
// Create and start hyper pod
podSpec, err := r.getPodSpec(podFullName)
if err != nil {
glog.Errorf("Hyper: create pod %s failed, error: %v", podFullName, err)
return err
}
result, err := r.hyperClient.CreatePod(podSpec)
if err != nil {
glog.Errorf("Hyper: create pod %s failed, error: %v", podData, err)
return err
}
podID := string(result["ID"].(string))
err = r.hyperClient.StartPod(podID)
if err != nil {
glog.Errorf("Hyper: start pod %s (ID:%s) failed, error: %v", pod.Name, podID, err)
destroyErr := r.hyperClient.RemovePod(podID)
if destroyErr != nil {
glog.Errorf("Hyper: destory pod %s (ID:%s) failed: %v", pod.Name, podID, destroyErr)
}
return err
}
podStatus, err := r.GetPodStatus(pod.UID, pod.Name, pod.Namespace)
if err != nil {
return err
}
runningPod := kubecontainer.ConvertPodStatusToRunningPod(podStatus)
for _, container := range pod.Spec.Containers {
var containerID kubecontainer.ContainerID
for _, runningContainer := range runningPod.Containers {
if container.Name == runningContainer.Name {
containerID = runningContainer.ID
}
}
// Update container references
ref, err := kubecontainer.GenerateContainerRef(pod, &container)
if err != nil {
glog.Errorf("Couldn't make a ref to pod %q, container %v: '%v'", pod.Name, container.Name, err)
} else {
r.containerRefManager.SetRef(containerID, ref)
}
// Create a symbolic link to the Hyper container log file using a name
// which captures the full pod name, the container name and the
// container ID. Cluster level logging will capture these symbolic
// filenames which can be used for search terms in Elasticsearch or for
// labels for Cloud Logging.
containerLogFile := path.Join(hyperLogsDir, podID, fmt.Sprintf("%s-json.log", containerID.ID))
symlinkFile := LogSymlink(r.containerLogsDir, podFullName, container.Name, containerID.ID)
if err = r.os.Symlink(containerLogFile, symlinkFile); err != nil {
glog.Errorf("Failed to create symbolic link to the log file of pod %q container %q: %v", podFullName, container.Name, err)
}
if container.Lifecycle != nil && container.Lifecycle.PostStart != nil {
handlerErr := r.runner.Run(containerID, pod, &container, container.Lifecycle.PostStart)
if handlerErr != nil {
err := fmt.Errorf("PostStart handler: %v", handlerErr)
if e := r.KillPod(pod, runningPod); e != nil {
glog.Errorf("KillPod %v failed: %v", podFullName, e)
}
return err
}
}
}
return nil
}
示例6: RunPod
func (r *runtime) RunPod(pod *api.Pod, restartCount int, pullSecrets []api.Secret) error {
podFullName := kubecontainer.BuildPodFullName(pod.Name, pod.Namespace)
podData, err := r.buildHyperPod(pod, restartCount, pullSecrets)
if err != nil {
glog.Errorf("Hyper: buildHyperPod failed, error: %v", err)
return err
}
err = r.savePodSpec(string(podData), podFullName)
if err != nil {
glog.Errorf("Hyper: savePodSpec failed, error: %v", err)
return err
}
// Setup pod's network by network plugin
err = r.networkPlugin.SetUpPod(pod.Namespace, podFullName, "", "hyper")
if err != nil {
glog.Errorf("Hyper: networkPlugin.SetUpPod %s failed, error: %v", pod.Name, err)
return err
}
// Create and start hyper pod
podSpec, err := r.getPodSpec(podFullName)
if err != nil {
glog.Errorf("Hyper: create pod %s failed, error: %v", podFullName, err)
return err
}
result, err := r.hyperClient.CreatePod(podSpec)
if err != nil {
glog.Errorf("Hyper: create pod %s failed, error: %v", podData, err)
return err
}
podID := string(result["ID"].(string))
err = r.hyperClient.StartPod(podID)
if err != nil {
glog.Errorf("Hyper: start pod %s (ID:%s) failed, error: %v", pod.Name, podID, err)
destroyErr := r.hyperClient.RemovePod(podID)
if destroyErr != nil {
glog.Errorf("Hyper: destory pod %s (ID:%s) failed: %v", pod.Name, podID, destroyErr)
}
return err
}
podStatus, err := r.GetPodStatus(pod.UID, pod.Name, pod.Namespace)
if err != nil {
return err
}
runningPod := kubecontainer.ConvertPodStatusToRunningPod(podStatus)
for _, container := range pod.Spec.Containers {
var containerID kubecontainer.ContainerID
for _, runningContainer := range runningPod.Containers {
if container.Name == runningContainer.Name {
containerID = runningContainer.ID
}
}
if container.Lifecycle != nil && container.Lifecycle.PostStart != nil {
handlerErr := r.runner.Run(containerID, pod, &container, container.Lifecycle.PostStart)
if handlerErr != nil {
err := fmt.Errorf("PostStart handler: %v", handlerErr)
if e := r.KillPod(pod, runningPod); e != nil {
glog.Errorf("KillPod %v failed: %v", podFullName, e)
}
return err
}
}
}
return nil
}