寻找执行 Kubernetes CreationTimestamp -> AGE 的 go 代码



我试图得到"AGE"来自kubernetes API的列值,如命令输出

> kubectl get po
NAME                                        READY   STATUS    RESTARTS   AGE
ingress-nginx-controller-56c75d774d-d7zx8   1/1     Running   1          29d
nfs-client-provisioner-5cd984898b-s8fzh     1/1     Running   1          13d
func getVolumes() VolumesOutput {
userNamespace := "test"
listOptions := metav1.ListOptions{
Limit: 100,
}
volumeList, err := ClientSet.CoreV1().PersistentVolumeClaims(userNamespace).List(listOptions)
if err != nil {
// handle err
}
volumeItems := volumeList.Items
volumes := make([]Volume, 0)
if len(volumeItems) > 0 {
for _, volumeItem := range volumeItems {
quant := volumeItem.Spec.Resources.Requests[v1.ResourceStorage]
volume := Volume{
Name: volumeItem.Name,
Capacity: quant.String(),
Age:      volumeItem.ObjectMeta.CreationTimestamp.String(),
UserID:   UserID,
}
volumes = append(volumes, volume)
}
} else {
fmt.Println("no volumes found")
}
log.Println(volumes)
vol := VolumesOutput{
Volumes: volumes,
}
return vol
}

我可以在

中获取CreationTimestamp
Age:      volumeItem.ObjectMeta.CreationTimestamp.String(),

我试图找到从时间到AGE转换的代码,但在kubernetes github repo中找不到。

我喜欢将其转换为与kubectl中的相同。所以请给我一个例子,并指出在repo上正确的行。

由于ObjectMeta.CreationTimestamptime.Time类型,您可以简单地使用Time.Sub()来获得当前时间和创建时间戳之间的差值,这将为您提供资源的年龄。

您可以使用time.Now()来获取当前时间戳。

package main
import (
"fmt"
"time"
)
func main() {
currentTime := time.Now()
creationTime := currentTime.Add(time.Hour * 12)

diff := creationTime.Sub(currentTime)
fmt.Println("Age:", diff)
}

输出:

Age: 12h0m0s

注意:由于创建时间通常在当前时间之前,因此上面的内容仅用于示例目的。

相关内容

  • 没有找到相关文章

最新更新