Skip to content

15 在k8s集群中实现镜像的版本管理和部署

Jinxin Chen edited this page May 9, 2020 · 2 revisions

本文介绍如何结合ytt工具来实现k8s集群的image tag管理和部署

问题

由于yaml文件无法使用变量,当服务更新时,无法直接通过yaml文件更新image的版本来部署。

ytt工具

ytt 是一个结构化的yaml模板工具,可以通过传入变量来生成目标yaml文件。

以ubuntu为例,安装ytt工具:

wget https://github.com/k14s/ytt/releases/download/v0.22.0/ytt-linux-amd64
chmod +x ytt-linux-amd64
sudo mv ytt-linux-amd64 /usr/local/bin/ytt
ytt version

ytt工具使用

管理image tag,会用到的ytt语法包含:

    1. Variable
    1. Load data values
    1. Text template
    1. Multiple data values
  • --data-value key=value

假设未使用ytt的yaml如下:

    spec:
      containers:
      - image: http://local_registry/image_name:latest

使用ytt工具后的yaml如下:

#@ load("@ytt:data", "data")

    spec:
      containers:
      - image: #@ data.values.image

额外需要用到的配置文件(values.yaml)如下:

#@data/values
---
image:

使用ytt的命令格式如下:

ytt -f k8s/deploy.yaml -f k8s/values.yaml --data-value image=$image | kubectl apply -f-

version的自动生成与增长

treeder/bump镜像可以帮助实现版本的自动增长,用法参考treeder/bump

可以用如下脚本来实现version的自动生成与增长:

#!/bin/bash

set -e

env="$1"
versionFile=".VERSION"

if [ -z "$env" ]; then
    env="stage"
fi

echo "deploy $env"


if [ ! -f "$versionFile" ]; then
    echo "0.0.0" > "$versionFile"
fi

echo "bump version"
docker run --rm -v "$PWD":/app treeder/bump --filename "$versionFile"
version=`cat $versionFile`

也可单独创建version.sh文件,用于生成version:

#!/bin/bash
set -e

versionFile="$1"
# if versionFile not given, set default file name
if [ -z "$versionFile" ]; then
    versionFile=".VERSION"
fi

# if file not exists, set default version
if [ ! -f "$versionFile" ]; then
    echo "0.0.0" > "$versionFile"
fi

echo "bump version"
# using treeder/bump to bump version
docker run --rm -v "$PWD":/app treeder/bump --filename "$versionFile"
Clone this wiki locally