Documentation ¶
Index ¶
- Constants
- Variables
- func CreateNamespace(namespace string, enableShare bool, kubeClient client.Client) error
- func CreateOrUpdateDefaultRegistrySecret(namespace string, reg *commonmodels.RegistryNamespace, ...) error
- func CreateOrUpdateRSASecret(publicKey, privateKey []byte, kubeClient client.Client) error
- func CreateOrUpdateRegistrySecret(namespace string, reg *commonmodels.RegistryNamespace, isDefault bool, ...) error
- func GetClientset(clusterID string) (kubernetes.Interface, error)
- func GetDirtyResources(ns string, kubeClient client.Client) []metav1.Object
- func GetKubeAPIReader(clusterID string) (client.Reader, error)
- func GetRESTConfig(clusterID string) (*rest.Config, error)
- func GetSelectedPodsInfo(selector labels.Selector, informer informers.SharedInformerFactory, ...) (string, string, []string)
- func MakeSafeLabelValue(value string) string
- func MergeLabels(from, to map[string]string) map[string]string
- func ParseSysKeys(namespace, envName, productName, serviceName, ori string) string
- func ReplaceContainerImages(tmpl string, ori []*commonmodels.Container, replace []*commonmodels.Container) string
- type Service
- func (s *Service) CreateCluster(cluster *models.K8SCluster, id string, logger *zap.SugaredLogger) (*models.K8SCluster, error)
- func (s *Service) DeleteCluster(user string, id string, logger *zap.SugaredLogger) error
- func (s *Service) GetCluster(id string, logger *zap.SugaredLogger) (*models.K8SCluster, error)
- func (s *Service) GetClusterByToken(token string, logger *zap.SugaredLogger) (*models.K8SCluster, error)
- func (s *Service) GetYaml(id, agentImage, rsImage, aslanURL, hubURI string, useDeployment bool, ...) ([]byte, error)
- func (s *Service) ListClusters(clusterType string, logger *zap.SugaredLogger) ([]*models.K8SCluster, error)
- func (s *Service) ListConnectedClusters(logger *zap.SugaredLogger) ([]*models.K8SCluster, error)
- func (s *Service) UpdateCluster(id string, cluster *models.K8SCluster, logger *zap.SugaredLogger) (*models.K8SCluster, error)
- func (s *Service) UpdateUpgradeAgentInfo(id, updateHubagentErrorMsg string) error
- type TemplateSchema
Constants ¶
View Source
const ( NameSpaceRegexString = "[^a-z0-9.-]" DefaultNameRegexString = "^[a-zA-Z0-9-_]{1,50}$" )
View Source
const ( DefaultDindReplicas int = 1 DefaultDindLimitsCPU int = 4000 DefaultDindLimitsMemory int = 8192 DefaultDindStorageType commonmodels.DindStorageType = commonmodels.DindStorageRootfs DefaultDindEnablePV bool = false DefaultDindStorageClassName string = "" DefaultDindStorageSizeInGiB int = 10 )
Variables ¶
View Source
var ( NameSpaceRegex = regexp.MustCompile(NameSpaceRegexString) DefaultNameRegex = regexp.MustCompile(DefaultNameRegexString) )
View Source
var YamlTemplate = template.Must(template.New("agentYaml").Parse(`
---
apiVersion: v1
kind: Namespace
metadata:
name: koderover-agent
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: koderover-agent
namespace: koderover-agent
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: koderover-agent-admin-binding
namespace: koderover-agent
subjects:
- kind: ServiceAccount
name: koderover-agent
namespace: koderover-agent
roleRef:
kind: ClusterRole
name: koderover-agent-admin
apiGroup: rbac.authorization.k8s.io
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: koderover-agent-admin
rules:
- apiGroups:
- '*'
resources:
- '*'
verbs:
- '*'
- nonResourceURLs:
- '*'
verbs:
- '*'
---
apiVersion: v1
kind: Service
metadata:
name: hub-agent
namespace: koderover-agent
labels:
app: koderover-agent-agent
spec:
type: ClusterIP
ports:
- protocol: TCP
port: 80
targetPort: 80
selector:
app: koderover-agent-agent
---
apiVersion: apps/v1
{{- if .UseDeployment }}
kind: Deployment
{{- else }}
kind: DaemonSet
{{- end }}
metadata:
name: koderover-agent-node-agent
namespace: koderover-agent
spec:
selector:
matchLabels:
app: koderover-agent-agent
template:
metadata:
labels:
app: koderover-agent-agent
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: beta.kubernetes.io/os
operator: NotIn
values:
- windows
{{- if .UseDeployment }}
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
topologyKey: kubernetes.io/hostname
{{- end }}
hostNetwork: true
serviceAccountName: koderover-agent
containers:
- name: agent
image: {{.HubAgentImage}}
imagePullPolicy: Always
env:
- name: AGENT_NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
- name: HUB_AGENT_TOKEN
value: "{{.ClientToken}}"
- name: HUB_SERVER_BASE_ADDR
value: "{{.HubServerBaseAddr}}"
- name: ASLAN_BASE_ADDR
value: "{{.AslanBaseAddr}}"
resources:
limits:
cpu: 1000m
memory: 1Gi
requests:
cpu: 100m
memory: 256Mi
{{- if .UseDeployment }}
replicas: 1
{{- else }}
updateStrategy:
type: RollingUpdate
{{- end }}
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: resource-server
namespace: koderover-agent
labels:
app.kubernetes.io/component: resource-server
app.kubernetes.io/name: zadig
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/component: resource-server
app.kubernetes.io/name: zadig
template:
metadata:
labels:
app.kubernetes.io/component: resource-server
app.kubernetes.io/name: zadig
spec:
containers:
- image: {{.ResourceServerImage}}
imagePullPolicy: Always
name: resource-server
resources:
limits:
cpu: 500m
memory: 500Mi
requests:
cpu: 100m
memory: 100Mi
---
apiVersion: v1
kind: Service
metadata:
name: resource-server
namespace: koderover-agent
labels:
app.kubernetes.io/component: resource-server
app.kubernetes.io/name: zadig
spec:
type: ClusterIP
ports:
- protocol: TCP
port: 80
targetPort: 80
selector:
app.kubernetes.io/component: resource-server
app.kubernetes.io/name: zadig
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: dind
namespace: koderover-agent
labels:
app.kubernetes.io/component: dind
app.kubernetes.io/name: zadig
spec:
serviceName: dind
replicas: {{.DindReplicas}}
selector:
matchLabels:
app.kubernetes.io/component: dind
app.kubernetes.io/name: zadig
template:
metadata:
labels:
app.kubernetes.io/component: dind
app.kubernetes.io/name: zadig
spec:
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
topologyKey: kubernetes.io/hostname
containers:
- name: dind
image: {{.DindImage}}
env:
- name: DOCKER_TLS_CERTDIR
value: ""
securityContext:
privileged: true
ports:
- protocol: TCP
containerPort: 2375
resources:
limits:
cpu: {{.DindLimitsCPU}}
memory: {{.DindLimitsMemory}}
requests:
cpu: 100m
memory: 128Mi
{{- if .DindEnablePV }}
volumeMounts:
- name: zadig-docker
mountPath: /var/lib/docker
volumeClaimTemplates:
- metadata:
name: zadig-docker
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: {{.DindStorageClassName}}
resources:
requests:
storage: {{.DindStorageSizeInGiB}}Gi
{{- end }}
---
apiVersion: v1
kind: Service
metadata:
name: dind
namespace: koderover-agent
labels:
app.kubernetes.io/component: dind
app.kubernetes.io/name: zadig
spec:
ports:
- name: dind
protocol: TCP
port: 2375
targetPort: 2375
clusterIP: None
selector:
app.kubernetes.io/component: dind
app.kubernetes.io/name: zadig
`))
View Source
var YamlTemplateForNamespace = template.Must(template.New("agentYaml").Parse(`
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: koderover-agent-sa
namespace: {{.Namespace}}
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: koderover-agent-admin-binding
namespace: {{.Namespace}}
subjects:
- kind: ServiceAccount
name: koderover-agent-sa
namespace: {{.Namespace}}
roleRef:
kind: Role
name: koderover-agent-admin-role
apiGroup: rbac.authorization.k8s.io
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: koderover-agent-admin-role
namespace: {{.Namespace}}
rules:
- apiGroups:
- '*'
resources:
- '*'
verbs:
- '*'
---
apiVersion: v1
kind: Service
metadata:
name: hub-agent
namespace: {{.Namespace}}
labels:
app: koderover-agent-agent
spec:
type: ClusterIP
ports:
- protocol: TCP
port: 80
targetPort: 80
selector:
app: koderover-agent-agent
---
apiVersion: apps/v1
{{- if .UseDeployment }}
kind: Deployment
{{- else }}
kind: DaemonSet
{{- end }}
metadata:
name: koderover-agent-node-agent
namespace: {{.Namespace}}
spec:
selector:
matchLabels:
app: koderover-agent-agent
template:
metadata:
labels:
app: koderover-agent-agent
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: beta.kubernetes.io/os
operator: NotIn
values:
- windows
{{- if .UseDeployment }}
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
topologyKey: kubernetes.io/hostname
{{- end }}
hostNetwork: true
serviceAccountName: koderover-agent-sa
containers:
- name: agent
image: {{.HubAgentImage}}
imagePullPolicy: Always
env:
- name: AGENT_NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
- name: HUB_AGENT_TOKEN
value: "{{.ClientToken}}"
- name: HUB_SERVER_BASE_ADDR
value: "{{.HubServerBaseAddr}}"
- name: ASLAN_BASE_ADDR
value: "{{.AslanBaseAddr}}"
resources:
limits:
cpu: 1000m
memory: 1Gi
requests:
cpu: 100m
memory: 256Mi
{{- if .UseDeployment }}
replicas: 1
{{- else }}
updateStrategy:
type: RollingUpdate
{{- end }}
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: resource-server
namespace: {{.Namespace}}
labels:
app.kubernetes.io/component: resource-server
app.kubernetes.io/name: zadig
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/component: resource-server
app.kubernetes.io/name: zadig
template:
metadata:
labels:
app.kubernetes.io/component: resource-server
app.kubernetes.io/name: zadig
spec:
containers:
- image: {{.ResourceServerImage}}
imagePullPolicy: Always
name: resource-server
resources:
limits:
cpu: 500m
memory: 500Mi
requests:
cpu: 100m
memory: 100Mi
---
apiVersion: v1
kind: Service
metadata:
name: resource-server
namespace: {{.Namespace}}
labels:
app.kubernetes.io/component: resource-server
app.kubernetes.io/instance: zadig-zadig
app.kubernetes.io/name: zadig
spec:
type: ClusterIP
ports:
- protocol: TCP
port: 80
targetPort: 80
selector:
app.kubernetes.io/component: resource-server
app.kubernetes.io/name: zadig
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: dind
namespace: {{.Namespace}}
labels:
app.kubernetes.io/component: dind
app.kubernetes.io/name: zadig
spec:
serviceName: dind
replicas: 1
selector:
matchLabels:
app.kubernetes.io/component: dind
app.kubernetes.io/name: zadig
template:
metadata:
labels:
app.kubernetes.io/component: dind
app.kubernetes.io/name: zadig
spec:
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
topologyKey: kubernetes.io/hostname
containers:
- name: dind
image: {{.DindImage}}
env:
- name: DOCKER_TLS_CERTDIR
value: ""
securityContext:
privileged: true
ports:
- protocol: TCP
containerPort: 2375
resources:
limits:
cpu: "4"
memory: 8Gi
requests:
cpu: 100m
memory: 128Mi
{{- if .DindEnablePV }}
volumeMounts:
- name: zadig-docker
mountPath: /var/lib/docker
volumeClaimTemplates:
- metadata:
name: zadig-docker
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: {{.DindStorageClassName}}
resources:
requests:
storage: {{.DindStorageSizeInGiB}}Gi
{{- end }}
---
apiVersion: v1
kind: Service
metadata:
name: dind
namespace: {{.Namespace}}
labels:
app.kubernetes.io/component: dind
app.kubernetes.io/name: zadig
spec:
ports:
- name: dind
protocol: TCP
port: 2375
targetPort: 2375
clusterIP: None
selector:
app.kubernetes.io/component: dind
app.kubernetes.io/name: zadig
`))
Functions ¶
func CreateNamespace ¶
func CreateOrUpdateDefaultRegistrySecret ¶ added in v1.9.9
func CreateOrUpdateDefaultRegistrySecret(namespace string, reg *commonmodels.RegistryNamespace, kubeClient client.Client) error
func CreateOrUpdateRSASecret ¶ added in v1.9.9
func CreateOrUpdateRegistrySecret ¶
func CreateOrUpdateRegistrySecret(namespace string, reg *commonmodels.RegistryNamespace, isDefault bool, kubeClient client.Client) error
func GetClientset ¶
func GetClientset(clusterID string) (kubernetes.Interface, error)
GetClientset returns a client to interact with APIServer which implements kubernetes.Interface
func GetDirtyResources ¶
GetDirtyResources searches for dirty active resources in the given namespace, and return their metadata.
func GetSelectedPodsInfo ¶
func GetSelectedPodsInfo(selector labels.Selector, informer informers.SharedInformerFactory, log *zap.SugaredLogger) (string, string, []string)
func MakeSafeLabelValue ¶
func ParseSysKeys ¶
ParseSysKeys 渲染系统变量键值
func ReplaceContainerImages ¶
func ReplaceContainerImages(tmpl string, ori []*commonmodels.Container, replace []*commonmodels.Container) string
Types ¶
type Service ¶
type Service struct { *multicluster.Agent // contains filtered or unexported fields }
func NewService ¶
func (*Service) CreateCluster ¶
func (s *Service) CreateCluster(cluster *models.K8SCluster, id string, logger *zap.SugaredLogger) (*models.K8SCluster, error)
func (*Service) DeleteCluster ¶
func (*Service) GetCluster ¶
func (s *Service) GetCluster(id string, logger *zap.SugaredLogger) (*models.K8SCluster, error)
func (*Service) GetClusterByToken ¶
func (s *Service) GetClusterByToken(token string, logger *zap.SugaredLogger) (*models.K8SCluster, error)
func (*Service) ListClusters ¶
func (s *Service) ListClusters(clusterType string, logger *zap.SugaredLogger) ([]*models.K8SCluster, error)
func (*Service) ListConnectedClusters ¶
func (s *Service) ListConnectedClusters(logger *zap.SugaredLogger) ([]*models.K8SCluster, error)
func (*Service) UpdateCluster ¶
func (s *Service) UpdateCluster(id string, cluster *models.K8SCluster, logger *zap.SugaredLogger) (*models.K8SCluster, error)
func (*Service) UpdateUpgradeAgentInfo ¶ added in v1.9.9
type TemplateSchema ¶
type TemplateSchema struct { HubAgentImage string ResourceServerImage string ClientToken string HubServerBaseAddr string Namespace string UseDeployment bool AslanBaseAddr string DindReplicas int DindLimitsCPU string DindLimitsMemory string DindImage string DindEnablePV bool DindStorageClassName string DindStorageSizeInGiB int }
Click to show internal directories.
Click to hide internal directories.