-
Notifications
You must be signed in to change notification settings - Fork 0
15 在k8s集群中实现镜像的版本管理和部署
Jinxin Chen edited this page May 9, 2020
·
2 revisions
本文介绍如何结合ytt工具来实现k8s集群的image tag管理和部署
由于yaml文件无法使用变量,当服务更新时,无法直接通过yaml文件更新image的版本来部署。
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
管理image tag,会用到的ytt语法包含:
-
- Variable
-
- Load data values
-
- Text template
-
- 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-
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"