大量更新
This commit is contained in:
@@ -1,68 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
harbor_host=192.168.0.10:8033
|
||||
namespace=hbyd
|
||||
app_name=""
|
||||
new_tag=""
|
||||
|
||||
upload_image_to_harbor(){
|
||||
if [ "$app_name" == "" ]; then
|
||||
echo "app name null exit!"
|
||||
exit 233
|
||||
fi
|
||||
|
||||
if ! docker load < "$1"; then
|
||||
echo "docker load error !"
|
||||
fi
|
||||
docker tag "harbor.cdcyy.com.cn/cmii/$app_name:$new_tag" "$harbor_host/cmii/$app_name:$new_tag"
|
||||
echo ""
|
||||
echo ""
|
||||
echo "upload_image_to_harbor - start to push to => $harbor_host/cmii/$app_name:$new_tag"
|
||||
docker login -u admin -p V2ryStr@ngPss $harbor_host
|
||||
docker push "$harbor_host/cmii/$app_name:$new_tag"
|
||||
echo ""
|
||||
echo ""
|
||||
|
||||
}
|
||||
|
||||
parse_args(){
|
||||
if [ "$1" == "" ]; then
|
||||
echo "no zip file in error!"
|
||||
exit 233
|
||||
fi
|
||||
local image_name="$1"
|
||||
|
||||
# cmii-uav-surveillance=5.2.0-27031-cqga=2024-03-04=573.tar.gz
|
||||
app_name=$(echo $image_name | cut -d "=" -f1)
|
||||
new_tag=$(echo $image_name | cut -d "=" -f2)
|
||||
}
|
||||
|
||||
update_image_tag(){
|
||||
if [ "$new_tag" == "" ]; then
|
||||
echo "new tag error!"
|
||||
exit 233
|
||||
fi
|
||||
|
||||
local image_prefix=$(kubectl -n ${namespace} get deployment "${app_name}" -o=jsonpath='{.spec.template.spec.containers[*].image}' | cut -d":" -f1)
|
||||
|
||||
echo "image grep is => ${image_prefix}"
|
||||
|
||||
echo "start to update ${namespace} ${app_name} to ${new_tag} !"
|
||||
echo ""
|
||||
kubectl -n ${namespace} patch deployment "${app_name}" -p "{\"spec\":{\"template\":{\"spec\":{\"containers\":[{\"name\":\"${app_name}\",\"image\": \"${harbor_host}/cmii/$app_name:${new_tag}\"}]}}}}"
|
||||
echo ""
|
||||
echo "start to wait for 3 seconds!"
|
||||
sleep 3
|
||||
local image_new=$(kubectl -n ${namespace} get deployment "${app_name}" -o=jsonpath='{.spec.template.spec.containers[*].image}')
|
||||
echo ""
|
||||
echo "new image are => $image_new"
|
||||
echo ""
|
||||
}
|
||||
|
||||
main(){
|
||||
parse_args "$1"
|
||||
upload_image_to_harbor "$1"
|
||||
update_image_tag
|
||||
}
|
||||
|
||||
main "$@"
|
||||
117
998-常用脚本/更新脚本/新更新脚本.md
Normal file
117
998-常用脚本/更新脚本/新更新脚本.md
Normal file
@@ -0,0 +1,117 @@
|
||||
### 1)先看这个 Deployment 对应的 ReplicaSet 列表
|
||||
|
||||
```bash
|
||||
kubectl -n cq-fly-260311 get rs -o wide | grep cmii-sky-converge
|
||||
```
|
||||
|
||||
更稳一点的方式,用 label 过滤:
|
||||
|
||||
```bash
|
||||
kubectl -n cq-fly-260311 get rs -l cmii.app=cmii-sky-converge
|
||||
```
|
||||
|
||||
如果你不确定 label,不妨先看 Deployment 的 selector:
|
||||
|
||||
```bash
|
||||
kubectl -n cq-fly-260311 get deploy cmii-sky-converge -o jsonpath='{.spec.selector.matchLabels}'
|
||||
echo
|
||||
```
|
||||
|
||||
### 2)从 ReplicaSet 里看 revision 和镜像
|
||||
|
||||
Deployment 的 revision 一般记录在 ReplicaSet 注解 `deployment.kubernetes.io/revision` 里。可以这样查:
|
||||
|
||||
```bash
|
||||
kubectl -n cq-fly-260311 get rs \
|
||||
-o custom-columns=NAME:.metadata.name,REVISION:.metadata.annotations.deployment\.kubernetes\.io/revision,REPLICAS:.spec.replicas,IMAGE:.spec.template.spec.containers[*].image \
|
||||
| grep cmii-sky-converge
|
||||
```
|
||||
|
||||
你会看到类似:
|
||||
|
||||
```bash
|
||||
cmii-sky-converge-6f7c8d9b4d 12 0 repo/app:v1.2.2
|
||||
cmii-sky-converge-7a8b9c0d1e 13 2 repo/app:v1.2.3
|
||||
```
|
||||
|
||||
这里通常:
|
||||
|
||||
* **最大的 revision** 是当前版本
|
||||
* **倒数第二大的 revision** 就是上一个版本
|
||||
这些历史配置是保存在 ReplicaSet 中的。([Kubernetes][1])
|
||||
|
||||
### 3)如果只是回滚到“上一个版本”
|
||||
|
||||
直接执行:
|
||||
|
||||
```bash
|
||||
kubectl -n cq-fly-260311 rollout undo deployment/cmii-sky-converge
|
||||
```
|
||||
|
||||
这是官方支持的标准写法,会把 Deployment 回滚到上一次部署状态。([Kubernetes][2])
|
||||
|
||||
### 4)如果你已经从 ReplicaSet 确认了上一个 revision,按 revision 回滚
|
||||
|
||||
例如上一个版本是 `revision=12`:
|
||||
|
||||
```bash
|
||||
kubectl -n cq-fly-260311 rollout undo deployment/cmii-sky-converge --to-revision=12
|
||||
```
|
||||
|
||||
`--to-revision` 就是官方提供的指定修订版本回滚参数。([Kubernetes][2])
|
||||
|
||||
### 5)回滚前先预览一下
|
||||
|
||||
如果你想先试运行:
|
||||
|
||||
```bash
|
||||
kubectl -n cq-fly-260311 rollout undo deployment/cmii-sky-converge --dry-run=server
|
||||
```
|
||||
|
||||
### 6)回滚后确认状态
|
||||
|
||||
```bash
|
||||
kubectl -n cq-fly-260311 rollout status deployment/cmii-sky-converge
|
||||
kubectl -n cq-fly-260311 get deploy cmii-sky-converge -o wide
|
||||
kubectl -n cq-fly-260311 get rs \
|
||||
-o custom-columns=NAME:.metadata.name,REVISION:.metadata.annotations.deployment\.kubernetes\.io/revision,REPLICAS:.spec.replicas,IMAGE:.spec.template.spec.containers[*].image \
|
||||
| grep cmii-sky-converge
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 一套可直接执行的命令
|
||||
|
||||
如果你就是想“先看上一个版本,再回滚”:
|
||||
|
||||
```bash
|
||||
# 1. 查看当前 deployment 的历史对应的 ReplicaSet 和镜像
|
||||
kubectl -n cq-fly-260311 get rs \
|
||||
-o custom-columns=NAME:.metadata.name,REVISION:.metadata.annotations.deployment\.kubernetes\.io/revision,REPLICAS:.spec.replicas,IMAGE:.spec.template.spec.containers[*].image \
|
||||
| grep cmii-sky-converge | sort -k2 -n
|
||||
|
||||
# 2. 回滚到上一个版本
|
||||
kubectl -n cq-fly-260311 rollout undo deployment/cmii-sky-converge
|
||||
|
||||
# 3. 查看回滚结果
|
||||
kubectl -n cq-fly-260311 rollout status deployment/cmii-sky-converge
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 如果你想精确拿到“上一个 ReplicaSet 的镜像”
|
||||
|
||||
可以用这个:
|
||||
|
||||
```bash
|
||||
kubectl -n cq-fly-260311 get rs \
|
||||
-o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.metadata.annotations.deployment\.kubernetes\.io/revision}{"\t"}{.spec.template.spec.containers[*].image}{"\n"}{end}' \
|
||||
| grep cmii-sky-converge | sort -k2 -n
|
||||
```
|
||||
|
||||
然后选倒数第二行,就是上一个版本的 revision 和镜像。
|
||||
|
||||
你要的话,我可以再给你一版 **一行 shell 命令**,自动找出 `cmii-sky-converge` 的上一个 revision 并直接执行回滚。
|
||||
|
||||
[1]: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/?utm_source=chatgpt.com "Deployments - Kubernetes"
|
||||
[2]: https://kubernetes.io/zh-cn/docs/reference/kubectl/generated/kubectl_rollout/kubectl_rollout_undo/?utm_source=chatgpt.com "kubectl rollout undo | Kubernetes"
|
||||
48
998-常用脚本/更新脚本/配合dltu的镜像更新脚本.sh
Normal file
48
998-常用脚本/更新脚本/配合dltu的镜像更新脚本.sh
Normal file
@@ -0,0 +1,48 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 1. 定义命名空间
|
||||
NAMESPACE="bj-sh-uas-260511"
|
||||
|
||||
IMAGE_NAME_PREFIX="192.168.3.31:8088/cmii"
|
||||
|
||||
# 检查输入文件是否存在
|
||||
if [ ! -f "$1" ]; then
|
||||
echo "使用方法: $0 <镜像列表文件>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "开始更新命名空间 ${NAMESPACE} 下的 Deployment..."
|
||||
|
||||
# 2. 逐行读取文件内容
|
||||
while IFS= read -r line || [ -n "$line" ]; do
|
||||
# 忽略空行
|
||||
[ -z "$line" ] && continue
|
||||
|
||||
# 以 = 为分隔符提取:
|
||||
# 第3项为 Deployment 名称
|
||||
# 第4项为 镜像 Tag
|
||||
DEPLOY_NAME=$(echo "$line" | cut -d'=' -f3)
|
||||
IMAGE_TAG=$(echo "$line" | cut -d'=' -f4 | sed 's/.tar.gz//')
|
||||
|
||||
# 假设容器名称(Container Name)与 Deployment 名称一致
|
||||
# 这是 Kubernetes 部署中的常见规范。如果不一致,请修改 --image 后面的第一个参数。
|
||||
IMAGE_NAME="${IMAGE_NAME_PREFIX}/${DEPLOY_NAME}:${IMAGE_TAG}"
|
||||
|
||||
echo "------------------------------------------------"
|
||||
echo "正在更新: ${DEPLOY_NAME}"
|
||||
echo "目标版本: ${IMAGE_TAG}"
|
||||
|
||||
# 3. 使用 kubectl 执行更新
|
||||
# 格式:kubectl set image deployment/<name> <container_name>=<new_image> -n <ns>
|
||||
kubectl set image deployment/"${DEPLOY_NAME}" "${DEPLOY_NAME}"="${IMAGE_NAME}" -n "${NAMESPACE}"
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "✅ 提交成功"
|
||||
else
|
||||
echo "❌ 提交失败,请检查 Deployment 名称是否正确"
|
||||
fi
|
||||
|
||||
done < "$1"
|
||||
|
||||
echo "------------------------------------------------"
|
||||
echo "所有更新指令已发送完毕。"
|
||||
Reference in New Issue
Block a user