使用 Kustomize 帮你管理 kubernetes 应用(五):配合 kubedog 完善 CI/CD 的最后一步

简介: 在以往的 pipeline 中,使用 kubectl 进行部署 Deployment 后无法检查 Deployment 是否部署成功,只能通过使用命令/脚本来手动检查 Deployment 状态,而 kubedog 这个小工具完美解决了这个问题,完善了 CI/CD 流水线的最后一步。

在以往的 pipeline 中,使用 kubectl 进行部署 Deployment 后无法检查 Deployment 是否部署成功,只能通过使用命令/脚本来手动检查 Deployment 状态,而 kubedog 这个小工具完美解决了这个问题,完善了 CI/CD 流水线的最后一步。

KubeDog

kubedog 是一个 lib 库和 CLI 小工具,允许在 CI/CD 部署 pipeline 中观察和跟踪 Kubernetes 资源。与 kustomize 配合,集成到 pipeline 之后,完美的解决了 CI/CD 的最后一步,完美的替代了之前不够灵活的脚本(好吧,其实我也开发了类似的小工具,但是有这么好用的轮子,拿来直接用何乐而不为呢?)。

kubedog 提供了 lib 库和 CLI 小工具,这里由于是介绍 CI/CD 中的实践,所以只介绍其中的 rollout track 功能。 lib 库的使用和 CLI 的 follow 功能这里就不做介绍了,有兴趣的同学可以去 GitHub 上查看该项目的各种使用方式。

集成 KubeDog

由于我司目前使用的是 drone 进行 CI ,每个 step 都是由一个 docker 制作的插件组成。我制作了一个包含 kubectlkustomizekubedog 的镜像。该镜像已上传 dockerhub ,需要的可以自行拉取使用 guoxudongdocker/kubectl ,而该插件的使用也在 GitHubDockerHub 上查看。

而集成方式也比较简单,直接将 kubectlkustomizekubedog 的可执行包下载到 /usr/local/bin 并赋予执行权限即可,下面就是 Dockerfile 文件:

FROM alpine

LABEL maintainer="sunnydog0826@gmail.com"

ENV KUBE_LATEST_VERSION="v1.14.1"

RUN apk add --update ca-certificates \
 && apk add --update -t deps curl \
 && curl -L https://storage.googleapis.com/kubernetes-release/release/${KUBE_LATEST_VERSION}/bin/linux/amd64/kubectl -o /usr/local/bin/kubectl \
 && chmod +x /usr/local/bin/kubectl \
 && curl -L https://github.com/kubernetes-sigs/kustomize/releases/download/v2.0.3/kustomize_2.0.3_linux_amd64 -o /usr/local/bin/kustomize \
 && chmod +x /usr/local/bin/kustomize \
 && curl -L https://dl.bintray.com/flant/kubedog/v0.2.0/kubedog-linux-amd64-v0.2.0 -o /usr/local/bin/kubedog \
 && chmod +x /usr/local/bin/kubedog \
 && apk del --purge deps \
 && rm /var/cache/apk/*


WORKDIR /root
ENTRYPOINT ["kubectl"]
CMD ["help"]

Kustomize 配合 KubeDog 使用

在镜像构建好之后就可以直接使用了,这里使用的是 DockerHub 的镜像仓库,这里建议将镜像同步到私有仓库,比如阿里云的容器镜像服务或者 Habor ,因为国内拉取 DockerHub 的镜像不太稳定,经常会拉取镜像失败或者访问超时,在 CI/CD 流水线中推荐使用更稳定镜像。

以下是 .drone.yml 示例:

kind: pipeline
name: {your-pipeline-name}

steps:
- name: Kubernetes 部署
  image: guoxudongdocker/kubectl
  volumes:
  - name: kube
    path: /root/.kube
  commands:
    - cd deploy/overlays/dev    # 这里使用 kustomize ,详细使用方法请见 https://github.com/kubernetes-sigs/kustomize
    - kustomize edit set image {your-docker-registry}:${DRONE_BUILD_NUMBER}
    - kubectl apply -k . && kubedog rollout track deployment {your-deployment-name} -n {your-namespace} -t {your-tomeout}

...

volumes:
- name: kube
  host:
    path: /tmp/cache/.kube  # kubeconfig 挂载位置

trigger:
  branch:
  - master  # 触发 CI 的分支

从上面的配置可见,在该 step 中执行了如下几步:

  1. 进入 patch 所在路径
  2. 使用了 Kustomize 命令 kustomize edit set image {your-docker-registry}:${DRONE_BUILD_NUMBER} 方式将前面 step 中构建好的镜像的 tag 插入到 patch 中
  3. 使用 kubectl apply -k . 进行 k8s 部署,要注意最后的那个 .
  4. 使用 kubedog 跟踪 Deployment 部署状态

命令解析:kubedog rollout track deployment {your-deployment-name} -n {your-namespace} -t {your-tomeout}

  • deployment {your-deployment-name} : Deployment 的名称
  • -n {your-namespace} : Deployment 所在的 namespace
  • -t {your-tomeout} : 超时时间,单位为秒,超时后会报错,这里请根据实际部署情况进行设置

结语

从 Kubernetes release v1.14 版本开始,kustomize 集成到 kubectl 中,越来越多 k8S 周边的小工具出现。这些小工具的出现帮助了 Kubernetes 的使用者来拉平 Kubernetes 的使用曲线,同时也标志着 K8S 的成熟,越来越多的开发人员基于使用 K8S 的痛点开发相关工具。套用一句今年 KubeCon 的 Keynote 演讲上,阿里云智能容器平台负责人丁宇的话: Kubernetes 正当时,云原生未来可期

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
2月前
|
存储 Kubernetes 持续交付
介绍一下Kubernetes的应用场景
【10月更文挑战第18天】介绍一下Kubernetes的应用场景。
154 3
|
18天前
|
监控 持续交付 Docker
Docker 容器化部署在微服务架构中的应用有哪些?
Docker 容器化部署在微服务架构中的应用有哪些?
|
18天前
|
监控 持续交付 Docker
Docker容器化部署在微服务架构中的应用
Docker容器化部署在微服务架构中的应用
|
26天前
|
JavaScript 持续交付 Docker
解锁新技能:Docker容器化部署在微服务架构中的应用
【10月更文挑战第29天】在数字化转型中,微服务架构因灵活性和可扩展性成为企业首选。Docker容器化技术为微服务的部署和管理带来革命性变化。本文探讨Docker在微服务架构中的应用,包括隔离性、可移植性、扩展性、版本控制等方面,并提供代码示例。
56 1
|
2月前
|
JSON Kubernetes 容灾
ACK One应用分发上线:高效管理多集群应用
ACK One应用分发上线,主要介绍了新能力的使用场景
|
2月前
|
应用服务中间件 调度 nginx
Kubernetes的Pod调度:让你的应用像乘坐头等舱!
Kubernetes的Pod调度:让你的应用像乘坐头等舱!
|
2月前
|
存储 Kubernetes 负载均衡
基于Ubuntu-22.04安装K8s-v1.28.2实验(四)使用域名访问网站应用
基于Ubuntu-22.04安装K8s-v1.28.2实验(四)使用域名访问网站应用
32 1
|
2月前
|
存储 Kubernetes 监控
深度解析Kubernetes在微服务架构中的应用与优化
【10月更文挑战第18天】深度解析Kubernetes在微服务架构中的应用与优化
123 0
|
2月前
|
运维 Kubernetes 负载均衡
深入探索Kubernetes在微服务架构中的应用
【10月更文挑战第18天】深入探索Kubernetes在微服务架构中的应用
80 0
|
2月前
|
存储 Kubernetes 调度
k8s学习--k8s群集部署zookeeper应用及详细解释
k8s学习--k8s群集部署zookeeper应用及详细解释