通過kubedog助力應(yīng)用部署的狀態(tài)監(jiān)測(cè)與打印

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)變化了。

具體日志這里就不做展示了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容