Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
c5b7568
feat(gpu): add static policy implementation for GPU resource management
luomingmeng Jun 20, 2025
a83c36a
refactor(topology): skip add zone node which is not a child of socket…
luomingmeng Jun 20, 2025
a58733c
feat(gpu): enhance GPU memory allocation with NUMA awareness
luomingmeng Jul 25, 2025
6b318ff
refactor(cpu): remove unused preferredHintIndexes variable
luomingmeng Jul 25, 2025
a55f9ed
feat(resource-plugin): add associated device allocation support
luomingmeng Jul 25, 2025
5e199c4
refactor(qrm-plugins): embed UnimplementedResourcePluginServer in pol…
luomingmeng Jul 25, 2025
f3cb8d6
feat(gpu): add associated device topology hints support
luomingmeng Jul 31, 2025
e4dca1d
fix typo and add logs
luomingmeng Aug 4, 2025
f62209b
refactor(gpu): remove redundant non-numa-affinity gpu allocation logic
luomingmeng Aug 4, 2025
2509a4e
feat(gpu): optimize GPU allocation by preferring NUMA nodes with most…
luomingmeng Sep 22, 2025
09b54e1
feat: refactor code into resource plugins and custom device plugins
JustinChengLZ Oct 1, 2025
05d9c19
chore: add unit tests
JustinChengLZ Oct 2, 2025
985c558
feat: introduce rdma state and allow states to share within gpu sub-p…
JustinChengLZ Oct 10, 2025
2fee9c5
feat: refactor state to only be in one file
JustinChengLZ Oct 13, 2025
f317604
feat: implement rdma custom device plugin and implement logic for acc…
JustinChengLZ Oct 15, 2025
622f8a7
feat: implement allocation of accompany resource first before device
JustinChengLZ Oct 18, 2025
8f819b3
Update gpu_plugin.go
JustinChengLZ Oct 21, 2025
3d3a1a5
refactor(gpu): restructure device plugin and resource management
luomingmeng Oct 20, 2025
687f52b
refactor: remove unused GenerateDummyGPUTopology function
luomingmeng Oct 21, 2025
0e35e38
feat(gpu): implement strategy-based GPU allocation framework
luomingmeng Oct 21, 2025
ff42004
refactor(gpu-strategy): reorganize gpu allocation strategy components
luomingmeng Oct 22, 2025
e779110
refactor(gpu-strategy): make strategy fields private and add accessors
luomingmeng Oct 22, 2025
f0c0728
feat(device): add device affinity group support
luomingmeng Oct 22, 2025
1a9aa2f
feat: develop device affinity binding and filtering strategies
JustinChengLZ Oct 23, 2025
3091cf6
feat: implement binding strategy to prioritise device affinity during…
JustinChengLZ Oct 27, 2025
4aa27ce
refactor(gpu): restructure GPU strategy and state management
luomingmeng Oct 29, 2025
63fec15
chore: rebase katalyst-api
JustinChengLZ Oct 29, 2025
3a409e2
chore: fix unit test, format and lint issues
JustinChengLZ Oct 29, 2025
9eb6527
fix: maintain affinity subgroup sequence in larger affinity groups
JustinChengLZ Nov 3, 2025
e61d69d
refactor: simplify code by deleting redundant parameters and refactor…
JustinChengLZ Nov 3, 2025
29e2fb1
refactor: make allocation recursive to simplify logic
JustinChengLZ Nov 4, 2025
1c7605c
fix(gpu): handle NUMA node edge cases and improve logging
luomingmeng Nov 5, 2025
3356fea
feat(gpu): add canonical strategy implementation and refactor gpu mem…
luomingmeng Nov 5, 2025
c22001f
refactor(gpu/strategy): optimize device affinity allocation algorithm
luomingmeng Nov 5, 2025
75657d7
refactor: simplify the grouping of device affinity
JustinChengLZ Nov 5, 2025
b4913cf
fix: handling of nil device req
JustinChengLZ Nov 6, 2025
93de2c1
chore: add unit tests
JustinChengLZ Nov 10, 2025
06586c5
refactor(gpumemory): move nil device request check after qos validation
luomingmeng Nov 11, 2025
59df1b3
fix(gpu): skip zero requests in GetGPUCount and optimize logging
luomingmeng Nov 11, 2025
fea879b
feat(gpumemory): add numa binding check and health status filter
luomingmeng Nov 14, 2025
ed3c217
fix(gpumemory): handle unhealthy devices and correct capacity values
luomingmeng Nov 17, 2025
9dd5ff8
refactor(qrm): remove unused state file directory fields
luomingmeng Nov 17, 2025
2dbeb0b
fix(gpumemory): handle numa topology not ready case gracefully
luomingmeng Nov 20, 2025
2af9f11
chore: add context to interface methods
JustinChengLZ Nov 24, 2025
9b4727f
chore: add unit tests
JustinChengLZ Nov 28, 2025
8176c42
feat(state): enhance gpu state management using refactored migration …
JustinChengLZ Nov 28, 2025
f40bac1
feat(gpu): add device name tracking and allocation filtering
luomingmeng Dec 18, 2025
7bb2e24
Merge pull request #13 from luomingmeng/dev/fix-gpu-memory-get-hint
JustinChengLZ Dec 23, 2025
3aacb80
feat(cnr): report gpu device topology to cnr
JustinChengLZ Dec 22, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 67 additions & 0 deletions cmd/katalyst-agent/app/agent/qrm/gpu_plugin.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
/*
Copyright 2022 The Katalyst Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package qrm

import (
"fmt"
"strings"
"sync"

"github.com/kubewharf/katalyst-core/cmd/katalyst-agent/app/agent"
phconsts "github.com/kubewharf/katalyst-core/pkg/agent/utilcomponent/periodicalhandler/consts"
"github.com/kubewharf/katalyst-core/pkg/config"
)

const (
QRMPluginNameGPU = "qrm_gpu_plugin"
)

var QRMGPUPluginPeriodicalHandlerGroupName = strings.Join([]string{
QRMPluginNameGPU,
phconsts.PeriodicalHandlersGroupNameSuffix,
}, phconsts.GroupNameSeparator)

// gpuPolicyInitializers is used to store the initializing function for gpu resource plugin policies
var gpuPolicyInitializers sync.Map

// RegisterGPUPolicyInitializer is used to register user-defined resource plugin init functions
func RegisterGPUPolicyInitializer(name string, initFunc agent.InitFunc) {
gpuPolicyInitializers.Store(name, initFunc)
}

// getIOPolicyInitializers returns those policies with initialized functions
func getGPUPolicyInitializers() map[string]agent.InitFunc {
agents := make(map[string]agent.InitFunc)
gpuPolicyInitializers.Range(func(key, value interface{}) bool {
agents[key.(string)] = value.(agent.InitFunc)
return true
})
return agents
}

// InitQRMGPUPlugins initializes the gpu QRM plugins
func InitQRMGPUPlugins(agentCtx *agent.GenericContext, conf *config.Configuration, extraConf interface{}, agentName string) (bool, agent.Component, error) {
initializers := getGPUPolicyInitializers()
policyName := conf.GPUQRMPluginConfig.PolicyName

initFunc, ok := initializers[policyName]
if !ok {
return false, agent.ComponentStub{}, fmt.Errorf("invalid policy name %v for gpu resource plugin", policyName)
}

return initFunc(agentCtx, conf, extraConf, agentName)
}
2 changes: 2 additions & 0 deletions cmd/katalyst-agent/app/enableagents.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import (
"github.com/kubewharf/katalyst-core/cmd/katalyst-agent/app/agent"
"github.com/kubewharf/katalyst-core/cmd/katalyst-agent/app/agent/qrm"
_ "github.com/kubewharf/katalyst-core/pkg/agent/qrm-plugins/cpu"
_ "github.com/kubewharf/katalyst-core/pkg/agent/qrm-plugins/gpu"
_ "github.com/kubewharf/katalyst-core/pkg/agent/qrm-plugins/io"
_ "github.com/kubewharf/katalyst-core/pkg/agent/qrm-plugins/memory"
_ "github.com/kubewharf/katalyst-core/pkg/agent/qrm-plugins/network"
Expand Down Expand Up @@ -57,6 +58,7 @@ func init() {
agentInitializers.Store(qrm.QRMPluginNameMemory, AgentStarter{Init: qrm.InitQRMMemoryPlugins})
agentInitializers.Store(qrm.QRMPluginNameNetwork, AgentStarter{Init: qrm.InitQRMNetworkPlugins})
agentInitializers.Store(qrm.QRMPluginNameIO, AgentStarter{Init: qrm.InitQRMIOPlugins})
agentInitializers.Store(qrm.QRMPluginNameGPU, AgentStarter{Init: qrm.InitQRMGPUPlugins})
}

// RegisterAgentInitializer is used to register user-defined agents
Expand Down
75 changes: 75 additions & 0 deletions cmd/katalyst-agent/app/options/qrm/gpu_plugin.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
/*
Copyright 2022 The Katalyst Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package qrm

import (
"k8s.io/apimachinery/pkg/api/resource"
cliflag "k8s.io/component-base/cli/flag"

"github.com/kubewharf/katalyst-core/cmd/katalyst-agent/app/options/qrm/gpustrategy"
qrmconfig "github.com/kubewharf/katalyst-core/pkg/config/agent/qrm"
)

type GPUOptions struct {
PolicyName string
GPUDeviceNames []string
GPUMemoryAllocatablePerGPU string
SkipGPUStateCorruption bool
RDMADeviceNames []string

GPUStrategyOptions *gpustrategy.GPUStrategyOptions
}

func NewGPUOptions() *GPUOptions {
return &GPUOptions{
PolicyName: "static",
GPUDeviceNames: []string{"nvidia.com/gpu"},
GPUMemoryAllocatablePerGPU: "100",
RDMADeviceNames: []string{},
GPUStrategyOptions: gpustrategy.NewGPUStrategyOptions(),
}
}

func (o *GPUOptions) AddFlags(fss *cliflag.NamedFlagSets) {
fs := fss.FlagSet("gpu_resource_plugin")

fs.StringVar(&o.PolicyName, "gpu-resource-plugin-policy",
o.PolicyName, "The policy gpu resource plugin should use")
fs.StringSliceVar(&o.GPUDeviceNames, "gpu-resource-names", o.GPUDeviceNames, "The name of the GPU resource")
fs.StringVar(&o.GPUMemoryAllocatablePerGPU, "gpu-memory-allocatable-per-gpu",
o.GPUMemoryAllocatablePerGPU, "The total memory allocatable for each GPU, e.g. 100")
fs.BoolVar(&o.SkipGPUStateCorruption, "skip-gpu-state-corruption",
o.SkipGPUStateCorruption, "skip gpu state corruption, and it will be used after updating state properties")
fs.StringSliceVar(&o.RDMADeviceNames, "rdma-resource-names", o.RDMADeviceNames, "The name of the RDMA resource")
o.GPUStrategyOptions.AddFlags(fss)
}

func (o *GPUOptions) ApplyTo(conf *qrmconfig.GPUQRMPluginConfig) error {
conf.PolicyName = o.PolicyName
conf.GPUDeviceNames = o.GPUDeviceNames
gpuMemory, err := resource.ParseQuantity(o.GPUMemoryAllocatablePerGPU)
if err != nil {
return err
}
conf.GPUMemoryAllocatablePerGPU = gpuMemory
conf.SkipGPUStateCorruption = o.SkipGPUStateCorruption
conf.RDMADeviceNames = o.RDMADeviceNames
if err := o.GPUStrategyOptions.ApplyTo(conf.GPUStrategyConfig); err != nil {
return err
}
return nil
}
59 changes: 59 additions & 0 deletions cmd/katalyst-agent/app/options/qrm/gpustrategy/allocate.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
/*
Copyright 2022 The Katalyst Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package gpustrategy

import (
"strings"

cliflag "k8s.io/component-base/cli/flag"

"github.com/kubewharf/katalyst-core/pkg/config/agent/qrm/gpustrategy"
)

type AllocateStrategyOptions struct {
CustomFilteringStrategies map[string]string
CustomSortingStrategy map[string]string
CustomBindingStrategy map[string]string
CustomAllocationStrategy map[string]string
}

func NewGPUAllocateStrategyOptions() *AllocateStrategyOptions {
return &AllocateStrategyOptions{}
}

func (o *AllocateStrategyOptions) AddFlags(fss *cliflag.NamedFlagSets) {
fs := fss.FlagSet("allocate_strategy")
fs.StringToStringVar(&o.CustomFilteringStrategies, "gpu-allocate-custom-filtering-strategies",
o.CustomFilteringStrategies, "The filtering strategies for each resource, e.g. gpu:filtering1/filtering2")
fs.StringToStringVar(&o.CustomSortingStrategy, "gpu-allocate-custom-sorting-strategy", o.CustomSortingStrategy, "The sorting strategy for each resource")
fs.StringToStringVar(&o.CustomBindingStrategy, "gpu-allocate-custom-binding-strategy", o.CustomBindingStrategy, "The binding strategy for each resource")
fs.StringToStringVar(&o.CustomAllocationStrategy, "gpu-allocate-custom-allocation-strategy", o.CustomAllocationStrategy, "The allocation strategy for each resource")
}

func (o *AllocateStrategyOptions) ApplyTo(c *gpustrategy.AllocateStrategyConfig) error {
for resourceName, strategies := range o.CustomFilteringStrategies {
filteringStrategies := strings.Split(strategies, "/")
for _, strategyName := range filteringStrategies {
c.CustomFilteringStrategies[resourceName] = append(c.CustomFilteringStrategies[resourceName], strategyName)
}
}

c.CustomSortingStrategy = o.CustomSortingStrategy
c.CustomBindingStrategy = o.CustomBindingStrategy
c.CustomAllocationStrategy = o.CustomAllocationStrategy
return nil
}
44 changes: 44 additions & 0 deletions cmd/katalyst-agent/app/options/qrm/gpustrategy/strategy_base.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
/*
Copyright 2022 The Katalyst Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package gpustrategy

import (
cliflag "k8s.io/component-base/cli/flag"

"github.com/kubewharf/katalyst-core/pkg/config/agent/qrm/gpustrategy"
)

type GPUStrategyOptions struct {
*AllocateStrategyOptions
}

func NewGPUStrategyOptions() *GPUStrategyOptions {
return &GPUStrategyOptions{
AllocateStrategyOptions: NewGPUAllocateStrategyOptions(),
}
}

func (o *GPUStrategyOptions) AddFlags(fss *cliflag.NamedFlagSets) {
o.AllocateStrategyOptions.AddFlags(fss)
}

func (o *GPUStrategyOptions) ApplyTo(conf *gpustrategy.GPUStrategyConfig) error {
if err := o.AllocateStrategyOptions.ApplyTo(conf.AllocateStrategyConfig); err != nil {
return err
}
return nil
}
6 changes: 6 additions & 0 deletions cmd/katalyst-agent/app/options/qrm/qrm_base.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ type QRMPluginsOptions struct {
MemoryOptions *MemoryOptions
NetworkOptions *NetworkOptions
IOOptions *IOOptions
GPUOptions *GPUOptions
}

func NewQRMPluginsOptions() *QRMPluginsOptions {
Expand All @@ -96,6 +97,7 @@ func NewQRMPluginsOptions() *QRMPluginsOptions {
MemoryOptions: NewMemoryOptions(),
NetworkOptions: NewNetworkOptions(),
IOOptions: NewIOOptions(),
GPUOptions: NewGPUOptions(),
}
}

Expand All @@ -104,6 +106,7 @@ func (o *QRMPluginsOptions) AddFlags(fss *cliflag.NamedFlagSets) {
o.MemoryOptions.AddFlags(fss)
o.NetworkOptions.AddFlags(fss)
o.IOOptions.AddFlags(fss)
o.GPUOptions.AddFlags(fss)
}

func (o *QRMPluginsOptions) ApplyTo(conf *qrmconfig.QRMPluginsConfiguration) error {
Expand All @@ -119,5 +122,8 @@ func (o *QRMPluginsOptions) ApplyTo(conf *qrmconfig.QRMPluginsConfiguration) err
if err := o.IOOptions.ApplyTo(conf.IOQRMPluginConfig); err != nil {
return err
}
if err := o.GPUOptions.ApplyTo(conf.GPUQRMPluginConfig); err != nil {
return err
}
return nil
}
5 changes: 3 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ require (
github.com/golang/mock v1.6.0
github.com/golang/protobuf v1.5.3
github.com/google/cadvisor v0.44.2
github.com/google/go-cmp v0.5.9
github.com/google/uuid v1.3.0
github.com/h2non/gock v1.2.0
github.com/klauspost/cpuid/v2 v2.2.6
Expand Down Expand Up @@ -100,7 +101,6 @@ require (
github.com/godbus/dbus/v5 v5.0.6 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/google/gnostic v0.6.9 // indirect
github.com/google/go-cmp v0.5.9 // indirect
github.com/google/gofuzz v1.2.0 // indirect
github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00 // indirect
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 // indirect
Expand Down Expand Up @@ -175,6 +175,7 @@ require (
)

replace (
github.com/kubewharf/katalyst-api => github.com/luomingmeng/katalyst-api v0.0.0-20251216124136-87e017122357
k8s.io/api => k8s.io/api v0.24.6
k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.24.6
k8s.io/apimachinery => k8s.io/apimachinery v0.24.6
Expand All @@ -196,7 +197,7 @@ replace (
k8s.io/kube-proxy => k8s.io/kube-proxy v0.24.6
k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.24.6
k8s.io/kubectl => k8s.io/kubectl v0.24.6
k8s.io/kubelet => github.com/kubewharf/kubelet v1.24.6-kubewharf.9
k8s.io/kubelet => github.com/yehlemias/kubelet v0.0.0-20250929105636-c5bb000496f2
k8s.io/kubernetes => k8s.io/kubernetes v1.24.6
k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.24.6
k8s.io/metrics => k8s.io/metrics v0.24.6
Expand Down
8 changes: 4 additions & 4 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -574,10 +574,6 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/kubewharf/katalyst-api v0.5.8-0.20251212030746-894fa2521a86 h1:GCqe9PcoTQ7akNDyAmavhnSrPV7sMAoYJ5jKEaJg4Ac=
github.com/kubewharf/katalyst-api v0.5.8-0.20251212030746-894fa2521a86/go.mod h1:Y2IeIorxQamF2a3oa0+URztl5QCSty6Jj3zD83R8J9k=
github.com/kubewharf/kubelet v1.24.6-kubewharf.9 h1:jOTYZt7h/J7I8xQMKMUcJjKf5UFBv37jHWvNp5VRFGc=
github.com/kubewharf/kubelet v1.24.6-kubewharf.9/go.mod h1:MxbSZUx3wXztFneeelwWWlX7NAAStJ6expqq7gY2J3c=
github.com/kyoh86/exportloopref v0.1.7/go.mod h1:h1rDl2Kdj97+Kwh4gdz3ujE7XHmH51Q0lUiZ1z4NLj8=
github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/libopenstorage/openstorage v1.0.0/go.mod h1:Sp1sIObHjat1BeXhfMqLZ14wnOzEhNx2YQedreMcUyc=
Expand All @@ -587,6 +583,8 @@ github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0U
github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc=
github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4=
github.com/lpabon/godbc v0.1.1/go.mod h1:Jo9QV0cf3U6jZABgiJ2skINAXb9j8m51r07g4KI92ZA=
github.com/luomingmeng/katalyst-api v0.0.0-20251216124136-87e017122357 h1:eVX0zxyb1jwF0s88MyetlPfY5nqlyq1fXHkCI6yQ/IQ=
github.com/luomingmeng/katalyst-api v0.0.0-20251216124136-87e017122357/go.mod h1:76Qriw/zHXLGhunpskZpJ9zJI3Dwf2hWnz9z8kkjR64=
github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ=
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
Expand Down Expand Up @@ -937,6 +935,8 @@ github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg=
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
github.com/yehlemias/kubelet v0.0.0-20250929105636-c5bb000496f2 h1:km3N0XyOxD5yh/xdKwLdXnMx01wFRKeDz4/CT8ui8a0=
github.com/yehlemias/kubelet v0.0.0-20250929105636-c5bb000496f2/go.mod h1:MxbSZUx3wXztFneeelwWWlX7NAAStJ6expqq7gY2J3c=
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
Expand Down
Loading
Loading