# KubeClipper 1.6.0 发布：kcctl 优化与 K8s 1.36 支持


![kubeclipper-release-1.6.0.jpg](https://img.lixueduan.com/kubernetes/cover/kubeclipper-release-1.6.0.jpg)

KubeClipper 发布了 1.6.0 版本：支持 Kubernetes 1.36，容器运行时从 Containerd 1.x 升级到 2.x，Calico 更新到 v3.31.5。kcctl 新增了 `kcctl set cluster`、`kcctl operation` 等命令，并优化了 Registry 管理体验，修复了大量稳定性问题。

KubeClipper 是一个轻量便捷的 Kubernetes 多集群全生命周期管理工具，旨在提供易使用、易运维、极轻量、生产级的 Kubernetes 多集群管理服务，让运维工程师从繁复的配置和晦涩的命令行中解放出来，实现一站式管理跨区域、跨基础设施的多 K8S 集群。

<!--more-->

## 🚀 5分钟快速体验

如果你是第一次接触 KubeClipper，可以通过以下步骤快速上手：

1. **一键安装工具**：`curl -sfL https://oss.kubeclipper.io/get-kubeclipper.sh | KC_REGION=cn bash -`
2. **部署服务**：`kcctl deploy`
3. **创建集群**：`kcctl create cluster --name demo --master YOUR_IP --untaint-master`
4. **访问界面**：浏览器访问 `http://YOUR_IP:8080`，账号 `admin/Thinkbig1`

四条命令，从零到一个跑起来的 K8s 集群。



## 1. KubeClipper 1.6.0 新特性详解

1.6.0 的主要变化集中在三块：K8s 最新版本支持、Containerd v2 适配、kcctl 命令行改进。

**本次更新的主要亮点：**

- 🔄 **Kubernetes 1.36 支持**：支持最新 K8s 版本
- 🆕 **Containerd v2 升级**：版本新特性：Sandbox API、CDI/NRI 默认启用、User Namespaces 等重大更新
- 🔄 **Calico v3.31.5**：版本新特性：eBPF 数据面安装简化、nftables GA、LRU 连接追踪等
- 🛠️ **kcctl 命令行优化**：set cluster、operation、registry 等多项改进
- 🔧 **稳定性提升**：修复部署失败、配置覆盖、资源泄漏等问题
- 🧹 **代码清理**：移除未使用命令和冗余代码



### 1.1 Kubernetes 1.36 与组件升级

| Kubernetes | Calico | Containerd |
|------------|--------|------------|
| v1.36.1（默认） | v3.31.5 | v2.2.4 |
| v1.35.0 | v3.29.6 | v1.7.29 |
| v1.34.2 | v3.29.6 | v1.7.29 |

**Containerd v2：容器运行时大版本跃迁**

- **CDI 默认启用**：标准化 GPU、FPGA 等硬件设备注入方式，对 AI/ML 工作负载意义重大
- **User Namespaces 支持（KEP-127）**：容器内 root 不再映射为主机 root，从根本上提升容器安全性
- **配置格式升级至 `config.toml version=3`**：CRI v1alpha2 移除，仅保留 CRI v1

**Calico v3.31：eBPF 数据面走向成熟**

- **eBPF 安装大幅简化**：通过 Installation API 参数即可一键启用，无需再手动处理 kube-proxy 和 API Service Endpoint 配置
- **nftables 数据面 GA**：配合 Kubernetes 1.31+ 的 nftables kube-proxy，提供比 iptables 更好的性能和可扩展性
- **LRU 连接追踪**：eBPF conntrack 采用 LRU 策略自动淘汰旧连接，高并发场景下不再轻易丢连接



### 1.2 kcctl 命令行优化

**kcctl set cluster**

新增 `kcctl set cluster` 命令，支持在集群创建后修改外部访问配置：

```bash
# 设置外部 IP
kcctl set cluster my-cluster --external-ip 10.0.0.100

# 设置外部域名
kcctl set cluster my-cluster --external-domain k8s.example.com
```

同时 `kcctl create cluster` 也新增了 `--external-port` 和 `--external-domain-port` 参数，支持在创建集群时直接指定外部访问端口。



**kcctl operation 命令**

1.6.0 重写了 `kcctl operation` 命令，支持按集群名称查看操作记录，还加了 TUI 交互模式：

```bash
# 通过集群名称查看操作记录
kcctl operation list -c my-cluster

# TUI 模式查看集群操作日志
kcctl operation logs -c my-cluster

# 查看指定操作的详细日志
kcctl operation logs <OPERATION_ID> --follow
```

还有三个新子命令：

```bash
# 查看操作详情
kcctl operation describe <OPERATION_ID>

# 重试失败的操作
kcctl operation retry <OPERATION_ID>

# 终止运行中的操作
kcctl operation terminate <OPERATION_ID>
```

旧的 `kcctl logs` 命令已标记为废弃，后续版本将移除。

**kcctl registry 优化**

- **配置持久化**：`kcctl registry deploy` 完成后自动将节点信息（IP、端口、SSH 凭据）保存到 `~/.kc/registry-config.yaml`，后续执行 `list`、`push`、`delete` 等命令时无需重复指定 `--node` 和 SSH 参数，CLI 参数优先级高于配置文件
- **tar 格式支持**：`kcctl registry push` 支持 tar 格式的镜像包

另外清理了多个废弃命令，修复了 CLI 参数解析和错误处理等问题。



### 1.3 稳定性提升

这一版包含大量的稳定性修复：

- **Containerd 配置保护**：更新镜像仓库认证配置时，不再覆盖整个 config.toml，而是仅更新 `registry.configs.{host}.auth` 部分，保留用户已有的配置（如 GPU Operator 添加的配置）
- **过期认证清理**：当 Registry 从集群中移除时，自动清理 config.toml 中对应的认证信息
- **部署修复**：修复了 kcctl deploy 在 deploy-config configmap 已存在时失败的问题，改为 CreateOrUpdate 语义
- **资源泄漏修复**：修复了 backupstore 文件句柄泄漏、监控循环中单集群失败导致整体停止等问题
- **代码清理**：移除了未使用的 kcctl-proxy 命令（约 1100 行）和多个工具包中的未使用代码（约 600 行），精简工具链



## 2. 安装部署 KubeClipper 1.6.0

### 2.1 环境要求

- **操作系统**: CentOS 7+/Ubuntu 18.04+
- **内核版本**: 4.4+
- **内存**: 至少4GB RAM
- **存储**: 至少 20GB 可用空间
- **网络**: 节点间网络互通

### 2.2 安装 kcctl 工具

```bash
# 下载最新版本的 kcctl
curl -sfL https://oss.kubeclipper.io/get-kubeclipper.sh | KC_REGION=cn bash -

# 验证安装
kcctl version
```

输出示例：
```bash
root@lixd-dev-3:~# kcctl version
kcctl version: version.Info{Major:"1", Minor:"6", GitVersion:"v1.6.0", GitCommit:"2561b625224a9cfd30941190bd38b828dc0ef1bb", GitTreeState:"clean", BuildDate:"2026-06-02T09:05:33Z", GoVersion:"go1.24.2", Compiler:"gc", Platform:"linux/amd64"}
```



### 2.3 部署 KubeClipper

```bash
# 对于 aio 环境使用 kcctl deploy 即可完成部署
kcctl deploy

# 更多参数参考 kcctl deploy -h
# kcctl deploy --server $IPADDR_SERVER --agent $IPADDR_AGENT --pk-file /root/.ssh/id_rsa --pkg $PKG --ip-detect=interface=ens3 --v 5 
```

看到下面的 banner 就说明部署完成了：

```
 _   __      _          _____ _ _
| | / /     | |        /  __ \ (_)
| |/ / _   _| |__   ___| /  \/ |_ _ __  _ __   ___ _ __
|    \| | | | '_ \ / _ \ |   | | | '_ \| '_ \ / _ \ '__|
| |\  \ |_| | |_) |  __/ \__/\ | | |_) | |_) |  __/ |
\_| \_/\__,_|_.__/ \___|\____/_|_| .__/| .__/ \___|_|
                                 | |   | |
                                 |_|   |_|
```

> 安装过程中需要去阿里云下载离线安装包，大概 1 分钟即可下载完成。



### 2.4 访问 Web UI

安装完成后，打开浏览器，访问 `http://$IP` 即可进入 KubeClipper 控制台。

![kc-console-login.jpg](https://img.lixueduan.com/kubernetes/kubeclipper/kc-console-login.jpg)

您可以使用默认帐号密码 `admin / Thinkbig1` 进行登录。



## 3. 快速上手体验

### 3.1 创建 K8s 集群

用 kcctl 创建一个集群试试：

查看当前 agent 节点

```bash
root@lixd-dev-3:~# kcctl get node
+--------------------------------------+------------+---------+----------------+-------------+-----+---------+
|                  ID                  |  HOSTNAME  | REGION  |       IP       |   OS/ARCH   | CPU |   MEM   |
+--------------------------------------+------------+---------+----------------+-------------+-----+---------+
| d6dff191-9a79-49bb-95fb-69c733c9fe7f | lixd-dev-3 | default | 172.16.131.146 | linux/amd64 |   8 | 15991Mi |
+--------------------------------------+------------+---------+----------------+-------------+-----+---------+
```

创建集群：

```bash
root@lixd-dev-3:~# kcctl create cluster --name demo --master 172.16.131.146 --untaint-master
[2026-06-02T09:47:29Z][INFO] use default containerd version 2.2.4
[2026-06-02T09:47:29Z][INFO] use default calico version v3.31.5
[2026-06-02T09:47:29Z][INFO] use default k8s version v1.36.1
+------+---------+--------------+--------------+------------+----------------------------+-------------------------------+
| NAME | REGION  | MASTER COUNT | WORKER COUNT |   STATUS   | APISERVER CERTS EXPIRATION |       CREATE TIMESTAMP        |
+------+---------+--------------+--------------+------------+----------------------------+-------------------------------+
| demo | default |            1 |            0 | Installing |                            | 2026-06-02 09:47:29 +0000 UTC |
+------+---------+--------------+--------------+------------+----------------------------+-------------------------------+
```

大概两分钟装完，用以下命令看实时日志：

```bash
root@lixd-dev-3:~#  kcctl operation list -c demo
+--------------------------------------+---------+---------------+---------+---------------------------+---------------------+-------+
|                  ID                  | CLUSTER |     NAME      | STATUS  |          SPONSOR          |     CREATED AT      | STEPS |
+--------------------------------------+---------+---------------+---------+---------------------------+---------------------+-------+
| 40bee830-6ff5-4ed9-b07f-47762e0055a8 | demo    | CreateCluster | running | https-172.16.131.146-8080 | 2026-06-02 09:47:29 |    14 |
+--------------------------------------+---------+---------------+---------+---------------------------+---------------------+-------+
root@lixd-dev-3:~# kcctl operation logs -c demo
root@lixd-dev-3:~# kcctl operation logs 40bee830-6ff5-4ed9-b07f-47762e0055a8

───── Step: installRuntime (c11db224-d4bf-49a5-8fbb-4e3e8fc10490) [successful] 2026-06-02 09:47:29 ─────
  successful lixd-dev-3 (172.16.131.146) d6dff191-9a79-49bb-95fb-69c733c9fe7f [3s]
    [2026-06-02T09:47:29Z] + download from http://172.16.131.146:8081/containerd/2.2.4/amd64/manifest.json

    [2026-06-02T09:47:29Z] + download from http://172.16.131.146:8081/containerd/2.2.4/amd64/config... (truncated)

───── Step: nodeEnvSetup (f5c78839-4840-490b-a055-5d5f51f6ad4b) [successful] 2026-06-02 09:47:32 ─────
  successful lixd-dev-3 (172.16.131.146) d6dff191-9a79-49bb-95fb-69c733c9fe7f [1s]
    [2026-06-02T09:47:32Z] + /bin/bash -c
    systemctl stop firewalld || true
    systemctl disable firewalld || true
    setenforce 0
    sed -i s/^SELINUX=.*$/SELINUX=disabled/ /etc/selinux/config
    modprobe br_netfilt... (truncated)

───── Step: installExtension (97a39913-50ed-41cd-9b67-e476d57b7c7a) [successful] 2026-06-02 09:47:32 ─────
  successful lixd-dev-3 (172.16.131.146) d6dff191-9a79-49bb-95fb-69c733c9fe7f [33s]
    [2026-06-02T09:47:32Z] + download from http://172.16.131.146:8081/k8s-extension/v1/amd64/manifest.json

    [2026-06-02T09:47:32Z] + download from http://172.16.131.146:8081/k8s-extension/v1/amd64/config... (truncated)
```

新版还加了 TUI 日志查看器：

```bash
kcctl operation logs -c demo
```

![kcctl-operation-logs-tui.png](https://img.lixueduan.com/kubernetes/kubeclipper/kcctl-operation-logs-tui.png)

集群装好了，用 `kubectl` 看一下状态：

```bash
root@lixd-dev-3:~# kubectl get cs
NAME                 STATUS    MESSAGE   ERROR
scheduler            Healthy   ok
controller-manager   Healthy   ok
etcd-0               Healthy   ok
root@lixd-dev-3:~# kubectl get node -owide
NAME         STATUS   ROLES           AGE     VERSION   INTERNAL-IP      EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION             CONTAINER-RUNTIME
lixd-dev-3   Ready    control-plane   4m16s   v1.36.1   172.16.131.146   <none>        Ubuntu 24.04.3 LTS   6.8.0-90-generic (amd64)   containerd://2.2.4
```

几条命令，一个单节点 K8s 集群就起来了。



### 3.2 工作负载体验

1.5.0 版本引入的工作负载管理功能，可以直接在 Web UI 中管理 Deployment、StatefulSet 等工作负载。

![kc-console-workload3.png](https://img.lixueduan.com/kubernetes/kubeclipper/kc-console-workload3.png)



## 4. 小结

这一版主要干了三件事：跟上 K8s 最新版本、适配 Containerd v2、把 kcctl 顺手打磨了一遍。

**组件升级：**

- ✅ **Kubernetes 1.36**: 支持最新版本
- ✅ **Containerd v2.2.4**: CDI 默认启用、User Namespaces 支持、config.toml v3
- ✅ **Calico v3.31.5**: eBPF 安装简化、nftables GA、LRU 连接追踪

**命令行优化：**

- ✅ **kcctl set cluster**: 支持集群创建后修改外部访问配置
- ✅ **kcctl operation**: 新增 describe/retry/terminate 子命令和 TUI 日志查看器
- ✅ **kcctl registry**: 配置持久化，避免重复输入 --node 和 SSH 参数
- ✅ **kcctl create cluster**: 支持 --external-domain 指定外部域名

**稳定性提升：**

- ✅ **配置保护**: 更新认证时仅修改 auth 部分，保留已有 containerd 配置
- ✅ **部署修复**: 修复 configmap 已存在时的部署失败问题
- ✅ **证书管理**: 防止重复证书更新操作，修复 kubeadm v1beta4 兼容问题
- ✅ **代码清理**: 移除 kcctl-proxy 和约 1700 行冗余代码，精简工具链


---

> 作者: [意琦行](https://github.com/lixd)  
> URL: https://www.lixueduan.com/posts/kubernetes/59-kubeclipper-release-1.6.0/  

