いくつかの比較を行うためにkubernetesスタイルの時間を秒に変換する方法

いくつかの比較を行うためにkubernetesスタイルの時間を秒に変換する方法

~から

kubectl get pods -o wide

出力は次のようになります。

some-pod-name-with-numbers-123             1/1     Running   0          6d4h      192.168.0.23   node-name-abcdeft-host.domain   <none>           <none>
some-pod-name-with-numbers-1234            1/1     Running   0          4h38m      192.168.0.24   node-name-abcdeft-host.domain   <none>           <none>
some-pod-name-with-numbers-1235            1/1     Running   0          2m38s      192.168.0.25   node-name-abcdeft-host.domain   <none>           <none>

Podの経過時間は4d3h15m3s形式で表示されます(最大2つの連続単位(日時、時、分、分、秒)のように見えますが、これは保証できません。

Podの寿命が特定のしきい値Xを超えていることを確認する必要があります。

kubectlを介してそのフィールドを秒単位で抽出する方法を見つけようとしていますが、運がありません。インターネットでプレインストールされたソリューションを検索しましたが、見つかりませんでした。

私はawkを使用して文字列を数秒に変換して$ Xより大きいかどうかを比較できると思いました。この値は設定可能です。

ベストアンサー1

ほんの数秒でKubernetesランタイムを取得するために外部プロセスを分岐する必要はありません。以下のGNU awkコードにはfx() 変換を実行するカスタム関数があり、ここで比較目的で使用できます。

kubectl get pods -o wide |
awk '
BEGIN {
    a["d"] = 24*(\
    a["h"] = 60*(\
    a["m"] = 60*(\
    a["s"] = 1)));
  }
  {
    print fx($5); # kubernetes time elapsed in seconds 
  }
  function fx(ktym,    f,u,n,t,i) {
    n = split(ktym, f, /[dhms]/, u)
    t = 0
    for (i=1; i<n; i++) {
      t += f[i] * a[u[i]] 
    }
    return t
  }
'

Bashでカスタム関数を使用するには、次のようにします。 kubernetes形式の経過時間である1つのパラメータを使用して時間を秒単位で出力する関数fx()があります。

fx() {
echo "$1" |
sed -Ee '
  s/[1-9][0-9]*[dhms]/&+ /g
  :a;s/[+]([^+].*)/\1+/;ta
  s/.$//
  :loop
    s/d/ 24h*/
    s/h/ 60m*/
    s/m/ 60s*/
    s/s//
  t loop
  s/.*/echo "&" | dc -e "?p"/e
'
}

私たちはLinuxユーティリティのコードを動的に生成しています。直流またはデスクトップ電卓RPN(逆ポーランド表記).

おすすめ記事