keel-hq/keel

GitHub: keel-hq/keel

轻量级 Kubernetes Operator,通过注解配置自动更新 Helm charts 和各类工作负载的容器镜像版本

Stars: 2695 | Forks: 312

Go Report Docker Pulls

# Keel - 面向大众的自动化 Kubernetes 部署工具 * 网站 [https://keel.sh](https://keel.sh) * Slack - [kubernetes.slack.com](https://kubernetes.slack.com) 查找频道 #keel Keel 是一个用于自动化 [Kubernetes](https://kubernetes.io/) 部署更新的工具。Keel 是无状态的、健壮且轻量级的。 Keel 提供了几个关键特性: * __[Kubernetes](https://kubernetes.io/) 和 [Helm](https://helm.sh) 提供商__ - Keel 与 Kubernetes 和 Helm 直接集成。 * __无 CLI/API__ - 厌倦了到处都是 `f***ctl`?Keel 没有这些。它通过标签、注解和图表完成任务。 * __Semver 策略__ - 单独为每个部署/Helm release 指定更新策略。 * __自动 [Google Container Registry](https://cloud.google.com/container-registry/) 配置__ - Keel 通过定期扫描您的环境,自动为您的部署镜像设置主题和订阅。 * __[原生、DockerHub、Quay 和 Azure 容器仓库 Webhooks](https://keel.sh/docs/#triggers) 支持__ - 一旦收到 webhook,受影响的部署将被识别并更新。 * __[轮询](https://keel.sh/docs/#polling)__ - 当 webhooks 和 pubsub 不可用时,Keel 仍然可以通过检查 Docker Registry 中的新标签(如果当前标签是 semver)或相同标签的 SHA digest 变化(例如:`latest`)来发挥作用。 * __通知__ - 开箱即用,Keel 支持 Slack、Hipchat、Mattermost 和标准 webhook 通知,更多信息请见 [这里](https://keel.sh/docs/#notifications)

### Helm 快速入门 前置条件: * [Helm](https://docs.helm.sh/using_helm/#installing-helm) * Kubernetes 您需要将此 Chart 仓库添加到 Helm: ``` helm repo add keel https://keel-hq.github.io/keel/ helm repo update ``` 通过 Helm 安装(默认启用 Helm 提供商): ``` helm upgrade --install keel --namespace=kube-system keel/keel ``` 如果您主要使用常规的 Kubernetes manifests,可以安装不带 Helm 提供商支持的 Keel: ``` helm upgrade --install keel --namespace=keel keel/keel --set helmProvider.enabled="false" ``` 要为 Helm v3 安装,请设置 helmProvider.version="v3"(默认为 "v2"): ``` helm install keel keel/keel --set helmProvider.version="v3" ``` 使用 terraform 安装: ``` resource "helm_release" "keel" { provider = helm.helm name = "keel" namespace = "keel" repository = "https://keel-hq.github.io/keel" chart = "keel" version = "v1.0.4" set { name = "basicauth.enabled" value = "true" } set { name = "basicauth.user" value = "admin" } set { name = "basicauth.password" value = "admin" } set { name = "image.repository" value = "keelhq/keel" } set { name = "image.tag" value = "0.19.1" } } ``` 完成,现在请查看 [配置](https://github.com/keel-hq/keel#configuration) 章节。 ### 快速入门

在 Keel 网站上可以查看在 Kubernetes 集群上安装 Keel 的分步指南: [https://keel.sh/examples/#example-1-push-to-deploy](https://keel.sh/examples/#example-1-push-to-deploy) ### 配置 部署 Keel 后,您只需在部署文件或 Helm chart 上指定更新策略: ``` apiVersion: apps/v1 kind: Deployment metadata: name: wd namespace: default labels: name: "wd" annotations: keel.sh/policy: minor # <-- policy name according to https://semver.org/ keel.sh/trigger: poll # <-- actively query registry, otherwise defaults to webhooks spec: template: metadata: name: wd labels: app: wd spec: containers: - image: karolisr/webhook-demo:0.0.8 imagePullPolicy: Always name: wd command: ["/bin/webhook-demo"] ports: - containerPort: 8090 ``` 不需要额外的配置。为您的工作负载启用持续交付从未如此简单! ### 文档 文档可在 Keel 网站上查看: [https://keel.sh/docs/#introduction](https://keel.sh/docs/#introduction) ### 开发 Keel 如果您希望参与 Keel 本身的开发,您需要安装 Go 1.12+。确保将 Keel 放入正确的 Gopath 并执行 `go build`(依赖管理通过 [dep](https://github.com/golang/dep) 完成)。 要在开发时测试 Keel: 1. 启动一个 Kubernetes 集群,如 Minikube 或带 Kubernetes 的 Docker for Mac。 2. 更改配置以使用它:`kubectl config use-context docker-for-desktop` 3. 从 `cmd/keel` 目录构建 Keel。 4. 启动 Keel:`keel --no-incluster`。这将使用您主目录中的 Kubeconfig。 ### 在 Windows 上调试 Keel ``` # 确保我们有 gcc 和 go choco upgrade mingw -y choco upgrade golang -y # 移动并构建 cd cmd/keel go build $Env:XDG_DATA_HOME = $Env:APPDATA; # Data volume for the local database $Env:HOME = $Env:USERPROFILE; # This is where the .kube/config will be read from $Env:KUBERNETES_CONTEXT = "mycontext" #Use if you have more than one context in .kube/config .\keel --no-incluster ``` ### 运行单元测试 获取测试解析器(使输出更美观): ``` go get github.com/mfridman/tparse ``` 运行单元测试: ``` make test ``` ### 运行 e2e 测试 前置条件: - 已配置 kubectl + kubeconfig - 一个正在运行的集群(测试套件将创建测试命名空间并在测试后删除它们) - Go 环境(将在运行前编译 Keel) 前置条件准备好后: ``` make e2e ``` ### 在容器内针对远程集群调试 keel (Windows) 仓库中包含一个调试版本的 keel 容器,可用于远程调试。 您可以使用 powershell 启动调试容器(需要 docker desktop): ``` .\build.ps1 -StartDebugContainers ``` 要连接到您的集群,请从集群内 keel pod 的以下位置复制身份验证详细信息: ``` /var/run/secrets/kubernetes.io/serviceaccount ``` 到仓库根目录下的 serviceaccount 文件夹,并确保为 K8S 管理 API 端点设置环境变量: ``` # 可以在 envesttings.ps1 中配置,以便 build script 自动获取 $ENV:KUBERNETES_SERVICE_HOST = "mycluster-o5ff3caf.hcp.myregion.azmk8s.io" $ENV:KUBERNETES_SERVICE_PORT = "443" ``` 并确保您的 API server 可从您的客户端访问(VPN、IP 白名单或任何您用来保护集群管理 API 的方式)。 启动后,只需在 Go 调试器(例如 Jetbrains GoLand)中使用调试选项: [在 Docker 容器内调试 Go 应用程序 | The GoLand Blog](https://blog.jetbrains.com/go/2020/05/06/debugging-a-go-application-inside-a-docker-container/)
标签:CD, DaemonSet, Deployment, Docker, DockerHub, EVTX分析, Google Cloud Registry, Go语言, Helm, Operator, Quay, Semver, Slack通知, StatefulSet, Webhook, 力导向图, 子域名突变, 安全可观测性, 安全防御评估, 容器编排, 持续部署, 无状态, 日志审计, 版本控制, 程序破解, 自动化更新, 自动化运维, 请求拦截, 镜像更新