内容简介:在以往的 pipeline 中,使用 kubectl 进行部署 Deployment 后无法检查 Deployment 是否部署成功,只能通过使用命令/脚本来手动检查 Deployment 状态,而 kubedog 这个小工具完美解决了这个问题,完善了 CI/CD 流水线的最后一步。kubedog 是一个 lib 库和 CLI 小工具,允许在 CI/CD 部署 pipeline 中观察和跟踪 Kubernetes 资源。与 kustomize 配合,集成到 pipeline 之后,完美的解决了 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 制作的插件组成。我制作了一个包含 kubectl
、 kustomize
和 kubedog
的镜像。该镜像已上传 dockerhub ,需要的可以自行拉取使用 guoxudongdocker/kubectl
,而该插件的使用也在 GitHub
和 DockerHub
上查看。
而集成方式也比较简单,直接将 kubectl
、 kustomize
和 kubedog
的可执行包下载到 /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 中执行了如下几步:
- 进入 patch 所在路径
-
使用了 Kustomize 命令
kustomize edit set image {your-docker-registry}:${DRONE_BUILD_NUMBER}
方式将前面 step 中构建好的镜像的 tag 插入到 patch 中 -
使用
kubectl apply -k .
进行 k8s 部署,要注意最后的那个.
- 使用 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 正当时,云原生未来可期
。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Go基础学习记录 - 编写Web应用程 - 完善Blog Model
- Go基础学习记录 - 编写Web应用程序 - 博客编辑功能完善
- Go基础学习记录 - 编写Web应用程序 - 博客编辑完善更新功能
- 自己动手修改完善yilia主题
- 自己动手修改完善yilia主题(下)
- React入门-井字游戏实现与完善
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。