Menu

  • Home
  • Work
    • AI
    • Cloud
      • Virtualization
      • IaaS
      • PaaS
    • Architecture
    • BigData
    • Python
    • Java
    • Go
    • C
    • C++
    • JavaScript
    • PHP
    • Others
      • Assembly
      • Ruby
      • Perl
      • Lua
      • Rust
      • XML
      • Network
      • IoT
      • GIS
      • Algorithm
      • Math
      • RE
      • Graphic
    • OS
      • Linux
      • Windows
      • Mac OS X
    • Database
      • MySQL
      • Oracle
    • Mobile
      • Android
      • IOS
    • Web
      • HTML
      • CSS
  • Life
    • Cooking
    • Travel
    • Gardening
  • Gallery
  • Video
  • Music
  • Essay
  • Home
  • Work
    • AI
    • Cloud
      • Virtualization
      • IaaS
      • PaaS
    • Architecture
    • BigData
    • Python
    • Java
    • Go
    • C
    • C++
    • JavaScript
    • PHP
    • Others
      • Assembly
      • Ruby
      • Perl
      • Lua
      • Rust
      • XML
      • Network
      • IoT
      • GIS
      • Algorithm
      • Math
      • RE
      • Graphic
    • OS
      • Linux
      • Windows
      • Mac OS X
    • Database
      • MySQL
      • Oracle
    • Mobile
      • Android
      • IOS
    • Web
      • HTML
      • CSS
  • Life
    • Cooking
    • Travel
    • Gardening
  • Gallery
  • Video
  • Music
  • Essay

Kubernetes GPU Sharing

6
Mar
2026

Kubernetes GPU Sharing

By Alex
/ in Cloud
0 Comments

GPU sharing in Kubernetes depends on what the NVIDIA device plugin advertises to the scheduler, what isolation the underlying mechanism really provides, and what the installed hardware can support. This note uses a real production scheduling stall to walk through the GPU inventory, the practical differences between Time-Slicing and MIG, the constraints imposed by the current cluster hardware, and the rollout that expanded schedulable GPU slots from 2 to 11.

Background

GPUs are expensive and scarce. Kubernetes treats them as exclusive resources by default, so one Pod usually occupies one whole physical GPU even when the workload uses only a small fraction of the card. As concurrent GPU-backed services grew, especially for LLM inference, NLP, and PII detection, that default model turned into both wasted capacity and a concrete scheduling problem.

The production cluster had 8 nodes, 2 of them with GPUs. An NLP inference service was scaled to multiple replicas, each requesting nvidia.com/gpu: 1. Both physical GPUs were already occupied, so new replicas sat in Pending for more than 28 days with repeated events such as 0/8 nodes are available: 8 Insufficient nvidia.com/gpu. That failure forced a deeper evaluation of GPU sharing options.

NVIDIA exposes two mainstream sharing paths for Kubernetes: Time-Slicing and MIG. They solve different problems. They also depend on very different hardware assumptions, which means the hardware survey has to come first.

Cluster Survey
Node And GPU Inventory

All 8 nodes in the cluster were Ready and running on Tencent Cloud TKE. GPU nodes were identified through the node label nvidia-device-enable=enable, then a privileged Pod entered the host namespace and ran nvidia-smi -q to confirm the exact models:

Instance Type GPU Model Architecture Memory Compute Capability Driver MIG Support
PNV5b.8XLARGE96 NVIDIA L20 Ada Lovelace 46068 MiB 8.9 570.158.01 No
GN7.2XLARGE32 Tesla T4 Turing 15360 MiB 7.5 570.158.01 No

Both nodes were on the same driver release and neither card supported MIG. That distinction matters. The L20 has a higher Compute Capability than Ampere, but MIG support does not track Compute Capability monotonically. The Ada Lovelace L-series does not support MIG, while Ampere parts such as A100 and A30, and Hopper parts such as H100 and H20, do.

Existing Device Plugin State

The cluster was running the TKE-provided nvidia-device-plugin:v0.14.5 as a DaemonSet with the startup arguments --mig-strategy=single --fail-on-init-error=false --pass-device-specs=true. There was no --config-file flag and no Time-Slicing ConfigMap. Each GPU node registered exactly one nvidia.com/gpu resource with Kubernetes, so the cluster had 2 schedulable GPU slots in total, both already consumed. The DaemonSet metadata included meta.helm.sh/release-name: nvidia-gpu, which showed that it had originally been installed through Helm even though Helm CLI was not present in the current environment.

Mechanisms
Time-Slicing

Time-Slicing is an oversubscription feature implemented by the NVIDIA k8s-device-plugin. An administrator defines a replica count for each GPU resource in a ConfigMap, and the device plugin advertises that GPU to Kubernetes as multiple schedulable resources. Under the hood, workloads share the same physical GPU and CUDA time-slices execution across processes.

Kubernetes itself does not understand the semantics of GPU sharing. It only sees whatever extended resources the plugin exposes, such as nvidia.com/gpu or nvidia.com/gpu.shared. From the Pod's point of view, the declaration pattern does not change: GPU resources belong in resources.limits, and if requests is also present, it must match the limit value.

The tradeoff is blunt. Time-Slicing does not isolate memory, so all replicas on the same GPU share one physical memory pool. It also does not guarantee a proportional share of compute. Asking for multiple shared GPUs does not mean the workload gets a linear share of throughput. NVIDIA recommends failRequestsGreaterThanOne: true so that a request larger than 1 fails with UnexpectedAdmissionError instead of creating the false impression of an exclusive quota.

The upside is operational simplicity. On existing non-MIG hardware, it usually takes only a ConfigMap plus a device-plugin restart. The downside is weak isolation, a shared fault domain, and limited observability. In Time-Slicing mode, DCGM-Exporter cannot reliably attribute metrics to individual containers and mostly reports at the physical GPU level.

MIG

MIG, or Multi-Instance GPU, is NVIDIA's hardware partitioning model introduced on Ampere-class GPUs and later architectures that support it. A physical GPU is divided into GPU Instances, each with its own SM slices, memory partition, cache and bandwidth share, DMA engines, and hardware fault boundary. That is the isolation Time-Slicing cannot provide.

How MIG appears in Kubernetes depends on the configured strategy. Under single, the resource name stays as nvidia.com/gpu, but each advertised unit maps to one same-profile MIG instance. Under mixed, each MIG profile is exposed as its own resource type such as nvidia.com/mig-1g.12gb. That model is far cleaner for isolation, but it depends on MIG-capable hardware. Changing MIG profiles also requires node-level maintenance. On Hopper, GPU reset support makes this less disruptive than it was on Ampere, but it is still not a zero-touch change.

Comparison
Dimension Time-Slicing MIG
Memory isolation None, all replicas share physical memory Hardware-level, per-instance
Fault domain Shared within one physical GPU Isolated at the instance level
Kubernetes resource shape nvidia.com/gpu or nvidia.com/gpu.shared single uses nvidia.com/gpu; mixed uses nvidia.com/mig-*
Workload changes Often none when renameByDefault=false mixed requires Pods to request explicit MIG resources
Hardware support Broad, works on existing full-GPU resources Only on MIG-capable GPU models
Metric attribution Mostly physical-GPU level Can be modeled around MIG resources
Operational complexity Low, usually just ConfigMap plus plugin restart Moderate, requires lifecycle management for GPU Instances
Composition Can be applied to full GPUs and to mixed MIG resources Can serve as the lower-level partitioning layer before Time-Slicing
H20 And MIG

The H20 is a Hopper GH100 part with Compute Capability 9.0 and 96 GB of HBM3e. NVIDIA's MIG documentation lists it as supporting up to 7 MIG instances. That makes it a relevant medium-term target even though it was not present in the current cluster.

Typical H20 partition shapes look like this:

Profile SM Share Memory Instances Per Card Typical Use
1g.12gb 1/7 12GB 7 Inference for models up to roughly 7B
2g.24gb 2/7 24GB 3 Mid-size models around 13B
3g.47gb 3/7 47GB 2 Models around 30B
4g.47gb 4/7 47GB 1 Single larger model instance
7g.94gb 7/7 94GB 1 Full-card style allocation for 70B+

Time-Slicing and MIG can be combined. A common pattern is to partition the H20 with MIG first, then oversubscribe a specific MIG resource with Time-Slicing. In that case the ConfigMap needs migStrategy: mixed and the resource name must target the MIG profile directly:

YAML
1
2
3
4
5
sharing:
  timeSlicing:
    resources:
      - name: nvidia.com/mig-1g.12gb
        replicas: 2
Configuration Reference
Time-Slicing ConfigMap By GPU Model

The ConfigMap can hold multiple keys, with each key representing one node configuration. any acts as the fallback. Other keys are selected through node labels:

YAML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
apiVersion: v1
kind: ConfigMap
metadata:
  name: time-slicing-config
  namespace: kube-system
data:
  any: |-
    version: v1
    flags:
      migStrategy: none
    sharing:
      timeSlicing:
        renameByDefault: false
        failRequestsGreaterThanOne: true
        resources:
          - name: nvidia.com/gpu
            replicas: 2
  l20: |-
    version: v1
    flags:
      migStrategy: none
    sharing:
      timeSlicing:
        renameByDefault: false
        failRequestsGreaterThanOne: true
        resources:
          - name: nvidia.com/gpu
            replicas: 8
  t4: |-
    version: v1
    flags:
      migStrategy: none
    sharing:
      timeSlicing:
        renameByDefault: false
        failRequestsGreaterThanOne: true
        resources:
          - name: nvidia.com/gpu
            replicas: 3

With renameByDefault: false, the resource name stays as nvidia.com/gpu. The node labels then pick up a -SHARED suffix, for example nvidia.com/gpu.product=Tesla-T4-SHARED, which makes it possible to distinguish shared and non-shared nodes with selectors. Replica counts were chosen from measured per-process memory usage, described later in the rollout record.

Device Plugin DaemonSets By GPU Model

Version v0.14.5 does not support per-node dynamic config selection in the way newer operator-managed deployments do. The practical solution was to run two DaemonSets, each with its own --config-file and its own node selector:

Shell
1
2
3
4
5
6
7
8
9
10
11
12
# Label nodes by GPU model
kubectl label node <l20-node> nvidia.com/device-plugin.config=l20
kubectl label node <t4-node>  nvidia.com/device-plugin.config=t4
 
# Patch the existing DaemonSet so it runs only on T4 nodes and uses the t4 config
kubectl patch daemonset nvidia-device-plugin-daemonset -n kube-system --type=json -p='[
  {"op":"replace","path":"/spec/template/spec/containers/0/args/3",
   "value":"--config-file=/etc/nvidia/time-slicing-config/t4"},
  {"op":"add","path":"/spec/template/spec/nodeSelector/nvidia.com~1device-plugin.config",
   "value":"t4"}
]'
kubectl rollout restart daemonset/nvidia-device-plugin-daemonset -n kube-system

A dedicated L20 DaemonSet then reused the same ConfigMap but pointed at the l20 key:

YAML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: nvidia-device-plugin-daemonset-l20
  namespace: kube-system
spec:
  selector:
    matchLabels:
      name: nvidia-device-plugin-ds-l20
  updateStrategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        name: nvidia-device-plugin-ds-l20
    spec:
      nodeSelector:
        nvidia-device-enable: enable
        nvidia.com/device-plugin.config: l20
      tolerations:
      - operator: Exists
      priorityClassName: system-node-critical
      containers:
      - name: nvidia-device-plugin-ctr
        image: sgccr.ccs.tencentyun.com/tkeimages/nvidia-device-plugin:v0.14.5
        command: [nvidia-device-plugin]
        args:
        - --fail-on-init-error=false
        - --mig-strategy=single
        - --pass-device-specs=true
        - --config-file=/etc/nvidia/time-slicing-config/l20
        env:
        - name: NVIDIA_DRIVER_CAPABILITIES
          value: utility,compute
        resources:
          limits:
            cpu: 100m
            memory: 100Mi
          requests:
            cpu: 100m
            memory: 100Mi
        securityContext:
          capabilities:
            drop: [ALL]
        volumeMounts:
        - name: device-plugin
          mountPath: /var/lib/kubelet/device-plugins
        - name: time-slicing-config
          mountPath: /etc/nvidia/time-slicing-config
      volumes:
      - name: device-plugin
        hostPath:
          path: /var/lib/kubelet/device-plugins
      - name: time-slicing-config
        configMap:
          name: time-slicing-config
MIG On Future H20 Nodes

On Hopper hardware, MIG reconfiguration is less painful than it was on earlier generations because GPU reset support is better. The operational sequence is still node maintenance first, GPU reconfiguration second, scheduler re-entry last:

Shell
1
2
3
4
5
6
7
8
kubectl drain <h20-node> --ignore-daemonsets --delete-emptydir-data
 
# SSH into the H20 node
sudo nvidia-smi -mig 1
sudo nvidia-smi mig -cgi 19,19,19,19,19,19,19 -C
nvidia-smi -L
 
kubectl uncordon <h20-node>

From the Kubernetes side, the three MIG strategies remain single, mixed, and none. single keeps the traditional nvidia.com/gpu resource shape when all instances on a node share one profile. mixed exposes explicit nvidia.com/mig-* resources and requires workloads to request them directly. For a new MIG deployment, Helm is the cleaner path:

Shell
1
2
3
4
5
6
helm upgrade -i nvdp nvdp/nvidia-device-plugin \
  --version=0.17.1 \
  --namespace nvidia-device-plugin \
  --create-namespace \
  --set migStrategy=single \
  --set gfd.enabled=true
Rollout Record
Step 1: Inspect The Baseline
Shell
1
2
3
4
5
6
7
8
# Check the current DaemonSet arguments
kubectl get daemonset nvidia-device-plugin-daemonset -n kube-system -o yaml | grep -A 15 "containers:"
 
# Check whether any Time-Slicing ConfigMap already exists
kubectl get configmap -n kube-system | grep nvidia
 
# Check current GPU slot counts
kubectl get nodes -o custom-columns="NAME:.metadata.name,GPU:.status.capacity.nvidia\.com/gpu"

At baseline there was no ConfigMap, no --config-file, and only one schedulable GPU slot per GPU node.

Step 2: Create The ConfigMap And Patch The DaemonSet

The first pass used the any key with replicas=2. The goal at that stage was not model-specific tuning. It was to verify that the plugin picked up Time-Slicing at all.

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
kubectl apply -f time-slicing-config.yaml
 
kubectl patch daemonset nvidia-device-plugin-daemonset -n kube-system --type=json -p='[
  {"op":"add","path":"/spec/template/spec/volumes/-",
   "value":{"name":"time-slicing-config","configMap":{"name":"time-slicing-config"}}},
  {"op":"add","path":"/spec/template/spec/containers/0/volumeMounts/-",
   "value":{"name":"time-slicing-config","mountPath":"/etc/nvidia/time-slicing-config"}},
  {"op":"add","path":"/spec/template/spec/containers/0/args/-",
   "value":"--config-file=/etc/nvidia/time-slicing-config/any"}
]'
 
kubectl rollout restart daemonset/nvidia-device-plugin-daemonset -n kube-system
kubectl rollout status daemonset/nvidia-device-plugin-daemonset -n kube-system --timeout=120s

One operational detail matters here: the device plugin does not watch ConfigMap updates automatically. Editing the ConfigMap alone is not enough. A DaemonSet restart is required before a new Time-Slicing configuration takes effect.

Step 3: Verify The First Expansion

The restart finished in about 6 seconds. After that, node capacity showed the first slot expansion:

Shell
1
2
3
kubectl get nodes -o custom-columns="NAME:.metadata.name,GPU-CAP:.status.capacity.nvidia\.com/gpu,GPU-ALLOC:.status.allocatable.nvidia\.com/gpu"
# L20 node   2   2
# T4  node   2   2

The plugin logs also confirmed that the Time-Slicing configuration had loaded:

Shell
1
2
3
kubectl logs -n kube-system <device-plugin-pod> --tail=5
# "timeSlicing": {"failRequestsGreaterThanOne": true, "resources": [{"replicas": 2}]}
# Registered device plugin for 'nvidia.com/gpu' with Kubelet

The workload side told the more useful story. The blocked object was not just one Pod. It was a Rolling Update that had been stalled for 28 days. The Deployment had already created a new ReplicaSet, but the first replacement Pod could not schedule because no GPU was free. Since the default Deployment strategy waits for the new ReplicaSet to become ready before shrinking the old one, the entire release froze in the middle. Once Time-Slicing expanded capacity, scheduling completed within 43 seconds and the Deployment resumed immediately:

Shell
1
2
3
kubectl describe pod <pending-pod> -n <ns> | grep -A 3 "Events:"
# Warning  FailedScheduling  (x1303 over 4d12h)  0/8 nodes are available: 8 Insufficient nvidia.com/gpu.
# Normal   Scheduled         43s                  Successfully assigned <pod> to <gpu-node>
Step 4: Tune Replica Counts By GPU Model

After the mechanism worked, the next step was to size replicas from actual memory usage rather than intuition. A privileged Pod was used to measure the live memory footprint on both GPU nodes:

GPU Total Memory Measured Per-Process Usage Final Replicas Theoretical Headroom Per Slot
NVIDIA L20 46068 MiB 4621 MiB (about 10%) 8 about 1137 MiB
Tesla T4 15360 MiB 4401 MiB (about 29%) 3 about 759 MiB

The L20 made the underutilization obvious. With replicas=2, each slot effectively had about 22 GB available while the measured process used only about 4.6 GB. That was far too conservative. Raising the L20 to 8 slots pushed theoretical memory utilization much closer to a useful level.

This stage also exposed a version-specific limitation. The v0.14.5 plugin cannot point --config-file at a directory for dynamic per-node selection. On this version, doing so crashes the Pod:

Shell
1
2
3
# Pod CrashLoopBackOff, log output:
# E unable to load config: unable to finalize config: unable to parse config file:
#   read error: read /etc/nvidia/time-slicing-config: is a directory

That selection mechanism depends on the config-manager sidecar used by GPU Operator deployments. The bare device plugin does not have it. In practice, that forced the two-DaemonSet layout: one bound to T4 nodes and one bound to L20 nodes, each with an explicit config file target.

The final GPU slot layout looked like this:

Shell
1
2
3
kubectl get nodes -o custom-columns="NAME:.metadata.name,GPU-CAP:.status.capacity.nvidia\.com/gpu,GPU-ALLOC:.status.allocatable.nvidia\.com/gpu"
# L20 node   8   8
# T4  node   3   3
Outstanding Issues

One risk remains around ownership. The original DaemonSet is TKE-managed. During cluster upgrades or node-group operations, the control plane may reconcile that DaemonSet back to its original form and wipe out manual patches. The current mitigation is documentation and repeatability. The cleaner long-term answer is to move to TKE's native GPU sharing feature or deploy GPU Operator and stop patching the managed object directly.

Observability is also still weak. The cluster already runs nvidia-gpu-exporter, but in Time-Slicing mode the metrics still aggregate at the physical GPU level. Per-Pod memory and compute attribution remains limited. That is one reason MIG is still the better long-term target when the hardware supports it.

There is also a side effect on privileged development pods that bypass the device plugin entirely by not requesting nvidia.com/gpu. During this rollout, the containerd runc runtime was configured to use nvidia-container-runtime as its binary, which is a common step when setting up GPU sharing. The containerd flag privileged_without_host_devices defaults to false in that configuration. With the nvidia runtime active and that flag false, privileged containers that have no device plugin allocation are blocked from /dev/nvidiactl by an eBPF cgroup program, even though the device files are visible in ls /dev. The result is Failed to initialize NVML: Unknown Error. Setting privileged_without_host_devices = true in containerd config and restarting containerd resolves it. Any cluster that runs time-slicing and also operates privileged dev pods outside the device plugin should check this flag.

Final State
Item Before After
Total GPU slots 2 full physical GPUs 11 slots (L20 x 8 + T4 x 3)
L20 utilization by memory about 10% (1 process on 46 GB) about 80% at theoretical full slot usage
T4 utilization by memory about 29% (1 process on 15 GB) about 86% at theoretical full slot usage
Pending Pods 1 Pod stuck for 28 days 0
Blocked Rolling Update Frozen for 28 days Completed, new version fully ready
DaemonSet count 1 generic DaemonSet 2 model-specific DaemonSets
Memory and fault isolation None Still none under Time-Slicing
Container-level GPU metrics None Still limited, pending MIG-capable hardware
References
  • NVIDIA MIG User Guide r580
  • GPU Operator: Time-Slicing GPUs in Kubernetes
  • NVIDIA k8s-device-plugin README (v0.14.5)
  • MIG Support in Kubernetes
  • Tencent Cloud GPU Instance Families (PNV5b / GN7)
← Investigating and Solving the Issue of Failed Certificate Request with ZeroSSL and Cert-Manager
Replacing Docker Desktop with Colima on macOS →

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Related Posts

  • SOA知识集锦
  • Spring Cloud学习笔记
  • Investigating and Solving the Issue of Failed Certificate Request with ZeroSSL and Cert-Manager
  • DevPod on Kubernetes: turning devcontainer.json into a persistent remote workspace
  • Kong学习笔记

Recent Posts

  • 人工智能知识 - 编程(二)
  • 人工智能知识 - 编程(一)
  • 人工智能知识 - 智能体
  • 人工智能知识 - Transformers和大模型
  • 人工智能知识 - 主要应用领域
ABOUT ME

汪震 | Alex Wong

江苏淮安人,现居北京。目前供职于腾讯云,专注国际化和AI落地。

GitHub:gmemcc

Git:git.gmem.cc

Email:gmemjunk@gmem.cc@me.com

ABOUT GMEM

绿色记忆是我的个人网站,域名gmem.cc中G是Green的简写,MEM是Memory的简写,CC则是我的小天使彩彩名字的简写。

我在这里记录自己的工作与生活,同时和大家分享一些编程方面的知识。

GMEM HISTORY
v2.00:微风
v1.03:单车旅行
v1.02:夏日版
v1.01:未完成
v0.10:彩虹天堂
v0.01:阳光海岸
MIRROR INFO
Meta
  • Log in
  • Entries RSS
  • Comments RSS
  • WordPress.org
Recent Posts
  • 人工智能知识 - 编程(二)
    这一篇承接人工智能知识 - 编程(一)。前一篇已经梳理 AI 训练与推理编程的横向工程栈;本篇进入重点框架详解与 ...
  • 人工智能知识 - 编程(一)
    这一篇专门处理 AI 训练、微调、推理与部署中的编程栈问题。前几篇分别讲了机器学习基础、任务版图、Transfo ...
  • 人工智能知识 - 智能体
    这一篇处理模型之外的系统层问题,包括上下文工程、Harness Engineering、检索增强生成(RAG)与 ...
  • 人工智能知识 - Transformers和大模型
    这一篇聚焦现代大模型主线,内容从 Transformer 架构出发,延伸到语言模型、多模态模型、预训练与微调,以 ...
  • 人工智能知识 - 主要应用领域
    这一篇从常用算法进入机器学习基础概念、经典机器学习与神经网络,重点讨论“模型如何被构造、训练、评估与正则化”。前 ...
  • 人工智能知识 - 算法和机器学习
    这一篇从常用算法进入机器学习基础概念、经典机器学习与神经网络,重点讨论“模型如何被构造、训练、评估与正则化”。前 ...
  • 人工智能知识 - 数学基础
    这一篇整理 AI 所需的数学基础,包括基础数学、线性代数、微积分与概率论统计。它回答的核心问题是:模型里的向量、 ...
  • 人工智能知识 - 简介
    这一篇作为整套 AI 总纲的导论,先回答更根本的问题,不急于进入公式和具体模型细节:什么叫智能,人工智能究竟在试 ...
  • 多语言敏感信息检测模型训练日志
    这篇文章记录一个多语言敏感信息识别项目的完整训练日志。它关注的是工程路径本身:原始 AI 合成语料如何被清洗成可 ...
  • DevPod on Kubernetes: turning devcontainer.json into a persistent remote workspace
    DevPod is an open source workspace manager ...
  • OpenClaw: Architecture, Components, and Deployment Notes
    Four Months, 343,000 Stars On November 24, 2025, ...
  • Replacing Docker Desktop with Colima on macOS
    Colima is one of the cleanest ways ...
  • Kubernetes GPU Sharing
    GPU sharing in Kubernetes depends on what ...
  • Investigating and Solving the Issue of Failed Certificate Request with ZeroSSL and Cert-Manager
    In this blog post, I will walk ...
  • A Comprehensive Study of Kotlin for Java Developers
    Introduction Purpose of the Study Understanding the Mo ...
  • LangChain: Architecture, LCEL, Agents, LangGraph, Retrieval, and Production Patterns
    LangChain is no longer best understood as ...
  • Kubernetes Migration
    Migrating a Kubernetes cluster from one cloud ...
  • Terraform: a practical guide to infrastructure as code
    Terraform is an infrastructure-as-code tool. You describ ...
TOPLINKS
  • Zitahli's blue 91 people like this
  • 梦中的婚礼 64 people like this
  • 汪静好 61 people like this
  • 那年我一岁 36 people like this
  • 为了爱 28 people like this
  • 小绿彩 26 people like this
  • 彩虹姐姐的笑脸 24 people like this
  • 杨梅坑 6 people like this
  • 亚龙湾之旅 1 people like this
  • 汪昌博 people like this
  • 2013年11月香山 10 people like this
  • 2013年7月秦皇岛 6 people like this
  • 2013年6月蓟县盘山 5 people like this
  • 2013年2月梅花山 2 people like this
  • 2013年淮阴自贡迎春灯会 3 people like this
  • 2012年镇江金山游 1 people like this
  • 2012年徽杭古道 9 people like this
  • 2011年清明节后扬州行 1 people like this
  • 2008年十一云龙公园 5 people like this
  • 2008年之秋忆 7 people like this
  • 老照片 13 people like this
  • 火一样的六月 16 people like this
  • 发黄的相片 3 people like this
  • Cesium学习笔记 90 people like this
  • IntelliJ IDEA知识集锦 59 people like this
  • Bazel学习笔记 38 people like this
  • 基于Kurento搭建WebRTC服务器 38 people like this
  • PhoneGap学习笔记 32 people like this
  • NaCl学习笔记 32 people like this
  • 使用Oracle Java Mission Control监控JVM运行状态 29 people like this
  • Ceph学习笔记 27 people like this
  • 基于Calico的CNI 27 people like this
Tag Cloud
ActiveMQ AspectJ CDT Ceph Chrome CNI Command Cordova Coroutine CXF Cygwin DNS Docker eBPF Eclipse ExtJS F7 FAQ Groovy Hibernate HTTP IntelliJ IO编程 IPVS JacksonJSON JMS JSON JVM K8S kernel LB libvirt Linux知识 Linux编程 LOG Maven MinGW Mock Monitoring Multimedia MVC MySQL netfs Netty Nginx NIO Node.js NoSQL Oracle PDT PHP Redis RPC Scheduler ServiceMesh SNMP Spring SSL svn Tomcat TSDB Ubuntu WebGL WebRTC WebService WebSocket wxWidgets XDebug XML XPath XRM ZooKeeper 亚龙湾 单元测试 学习笔记 实时处理 并发编程 彩姐 性能剖析 性能调优 文本处理 新特性 架构模式 系统编程 网络编程 视频监控 设计模式 远程调试 配置文件 齐塔莉
Recent Comments
  • xdemo on 人工智能知识 - 编程(二)
  • 杨松涛 on snmp4j学习笔记
  • kaka on Cilium学习笔记
  • JackZhouMine on Cesium学习笔记
  • 陈黎 on 通过自定义资源扩展Kubernetes
  • qg on Istio中的透明代理问题
  • heao on 基于本地gRPC的Go插件系统
  • 黄豆豆 on Ginkgo学习笔记
  • cloud on OpenStack学习笔记
  • 5dragoncon on Cilium学习笔记
  • Archeb on 重温iptables
  • C/C++编程:WebSocketpp(Linux + Clion + boostAsio) – 源码巴士 on 基于C/C++的WebSocket库
  • jerbin on eBPF学习笔记
  • point on Istio中的透明代理问题
  • G on Istio中的透明代理问题
  • 绿色记忆:Go语言单元测试和仿冒 on Ginkgo学习笔记
  • point on Istio中的透明代理问题
  • 【Maven】maven插件开发实战 – IT汇 on Maven插件开发
  • chenlx on eBPF学习笔记
  • Alex on eBPF学习笔记
  • CFC4N on eBPF学习笔记
  • 李运田 on 念爷爷
  • yongman on 记录一次KeyDB缓慢的定位过程
©2005-2026 Gmem.cc | Powered by WordPress | 京ICP备18007345号-2