Helm 实践之持续交付

栏目: 编程工具 · 发布时间: 6年前

内容简介:这是 Helm 系列的第三篇,在前两篇中,我介绍了 Helm 的入门 以及配置实践,而今天我们来说说 Helm 持续发布的实践。其实继续之前可以稍稍复习下,参看我之前关于持续交付的文章持续交付的实践与思考。好了,接下来我主要以 Gitlab CI 为例来说明,需要你有一定的 Gitlab CI 基础,或者先看看这几篇文章也行:

这是 Helm 系列的第三篇,在前两篇中,我介绍了 Helm 的入门 以及配置实践,而今天我们来说说 Helm 持续发布的实践。

其实继续之前可以稍稍复习下,参看我之前关于持续交付的文章持续交付的实践与思考。

好了,接下来我主要以 Gitlab CI 为例来说明,需要你有一定的 Gitlab CI 基础,或者先看看这几篇文章也行:

准备工作

Git 项目

你需要按照我在入门篇中描述的,把你所需要的这个 Chart 用 Git 管理,同时按照配置管理的做法,将 secrets values 使用 PGP 管理(用云服务提供的密钥管理其实也是类似的)。

部署镜像

这个镜像中安装好 kubectl,helm,helm-secrets,sops 等,这样,你就不用每次都需要重新安装了。

当然,你也可以直接用我的,修改下涉及到的版本号即可,而在国内可能需要翻墙,设置下 http_proxy 以及 https_proxy 即可。

FROM alpine:3.7

RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories \
  && apk update --no-cache \
  && apk add --no-cache bash curl wget gnupg openssh-client bash gettext git

ARG KUBECTL_VERSION=1.9.3
RUN wget --no-check-certificate -O /usr/local/bin/kubectl https://storage.googleapis.com/kubernetes-release/release/v${KUBECTL_VERSION}/bin/linux/amd64/kubectl \
  && chmod +x /usr/local/bin/kubectl

ARG HELM_VERSION=2.9.1
RUN wget --no-check-certificate https://storage.googleapis.com/kubernetes-helm/helm-v$HELM_VERSION-linux-amd64.tar.gz \
  && tar -xf helm-v$HELM_VERSION-linux-amd64.tar.gz \
  && mv linux-amd64/helm /usr/local/bin \
  && rm helm-v$HELM_VERSION-linux-amd64.tar.gz \
  && rm -r linux-amd64 \
  && helm init --client-only

ARG SOPS_VERSION=3.0.5
RUN wget --no-check-certificate -O /usr/local/bin/sops https://github.com/mozilla/sops/releases/download/$SOPS_VERSION/sops-$SOPS_VERSION.linux \
  && chmod +x /usr/local/bin/sops \
  && helm plugin install https://github.com/futuresimple/helm-secrets

然后编译镜像后推到镜像服务中心即可:

$ docker build . -t registry.example.com/your-custom-helm-image
$ docker push registry.example.com/your-custom-helm-image

完整流程

现在我们开始用一个比较完整的例子来说明,会介绍得比较快,请系好安全带 :see_no_evil:。

0、我们的需要部署项目的结构大致如下:

app/
    ...
deploy/
    chart/
        ...
    vars/production/values.yaml
    vars/production/secrets.yaml
    ...
    deploy-k8s.sh
Dockerfile
.sops.yaml
.gitlab-ci.yaml

1、 导出 PGP 密钥的私钥,先确认需要导出的 key 的 ID:

$ gpg --list-secret-keys

然后导出:

$ gpg --export-secret-keys your-gpg-id > private.asc

2、将私钥(private.asc 的内容)添加到 CI&CD pipeline Variables,名称可以定为 PGP_KEYS

3、同时,你需要一个类似如下的部署脚本,在部署阶段运行:

# Usage: ./deploy-k8s.sh tag-name
helm-wrapper upgrade --install your-app-release-name \
    --namespace your-space \
    -f ./deploy/vars/production/values.yaml \
    -f ./deploy/vars/production/secrets.yaml \
    --set image.tag=$1 \
    --wait \
    ./deploy/chart

4、准备 Gitlab CI 的配置,以下是部分可参考内容:

deploy:
  stage: deploy
  image: registry.example.com/your-custom-helm-image:latest
  before_script:
    # 在 Pipeline Variables 中配置 PGP_KEYS 为导出的 PGP 私钥
    # 理想情况下,每个 git 项目应该用不同的密钥
    - echo "$PGP_KEYS" | gpg --import
  script:
    - ./deploy/deploy-k8s.sh $CI_COMMIT_REF_SLUG
  environment:
    name: production
  when: manual # 手动发布
  only:
    - tags # 只发布打了 tag 的 commit

5、提交,测试没问题后创建一个 tag 就可以手工点击发布了。

P.S.

最后介绍一个项目: weaveworks/flux ,既所谓的 GitOps,其实就是帮你自动化部署在 Git 中管理的 helm chart,在上面说的的实践中,我们都是需要手工去 CI&CD 中配置这个部署系统的,而这个 工具 可以进一步节约你的工作量(不过也需要折腾),有兴趣可以了解下。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

失控的真相

失控的真相

[美] 迈克尔·帕特里克·林奇 / 赵亚男 / 中信出版社 / 2017-6 / 42.00元

编辑推荐 在信息泛滥的时代,知识变得无处不在。鼠标轻轻一点,我们就坐拥一座巨型图书馆。然而,我们并没有因此就离真相更近。相反,互联网的普及使人们早已习惯于凡事问搜索引擎,并形成了一种“搜索即相信”的认知模式。当社交网络把数字人类带入一个个彼此隔绝的线上群体中,我们清楚地看到,真相与谎言在互联网中交织,知识与观念混为一谈,情绪宣泄掩盖了事实分析。联网的世界让我们更容易看到彼此的观点,但同时也制......一起来看看 《失控的真相》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

URL 编码/解码
URL 编码/解码

URL 编码/解码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具