通过kubedog助力应用部署的状态监测与打印
文章发布较早,内容可能过时,阅读注意甄别。
# 1,简述
- 官方地址:https://github.com/werf/kubedog (opens new window)
- 功能说明:Kubedog 是一个库,用于监视和跟踪 CI / CD 部署管道中的 Kubernetes 资源。同时它也提供了一个二进制 cli 程序,让我们能够快速通过命令行对刚刚构建成功的应用状态做一些观测与打印。
# 2,安装
官方在 github 已经放置了不同系统的二进制文件,直接下载添加权限即可使用,可谓开箱即用。
$ wget https://storage.yandexcloud.net/kubedog/targets/releases/v0.5.0/kubedog-linux-amd64-v0.5.0
$ mv kubedog-linux-amd64-v0.5.0 /usr/bin/kubedog
$ chmod +x /usr/bin/kubedog
1
2
3
2
3
添加环境变量,如果环境变量不固定,也可以在运行的时候通过参数 --kube-config
指定:
$ echo 'KUBEDOG_KUBE_CONFIG=/root/.kube/config' >> /etc/profile
$ source /etc/profile
1
2
2
查看参数:
$ kubedog -h
Usage:
kubedog [command]
Available Commands:
follow
help Help about any command
multitrack Track multiple resources using multitrack tracker
rollout
version
Flags:
-h, --help help for kubedog
--kube-config string Path to the kubeconfig file (can be set with $KUBEDOG_KUBE_CONFIG).
--kube-context string The name of the kubeconfig context to use (can be set with $KUBEDOG_KUBE_CONTEXT).
--logs-since string A duration like 30s, 5m, or 2h to start log records from the past. 'all' to show all logs and 'now' to display only new records (default). (default "now")
-n, --namespace string If present, the namespace scope of a resource. (default "default")
--output-prefix string Arbitrary string which will be prefixed to kubedog output.
-t, --timeout int Timeout of operation in seconds. 0 is wait forever. Default is 0. (default -1)
Use "kubedog [command] --help" for more information about a command.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 3,试用
这里重要的两个参数是:follow
,rollout
,接下来通过示例分别体验一下两个参数。
# 1,follow
follow 可以跟踪资源从创建到 Ready 对外提供服务的整个过程,并将 pod 日志打印。
首先创建一个简单的示例程序:
$ kubectl apply -f tools.yml
deployment.extensions/tools created
1
2
2
然后使用命令监听程序的事件:
$ kubedog follow -n test deployment tools
# deploy/tools added
# deploy/tools rs/tools-55887db99 po/tools-55887db99-h5knt added
# deploy/tools new rs/tools-55887db99 added
# deploy/tools become READY
1
2
3
4
5
2
3
4
5
注意
:这个参数进入的是终端的前台监听,不会退出终端。
# 2,rollout
rollout 与 follow 对比,不会输出 pod 运行日志,直接打印 pod 状态。
首先创建一个简单的示例程序:
$ kubectl apply -f tools.yml
deployment.extensions/tools created
1
2
2
然后使用命令监听程序的事件:
$ $kubedog rollout track -n test deployment tools
# deploy/tools become READY
$ echo $?
0
1
2
3
4
2
3
4
注意
:我们通常可以判断这个命令的返回值来判断应用部署后的状态。另外一点就是这个命令不会在前台监听,而且在 Jenkins 流水线中,还会输出 pod 对应的日志内容。
# 4,实践
我们可以直接在构建命令后边添加如下命令示例:
stage('基于文件部署') {
when {
environment name: 'BUILD_AS_FILE',value: 'true'
}
steps {
dir("$WORKSPACE/deploy-k8s-yaml"){
script {
try {
ansiColor('xterm') {
configFileProvider([configFile(fileId: "${K8S_AUTH}", targetLocation: "admin.kubeconfig")]){
sh """
kubectl --kubeconfig admin.kubeconfig apply -f $WORKSPACE/deploy-k8s-yaml/${YAML_PATH}/${SERVICE_NAME}.yaml
kubedog --kube-config admin.kubeconfig rollout track -n ${DEPLOY_ENV} deployment ${SERVICE_NAME}
"""
}
}
}catch(exc) {
env.REASON = "基于YAML文件部署出错"
throw(exc)
}
}
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
这样在应用部署之后,我们就可以很直观地观测到它在集群中的状态变化了。
具体日志这里就不做展示了。
上次更新: 2024/11/28, 21:21:13