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 中配置这个部署系统的,而这个 工具 可以进一步节约你的工作量(不过也需要折腾),有兴趣可以了解下。


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

查看所有标签

猜你喜欢:

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

Data Structures and Algorithms with JavaScript

Data Structures and Algorithms with JavaScript

Michael McMillan / O'Reilly Media / 2014-2-22 / USD 28.51

If you’re using JavaScript on the server-side, you need to implement classic data structures that conventional object-oriented programs (such as C# and Java) provide. This practical book shows you how......一起来看看 《Data Structures and Algorithms with JavaScript》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

html转js在线工具
html转js在线工具

html转js在线工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换