专属域名
文档搜索
轩辕助手
Run助手
邀请有礼
返回顶部
快速返回页面顶部
收起
收起工具栏
轩辕镜像 官方专业版
轩辕镜像 官方专业版轩辕镜像 官方专业版官方专业版
首页个人中心搜索镜像

交易
充值流量我的订单
工具
提交工单镜像收录一键安装
Npm 源Pip 源Homebrew 源
帮助
常见问题
其他
关于我们网站地图

官方QQ群: 13763429

2gis/k8s-handle Docker 镜像 - 轩辕镜像

k8s-handle
2gis/k8s-handle
自动构建
使用Python和Jinja2实现Kubernetes集群的简单CI/CD
0 次下载active2gis镜像
🚀专业版镜像服务,面向生产环境设计
中文简介版本下载
🚀专业版镜像服务,面向生产环境设计

k8s-handle

k8s-handle 是一个命令行工具,用于简化 Kubernetes 应用的持续交付流程。它支持多环境配置,可使用相同的部署模板部署到不同环境(如 staging 和 production),是 Helm 的替代方案,但不包含包管理器功能。

目录

  • 特性
  • k8s-handle 与 Helm 对比
  • 开始前准备
  • 使用 pip 安装
  • 使用 Docker
  • 与 CI/CD 工具集成
  • 基本用法
  • 示例
  • 文档
    • 配置结构
    • 环境
      • Common 部分
      • 其他部分
      • 部署特定环境
    • 模板
    • 变量
      • 与 Common 合并
      • 从环境变量加载变量
      • 从 YAML 文件加载变量
    • CI/CD 中使用方法
      • Gitlab CI
        • 原生集成
        • 通过变量
    • 工作模式
      • 同步模式
      • 严格模式
    • 销毁资源
    • 差异比较
    • 无 config.yaml 操作
      • 渲染模板
      • 应用资源
      • 删除资源

特性

  • 易用的命令行界面
  • 在一个配置文件(config.yaml)中配置所有变量
  • 支持 Kubernetes 资源文件的 Jinja2 模板(包含 include、循环、条件判断等功能)
  • 从环境变量加载变量
  • 配置文件支持 include(用于大型部署的 config.yaml 拆分)
  • 部署支持异步和同步模式(等待 Deployment、StatefulSet、DaemonSet 就绪)
  • 严格模式:出现警告时停止部署
  • 易于与 CI 流水线集成(如 Gitlab CI)
  • 支持资源销毁(从 Git 分支、Gitlab 环境部署和销毁)

k8s-handle 与 Helm 对比

  • k8s-handle 作为模板解析器和部署工具,不包含 Helm 那样的包管理器
  • k8s-handle 不需要集群内工具(如 Tiller Server),只需用于部署的 ServiceAccount
  • k8s-handle 默认安全,无需为部署生成证书,使用 Kubernetes REST API(类似 kubectl)

开始前准备

  • 搭建 Kubernetes 集群 [***]
  • 安装 kubectl(如未安装)[***]
  • 创建 kubeconfig(~/.kube/config),如已存在可跳过:
bash
$ cat > ~/.kube/kubernetes.ca.crt << EOF
> <粘贴集群 CA 证书内容>
>EOF
cat > ~/.kube/config << EOF
apiVersion: v1
kind: Config
preferences: {}
clusters:
- cluster:
    certificate-authority: kubernetes.ca.crt
    server: <protocol://masterurl:port>
  name: my-cluster
contexts:
- context:
    cluster: my-cluster
    namespace: my-namespace
    user: my-user
  name: my-context
current-context: my-context
users:
- name: my-user
  user:
    token: <你的 token>
EOF

使用 pip 安装

需 Python 3.4 或更高版本:

bash
$ pip install k8s-handle
 -- 或 --
$ pip install --user k8s-handle

使用 Docker

bash
$ cd $WORKDIR
$ git clone [***]
$ cd k8s-handle-example
$ docker run --rm -v $(pwd):/tmp/ -v "$HOME/.kube:/root/.kube" 2gis/k8s-handle k8s-handle deploy -s staging --use-kubeconfig
INFO:templating:File "/tmp/k8s-handle/configmap.yaml" successfully generated
INFO:templating:Trying to generate file from template "secret.yaml.j2" in "/tmp/k8s-handle"
INFO:templating:File "/tmp/k8s-handle/secret.yaml" successfully generated
INFO:templating:Trying to generate file from template "deployment.yaml.j2" in "/tmp/k8s-handle"
INFO:templating:File "/tmp/k8s-handle/deployment.yaml" successfully generated
INFO:k8s.resource:ConfigMap "k8s-starter-kit-nginx-conf" already exists, replace it
INFO:k8s.resource:Secret "k8s-starter-kit-secret" already exists, replace it
INFO:k8s.resource:Deployment "k8s-starter-kit" does not exist, create it

                         _(_)_                          wWWWw   _
             @@@@       (_)@(_)   vVVVv     _     @@@@  (___) _(_)_
            @@()@@ wWWWw  (_)\    (___)   _(_)_  @@()@@   Y  (_)@(_)
             @@@@  (___)     `|/    Y    (_)@(_)  @@@@   \|/   (_)
              /      Y       \|    \|/    /(_)    \|      |/      |
           \ |     \ |/       | / \ | /  \|/       |/    \|      \|/
            \|//    \|///    \|//  \|/// \|///    \|//    |//    \|//
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

与 CI/CD 工具集成

如果使用 Gitlab CI、TeamCity 等工具,可通过 Docker 运行器/代理集成,脚本略有不同:

bash
$ k8s-handle deploy -s staging

需 checkout 代码仓库 [***] 并切换到分支 without-kubeconfig,同时设置以下环境变量:

  • K8S_NAMESPACE
  • K8S_MASTER_URI
  • K8S_CA_BASE64(可选)
  • K8S_TOKEN

使用镜像 2gis/k8s-handle:<版本号或 latest>

注意:如果使用 Gitlab CI,可配置 Kubernetes 集成,直接使用 --use-kubeconfig 标志。

基本用法

bash
$ k8s-handle deploy -s staging --use-kubeconfig
INFO:templating:Trying to generate file from template "configmap.yaml.j2" in "/tmp/k8s-handle"
INFO:templating:File "/tmp/k8s-handle/configmap.yaml" successfully generated
INFO:templating:Trying to generate file from template "secret.yaml.j2" in "/tmp/k8s-handle"
INFO:templating:File "/tmp/k8s-handle/secret.yaml" successfully generated
INFO:templating:Trying to generate file from template "deployment.yaml.j2" in "/tmp/k8s-handle"
INFO:templating:File "/tmp/k8s-handle/deployment.yaml" successfully generated
INFO:k8s.resource:ConfigMap "k8s-starter-kit-nginx-conf" already exists, replace it
INFO:k8s.resource:Secret "k8s-starter-kit-secret" already exists, replace it
INFO:k8s.resource:Deployment "k8s-starter-kit" does not exist, create it

                         _(_)_                          wWWWw   _
             @@@@       (_)@(_)   vVVVv     _     @@@@  (___) _(_)_
            @@()@@ wWWWw  (_)\    (___)   _(_)_  @@()@@   Y  (_)@(_)
             @@@@  (___)     `|/    Y    (_)@(_)  @@@@   \|/   (_)
              /      Y       \|    \|/    /(_)    \|      |/      |
           \ |     \ |/       | / \ | /  \|/       |/    \|      \|/
            \|//    \|///    \|//  \|/// \|///    \|//    |//    \|//
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
$ kubectl get configmap 
NAME                         DATA      AGE
k8s-starter-kit-nginx-conf   1         1m
$ kubectl get secret | grep starter-kit
k8s-starter-kit-secret   Opaque                                1         1m
$ kubectl get deploy
NAME              DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
k8s-starter-kit   1         1         1            1           3m

修改 config.yaml 中 replicas_count 为 3,使用同步模式重新运行:

bash
$ k8s-handle deploy -s staging --use-kubeconfig --sync-mode
...
INFO:k8s.resource:Deployment "k8s-starter-kit" already exists, replace it
INFO:k8s.resource:desiredReplicas = 3, updatedReplicas = 3, availableReplicas = 1
INFO:k8s.resource:Deployment not completed on 1 attempt, next attempt in 5 sec.
INFO:k8s.resource:desiredReplicas = 3, updatedReplicas = 3, availableReplicas = 2
INFO:k8s.resource:Deployment not completed on 2 attempt, next attempt in 5 sec.
INFO:k8s.resource:desiredReplicas = 3, updatedReplicas = 3, availableReplicas = 3
INFO:k8s.resource:Deployment completed on 3 attempt
...
$ kubectl get deploy
NAME              DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
k8s-starter-kit   3         3         3            3           7m

示例

可通过示例仓库快速开始:[***] Nginx 应用及所需的 Kubernetes 资源配置。

bash
$ cd $WORKDIR
$ git clone [***]
$ cd k8s-handle-example
$ k8s-handle deploy -s staging --use-kubeconfig --sync-mode
INFO:__main__:Using default namespace k8s-handle-test
INFO:templating:Trying to generate file from template "configmap.yaml.j2" in "/tmp/k8s-handle"
INFO:templating:File "/tmp/k8s-handle/configmap.yaml" successfully generated
INFO:templating:Trying to generate file from template "deployment.yaml.j2" in "/tmp/k8s-handle"
INFO:templating:File "/tmp/k8s-handle/deployment.yaml" successfully generated
INFO:templating:Trying to generate file from template "service.yaml.j2" in "/tmp/k8s-handle"
INFO:templating:File "/tmp/k8s-handle/service.yaml" successfully generated
INFO:k8s.resource:ConfigMap "example-nginx-conf" does not exist, create it
INFO:k8s.resource:Deployment "example" does not exist, create it
INFO:k8s.resource:desiredReplicas = 1, updatedReplicas = 1, availableReplicas = None
INFO:k8s.resource:Deployment not completed on 1 attempt, next attempt in 5 sec.
INFO:k8s.resource:desiredReplicas = 1, updatedReplicas = 1, availableReplicas = None
INFO:k8s.resource:Deployment not completed on 2 attempt, next attempt in 5 sec.
INFO:k8s.resource:desiredReplicas = 1, updatedReplicas = 1, availableReplicas = 1
INFO:k8s.resource:Deployment completed on 3 attempt
INFO:k8s.resource:Service "example" does not exist, create it
$ kubectl -n k8s-handle-test get svc 
NAME      TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
example   NodePort   10.100.132.168   <none>        80:31153/TCP   52s
$ curl http://<任意节点IP>:31153
<h1>Hello world!</h1>
Deployed with k8s-handle.

文档

配置结构

k8s-handle 工作依赖两个组件:

  • config.yaml(或通过 -c 参数指定的其他 YAML 文件):存储所有部署配置
  • 模板目录:存放 Kubernetes 资源文件模板(可通过环境变量 TEMPLATES_DIR 修改路径)
环境

如果有测试、预发、生产等多环境,可通过一套模板覆盖所有环境,无需重复配置。

Common 部分

Common 部分定义所有环境共享的变量:

yaml
common:
    app_name: my-shiny-app
    app_port: 8080

这些变量会与指定环境的变量合并。Common 部分为可选。

其他部分

定义具体环境的变量:

yaml
testing:
    replicas: 1
    request_cpu: 100m 
    request_memory: 128M
    some_option: disabled

测试环境通常资源需求较低,副本数为 1。

yaml
staging:
    replicas: 2
    request_cpu: 200m 
    request_memory: 512M

预发环境用于集成测试和演示,可适当提高副本数和资源。

yaml
production-zone-1:
    replicas: 50
    request_cpu: 1000m
    request_memory: 1G
    production: "true"
    never_give_up: "true"

生产环境需处理高并发,设置高副本数和资源,并配置生产特定变量。

部署特定环境

在 CI/CD 脚本中部署指定环境:

bash
$ k8s-handle deploy -s staging # 或 testing、production-zone-1

例如在 Gitlab CI 中,可为每个环境创建手动触发任务。

模板

模板使用 Jinja2 语法,支持标准过滤器及以下特殊过滤器:

过滤器
  • {{ my_var | b64encode }} - 将 my_var 的值编码为 base64
  • {{ my_var | b64decode }} - 将 my_var 的值从 base64 解码
  • {{ my_var | hash_sha256 }} - 将 my_var 的值编码为 sha256 哈希
  • {{ my_var | to_yaml(flow_style=True, width=99999) }} - 将变量渲染为 YAML 格式(flow_style=True 为单行,False 为多行;width 为最大行宽)

注意:过滤器仅用于模板,不可用于 config.yaml

函数
  • {{ include_file('my_file.txt') }} - 导入 my_file.txt 内容(不解析),适用于将配置文件导入 ConfigMap。文件路径相对于模板目录的父目录(通常为项目根目录):
bash
$ ls -1
config.yaml
templates
my_file.txt
...
  • {{ list_files('dir/or/glob*') }} - 返回指定目录下的文件列表,适用于导入文件夹中所有文件到 ConfigMap。路径相对于模板目录的父目录。

注:两个函数均支持 Unix glob 模式,例如导入 conf.d/*.conf 所有文件。

模板配置

在 config.yaml 中指定模板:

yaml
testing:
    replicas: 1
    request_cpu: 100m 
    request_memory: 128M
    some_option: disabled
    templates:
    - template: my-deployment.yaml.j2

同一模板可在多个环境中复用:

yaml
staging:
    ...
    templates:
    - template: my-deployment.yaml.j2
    
production-zone-1:
  ...
  templates:
  - template: my-deployment.yaml.j2
模板加载路径

k8s-handle 使用 Jinja2 模板引擎,基于环境变量 TEMPLATES_DIR 指定的目录初始化。模板路径需相对于 TEMPLATES_DIR,例如:

模板目录结构:

templates /
     subdirectory /
         template_A.yaml
         template_B.yaml

在 template_A 中导入 template_B 需使用:

{% include "subdirectory/template_B.yaml" %}
标签

对于包含多个独立组件(如主应用和迁移任务)的大型

查看更多 k8s-handle 相关镜像 →
islandora/handle logo
islandora/handle
by islandora
用于为数字对象分配、管理和解析持久标识符。
10K+ pulls
上次更新:5 天前
uselagoon/backup-handler logo
uselagoon/backup-handler
by Lagoon
暂无描述
100K+ pulls
上次更新:7 天前
datadog/chaos-handler logo
datadog/chaos-handler
by Datadog
认证
暂无描述
4.4K pulls
上次更新:6 天前
grafana/usage-stats-handler logo
grafana/usage-stats-handler
by Grafana Labs
认证
Grafana使用统计处理器,用于收集、处理和管理Grafana平台的使用统计数据,支持使用情况分析与监控。
4.3K pulls
上次更新:1 年前
uselagoon/webhook-handler logo
uselagoon/webhook-handler
by Lagoon
暂无描述
10K+ pulls
上次更新:7 天前
uselagoon/actions-handler logo
uselagoon/actions-handler
by Lagoon
暂无描述
10K+ pulls
上次更新:7 天前

轩辕镜像配置手册

探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式

登录仓库拉取

通过 Docker 登录认证访问私有仓库

Linux

在 Linux 系统配置镜像服务

Windows/Mac

在 Docker Desktop 配置镜像

Docker Compose

Docker Compose 项目配置

K8s Containerd

Kubernetes 集群配置 Containerd

K3s

K3s 轻量级 Kubernetes 镜像加速

Dev Containers

VS Code Dev Containers 配置

MacOS OrbStack

MacOS OrbStack 容器配置

宝塔面板

在宝塔面板一键配置镜像

群晖

Synology 群晖 NAS 配置

飞牛

飞牛 fnOS 系统配置镜像

极空间

极空间 NAS 系统配置服务

爱快路由

爱快 iKuai 路由系统配置

绿联

绿联 NAS 系统配置镜像

威联通

QNAP 威联通 NAS 配置

Podman

Podman 容器引擎配置

Singularity/Apptainer

HPC 科学计算容器配置

其他仓库配置

ghcr、Quay、nvcr 等镜像仓库

专属域名拉取

无需登录使用专属域名

需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单

镜像拉取常见问题

轩辕镜像免费版与专业版有什么区别?

免费版仅支持 Docker Hub 访问,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。

轩辕镜像支持哪些镜像仓库?

专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等;免费版仅支持 docker.io。

流量耗尽错误提示

当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。

410 错误问题

通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。

manifest unknown 错误

先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。

镜像拉取成功后,如何去掉轩辕镜像域名前缀?

使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。

查看全部问题→

用户好评

来自真实用户的反馈,见证轩辕镜像的优质服务

oldzhang的头像

oldzhang

运维工程师

Linux服务器

5

"Docker访问体验非常流畅,大镜像也能快速完成下载。"

轩辕镜像
镜像详情
...
2gis/k8s-handle
官方博客Docker 镜像使用技巧与技术博客
热门镜像查看热门 Docker 镜像推荐
一键安装一键安装 Docker 并配置镜像源
提交工单
咨询镜像拉取问题请 提交工单,官方技术交流群:13763429
轩辕镜像面向开发者与科研用户,提供开源镜像的搜索和访问支持。所有镜像均来源于原始仓库,本站不存储、不修改、不传播任何镜像内容。
咨询镜像拉取问题请提交工单,官方技术交流群:
轩辕镜像面向开发者与科研用户,提供开源镜像的搜索和访问支持。所有镜像均来源于原始仓库,本站不存储、不修改、不传播任何镜像内容。
官方邮箱:点击复制邮箱
©2024-2026 源码跳动
官方邮箱:点击复制邮箱Copyright © 2024-2026 杭州源码跳动科技有限公司. All rights reserved.