Added resource creation

This commit is contained in:
Mingchen Dai 2024-09-11 04:10:47 +00:00
parent 1a42cda60a
commit dd2ff56190
No known key found for this signature in database
GPG Key ID: 830D8248E627888A
4 changed files with 133 additions and 0 deletions

@ -0,0 +1,18 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: {{.ObjectMeta.Name}}
namespace: {{.ObjectMeta.Namespace}}
spec:
ingressClassName: nginx
rules:
- host: {{.ObjectMeta.Name}}.devcontainer.devstar.cn
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: {{.ObjectMeta.Name}}
port:
number: 22

@ -0,0 +1,13 @@
apiVersion: v1
kind: Service
metadata:
name: {{.ObjectMeta.Name}}
namespace: {{.ObjectMeta.Namespace}}
spec:
selector:
app: {{.ObjectMeta.Name}}
ports:
- name: ssh
protocol: TCP
port: 22
targetPort: 22

@ -0,0 +1,46 @@
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: {{.ObjectMeta.Name}}
namespace: {{.ObjectMeta.Namespace}}
labels:
app: {{.ObjectMeta.Name}}
spec:
podManagementPolicy: OrderedReady
replicas: 1
selector:
matchLabels:
app: {{.ObjectMeta.Name}}
template:
metadata:
labels:
app: {{.ObjectMeta.Name}}
spec:
containers:
- name: {{.ObjectMeta.Name}}
image: {{.Spec.Image}}
imagePullPolicy: IfNotPresent
ports:
- name: tcp-ssh
protocol: tcp
containerPort: 22
livenessProbe:
exec:
command:
- /bin/sh
- -c
- exec ping localhost
failureThreshold: 6
initialDelaySeconds: 30
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 5
resources:
limits:
cpu: 150m
ephemeral-storage: 2Gi
memory: 192Mi
requests:
cpu: 100m
ephemeral-storage: 50Mi
memory: 128Mi

@ -0,0 +1,56 @@
package utils
import (
"bytes"
"text/template"
devcontainer_apps_v1 "devstar.cn/DevcontainerApp/api/v1"
app_v1 "k8s.io/api/apps/v1"
core_v1 "k8s.io/api/core/v1"
networking_v1 "k8s.io/api/networking/v1"
yaml_util "k8s.io/apimachinery/pkg/util/yaml"
)
// parseTemplate 解析 Go Template 模板文件
func parseTemplate(templateName string, app *devcontainer_apps_v1.DevcontainerApp) []byte {
tmpl, err := template.ParseFiles("internal/controller/templates/" + templateName + ".yaml")
if err != nil {
panic(err)
}
b := new(bytes.Buffer)
err = tmpl.Execute(b, app)
if err != nil {
panic(err)
}
return b.Bytes()
}
// NewStatefulSet 根据创建 StatefulSet
func NewStatefulSet(app *devcontainer_apps_v1.DevcontainerApp) *app_v1.StatefulSet {
statefulSet := &app_v1.StatefulSet{}
err := yaml_util.Unmarshal(parseTemplate("stateful_set", app), statefulSet)
if err != nil {
panic(err)
}
return statefulSet
}
// NewService 创建 Service
func NewService(app *devcontainer_apps_v1.DevcontainerApp) *core_v1.Service {
service := &core_v1.Service{}
err := yaml_util.Unmarshal(parseTemplate("service", app), service)
if err != nil {
panic(err)
}
return service
}
// NewIngress 创建新的 Ingress Controller 规则
func NewIngress(app *devcontainer_apps_v1.DevcontainerApp) *networking_v1.Ingress {
ingress := &networking_v1.Ingress{}
err := yaml_util.Unmarshal(parseTemplate("ingress", app), ingress)
if err != nil {
panic(err)
}
return ingress
}