用go写一个程序,要求通过传参数,namspace ,tag,deployment自动更新K8S集群的无状态服务
时间: 2024-02-25 12:52:22 浏览: 65
以下是一个通过传参自动更新K8S集群无状态服务的Go程序示例:
```go
package main
import (
"flag"
"fmt"
"os"
"os/exec"
)
func main() {
// 定义命令行参数
namespace := flag.String("namespace", "", "Kubernetes namespace")
tag := flag.String("tag", "", "Docker image tag")
deployment := flag.String("deployment", "", "Kubernetes deployment name")
flag.Parse()
// 校验参数
if *namespace == "" || *tag == "" || *deployment == "" {
fmt.Println("Usage: ./update-k8s-service --namespace=your-namespace --tag=your-image-tag --deployment=your-deployment-name")
os.Exit(1)
}
// 使用 kubectl 命令更新 Deployment
cmd := exec.Command("kubectl", "set", "image", "deployment/"+*deployment, "*=*:"+*tag, "-n", *namespace)
err := cmd.Run()
if err != nil {
fmt.Println("Error:", err)
os.Exit(1)
}
fmt.Println("Deployment", *deployment, "in namespace", *namespace, "is updated to image with tag", *tag)
}
```
你可以通过以下命令来运行该程序:
```bash
go run update-k8s-service.go --namespace=your-namespace --tag=your-image-tag --deployment=your-deployment-name
```
其中,`your-namespace` 是你的 Kubernetes 命名空间名,`your-image-tag` 是你的 Docker 镜像标签名,`your-deployment-name` 是你的 Deployment 名称。运行该命令后,该程序会使用 kubectl 命令来更新指定的 Deployment。注意,你需要在运行该命令前确保已经正确配置了 kubectl,并且该命令所在的用户拥有更新 Deployment 的权限。
阅读全文