l-13 crd done

master
dongming 2 years ago
parent 55522855df
commit f05466b2bc

@ -17,6 +17,8 @@ limitations under the License.
package v1
import (
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
@ -25,17 +27,77 @@ import (
// MsbDeploymentSpec defines the desired state of MsbDeployment
type MsbDeploymentSpec struct {
// INSERT ADDITIONAL SPEC FIELDS - desired state of cluster
// Important: Run "make" to regenerate code after modifying this file
// Image 存储镜像地址
Image string `json:"image"`
// Port 存储服务提供的端口
Port int32 `json:"port"`
// Replicas 存储要部署多少个副本
// +optional
Replicas int32 `json:"replicas,omitempty"`
// StartCmd 存储启动命令
// +optional
StartCmd string `json:"startCmd,omitempty"`
// Args 存储启动命令参数
// +optional
Args []string `json:"args,omitempty"`
// Environments 存储环境变量直接使用pod中的定义方式
// +optional
Environments []corev1.EnvVar `json:"environments,omitempty"`
// Expose service要暴露的端口
Expose *Expose `json:"expose"`
}
// Foo is an example field of MsbDeployment. Edit msbdeployment_types.go to remove/update
Foo string `json:"foo,omitempty"`
// Expose defines the desired state of Expose
type Expose struct {
// Mode 模式 nodePort or ingress
Mode string `json:"mode"`
// IngressDomain 域名。在 Mode为 ingress 的时候,此项为必填
// +optional
IngressDomain string `json:"ingressDomain,omitempty"`
// NodePort nodePort端口。在 mode 为 nodeport 的时候,此项为必填
// +optional
NodePort int32 `json:"nodePort,omitempty"`
// ServicePort service的端口一般是随机生成这里我们为了防止冲突使用和我们提供服务相同的端口。
// +optional
ServicePort int32 `json:"servicePort,omitempty"`
}
// MsbDeploymentStatus defines the observed state of MsbDeployment
type MsbDeploymentStatus struct {
// INSERT ADDITIONAL STATUS FIELD - define observed state of cluster
// Important: Run "make" to regenerate code after modifying this file
// Phase 处于什么阶段
// +optional
Phase string `json:"phase,omitempty"`
// Message 这个阶段的信息
// +optional
Message string `json:"message,omitempty"`
// Reason 处于这个阶段的原因
// +optional
Reason string `json:"reason,omitempty"`
// Conditions 处于这个阶段的原因
// +optional
Conditions []Condition `json:"conditions,omitempty"`
}
// defines the observed state of Condition
type Condition struct {
// Type 子资源类型
// +optional
Type string `json:"type,omitempty"`
// Message 这个这个子资源状态的信息
// +optional
Message string `json:"message,omitempty"`
// Status 这个子资源的状态名称
// +optional
Status string `json:"status,omitempty"`
// Reason 处于这个状态的原因
// +optional
Reason string `json:"reason,omitempty"`
// LastTransitionTime 最后创建/更新的时间
// +optional
LastTransitionTime metav1.Time `json:"lastTransitionTime,omitempty"`
}
//+kubebuilder:object:root=true

@ -22,16 +22,48 @@ limitations under the License.
package v1
import (
corev1 "k8s.io/api/core/v1"
runtime "k8s.io/apimachinery/pkg/runtime"
)
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Condition) DeepCopyInto(out *Condition) {
*out = *in
in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime)
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Condition.
func (in *Condition) DeepCopy() *Condition {
if in == nil {
return nil
}
out := new(Condition)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Expose) DeepCopyInto(out *Expose) {
*out = *in
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Expose.
func (in *Expose) DeepCopy() *Expose {
if in == nil {
return nil
}
out := new(Expose)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *MsbDeployment) DeepCopyInto(out *MsbDeployment) {
*out = *in
out.TypeMeta = in.TypeMeta
in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
out.Spec = in.Spec
out.Status = in.Status
in.Spec.DeepCopyInto(&out.Spec)
in.Status.DeepCopyInto(&out.Status)
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MsbDeployment.
@ -87,6 +119,23 @@ func (in *MsbDeploymentList) DeepCopyObject() runtime.Object {
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *MsbDeploymentSpec) DeepCopyInto(out *MsbDeploymentSpec) {
*out = *in
if in.Args != nil {
in, out := &in.Args, &out.Args
*out = make([]string, len(*in))
copy(*out, *in)
}
if in.Environments != nil {
in, out := &in.Environments, &out.Environments
*out = make([]corev1.EnvVar, len(*in))
for i := range *in {
(*in)[i].DeepCopyInto(&(*out)[i])
}
}
if in.Expose != nil {
in, out := &in.Expose, &out.Expose
*out = new(Expose)
**out = **in
}
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MsbDeploymentSpec.
@ -102,6 +151,13 @@ func (in *MsbDeploymentSpec) DeepCopy() *MsbDeploymentSpec {
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *MsbDeploymentStatus) DeepCopyInto(out *MsbDeploymentStatus) {
*out = *in
if in.Conditions != nil {
in, out := &in.Conditions, &out.Conditions
*out = make([]Condition, len(*in))
for i := range *in {
(*in)[i].DeepCopyInto(&(*out)[i])
}
}
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MsbDeploymentStatus.

@ -0,0 +1,231 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.9.2
creationTimestamp: null
name: msbdeployments.apps.mashibing.com
spec:
group: apps.mashibing.com
names:
kind: MsbDeployment
listKind: MsbDeploymentList
plural: msbdeployments
singular: msbdeployment
scope: Namespaced
versions:
- name: v1
schema:
openAPIV3Schema:
description: MsbDeployment is the Schema for the msbdeployments API
properties:
apiVersion:
description: 'APIVersion defines the versioned schema of this representation
of an object. Servers should convert recognized schemas to the latest
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
type: string
kind:
description: 'Kind is a string value representing the REST resource this
object represents. Servers may infer this from the endpoint the client
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
type: string
metadata:
type: object
spec:
description: MsbDeploymentSpec defines the desired state of MsbDeployment
properties:
args:
description: Args 存储启动命令参数
items:
type: string
type: array
environments:
description: Environments 存储环境变量直接使用pod中的定义方式
items:
description: EnvVar represents an environment variable present in
a Container.
properties:
name:
description: Name of the environment variable. Must be a C_IDENTIFIER.
type: string
value:
description: 'Variable references $(VAR_NAME) are expanded using
the previously defined environment variables in the container
and any service environment variables. If a variable cannot
be resolved, the reference in the input string will be unchanged.
Double $$ are reduced to a single $, which allows for escaping
the $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" will produce the
string literal "$(VAR_NAME)". Escaped references will never
be expanded, regardless of whether the variable exists or
not. Defaults to "".'
type: string
valueFrom:
description: Source for the environment variable's value. Cannot
be used if value is not empty.
properties:
configMapKeyRef:
description: Selects a key of a ConfigMap.
properties:
key:
description: The key to select.
type: string
name:
description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
TODO: Add other useful fields. apiVersion, kind, uid?'
type: string
optional:
description: Specify whether the ConfigMap or its key
must be defined
type: boolean
required:
- key
type: object
x-kubernetes-map-type: atomic
fieldRef:
description: 'Selects a field of the pod: supports metadata.name,
metadata.namespace, `metadata.labels[''<KEY>'']`, `metadata.annotations[''<KEY>'']`,
spec.nodeName, spec.serviceAccountName, status.hostIP,
status.podIP, status.podIPs.'
properties:
apiVersion:
description: Version of the schema the FieldPath is
written in terms of, defaults to "v1".
type: string
fieldPath:
description: Path of the field to select in the specified
API version.
type: string
required:
- fieldPath
type: object
x-kubernetes-map-type: atomic
resourceFieldRef:
description: 'Selects a resource of the container: only
resources limits and requests (limits.cpu, limits.memory,
limits.ephemeral-storage, requests.cpu, requests.memory
and requests.ephemeral-storage) are currently supported.'
properties:
containerName:
description: 'Container name: required for volumes,
optional for env vars'
type: string
divisor:
anyOf:
- type: integer
- type: string
description: Specifies the output format of the exposed
resources, defaults to "1"
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
x-kubernetes-int-or-string: true
resource:
description: 'Required: resource to select'
type: string
required:
- resource
type: object
x-kubernetes-map-type: atomic
secretKeyRef:
description: Selects a key of a secret in the pod's namespace
properties:
key:
description: The key of the secret to select from. Must
be a valid secret key.
type: string
name:
description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
TODO: Add other useful fields. apiVersion, kind, uid?'
type: string
optional:
description: Specify whether the Secret or its key must
be defined
type: boolean
required:
- key
type: object
x-kubernetes-map-type: atomic
type: object
required:
- name
type: object
type: array
expose:
description: Expose service要暴露的端口
properties:
ingressDomain:
description: IngressDomain 域名。在 Mode为 ingress 的时候,此项为必填
type: string
mode:
description: Mode 模式 nodePort or ingress
type: string
nodePort:
description: NodePort nodePort端口。在 mode 为 nodeport 的时候,此项为必填
format: int32
type: integer
servicePort:
description: ServicePort service的端口一般是随机生成这里我们为了防止冲突使用和我们提供服务相同的端口。
format: int32
type: integer
required:
- mode
type: object
image:
description: Image 存储镜像地址
type: string
port:
description: Port 存储服务提供的端口
format: int32
type: integer
replicas:
description: Replicas 存储要部署多少个副本
format: int32
type: integer
startCmd:
description: StartCmd 存储启动命令
type: string
required:
- expose
- image
- port
type: object
status:
description: MsbDeploymentStatus defines the observed state of MsbDeployment
properties:
conditions:
description: Conditions 处于这个阶段的原因
items:
description: defines the observed state of Condition
properties:
lastTransitionTime:
description: LastTransitionTime 最后创建/更新的时间
format: date-time
type: string
message:
description: Message 这个这个子资源状态的信息
type: string
reason:
description: Reason 处于这个状态的原因
type: string
status:
description: Status 这个子资源的状态名称
type: string
type:
description: Type 子资源类型
type: string
type: object
type: array
message:
description: Message 这个阶段的信息
type: string
phase:
description: Phase 处于什么阶段
type: string
reason:
description: Reason 处于这个阶段的原因
type: string
type: object
type: object
served: true
storage: true
subresources:
status: {}

@ -0,0 +1,33 @@
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
creationTimestamp: null
name: manager-role
rules:
- apiGroups:
- apps.mashibing.com
resources:
- msbdeployments
verbs:
- create
- delete
- get
- list
- patch
- update
- watch
- apiGroups:
- apps.mashibing.com
resources:
- msbdeployments/finalizers
verbs:
- update
- apiGroups:
- apps.mashibing.com
resources:
- msbdeployments/status
verbs:
- get
- patch
- update
Loading…
Cancel
Save