当前位置: 首页 > wzjs >正文

炫酷的电商网站设计怎么写软文推广

炫酷的电商网站设计,怎么写软文推广,手机站和网站有区别吗,重庆网站制作企业本节重点总结 : containerRuntime 需要实现3类接口 管理容器的接口管理镜像的接口Streaming API 用于客户端与容器进行交互 type KubeGenericRuntime interface {kubecontainer.Runtimekubecontainer.StreamingRuntimekubecontainer.CommandRunner }containerRun…

本节重点总结 :

  • containerRuntime 需要实现3类接口
    • 管理容器的接口
    • 管理镜像的接口
    • Streaming API 用于客户端与容器进行交互
type KubeGenericRuntime interface {kubecontainer.Runtimekubecontainer.StreamingRuntimekubecontainer.CommandRunner
}
  • containerRuntime 的初始化

containerRuntime 接口解析

  • 在上节课我们知道containerRuntime需要实现3类接口
    • 管理容器的接口
    • 管理镜像的接口
    • Streaming API 用于客户端与容器进行交互
  • 那么发现 KubeGenericRuntime实现了这些接口
  • 位置 D:\go_path\src\github.com\kubernetes\kubernetes\pkg\kubelet\kuberuntime\kuberuntime_manager.go
// KubeGenericRuntime is a interface contains interfaces for container runtime and command.
type KubeGenericRuntime interface {kubecontainer.Runtimekubecontainer.StreamingRuntimekubecontainer.CommandRunner
}
  • 在KubeGenericRuntime接口中定义了3种接口

    • kubecontainer.Runtime 代表管理容器的接口,包括镜像的管理
    • kubecontainer.StreamingRuntime 代表Streaming API
    • kubecontainer.CommandRunner 代表在容器中执行命令 ,给prober用的
  • 下面就来具体分析一下

01 kubecontainer.Runtime

  • 接口定义 ,位置 D:\go_path\src\github.com\kubernetes\kubernetes\pkg\kubelet\container\runtime.go
type Runtime interface {// Type returns the type of the container runtime.Type() string//SupportsSingleFileMapping returns whether the container runtime supports single file mappings or not.SupportsSingleFileMapping() bool// Version returns the version information of the container runtime.Version() (Version, error)// APIVersion returns the cached API version information of the container// runtime. Implementation is expected to update this cache periodically.// This may be different from the runtime engine's version.// TODO(random-liu): We should fold this into Version()APIVersion() (Version, error)// Status returns the status of the runtime. An error is returned if the Status// function itself fails, nil otherwise.Status() (*RuntimeStatus, error)// GetPods returns a list of containers grouped by pods. The boolean parameter// specifies whether the runtime returns all containers including those already// exited and dead containers (used for garbage collection).GetPods(all bool) ([]*Pod, error)// GarbageCollect removes dead containers using the specified container gc policy// If allSourcesReady is not true, it means that kubelet doesn't have the// complete list of pods from all available sources (e.g., apiserver, http,// file). In this case, garbage collector should refrain itself from aggressive// behavior such as removing all containers of unrecognized pods (yet).// If evictNonDeletedPods is set to true, containers and sandboxes belonging to pods// that are terminated, but not deleted will be evicted.  Otherwise, only deleted pods// will be GC'd.// TODO: Revisit this method and make it cleaner.GarbageCollect(gcPolicy GCPolicy, allSourcesReady bool, evictNonDeletedPods bool) error// SyncPod syncs the running pod into the desired pod.SyncPod(pod *v1.Pod, podStatus *PodStatus, pullSecrets []v1.Secret, backOff *flowcontrol.Backoff) PodSyncResult// KillPod kills all the containers of a pod. Pod may be nil, running pod must not be.// TODO(random-liu): Return PodSyncResult in KillPod.// gracePeriodOverride if specified allows the caller to override the pod default grace period.// only hard kill paths are allowed to specify a gracePeriodOverride in the kubelet in order to not corrupt user data.// it is useful when doing SIGKILL for hard eviction scenarios, or max grace period during soft eviction scenarios.KillPod(pod *v1.Pod, runningPod Pod, gracePeriodOverride *int64) error// GetPodStatus retrieves the status of the pod, including the// information of all containers in the pod that are visible in Runtime.GetPodStatus(uid types.UID, name, namespace string) (*PodStatus, error)// TODO(vmarmol): Unify pod and containerID args.// GetContainerLogs returns logs of a specific container. By// default, it returns a snapshot of the container log. Set 'follow' to true to// stream the log. Set 'follow' to false and specify the number of lines (e.g.// "100" or "all") to tail the log.GetContainerLogs(ctx context.Context, pod *v1.Pod, containerID ContainerID, logOptions *v1.PodLogOptions, stdout, stderr io.Writer) (err error)// DeleteContainer deletes a container. If the container is still running, an error is returned.DeleteContainer(containerID ContainerID) error// ImageService provides methods to image-related methods.ImageService// UpdatePodCIDR sends a new podCIDR to the runtime.// This method just proxies a new runtimeConfig with the updated// CIDR value down to the runtime shim.UpdatePodCIDR(podCIDR string) error
}
  • 其中重要的方法如
    • SyncPod 创建容器时所用到的
    • KillPod 删除容器时所用到的
    • GetPods 获取pod
  • 同时可以观察到内部继承了 ImageService 的接口

ImageService 的接口

  • 在同一个文件中可以看到ImageService 的接口 全都是围绕镜像服务的

// ImageService interfaces allows to work with image service.
type ImageService interface {// PullImage pulls an image from the network to local storage using the supplied// secrets if necessary. It returns a reference (digest or ID) to the pulled image.PullImage(image ImageSpec, pullSecrets []v1.Secret, podSandboxConfig *runtimeapi.PodSandboxConfig) (string, error)// GetImageRef gets the reference (digest or ID) of the image which has already been in// the local storage. It returns ("", nil) if the image isn't in the local storage.GetImageRef(image ImageSpec) (string, error)// ListImages gets all images currently on the machine.ListImages() ([]Image, error)// RemoveImage removes the specified image.RemoveImage(image ImageSpec) error// ImageStats returns Image statistics.ImageStats() (*ImageStats, error)
}

02 kubecontainer.StreamingRuntime

  • 追踪可以得知都是 和容器交互的 stream api
  • 比如Getexec就是 kubectl exec 所用到的
// streaming calls (exec/attach/port-forward) themselves. In this case, Kubelet should redirect to
// the runtime server.
type StreamingRuntime interface {GetExec(id ContainerID, cmd []string, stdin, stdout, stderr, tty bool) (*url.URL, error)GetAttach(id ContainerID, stdin, stdout, stderr, tty bool) (*url.URL, error)GetPortForward(podName, podNamespace string, podUID types.UID, ports []int32) (*url.URL, error)
}

03 kubecontainer.CommandRunner

  • 其中就一个RunInContainer方法,代表在指定容器中执行cmd,超时时间为timeout
// CommandRunner interface allows to run command in a container.
type CommandRunner interface {// RunInContainer synchronously executes the command in the container, and returns the output.// If the command completes with a non-0 exit code, a k8s.io/utils/exec.ExitError will be returned.RunInContainer(id ContainerID, cmd []string, timeout time.Duration) ([]byte, error)
}

containerRuntime 的初始化

  • 对应的字段在kubelet中就是containerRuntime
	// Container runtime.containerRuntime kubecontainer.Runtime
  • 追踪这个containerRuntime的赋值,发现对应的初始化方法为NewKubeGenericRuntimeManager
	runtime, err := kuberuntime.NewKubeGenericRuntimeManager(kubecontainer.FilterEventRecorder(kubeDeps.Recorder),klet.livenessManager,klet.readinessManager,klet.startupManager,rootDirectory,machineInfo,klet.podWorkers,kubeDeps.OSInterface,klet,httpClient,imageBackOff,kubeCfg.SerializeImagePulls,float32(kubeCfg.RegistryPullQPS),int(kubeCfg.RegistryBurst),imageCredentialProviderConfigFile,imageCredentialProviderBinDir,kubeCfg.CPUCFSQuota,kubeCfg.CPUCFSQuotaPeriod,kubeDeps.RemoteRuntimeService,kubeDeps.RemoteImageService,kubeDeps.ContainerManager.InternalContainerLifecycle(),kubeDeps.dockerLegacyService,klet.containerLogManager,klet.runtimeClassManager,seccompDefault,kubeCfg.MemorySwap.SwapBehavior,kubeDeps.ContainerManager.GetNodeAllocatableAbsolute,*kubeCfg.MemoryThrottlingFactor,)

kubeGenericRuntimeManager字段解析

type kubeGenericRuntimeManager struct {runtimeName string // runtime的名字recorder    record.EventRecorder // event recorderosInterface kubecontainer.OSInterface // 节点级别操作的接口// machineInfo  cadvisor提供的 节点信息接口machineInfo *cadvisorapi.MachineInfo// Container GC managercontainerGC *containerGC// 拉镜像的 凭证keyring credentialprovider.DockerKeyring// 声明周期事件的runnerrunner kubecontainer.HandlerRunner// RuntimeHelper that wraps kubelet to generate runtime container options.runtimeHelper kubecontainer.RuntimeHelper// 健康检测的ManagerlivenessManager  proberesults.ManagerreadinessManager proberesults.ManagerstartupManager   proberesults.Manager// CFS配额cpuCFSQuota bool// cpu.cfs_period_us, defaults to 100mscpuCFSQuotaPeriod metav1.Duration// image puller的封装imagePuller images.ImageManager// gRPC service clientsruntimeService internalapi.RuntimeServiceimageService   internalapi.ImageManagerService// The version cache of runtime daemon.versionCache *cache.ObjectCache// The directory path for seccomp profiles.seccompProfileRoot string// Internal lifecycle event handlers for container resource management.internalLifecycle cm.InternalContainerLifecycle// A shim to legacy functions for backward compatibility.legacyLogProvider LegacyLogProvider// Manage container logs.logManager logs.ContainerLogManager// Manage RuntimeClass resources.runtimeClassManager *runtimeclass.Manager// Cache last per-container error message to reduce log spamlogReduction *logreduction.LogReduction// PodState provider instancepodStateProvider podStateProvider// Use RuntimeDefault as the default seccomp profile for all workloads.seccompDefault bool// MemorySwapBehavior defines how swap is usedmemorySwapBehavior string//Function to get node allocatable resourcesgetNodeAllocatable func() v1.ResourceList// Memory throttling factor for MemoryQoSmemoryThrottlingFactor float64
}

NewKubeGenericRuntimeManager解析

  • 首先就是填充相关字段
	kubeRuntimeManager := &kubeGenericRuntimeManager{recorder:               recorder,cpuCFSQuota:            cpuCFSQuota,cpuCFSQuotaPeriod:      cpuCFSQuotaPeriod,seccompProfileRoot:     filepath.Join(rootDirectory, "seccomp"),livenessManager:        livenessManager,readinessManager:       readinessManager,startupManager:         startupManager,machineInfo:            machineInfo,osInterface:            osInterface,runtimeHelper:          runtimeHelper,runtimeService:         newInstrumentedRuntimeService(runtimeService),imageService:           newInstrumentedImageManagerService(imageService),internalLifecycle:      internalLifecycle,legacyLogProvider:      legacyLogProvider,logManager:             logManager,runtimeClassManager:    runtimeClassManager,logReduction:           logreduction.NewLogReduction(identicalErrorDelay),seccompDefault:         seccompDefault,memorySwapBehavior:     memorySwapBehavior,getNodeAllocatable:     getNodeAllocatable,memoryThrottlingFactor: memoryThrottlingFactor,}
  • 获取runtime 的版本
	typedVersion, err := kubeRuntimeManager.getTypedVersion()if err != nil {klog.ErrorS(err, "Get runtime version failed")return nil, err}
  • 要求kubeRuntimeAPIVersion 为指定版本
	// Only matching kubeRuntimeAPIVersion is supported now// TODO: Runtime API machinery is under discussion at https://github.com/kubernetes/kubernetes/issues/28642if typedVersion.Version != kubeRuntimeAPIVersion {klog.ErrorS(err, "This runtime api version is not supported","apiVersion", typedVersion.Version,"supportedAPIVersion", kubeRuntimeAPIVersion)return nil, ErrVersionNotSupported}
  • 使用返回的runtime Name字段
	kubeRuntimeManager.runtimeName = typedVersion.RuntimeNameklog.InfoS("Container runtime initialized","containerRuntime", typedVersion.RuntimeName,"version", typedVersion.RuntimeVersion,"apiVersion", typedVersion.RuntimeApiVersion)
  • 确保pod log目录存在
	// If the container logs directory does not exist, create it.// TODO: create podLogsRootDirectory at kubelet.go when kubelet is refactored to// new runtime interfaceif _, err := osInterface.Stat(podLogsRootDirectory); os.IsNotExist(err) {if err := osInterface.MkdirAll(podLogsRootDirectory, 0755); err != nil {klog.ErrorS(err, "Failed to create pod log directory", "path", podLogsRootDirectory)}}
  • 配置 kubelet 镜像凭据提供程序
	if !utilfeature.DefaultFeatureGate.Enabled(features.KubeletCredentialProviders) && (imageCredentialProviderConfigFile != "" || imageCredentialProviderBinDir != "") {klog.InfoS("Flags --image-credential-provider-config or --image-credential-provider-bin-dir were set but the feature gate was disabled, these flags will be ignored","featureGate", features.KubeletCredentialProviders)}if utilfeature.DefaultFeatureGate.Enabled(features.KubeletCredentialProviders) && (imageCredentialProviderConfigFile != "" || imageCredentialProviderBinDir != "") {if err := plugin.RegisterCredentialProviderPlugins(imageCredentialProviderConfigFile, imageCredentialProviderBinDir); err != nil {klog.ErrorS(err, "Failed to register CRI auth plugins")os.Exit(1)}}
  • 创建imagePuller 做镜像拉取
	kubeRuntimeManager.keyring = credentialprovider.NewDockerKeyring()kubeRuntimeManager.imagePuller = images.NewImageManager(kubecontainer.FilterEventRecorder(recorder),kubeRuntimeManager,imageBackOff,serializeImagePulls,imagePullQPS,imagePullBurst)
  • 创建runner 、containerGC、podStateProvider
	kubeRuntimeManager.runner = lifecycle.NewHandlerRunner(httpClient, kubeRuntimeManager, kubeRuntimeManager)kubeRuntimeManager.containerGC = newContainerGC(runtimeService, podStateProvider, kubeRuntimeManager)kubeRuntimeManager.podStateProvider = podStateProvider

runtime对象的赋值

  • 可以看到kubelet把新建的runtime对象赋值给了 3个字段
    • containerRuntime
    • streamingRuntime
    • runner
	klet.containerRuntime = runtimeklet.streamingRuntime = runtimeklet.runner = runtime
  • 下面就来依次查看下他们的调用

本节重点总结 :

  • containerRuntime 需要实现3类接口
    • 管理容器的接口
    • 管理镜像的接口
    • Streaming API 用于客户端与容器进行交互
type KubeGenericRuntime interface {kubecontainer.Runtimekubecontainer.StreamingRuntimekubecontainer.CommandRunner
}
  • containerRuntime 的初始化
http://www.dtcms.com/wzjs/132201.html

相关文章:

  • 杭州电商网站建设公司seo运营做什么
  • 成人网站建设成本线上销售如何找到精准客户
  • 浙江做网站成都网络营销
  • 旅游网站系统设计顶尖文案
  • 网站建设合同概念北京seo营销公司
  • 做设计一般用的素材网站是什么意思培训机构需要什么资质
  • 招远网站建设公司地址网络营销简介
  • 做海外批发有什么好的网站好电商运营公司排名
  • 有限公司注册需要什么条件seo排名优化价格
  • php小网站免费软文推广平台都有哪些
  • 怎样在凡科免费做网站写手接单平台
  • 公司企业建站免费广告
  • 网站怎么注册域名品牌宣传推广方案
  • 做物流网站的公司吗网站规划与设计
  • 用web做网站百度 seo 工具
  • 静态网站开发课程模板网络营销的特点不包括
  • 网站首屏最靠谱的十大教育机构
  • 网站备案管局电话怎么制作一个网站5个网页
  • 哪个网站可以做视频播放器产品怎么在网上推广
  • 黄岛网站建设价格网站推广优化怎样
  • 小说网站风格济南seo优化外包服务公司
  • 百度商桥代码怎么添加到网站优化设计五年级下册数学答案
  • 外贸网站怎样做网络稿件投稿平台
  • 做艺术文字的网站校园推广
  • 图片 套网站模板下载 迅雷下载 迅雷下载地址东莞网站建设方案报价
  • 潍坊网站建设科技有限公司深圳seo优化外包公司
  • 日本网站欣赏代刷网站推广链接免费
  • 不同网站相似的页面百度收录吗佛山seo优化外包
  • 怎样才能建设一歌网站做网站要多少钱
  • 平台公司转型方案seo关键词优化排名外包