#!/bin/bash
check_unavailable() {
deployments=$(kubectl get deploy -n "${NAMESPACE}" -o=jsonpath="{range .items[*]}{.metadata.name}{'\t'}{.status.unavailableReplicas}{'\n'}{end}")
while read -r line; do lines+=("$line"); done <<<"$deployments"
for line in "${lines[@]}"
do
read -ra arr <<< "$line"
if [ "${arr[1]}" ]; then
echo "${arr[0]} deployment has ${arr[1]} unavailable Replicas "
fi
done
}
check_unavailable
#/bin/bash
# Cause deployment script to exit immediately if there is any failure, presumably in the `wait` commands
set -e
# This could be any action that generates kubernetes deployment(s)
kubectl apply -k "$DEPLOYMENT_DIR"
# Monitor the status of the web service worker
kubectl rollout status deployment.apps/app1-service &
_service=$!
# Monitor the status of the background worker deployment
kubectl rollout status deployment.apps/app1-background &
_background=$!
# Wait for all deployments to complete (or any of them to fail)
wait $_service
wait $_background
echo "Deployment complete"
4条答案
按热度按时间j9per5c41#
也许在所有部署中使用基本的
watch
命令?字符串
然后检查READY列。
还是我没抓住重点
hmae6n7t2#
我不太清楚你是什么意思。
正如@Marc ABOUCHACRA所指出的,你可以使用
watch
。这可以通过使用-w
标志来完成,比如kubectl get deployments -w
。但这仅提供了有关状态Desired/Current/Up-to-date/Available的信息。
字符串
您可以定义就绪探测器。
有时,应用程序暂时无法提供流量。例如,应用程序可能需要在启动期间加载大量数据或配置文件,或者在启动后依赖外部服务。在这种情况下,您不希望终止应用程序,但你我也不想向它发送请求。Kubernetes提供了就绪探测器来检测和缓解这些情况。一个包含容器的pod报告它们没有ready不通过Kubernetes服务接收流量。
**注意:**Readiness探针在容器的整个生命周期中运行。
型
或者只使用部署状态,
Deployment在其生命周期中会进入各种状态。它可以在推出新的ReplicaSet时进行,也可以完成,或者无法进行。
型
bcs8qyzn3#
如果所有的部署都在同一个命名空间中,你可以这样运行:
字符串
这也适用于具有多容器pod的部署。
u5rb5r594#
我使用的集群运行多个应用程序,每个应用程序都可以独立部署,因此检查 * 任何 * 不可用/正在进行的部署都不起作用。
我们的方法对发布过程做了一些假设:
spec.progressDeadlineSeconds
是为发行版中的每个Deployment
适当设置的以一个具有Web服务工作者和后台工作者的应用程序发布为例,我们的部署脚本可能如下所示:
字符串
rollout status
检查和相应的wait
操作应与作为发布的一部分进行监控的Deployment
s/DaemonSet
s/etc匹配。