Kubernetes 实战入门核心内容总结

Kubernetes 实战入门核心内容总结

Kubernetes(K8s)核心资源与控制器展开实战教学,涵盖 Namespace、Pod、Label、Deployment 四大核心组件,包含概念定义、默认配置、操作命令及配置文件示例,以下是详细总结:

一、Namespace(命名空间)

1. 核心作用

实现资源隔离,支持多环境(如开发、测试、生产)或多租户的资源划分与管理,可结合 K8s 授权机制分配管理权限,搭配资源配额机制(如 CPU、内存限制)控制租户资源占用。

2. 默认 Namespace

K8s 集群启动后自动创建 4 个默认命名空间,功能如下表:

命名空间名称 状态 核心作用
default Active 未指定 Namespace 的资源默认分配至此
kube-node-lease Active 维护集群节点间心跳(v1.13 + 引入)
kube-public Active 资源对所有用户(含未认证用户)可见
kube-system Active 存放 K8s 系统组件(如 apiserver、coredns)

3. 关键操作(命令 + 配置文件)

操作类型 命令行方式 配置文件方式(以创建 dev 命名空间为例)
查看 - 查看所有:kubectl get ns- 查看指定:kubectl get ns <ns名称>- 指定格式(yaml/json):kubectl get ns <ns名称> -o yaml- 查看详情:kubectl describe ns <ns名称> -
创建 kubectl create ns <ns名称>(如kubectl create ns dev 1. 编写 yaml 文件(如 ns-dev.yaml):yaml<br>apiVersion: v1<br>kind: Namespace<br>metadata:<br> name: dev<br>2. 执行创建:kubectl create -f ns-dev.yaml
删除 kubectl delete ns <ns名称> kubectl delete -f ns-dev.yaml

二、Pod(最小管理单元)

1. 核心概念

  • K8s 集群中最小部署与管理单元,容器必须运行在 Pod 内,一个 Pod 可包含 1 个或多个容器(通常为 "1 主多辅助" 模式)
  • K8s 系统组件(如 coredns、etcd)均以 Pod 形式运行,可通过kubectl get pod -n kube-system查看

2. 关键操作

(1)创建与运行

K8s 不直接单独运行 Pod,需通过控制器(如 Deployment)或自主式创建:

  • 控制器创建(推荐,支持自动重建):kubectl run <pod名称> --image=<镜像> --port=<端口> --namespace=<ns名称>(如kubectl run nginx --image=nginx:latest --port=80 --namespace dev
  • 自主式创建(删除后不重建):kubectl create deployment <名称> --image=<镜像> --port=<端口> -n <ns名称>
(2)查看与访问
  • 查看基本信息:kubectl get pods -n <ns名称>(加-o wide可显示 Pod IP、所在节点)
  • 查看详情(含容器状态、事件):kubectl describe pod <pod名称> -n <ns名称>
  • 访问 Pod:先通过kubectl get pods -n <ns名称> -o wide获取 Pod IP,再用curl http://<Pod IP>:<端口>访问(如curl http://10.244.1.23:80
(3)删除
  • 自主式 Pod 删除:kubectl delete pod <pod名称> -n <ns名称>

  • 控制器管理的 Pod 删除:需先删除控制器(如 Deployment),步骤为:

    1. 查看控制器:

      kubectl get deploy -n <ns名称>

    2. 删除控制器:

      kubectl delete deploy <控制器名称> -n <ns名称>

    (Pod 会随控制器删除)

(4)配置文件创建

编写 pod-nginx.yaml:

yaml 复制代码
apiVersion: v1
kind: Pod
metadata:
  name: nginx  # Pod名称
  namespace: dev  # 所属命名空间
spec:
  containers:
  - image: nginx:latest  # 容器镜像
    name: pod  # 容器名称
    ports:
    - name: nginx-port  # 端口名称
      containerPort: 80  # 容器内部端口
      protocol: TCP  # 协议类型

执行命令:kubectl create -f pod-nginx.yaml(创建)、kubectl delete -f pod-nginx.yaml(删除)

三、Label(标签)

1. 核心作用

  • key/value 键值对形式附加到资源(Pod、Node、Service 等),用于资源分类、筛选与管理,支持多维度分组(如版本、环境、架构)
  • 特点:一个资源可添加多个 Label,一个 Label 可附加到多个资源,支持创建后动态添加 / 删除

2. 常用 Label 示例

标签类型 示例
版本标签 version: releaseversion: stable
环境标签 environment: devenvironment: testenvironment: pro
架构标签 tier: frontend(前端)、tier: backend(后端)

3. Label Selector(标签选择器)

用于筛选符合条件的资源,分两类:

  • 基于等式 :如name=slave(选 key=name 且 value=slave 的资源)、env!=production(选 key=env 且 value≠production 的资源)
  • 基于集合 :如name in (master, slave)(选 key=name 且 value 为 master/slave 的资源)、name not in (frontend)(选 key=name 且 value≠frontend 的资源)
  • 多条件组合:用逗号分隔,如name=slave, env!=production

4. 关键操作

操作类型 命令行方式(以 Pod 为例,-n 指定命名空间) 配置文件方式(在 Pod yaml 中添加 labels)
打标签 kubectl label pod <pod名称> <key>=<value> -n <ns名称>(如kubectl label pod nginx-pod version=1.0 -n dev 编写 Pod yaml 时添加:yaml<br>metadata:<br> labels:<br> version: "3.0"<br> env: "test"<br>执行更新:kubectl apply -f pod-nginx.yaml
更新标签 kubectl label pod <pod名称> <key>=<新value> -n <ns名称> --overwrite(如kubectl label pod nginx-pod version=2.0 -n dev --overwrite 修改 yaml 中 labels 值,执行kubectl apply -f pod-nginx.yaml
查看标签 kubectl get pod <pod名称> -n <ns名称> --show-labels -
筛选标签 kubectl get pod -n <ns名称> -l <selector> --show-labels(如kubectl get pod -n dev -l version=2.0 --show-labels -
删除标签 kubectl label pod <pod名称> <key>- -n <ns名称>(如kubectl label pod nginx-pod version- -n dev 删除 yaml 中对应 label 项,执行kubectl apply -f pod-nginx.yaml

四、Deployment(Pod 控制器)

1. 核心作用

  • 属于 K8s Pod 控制器,用于管理 Pod 生命周期,确保 Pod 数量与状态符合预期(如 Pod 故障时自动重启 / 重建),支持滚动更新、副本扩缩容等功能
  • 工作逻辑:通过 Label Selector 匹配 Pod,控制 Pod 副本数(replicas),维持集群稳定

2. 关键操作

(1)创建与配置
  • 命令行创建(指定副本数、镜像、端口):kubectl create deploy <名称> --image=<镜像> --port=<端口> --replicas=<副本数> -n <ns名称>(如kubectl create deploy nginx --image=nginx:latest --port=80 --replicas=3 -n dev
  • 配置文件创建(deploy-nginx.yaml):
yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx  # 控制器名称
  namespace: dev  # 所属命名空间
spec:
  replicas: 3  # 期望Pod副本数
  selector:  # 匹配Pod的Label Selector
    matchLabels:
      run: nginx
  template:  # Pod模板(定义Pod配置)
    metadata:
      labels:
        run: nginx  # 与selector.matchLabels对应
    spec:
      containers:
      - image: nginx:latest  # 容器镜像
        name: nginx  # 容器名称
        ports:
        - containerPort: 80  # 容器端口
          protocol: TCP

执行命令:kubectl create -f deploy-nginx.yaml(创建)、kubectl delete -f deploy-nginx.yaml(删除)

(2)查看与管理
  • 查看 Deployment 基本信息:kubectl get deploy -n <ns名称>(加-o wide显示容器、镜像、选择器)
  • 查看 Deployment 详情(含策略、事件):kubectl describe deploy <名称> -n <ns名称>
  • 查看 Deployment 管理的 Pod:kubectl get pods -n <ns名称>(Pod 名称含 Deployment 关联的随机字符串)
(3)核心字段说明
  • READY:就绪的 Pod 副本数(格式:就绪数 / 期望数,如 3/3)
  • UP-TO-DATE:成功升级的 Pod 副本数
  • AVAILABLE:当前可用的 Pod 副本数
  • StrategyType:更新策略(默认 RollingUpdate,滚动更新)

具体示例:

kubernetes在集群启动之后,会默认创建几个namespace:

复制代码
[root@master ~]# kubectl get namespaces 
NAME              STATUS   AGE
default           Active   47h   //所有未指定Namespace的对象都会被分配在default命名空间
kube-node-lease   Active   47h   //集群节点之间的心跳维护,v1.13开始引入
kube-public       Active   47h   //此命名空间下的资源可以被所有人访问(包括未认证用户)
kube-system       Active   47h   //所有由Kubernetes系统创建的资源都处于这个命名空间

下面来看namespace资源的具体操作:

查看

查看所有的ns:

复制代码
[root@master ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   47h
kube-node-lease   Active   47h
kube-public       Active   47h
kube-system       Active   47h

查看指定的ns:

复制代码
[root@master ~]# kubectl get ns default 
NAME      STATUS   AGE
default   Active   2d

指定输出格式:命令:kubectl get ns ns名称 -o 格式参数# kubernetes支持的格式有很多,比较常见的是wide、json、yaml:

复制代码
[root@master ~]# kubectl get ns default -o yaml 
apiVersion: v1
kind: Namespace
metadata:
  creationTimestamp: "2025-10-28T10:52:10Z"
  labels:
    kubernetes.io/metadata.name: default
  name: default
  resourceVersion: "44"
  uid: c0721538-50eb-4b6d-b889-22c949bec80e
spec:
  finalizers:
  - kubernetes
status:
  phase: Active

查看ns详情:

复制代码
[root@master ~]# kubectl describe ns default 
Name:         default
Labels:       kubernetes.io/metadata.name=default
Annotations:  <none>
Status:       Active      // Active 命名空间正在使用中  Terminating 正在删除命名空间

No resource quota.   //针对namespace做的资源限制# LimitRange针对namespace中的每个组件做的资源限制

No LimitRange resource.

创建namespace:

复制代码
[root@master ~]# kubectl create ns dev
namespace/dev created

删除:(删除namespace)

复制代码
[root@master ~]# kubectl delete ns dev
namespace "dev" deleted

配置方式:

首先准备一个yaml文件,ns-dev.yaml:

复制代码
[root@master ~]# vim ns-dev.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: dev
~    

然后就可以执行对应的创建和删除命令了:

创建:

复制代码
[root@master ~]# kubectl create -f ns-dev.yaml 
namespace/dev created
[root@master ~]# kubectl get -f ns-dev.yaml 
NAME   STATUS   AGE
dev    Active   37s
[root@master ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   2d
dev               Active   85s
kube-node-lease   Active   2d
kube-public       Active   2d
kube-system       Active   2d

删除:

复制代码
[root@master ~]# kubectl delete -f ns-dev.yaml 
namespace "dev" deleted
[root@master ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   2d
kube-node-lease   Active   2d
kube-public       Active   2d
kube-system       Active   2d

kubernetes在集群启动之后,集群中的各个组件也都是以Pod方式运行的。可以通过下面命令查看:

复制代码
[root@master ~]# kubectl get pod -n kube-system 
NAME                                      READY   STATUS    RESTARTS       AGE
calico-kube-controllers-9d57d8f49-xp62k   1/1     Running   2 (158m ago)   47h
calico-node-5b5dz                         1/1     Running   2 (158m ago)   47h
calico-node-c5nkj                         1/1     Running   2 (158m ago)   47h
calico-node-nkl7z                         1/1     Running   2 (158m ago)   47h
coredns-6554b8b87f-h6265                  1/1     Running   2 (158m ago)   2d
coredns-6554b8b87f-p4vrt                  1/1     Running   2 (158m ago)   2d
etcd-master                               1/1     Running   2 (158m ago)   2d
kube-apiserver-master                     1/1     Running   3 (57m ago)    2d
kube-controller-manager-master            1/1     Running   2 (158m ago)   2d
kube-proxy-62dkk                          1/1     Running   2 (158m ago)   2d
kube-proxy-tjfkz                          1/1     Running   2 (158m ago)   47h
kube-proxy-wddnk                          1/1     Running   2 (158m ago)   47h
kube-scheduler-master                     1/1     Running   2 (158m ago)   2d

创建并运行:

kubernetes没有提供单独运行Pod的命令,都是通过Pod控制器来实现的:

命令格式:kubectl run (pod名称) 参数

--image 指定Pod的镜像

--port 指定端口

--namespace 指定namespace

复制代码
[root@master ~]# kubectl run nginx --image=nginx:latest --port=80 --namespace dev
pod/nginx created

查看pod信息:

查看pod基本信息:

复制代码
[root@master ~]# kubectl get pods -n dev
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          3m4s

查看pod的详细信息:

复制代码
[root@master ~]# kubectl describe pod nginx -n dev 
Name:             nginx
Namespace:        dev
Priority:         0
Service Account:  default
Node:             node1.exmaple.com/192.168.100.20
Start Time:       Thu, 30 Oct 2025 19:15:16 +0800
Labels:           run=nginx
Annotations:      cni.projectcalico.org/containerID: f0c56ea62bb3f87ad719815118f6c99af922583d3ec41fe530e921bc445933eb
                  cni.projectcalico.org/podIP: 172.16.98.132/32
                  cni.projectcalico.org/podIPs: 172.16.98.132/32
Status:           Running
IP:               172.16.98.132
IPs:
  IP:  172.16.98.132
Containers:
  nginx:
    Container ID:   docker://54c65d00d209b7dcb3132d2a8577b789113c14829cfbedab0c66e3a2f43cb194
    Image:          nginx:latest
    Image ID:       docker-pullable://nginx@sha256:f547e3d0d5d02f7009737b284abc87d808e4252b42dceea361811e9fc606287f
    Port:           80/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Thu, 30 Oct 2025 19:15:17 +0800
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-rv8vw (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  kube-api-access-rv8vw:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type    Reason     Age   From               Message
  ----    ------     ----  ----               -------
  Normal  Scheduled  4m9s  default-scheduler  Successfully assigned dev/nginx to node1.exmaple.com
  Normal  Pulling    4m9s  kubelet            Pulling image "nginx:latest"
  Normal  Pulled     4m8s  kubelet            Successfully pulled image "nginx:latest" in 952ms (952ms including waiting)
  Normal  Created    4m8s  kubelet            Created container nginx
  Normal  Started    4m8s  kubelet            Started container nginx

访问pod:

获取pod IP:

复制代码
[root@master ~]# kubectl get pods -n dev -o wide 
NAME    READY   STATUS    RESTARTS   AGE   IP              NODE                NOMINATED NODE   READINESS GATES
nginx   1/1     Running   0          10m   172.16.98.132   node1.exmaple.com   <none>           <none>

访问pod:

复制代码
[root@master ~]# curl http://172.16.98.132:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

删除指定pod:

复制代码
[root@master ~]# kubectl delete pod nginx -n dev
pod "nginx" deleted

如果create,显示删除pod成功,但是再查询,发现又新产生一个:

复制代码
[root@master ~]# kubectl create deployment nginx --image nginx --port 80 -n dev
deployment.apps/nginx created            //当前pod是由pod控制器管理
[root@master ~]# kubectl run nginx --image nginx --port 80 -n dev     //自主式管理pod
pod/nginx created
[root@master ~]# kubectl get pods -n dev
NAME                     READY   STATUS    RESTARTS   AGE
nginx                    1/1     Running   0          50s
nginx-7c5ddbdf54-n5cs2   1/1     Running   0          2m28s

这是因为当前pod是由pod控制器创建的,控制器会监控pod状况,一旦发现pod死亡,会立即重建,此时要想删除pod,必须删除pod控制器

先来查询一下当前namespace下的pod控制器:

复制代码
[root@master ~]# kubectl get deploy -n dev
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
nginx   1/1     1            1           6m22s

接下来,删除此pod,pod控制器:

复制代码
[root@master ~]# kubectl delete deploy nginx -n dev
deployment.apps "nginx" deleted

稍等片刻,再查询pod,发现pod被删除了:

复制代码
[root@master ~]# kubectl get pods -n dev
No resources found in dev namespace.

配置操作:

创建一个pod-nginx.yaml,内容如下:

复制代码
[root@master ~]# vim pod-nginx.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  namespace: dev
spec:
  containers:
  - image: nginx:latest
    name: pod
    ports:
    - name: nginx-port
      containerPort: 80
      protocol: TCP
~ 

然后就可以执行对应的创建和删除命令了:

创建:

复制代码
[root@master ~]# kubectl create ns dev
namespace/dev created
[root@master ~]# kubectl create -f pod-nginx.yaml 
pod/nginx created

删除:

复制代码
[root@master ~]# kubectl delete -f pod-nginx.yaml 
pod "nginx" deleted

命令方式:

为pod资源打标签:

复制代码
[root@master ~]# kubectl run nginx-pod --image=nginx:latest -n dev
pod/nginx-pod created
[root@master ~]# kubectl label pod nginx-pod version=1.0 -n dev
pod/nginx-pod labeled

为pod资源更新标签:

复制代码
[root@master ~]# kubectl label pod nginx-pod version=2.0 -n dev --overwrite 
pod/nginx-pod labeled

查看标签:

复制代码
[root@master ~]# kubectl get pod nginx-pod -n dev --show-labels 
NAME        READY   STATUS    RESTARTS   AGE    LABELS
nginx-pod   1/1     Running   0          3m8s   run=nginx-pod,version=2.0

筛选标签:

复制代码
[root@master ~]# kubectl get pod -n dev -l version=2.0 --show-labels 
NAME        READY   STATUS    RESTARTS   AGE     LABELS
nginx-pod   1/1     Running   0          3m52s   run=nginx-pod,version=2.0
[root@master ~]# kubectl get pod -n dev -l version!=2.0 --show-labels 
No resources found in dev namespace.

删除标签:

复制代码
[root@master ~]# kubectl label pod nginx-pod version- -n dev
pod/nginx-pod unlabeled

配置方式:

复制代码
[root@master ~]# vim pod-nginx.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  namespace: dev
  labels:
    version: "3.0" 
    env: "test"
spec:
  containers:
  - image: nginx:latest
    name: pod
    ports:
    - name: nginx-port
      containerPort: 80
      protocol: TCP
~  

然后就可以执行对应的更新命令了:

复制代码
[root@master ~]# kubectl apply -f pod-nginx.yaml 
pod/nginx created

命令操作:

命令格式:kubectl create deployment 名称 参数

--image 指定pod的镜像

--port 指定端口

--replicas 指定创建pod数量

--namespace 指定namespace

复制代码
[root@master ~]# kubectl create deploy nginx --image=nginx:latest --port=80 --replicas=3 -n dev
deployment.apps/nginx created

查看创建的pod:

复制代码
[root@master ~]# kubectl get pods -n dev
NAME                     READY   STATUS    RESTARTS   AGE
nginx                    1/1     Running   0          4m47s
nginx-7c79c4bf97-4pv2h   1/1     Running   0          32s
nginx-7c79c4bf97-9mq9v   1/1     Running   0          32s
nginx-7c79c4bf97-z7fth   1/1     Running   0          32s
nginx-pod                1/1     Running   0          15m

查看deployment的信息:

复制代码
[root@master ~]# kubectl get deploy -n dev
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
nginx   3/3     3            3           82s

UP-TO-DATE:成功升级的副本数量

AVAILABLE:可用副本的数量

复制代码
[root@master ~]# kubectl get deploy -n dev -o wide 
NAME    READY   UP-TO-DATE   AVAILABLE   AGE     CONTAINERS   IMAGES         SELECTOR
nginx   3/3     3            3           2m18s   nginx        nginx:latest   app=nginx

查看deployment的详细信息:

复制代码
[root@master ~]# kubectl describe deploy nginx -n dev
Name:                   nginx
Namespace:              dev
CreationTimestamp:      Thu, 30 Oct 2025 20:17:30 +0800
Labels:                 app=nginx
Annotations:            deployment.kubernetes.io/revision: 1
Selector:               app=nginx
Replicas:               3 desired | 3 updated | 3 total | 3 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  app=nginx
  Containers:
   nginx:
    Image:        nginx:latest
    Port:         80/TCP
    Host Port:    0/TCP
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
OldReplicaSets:  <none>
NewReplicaSet:   nginx-7c79c4bf97 (3/3 replicas created)
Events:
  Type    Reason             Age    From                   Message
  ----    ------             ----   ----                   -------
  Normal  ScalingReplicaSet  3m12s  deployment-controller  Scaled up replica set nginx-7c79c4bf97 to 3

删除:

复制代码
[root@master ~]# kubectl delete deploy nginx -n dev
deployment.apps "nginx" deleted

配置操作:

创建一个deploy-nginx.yaml,内容如下:

复制代码
[root@master ~]# vim deploy-nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: dev
spec:
 replicas: 3
 selector:
   matchLabels:
     run: nginx
 template:
   metadata:
     labels:
       run: nginx
   spec:
     containers:
     - image: nginx:latest
       name: nginx
       ports:
       - containerPort: 80
         protocol: TCP
~

然后就可以执行对应的创建和删除命令了:

创建:

复制代码
[root@master ~]# kubectl create -f deploy-nginx.yaml 
deployment.apps/nginx created

删除:

复制代码
[root@master ~]# kubectl delete -f deploy-nginx.yaml 
deployment.apps "nginx" deleted
相关推荐
lichenyang4531 小时前
Docker 学习笔记(四):Dockerfile,把项目打成自己的镜像
docker·容器
lichenyang4531 小时前
Docker 学习笔记(三):Docker 网络、bridge、子网和容器互通
docker·容器
lichenyang4531 小时前
Docker 学习笔记(二):docker run 的参数到底在控制什么?
docker·容器
运维开发故事3 天前
基于 Arthas 的多集群在线诊断系统设计与实现
kubernetes
Patrick_Wilson5 天前
从「改个端口」到 502:Next.js on k8s 的容器端口、Service 映射与 env 覆盖
docker·kubernetes·next.js
探索云原生5 天前
K8s 1.36 这个 GA 特性,把 initContainer 拉模型的 hack 干掉了
ai·云原生·kubernetes
云恒要逆袭5 天前
运行你的第一个Docker容器
后端·docker·容器
Java之美6 天前
一次k8s升级引发的DevicePlugin注册失败
云原生·kubernetes
程序员老赵7 天前
10 分钟部署 OpenCode:Docker 一键安装,浏览器打开就能用 AI 写代码(附完整命令与排错)
docker·容器·ai编程