在每个Pod中执行命令

118 篇文章 4 订阅

查看文件中某个值

v1

for pod in $(kubectl get pod -oname -A |grep 'vastbase' ); do 
    base_name=$(echo "$pod" | sed 's|pod/||' | sed 's/-[0-9]\+-[0-9]\+$//')
    json_path="/pgdata/data/$base_name/has.dynamic.json"
    max_connections=$(ka exec -it "$pod" -c postgres -- cat $json_path | grep -o '"max_connections":[^,]*' | awk -F ':' '{print $2}' | tr -d ' ,')
    echo "$pod has max_connections $max_connections"
done

v2

for pod in $(kubectl get pod -o name -n qfusion-admin | grep 'vastbase'); do
    # 从 Pod 名称中提取基础名称
    base_name=$(echo "$pod" | sed 's/pod\/\(.*\)-[0-9]\+-[0-9]\+$/\1/')

    # 定义容器内部的 JSON 文件路径
    json_path="/pgdata/data/$base_name/has.dynamic.json"

    # 使用 kubectl exec 命令在 Pod 内部执行 cat 命令获取文件内容
    # 这里假设所有 Pod 都只有一个容器,如果多个容器需要指定容器名称
    json_content=$(kubectl exec "$pod" -n qfusion-admin -- cat "$json_path")

    # 检查是否成功获取到内容
    if [ -z "$json_content" ]; then
        echo "Failed to get content for $pod"
        continue
    fi

    # 使用 grep 和 awk 提取 max_connections 的值
    # 这里假设 max_connections 的值是直接赋值的,并且格式正确
    max_connections=$(echo "$json_content" | grep -oP '"max_connections":\s*\K\d+')

    # 输出结果
    if [ -n "$max_connections" ]; then
        echo "$pod has max_connections $max_connections"
    else
        echo "max_connections not found for $pod"
    fi
done

查看数据库配置

mkdir /tmp/parameter/

#!/bin/bash

NAMESPACE="qfusion-admin" 
CONTAINER="postgres"
#COMMAND=""

# 获取命名空间中所有 Pod 的名称
PODS=$(kubectl get pods -n $NAMESPACE -o=jsonpath='{.items[*].metadata.name}')

# 遍历每个 Pod 并执行命令
for POD in $PODS; do
  kubectl exec -it $POD -n "$NAMESPACE" -c "$CONTAINER" -- bash -c "vsql -c 'copy(select name,setting from pg_settings) to stdout with csv header';" >/tmp/parameter/${POD}.csv;
done
### 回答1: 这是一个示例yaml文件:apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: nginx image: nginx:1.7.9 - name: redis image: redis:2.8 - name: mysql image: mysql:5.6我可以提供这样的yaml文件,它可以用来在Kubernetes上运行三个Pod:apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: nginx image: nginx:1.7.9 - name: redis image: redis:2.8 - name: mysql image: mysql:5.6 ### 回答2: 在Kubernetes运行3个Pod的YAML文件需要以编排的方式定义Pod副本的数量。下面是一个示例的YAML文件: ```yaml apiVersion: v1 kind: Pod metadata: name: my-pod spec: replicas: 3 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: my-container image: my-image ``` 在这个YAML文件,我们使用了`replicas: 3`来定义了3个Pod的副本数量。另外,`selector`部分用于标识这些Pod副本的标签,这样Kubernetes可以正确地识别和管理它们。 在`template`部分,我们定义了每个Pod副本的配置。在这个示例,我们仅定义了一个名为"my-container"的容器,并指定了要使用的镜像"my-image"。 使用这个YAML文件,我们可以通过以下命令将其部署到Kubernetes集群: ```bash kubectl apply -f filename.yaml ``` 其,`filename.yaml`是你保存该YAML文件的位置。 这样,Kubernetes将会根据YAML文件定义的配置,在集群创建3个Pod的副本,并自动管理它们的状态和健康状况。 ### 回答3: 要在 Kubernetes 运行三个 pod,可以创建一个包含三个 pod 的 yaml 文件。下面是一个示例: ```yaml apiVersion: v1 kind: Pod metadata: name: pod1 spec: containers: - name: container1 image: <image_name> # 其他容器配置选项 --- apiVersion: v1 kind: Pod metadata: name: pod2 spec: containers: - name: container2 image: <image_name> # 其他容器配置选项 --- apiVersion: v1 kind: Pod metadata: name: pod3 spec: containers: - name: container3 image: <image_name> # 其他容器配置选项 ``` 通过这个 yaml 文件,我们定义了三个 Pod,分别是 `pod1`、`pod2` 和 `pod3`,每个 Pod 都包含一个容器。你需要替换 `<image_name>` 为你想要运行的容器镜像的名称。 要通过该 yaml 文件在 Kubernetes 创建这三个 Pod,可以使用 `kubectl apply` 命令: ``` kubectl apply -f <yaml_file_name>.yaml ``` 这将使用该 yaml 文件的定义自动创建三个 Pod。完成后,你可以使用 `kubectl get pods` 命令来查看已创建的 Pod 的状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值