Я не уверен, что название соответствует правильной терминологии. Но я в основном хочу использовать go-client и получить kubectl-совместимые объекты (yamls).
т.е. ресурс развертывания будет:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.15.4
ports:
- containerPort: 80
Я могу получить развертывания из моего кластера k8s через go-client, например, так:
Deployments, err := clientset.AppsV1().Deployments().List(metav1.ListOptions{})
//and then loop through each deployment:
for _, deploy := range Deployments.Items{
//deploy is type v1.Deployment
}
, если я собираюсь выполнить развертывание и сохранить в файл, структура будет выглядеть так:
type Deployment struct {
v1.TypeMeta `json:",inline"`
v1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
Spec DeploymentSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"`
Status DeploymentStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"`
}
очевидно сильно отличается от того, что ожидает файл kubectl.
(Хотя я могу использовать go-client deploy.create (obj) для создания этого развертывания).
Если бы я хотел создать допустимый ресурс kubectl, я мог бы создать пользовательскую структуру, соответствующую этому типу, а затем вручную заполнить значения.
Есть ли способ сделать это автоматически?или какие-то вспомогательные функции, которые есть в настоящее время?
по сути, я хочу преобразовать структуру v1.Deployment в общий ресурс kamectl yaml.