Фон
Я создаю автомасштабирование k8s / v2beta1 HorizontalPodAutoscaler
, используя следующее json:
{
"kind": "HorizontalPodAutoscaler",
"apiVersion": "autoscaling/v2beta1",
...
"spec": {
...
"metrics": [
{
"type": "Resource",
"resource": {
"targetAverageValue": 10000, //pay attention to this value
"name": "cpu"
}
}
]
}
, но когда я маршалл HorizontalPodAutoscaler
я создал, я получаю следующий json:
{
"kind": "HorizontalPodAutoscaler",
"apiVersion": "autoscaling/v2beta1",
...
"spec": {
...
"metrics": [
{
"type": "Resource",
"resource": {
"targetAverageValue": "10k", // the value 10000 becomes "10k"
"name": "cpu"
}
}
]
}
}
Проблема в том, что Я хочу, чтобы .spec.metrics.resource.targetAverageValue
сохранил свое первоначальное значение, а не был преобразован в представление с фиксированной точкой .
Текущая попытка
Проблема вызвана структурой resource.Quantity
. .spec.metrics.resource.targetAverageValue
имеет тип resource.Quantity
, который имеет пользовательский json маршалл и анмаршалл c.
Я go через исходный код, но не могу найти метод, позволяющий resource.Quantity
сохранять свое первоначальное значение при маршалинге.
resource.Quantity
исходный код: https://github.com/kubernetes/apimachinery/blob/master/pkg/api/resource/quantity.go
Вопрос
Можно ли заменить пользовательский маршаллер на resource.Quantity
, если json.Marshall(hpa)
или resource.Quantity
имеет настройку, которая может изменить поведение func (q Quantity) MarshalJSON() ([]byte, error)