// TApp represents a set of pods with consistent identities.
type TApp struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
// Spec defines the desired identities of pods in this tapp.
Spec TAppSpec `json:"spec,omitempty"`
// Status is the current status of pods in this TApp. This data
// may be out of date by some window of time.
Status TAppStatus `json:"status,omitempty"`
}
// A TAppSpec is the specification of a TApp.
type TAppSpec struct {
// Replicas 指定Template的副本数,尽管共享同一个Template定义,但是每个副本仍有唯一的标识
Replicas int32 `json:"replicas,omitempty"`
// 同Deployment的定义,标签选择器,默认为Pod Template上的标签
Selector *metav1.LabelSelector `json:"selector,omitempty"`
// Template 默认模板,描述将要被初始创建/默认缩放的pod的对象,在TApp中可以被添加到TemplatePool中
Template corev1.PodTemplateSpec `json:"template"`
// TemplatePool 描述不同版本的pod template, template name --> pod Template
TemplatePool map[string]corev1.PodTemplateSpec `json:"templatePool,omitempty"`
// Statuses 用来指定对应pod实例的目标状态,instanceID --> desiredStatus ["Running","Killed"]
Statuses map[string]InstanceStatus `json:"statuses,omitempty"`
// Templates 用来指定运行pod实例所使用的Template,instanceID --> template name
Templates map[string]string `json:"templates,omitempty"`
// UpdateStrategy 定义滚动更新策略
UpdateStrategy TAppUpdateStrategy `json:"updateStrategy,omitempty"`
// ForceDeletePod 定义是否强制删除pod,默认为false
ForceDeletePod bool `json:"forceDeletePod,omitempty"`
// 同Statefulset的定义
VolumeClaimTemplates []corev1.PersistentVolumeClaim `json:"volumeClaimTemplates,omitempty"`
}
// 滚动更新策略
type TAppUpdateStrategy struct {
// 滚动更新的template name
Template string `json:"template,omitempty"`
// 滚动更新时的最大不可用数, 如果不指定此配置,滚动更新时不限制最大不可用数
MaxUnavailable *int32 `json:"maxUnavailable,omitempty"`
}
// 定义TApp的状态
type TAppStatus struct {
// most recent generation observed by controller.
ObservedGeneration int64 `json:"observedGeneration,omitempty"`
// Replicas 描述副本数
Replicas int32 `json:"replicas"`
// ReadyReplicas 描述Ready副本数
ReadyReplicas int32 `json:"readyReplicas"`
// ScaleSelector 是用于对pod进行查询的标签,它与HPA使用的副本计数匹配
ScaleLabelSelector string `json:"scaleLabelSelector,omitempty"`
// AppStatus 描述当前Tapp运行状态, 包含"Pending","Running","Failed","Succ","Killed"
AppStatus AppStatus `json:"appStatus,omitempty"`
// Statues 描述实例的运行状态 instanceID --> InstanceStatus ["NotCreated","Pending","Running","Updating","PodFailed","PodSucc","Killing","Killed","Failed","Succ","Unknown"]
Statuses map[string]InstanceStatus `json:"statuses,omitempty"`
}
# kubectl get pod
NAME READY STATUS RESTARTS AGE
example-tapp-0 1/1 Running 1 59m
example-tapp-1 0/1 Terminating 1 59m
example-tapp-2 1/1 Running 1 59m