介紹一個小工具:Kubedog

Kubedog 是一個開源的 Golang 項目,使用 watch 方式對 Kubernetes 資源進行跟蹤,能夠方便的用於日常運維和 CI/CD 過程之中,項目中除了一個 CLI 小工具之外,還提供了一組 SDK,用戶可以將其中的 Watch 功能集成到自己的系統之中。安裝過程非常簡單,在項目網頁直接下載即可。

Kubedog CLI 有兩個功能:rollout track 和 follow。

rollout track

在 Kubernetes 上運行應用時,通常的做法是使用 kubectl apply 提交 YAML 之後,使用 kubectl get -w 或者 watch kubectl get 之類的命令等待 Pod 啟動。如果啟動成功,則進行測試等後續動作;如果啟動失敗,就需要用 kubectl logs、kubectl describe 等命令來查看失敗原因。kubedog 能在一定程度上簡化這一過程。

例如使用 kubectl run 命令創建一個新的 Deployment 資源,並使用 kubedog 跟進創建進程:

$ kubectl run nginx --image=nginx22
...
deployment.apps/nginx created
$ kubedog rollout track deployment nginx
# deploy/nginx added
# deploy/nginx rs/nginx-6cc78cbf64 added
# deploy/nginx po/nginx-6cc78cbf64-8pnjz added
# deploy/nginx po/nginx-6cc78cbf64-8pnjz nginx error: ImagePullBackOff: Back-off pulling image "nginx22"
deploy/nginx po/nginx-6cc78cbf64-8pnjz nginx failed: ImagePullBackOff: Back-off pulling image "nginx22"
$ echo $?
130

很方便的看出,運行失敗的狀態及其原因,並且可以使用返回碼來進行判斷,方便在 Pipeline 中的運行。接下來可以使用 kubectl edit 命令編輯 Deployment,修改正確的鏡像名稱。然後再次進行驗證:

$ kubectl edit deployment nginx
deployment.extensions/nginx edited
$ kubedog rollout track deployment nginx
# deploy/nginx added
# deploy/nginx rs/nginx-dbddb74b8 added
# deploy/nginx po/nginx-dbddb74b8-x4nkm added
# deploy/nginx event: po/nginx-dbddb74b8-x4nkm Pulled: Successfully pulled image "nginx"

# deploy/nginx event: po/nginx-dbddb74b8-x4nkm Created: Created container
# deploy/nginx event: po/nginx-dbddb74b8-x4nkm Started: Started container
# deploy/nginx event: ScalingReplicaSet: Scaled down replica set nginx-6cc78cbf64 to 0
# deploy/nginx become READY
$ echo $?
0

修改完成,重新運行 kubedog,會看到成功運行的情況,並且返回值也變成了 0。

follow

follow 命令的功能和 kubetail 的功能有少量重疊,可以用 Deployment/Job/Daemonset 等為單位,查看其中所有 Pod 的日誌,例如前面用的 Nginx,如果有訪問的話,就會看到如下結果:

$ kubedog follow deployment nginx
# deploy/nginx appears to be ready
# deploy/nginx rs/nginx-6cc78cbf64 added
# deploy/nginx new rs/nginx-dbddb74b8 added
# deploy/nginx rs/nginx-dbddb74b8(new) po/nginx-dbddb74b8-x4nkm added
# deploy/nginx rs/nginx-6cc54845d9 added
# deploy/nginx event: ScalingReplicaSet: Scaled up replica set nginx-6cc54845d9 to 1
# deploy/nginx rs/nginx-6cc54845d9(new) po/nginx-6cc54845d9-nhlvs added
# deploy/nginx event: po/nginx-6cc54845d9-nhlvs Pulling: pulling image "nginx:alpine"
# deploy/nginx event: po/nginx-6cc54845d9-nhlvs Pulled: Successfully pulled image "nginx:alpine"
# deploy/nginx event: po/nginx-6cc54845d9-nhlvs Created: Created container
# deploy/nginx event: po/nginx-6cc54845d9-nhlvs Started: Started container
# deploy/nginx event: ScalingReplicaSet: Scaled down replica set nginx-dbddb74b8 to 0
# deploy/nginx become READY
# deploy/nginx event: po/nginx-dbddb74b8-x4nkm Killing: Killing container with id docker://nginx:Need to kill Pod
>> deploy/nginx rs/nginx-dbddb74b8 po/nginx-dbddb74b8-x4nkm nginx
>> deploy/nginx rs/nginx-6cc54845d9(new) po/nginx-6cc54845d9-nhlvs nginx
127.0.0.1 - - [02/Jun/2019:11:35:08 +0000] "GET / HTTP/1.1" 200 612 "-" "Wget" "-"
127.0.0.1 - - [02/Jun/2019:11:35:11 +0000] "GET / HTTP/1.1" 200 612 "-" "Wget" "-"

項目地址

https://github.com/flant/kubedog


分享到:


相關文章: