1、簡(jiǎn)述
官方地址:https://github.com/werf/kubedog功能說明:Kubedog 是一個(gè)庫(kù),用于監(jiān)視和跟蹤 CI / CD 部署管道中的 Kubernetes 資源。同時(shí)它也提供了一個(gè)二進(jìn)制 cli 程序,讓我們能夠快速通過命令行對(duì)剛剛構(gòu)建成功的應(yīng)用狀態(tài)做一些觀測(cè)與打印。
2、安裝
官方在 github 已經(jīng)放置了不同系統(tǒng)的二進(jìn)制文件,直接下載添加權(quán)限即可使用,可謂開箱即用。
$ 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
添加環(huán)境變量,如果環(huán)境變量不固定,也可以在運(yùn)行的時(shí)候通過參數(shù) --kube-config 指定:
$ echo 'KUBEDOG_KUBE_CONFIG=/root/.kube/config' >> /etc/profile
$ source /etc/profile
查看參數(shù):
$ 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.
3、試用
這里重要的兩個(gè)參數(shù)是:follow,rollout,接下來通過示例分別體驗(yàn)一下兩個(gè)參數(shù)。
3.1)follow
follow 可以跟蹤資源從創(chuàng)建到 Ready 對(duì)外提供服務(wù)的整個(gè)過程,并將 pod 日志打印。
首先創(chuàng)建一個(gè)簡(jiǎn)單的示例程序:
$ kubectl apply -f tools.yml
deployment.extensions/tools created
然后使用命令監(jiān)聽程序的事件:
$ 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
注意:這個(gè)參數(shù)進(jìn)入的是終端的前臺(tái)監(jiān)聽,不會(huì)退出終端。
3.2)rollout
rollout 與 follow 對(duì)比,不會(huì)輸出 pod 運(yùn)行日志,直接打印 pod 狀態(tài)。
首先創(chuàng)建一個(gè)簡(jiǎn)單的示例程序:
$ kubectl apply -f tools.yml
deployment.extensions/tools created
然后使用命令監(jiān)聽程序的事件:
$ $kubedog rollout track -n test deployment tools
# deploy/tools become READY
$ echo $?
0
注意:我們通常可以判斷這個(gè)命令的返回值來判斷應(yīng)用部署后的狀態(tài)。另外一點(diǎn)就是這個(gè)命令不會(huì)在前臺(tái)監(jiān)聽,而且在 Jenkins 流水線中,還會(huì)輸出 pod 對(duì)應(yīng)的日志內(nèi)容。
4、實(shí)踐
我們可以直接在構(gòu)建命令后邊添加如下命令示例:
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文件部署出錯(cuò)"
throw(exc)
}
}
}
}
}
這樣在應(yīng)用部署之后,我們就可以很直觀地觀測(cè)到它在集群中的狀態(tài)變化了。
具體日志這里就不做展示了。