deploy karmada-aggregated-apiserver
Signed-off-by: changzhen <changzhen5@huawei.com>
This commit is contained in:
parent
b49cc9ed0f
commit
930d4e9f42
|
@ -20,6 +20,7 @@
|
||||||
# karamada binary
|
# karamada binary
|
||||||
/karmadactl
|
/karmadactl
|
||||||
/karmada-agent
|
/karmada-agent
|
||||||
|
/karmada-aggregated-apiserver
|
||||||
/karmada-controller-manager
|
/karmada-controller-manager
|
||||||
/karmada-interpreter-webhook-example
|
/karmada-interpreter-webhook-example
|
||||||
/karmada-scheduler
|
/karmada-scheduler
|
||||||
|
|
16
Makefile
16
Makefile
|
@ -39,7 +39,13 @@ ifeq ($(VERSION), "")
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
all: karmada-controller-manager karmada-scheduler karmadactl kubectl-karmada karmada-webhook karmada-agent karmada-scheduler-estimator karmada-interpreter-webhook-example
|
all: karmada-aggregated-apiserver karmada-controller-manager karmada-scheduler karmadactl kubectl-karmada karmada-webhook karmada-agent karmada-scheduler-estimator karmada-interpreter-webhook-example
|
||||||
|
|
||||||
|
karmada-aggregated-apiserver: $(SOURCES)
|
||||||
|
CGO_ENABLED=0 GOOS=$(GOOS) go build \
|
||||||
|
-ldflags $(LDFLAGS) \
|
||||||
|
-o karmada-aggregated-apiserver \
|
||||||
|
cmd/aggregated-apiserver/main.go
|
||||||
|
|
||||||
karmada-controller-manager: $(SOURCES)
|
karmada-controller-manager: $(SOURCES)
|
||||||
CGO_ENABLED=0 GOOS=$(GOOS) go build \
|
CGO_ENABLED=0 GOOS=$(GOOS) go build \
|
||||||
|
@ -90,7 +96,7 @@ karmada-interpreter-webhook-example: $(SOURCES)
|
||||||
examples/customresourceinterpreter/webhook/main.go
|
examples/customresourceinterpreter/webhook/main.go
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -rf karmada-controller-manager karmada-scheduler karmadactl kubectl-karmada karmada-webhook karmada-agent karmada-scheduler-estimator karmada-interpreter-webhook-example
|
rm -rf karmada-aggregated-apiserver karmada-controller-manager karmada-scheduler karmadactl kubectl-karmada karmada-webhook karmada-agent karmada-scheduler-estimator karmada-interpreter-webhook-example
|
||||||
|
|
||||||
.PHONY: update
|
.PHONY: update
|
||||||
update:
|
update:
|
||||||
|
@ -106,7 +112,10 @@ test:
|
||||||
go test --race --v ./cmd/...
|
go test --race --v ./cmd/...
|
||||||
go test --race --v ./examples/...
|
go test --race --v ./examples/...
|
||||||
|
|
||||||
images: image-karmada-controller-manager image-karmada-scheduler image-karmada-webhook image-karmada-agent image-karmada-scheduler-estimator image-karmada-interpreter-webhook-example
|
images: image-karmada-aggregated-apiserver image-karmada-controller-manager image-karmada-scheduler image-karmada-webhook image-karmada-agent image-karmada-scheduler-estimator image-karmada-interpreter-webhook-example
|
||||||
|
|
||||||
|
image-karmada-aggregated-apiserver: karmada-aggregated-apiserver
|
||||||
|
VERSION=$(VERSION) hack/docker.sh karmada-aggregated-apiserver
|
||||||
|
|
||||||
image-karmada-controller-manager: karmada-controller-manager
|
image-karmada-controller-manager: karmada-controller-manager
|
||||||
VERSION=$(VERSION) hack/docker.sh karmada-controller-manager
|
VERSION=$(VERSION) hack/docker.sh karmada-controller-manager
|
||||||
|
@ -137,3 +146,4 @@ endif
|
||||||
docker push ${REGISTRY}/karmada-agent:${VERSION}
|
docker push ${REGISTRY}/karmada-agent:${VERSION}
|
||||||
docker push ${REGISTRY}/karmada-scheduler-estimator:${VERSION}
|
docker push ${REGISTRY}/karmada-scheduler-estimator:${VERSION}
|
||||||
docker push ${REGISTRY}/karmada-interpreter-webhook-example:${VERSION}
|
docker push ${REGISTRY}/karmada-interpreter-webhook-example:${VERSION}
|
||||||
|
docker push ${REGISTRY}/karmada-aggregated-apiserver:${VERSION}
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
apiVersion: apiregistration.k8s.io/v1
|
||||||
|
kind: APIService
|
||||||
|
metadata:
|
||||||
|
name: v1alpha1.cluster.karmada.io
|
||||||
|
labels:
|
||||||
|
app: karmada-aggregated-apiserver
|
||||||
|
apiserver: "true"
|
||||||
|
spec:
|
||||||
|
insecureSkipTLSVerify: true
|
||||||
|
group: cluster.karmada.io
|
||||||
|
groupPriorityMinimum: 2000
|
||||||
|
service:
|
||||||
|
name: karmada-aggregated-apiserver
|
||||||
|
namespace: karmada-system
|
||||||
|
version: v1alpha1
|
||||||
|
versionPriority: 10
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: karmada-aggregated-apiserver
|
||||||
|
namespace: karmada-system
|
||||||
|
spec:
|
||||||
|
type: ExternalName
|
||||||
|
externalName: karmada-aggregated-apiserver.karmada-system.svc.cluster.local
|
|
@ -0,0 +1,74 @@
|
||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: karmada-aggregated-apiserver
|
||||||
|
namespace: karmada-system
|
||||||
|
labels:
|
||||||
|
app: karmada-aggregated-apiserver
|
||||||
|
apiserver: "true"
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: karmada-aggregated-apiserver
|
||||||
|
apiserver: "true"
|
||||||
|
replicas: 1
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: karmada-aggregated-apiserver
|
||||||
|
apiserver: "true"
|
||||||
|
spec:
|
||||||
|
automountServiceAccountToken: false
|
||||||
|
containers:
|
||||||
|
- name: karmada-aggregated-apiserver
|
||||||
|
image: swr.ap-southeast-1.myhuaweicloud.com/karmada/karmada-aggregated-apiserver:latest
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
volumeMounts:
|
||||||
|
- name: k8s-certs
|
||||||
|
mountPath: /etc/kubernetes/pki
|
||||||
|
readOnly: true
|
||||||
|
- name: kubeconfig
|
||||||
|
subPath: kubeconfig
|
||||||
|
mountPath: /etc/kubeconfig
|
||||||
|
command:
|
||||||
|
- /bin/karmada-aggregated-apiserver
|
||||||
|
- --kubeconfig=/etc/kubeconfig
|
||||||
|
- --authentication-kubeconfig=/etc/kubeconfig
|
||||||
|
- --authorization-kubeconfig=/etc/kubeconfig
|
||||||
|
- --etcd-servers=https://etcd-client.karmada-system.svc.cluster.local:2379
|
||||||
|
- --etcd-cafile=/etc/kubernetes/pki/server-ca.crt
|
||||||
|
- --etcd-certfile=/etc/kubernetes/pki/karmada.crt
|
||||||
|
- --etcd-keyfile=/etc/kubernetes/pki/karmada.key
|
||||||
|
- --tls-cert-file=/etc/kubernetes/pki/karmada.crt
|
||||||
|
- --tls-private-key-file=/etc/kubernetes/pki/karmada.key
|
||||||
|
- --audit-log-path=-
|
||||||
|
- --feature-gates=APIPriorityAndFairness=false
|
||||||
|
- --audit-log-maxage=0
|
||||||
|
- --audit-log-maxbackup=0
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
volumes:
|
||||||
|
- name: k8s-certs
|
||||||
|
secret:
|
||||||
|
secretName: karmada-cert-secret
|
||||||
|
- name: kubeconfig
|
||||||
|
secret:
|
||||||
|
secretName: kubeconfig
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: karmada-aggregated-apiserver
|
||||||
|
namespace: karmada-system
|
||||||
|
labels:
|
||||||
|
app: karmada-aggregated-apiserver
|
||||||
|
apiserver: "true"
|
||||||
|
spec:
|
||||||
|
ports:
|
||||||
|
- port: 443
|
||||||
|
protocol: TCP
|
||||||
|
targetPort: 443
|
||||||
|
selector:
|
||||||
|
app: karmada-aggregated-apiserver
|
|
@ -54,10 +54,10 @@ spec:
|
||||||
- --service-account-key-file=/etc/kubernetes/pki/karmada.key
|
- --service-account-key-file=/etc/kubernetes/pki/karmada.key
|
||||||
- --service-account-signing-key-file=/etc/kubernetes/pki/karmada.key
|
- --service-account-signing-key-file=/etc/kubernetes/pki/karmada.key
|
||||||
- --service-cluster-ip-range=10.96.0.0/12
|
- --service-cluster-ip-range=10.96.0.0/12
|
||||||
- --proxy-client-cert-file=/etc/kubernetes/pki/karmada.crt
|
- --proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.crt
|
||||||
- --proxy-client-key-file=/etc/kubernetes/pki/karmada.key
|
- --proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client.key
|
||||||
- --requestheader-allowed-names=front-proxy-client
|
- --requestheader-allowed-names=front-proxy-client
|
||||||
- --requestheader-client-ca-file=/etc/kubernetes/pki/server-ca.crt
|
- --requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt
|
||||||
- --requestheader-extra-headers-prefix=X-Remote-Extra-
|
- --requestheader-extra-headers-prefix=X-Remote-Extra-
|
||||||
- --requestheader-group-headers=X-Remote-Group
|
- --requestheader-group-headers=X-Remote-Group
|
||||||
- --requestheader-username-headers=X-Remote-User
|
- --requestheader-username-headers=X-Remote-User
|
||||||
|
@ -111,9 +111,7 @@ spec:
|
||||||
- name: k8s-certs
|
- name: k8s-certs
|
||||||
secret:
|
secret:
|
||||||
secretName: karmada-cert-secret
|
secretName: karmada-cert-secret
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: Service
|
kind: Service
|
||||||
metadata:
|
metadata:
|
||||||
|
|
|
@ -11,3 +11,9 @@ data:
|
||||||
{{client_cer}}
|
{{client_cer}}
|
||||||
karmada.key: |
|
karmada.key: |
|
||||||
{{client_key}}
|
{{client_key}}
|
||||||
|
front-proxy-ca.crt: |
|
||||||
|
{{front_proxy_ca_crt}}
|
||||||
|
front-proxy-client.crt: |
|
||||||
|
{{front_proxy_client_crt}}
|
||||||
|
front-proxy-client.key: |
|
||||||
|
{{front_proxy_client_key}}
|
||||||
|
|
|
@ -1,310 +0,0 @@
|
||||||
|
|
||||||
---
|
|
||||||
apiVersion: apiextensions.k8s.io/v1
|
|
||||||
kind: CustomResourceDefinition
|
|
||||||
metadata:
|
|
||||||
annotations:
|
|
||||||
controller-gen.kubebuilder.io/version: v0.6.2
|
|
||||||
creationTimestamp: null
|
|
||||||
name: clusters.cluster.karmada.io
|
|
||||||
spec:
|
|
||||||
group: cluster.karmada.io
|
|
||||||
names:
|
|
||||||
kind: Cluster
|
|
||||||
listKind: ClusterList
|
|
||||||
plural: clusters
|
|
||||||
singular: cluster
|
|
||||||
scope: Cluster
|
|
||||||
versions:
|
|
||||||
- additionalPrinterColumns:
|
|
||||||
- jsonPath: .status.kubernetesVersion
|
|
||||||
name: Version
|
|
||||||
type: string
|
|
||||||
- jsonPath: .spec.syncMode
|
|
||||||
name: Mode
|
|
||||||
type: string
|
|
||||||
- jsonPath: .status.conditions[?(@.type=="Ready")].status
|
|
||||||
name: Ready
|
|
||||||
type: string
|
|
||||||
- jsonPath: .metadata.creationTimestamp
|
|
||||||
name: Age
|
|
||||||
type: date
|
|
||||||
name: v1alpha1
|
|
||||||
schema:
|
|
||||||
openAPIV3Schema:
|
|
||||||
description: Cluster represents the desire state and status of a member cluster.
|
|
||||||
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: Spec represents the specification of the desired behavior
|
|
||||||
of member cluster.
|
|
||||||
properties:
|
|
||||||
apiEndpoint:
|
|
||||||
description: The API endpoint of the member cluster. This can be a
|
|
||||||
hostname, hostname:port, IP or IP:port.
|
|
||||||
type: string
|
|
||||||
insecureSkipTLSVerification:
|
|
||||||
description: InsecureSkipTLSVerification indicates that the karmada
|
|
||||||
control plane should not confirm the validity of the serving certificate
|
|
||||||
of the cluster it is connecting to. This will make the HTTPS connection
|
|
||||||
between the karmada control plane and the member cluster insecure.
|
|
||||||
Defaults to false.
|
|
||||||
type: boolean
|
|
||||||
provider:
|
|
||||||
description: Provider represents the cloud provider name of the member
|
|
||||||
cluster.
|
|
||||||
type: string
|
|
||||||
proxyURL:
|
|
||||||
description: 'ProxyURL is the proxy URL for the cluster. If not empty,
|
|
||||||
the karmada control plane will use this proxy to talk to the cluster.
|
|
||||||
More details please refer to: https://github.com/kubernetes/client-go/issues/351'
|
|
||||||
type: string
|
|
||||||
region:
|
|
||||||
description: Region represents the region of the member cluster locate
|
|
||||||
in.
|
|
||||||
type: string
|
|
||||||
secretRef:
|
|
||||||
description: 'SecretRef represents the secret contains mandatory credentials
|
|
||||||
to access the member cluster. The secret should hold credentials
|
|
||||||
as follows: - secret.data.token - secret.data.caBundle'
|
|
||||||
properties:
|
|
||||||
name:
|
|
||||||
description: Name is the name of resource being referenced.
|
|
||||||
type: string
|
|
||||||
namespace:
|
|
||||||
description: Namespace is the namespace for the resource being
|
|
||||||
referenced.
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- name
|
|
||||||
- namespace
|
|
||||||
type: object
|
|
||||||
syncMode:
|
|
||||||
description: SyncMode describes how a cluster sync resources from
|
|
||||||
karmada control plane.
|
|
||||||
enum:
|
|
||||||
- Push
|
|
||||||
- Pull
|
|
||||||
type: string
|
|
||||||
taints:
|
|
||||||
description: Taints attached to the member cluster. Taints on the
|
|
||||||
cluster have the "effect" on any resource that does not tolerate
|
|
||||||
the Taint.
|
|
||||||
items:
|
|
||||||
description: The node this Taint is attached to has the "effect"
|
|
||||||
on any pod that does not tolerate the Taint.
|
|
||||||
properties:
|
|
||||||
effect:
|
|
||||||
description: Required. The effect of the taint on pods that
|
|
||||||
do not tolerate the taint. Valid effects are NoSchedule, PreferNoSchedule
|
|
||||||
and NoExecute.
|
|
||||||
type: string
|
|
||||||
key:
|
|
||||||
description: Required. The taint key to be applied to a node.
|
|
||||||
type: string
|
|
||||||
timeAdded:
|
|
||||||
description: TimeAdded represents the time at which the taint
|
|
||||||
was added. It is only written for NoExecute taints.
|
|
||||||
format: date-time
|
|
||||||
type: string
|
|
||||||
value:
|
|
||||||
description: The taint value corresponding to the taint key.
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- effect
|
|
||||||
- key
|
|
||||||
type: object
|
|
||||||
type: array
|
|
||||||
zone:
|
|
||||||
description: Zone represents the zone of the member cluster locate
|
|
||||||
in.
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- syncMode
|
|
||||||
type: object
|
|
||||||
status:
|
|
||||||
description: Status represents the status of member cluster.
|
|
||||||
properties:
|
|
||||||
apiEnablements:
|
|
||||||
description: APIEnablements represents the list of APIs installed
|
|
||||||
in the member cluster.
|
|
||||||
items:
|
|
||||||
description: APIEnablement is a list of API resource, it is used
|
|
||||||
to expose the name of the resources supported in a specific group
|
|
||||||
and version.
|
|
||||||
properties:
|
|
||||||
groupVersion:
|
|
||||||
description: GroupVersion is the group and version this APIEnablement
|
|
||||||
is for.
|
|
||||||
type: string
|
|
||||||
resources:
|
|
||||||
description: Resources is a list of APIResource.
|
|
||||||
items:
|
|
||||||
description: APIResource specifies the name and kind names
|
|
||||||
for the resource.
|
|
||||||
properties:
|
|
||||||
kind:
|
|
||||||
description: Kind is the kind for the resource (e.g. 'Deployment'
|
|
||||||
is the kind for resource 'deployments')
|
|
||||||
type: string
|
|
||||||
name:
|
|
||||||
description: Name is the plural name of the resource.
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- kind
|
|
||||||
- name
|
|
||||||
type: object
|
|
||||||
type: array
|
|
||||||
required:
|
|
||||||
- groupVersion
|
|
||||||
type: object
|
|
||||||
type: array
|
|
||||||
conditions:
|
|
||||||
description: Conditions is an array of current cluster conditions.
|
|
||||||
items:
|
|
||||||
description: "Condition contains details for one aspect of the current
|
|
||||||
state of this API Resource. --- This struct is intended for direct
|
|
||||||
use as an array at the field path .status.conditions. For example,
|
|
||||||
type FooStatus struct{ // Represents the observations of a
|
|
||||||
foo's current state. // Known .status.conditions.type are:
|
|
||||||
\"Available\", \"Progressing\", and \"Degraded\" // +patchMergeKey=type
|
|
||||||
\ // +patchStrategy=merge // +listType=map // +listMapKey=type
|
|
||||||
\ Conditions []metav1.Condition `json:\"conditions,omitempty\"
|
|
||||||
patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"`
|
|
||||||
\n // other fields }"
|
|
||||||
properties:
|
|
||||||
lastTransitionTime:
|
|
||||||
description: lastTransitionTime is the last time the condition
|
|
||||||
transitioned from one status to another. This should be when
|
|
||||||
the underlying condition changed. If that is not known, then
|
|
||||||
using the time when the API field changed is acceptable.
|
|
||||||
format: date-time
|
|
||||||
type: string
|
|
||||||
message:
|
|
||||||
description: message is a human readable message indicating
|
|
||||||
details about the transition. This may be an empty string.
|
|
||||||
maxLength: 32768
|
|
||||||
type: string
|
|
||||||
observedGeneration:
|
|
||||||
description: observedGeneration represents the .metadata.generation
|
|
||||||
that the condition was set based upon. For instance, if .metadata.generation
|
|
||||||
is currently 12, but the .status.conditions[x].observedGeneration
|
|
||||||
is 9, the condition is out of date with respect to the current
|
|
||||||
state of the instance.
|
|
||||||
format: int64
|
|
||||||
minimum: 0
|
|
||||||
type: integer
|
|
||||||
reason:
|
|
||||||
description: reason contains a programmatic identifier indicating
|
|
||||||
the reason for the condition's last transition. Producers
|
|
||||||
of specific condition types may define expected values and
|
|
||||||
meanings for this field, and whether the values are considered
|
|
||||||
a guaranteed API. The value should be a CamelCase string.
|
|
||||||
This field may not be empty.
|
|
||||||
maxLength: 1024
|
|
||||||
minLength: 1
|
|
||||||
pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
|
|
||||||
type: string
|
|
||||||
status:
|
|
||||||
description: status of the condition, one of True, False, Unknown.
|
|
||||||
enum:
|
|
||||||
- "True"
|
|
||||||
- "False"
|
|
||||||
- Unknown
|
|
||||||
type: string
|
|
||||||
type:
|
|
||||||
description: type of condition in CamelCase or in foo.example.com/CamelCase.
|
|
||||||
--- Many .condition.type values are consistent across resources
|
|
||||||
like Available, but because arbitrary conditions can be useful
|
|
||||||
(see .node.status.conditions), the ability to deconflict is
|
|
||||||
important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)
|
|
||||||
maxLength: 316
|
|
||||||
pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- lastTransitionTime
|
|
||||||
- message
|
|
||||||
- reason
|
|
||||||
- status
|
|
||||||
- type
|
|
||||||
type: object
|
|
||||||
type: array
|
|
||||||
kubernetesVersion:
|
|
||||||
description: KubernetesVersion represents version of the member cluster.
|
|
||||||
type: string
|
|
||||||
nodeSummary:
|
|
||||||
description: NodeSummary represents the summary of nodes status in
|
|
||||||
the member cluster.
|
|
||||||
properties:
|
|
||||||
readyNum:
|
|
||||||
description: ReadyNum is the number of ready nodes in the cluster.
|
|
||||||
format: int32
|
|
||||||
type: integer
|
|
||||||
totalNum:
|
|
||||||
description: TotalNum is the total number of nodes in the cluster.
|
|
||||||
format: int32
|
|
||||||
type: integer
|
|
||||||
type: object
|
|
||||||
resourceSummary:
|
|
||||||
description: ResourceSummary represents the summary of resources in
|
|
||||||
the member cluster.
|
|
||||||
properties:
|
|
||||||
allocatable:
|
|
||||||
additionalProperties:
|
|
||||||
anyOf:
|
|
||||||
- type: integer
|
|
||||||
- type: string
|
|
||||||
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
|
||||||
x-kubernetes-int-or-string: true
|
|
||||||
description: Allocatable represents the resources of a cluster
|
|
||||||
that are available for scheduling. Total amount of allocatable
|
|
||||||
resources on all nodes.
|
|
||||||
type: object
|
|
||||||
allocated:
|
|
||||||
additionalProperties:
|
|
||||||
anyOf:
|
|
||||||
- type: integer
|
|
||||||
- type: string
|
|
||||||
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
|
||||||
x-kubernetes-int-or-string: true
|
|
||||||
description: Allocated represents the resources of a cluster that
|
|
||||||
have been scheduled. Total amount of required resources of all
|
|
||||||
Pods that have been scheduled to nodes.
|
|
||||||
type: object
|
|
||||||
allocating:
|
|
||||||
additionalProperties:
|
|
||||||
anyOf:
|
|
||||||
- type: integer
|
|
||||||
- type: string
|
|
||||||
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
|
|
||||||
x-kubernetes-int-or-string: true
|
|
||||||
description: Allocating represents the resources of a cluster
|
|
||||||
that are pending for scheduling. Total amount of required resources
|
|
||||||
of all Pods that are waiting for scheduling.
|
|
||||||
type: object
|
|
||||||
type: object
|
|
||||||
type: object
|
|
||||||
required:
|
|
||||||
- spec
|
|
||||||
type: object
|
|
||||||
served: true
|
|
||||||
storage: true
|
|
||||||
subresources:
|
|
||||||
status: {}
|
|
||||||
status:
|
|
||||||
acceptedNames:
|
|
||||||
kind: ""
|
|
||||||
plural: ""
|
|
||||||
conditions: []
|
|
||||||
storedVersions: []
|
|
|
@ -1,5 +1,4 @@
|
||||||
resources:
|
resources:
|
||||||
- bases/cluster.karmada.io_clusters.yaml
|
|
||||||
- bases/multicluster.x-k8s.io_serviceexports.yaml
|
- bases/multicluster.x-k8s.io_serviceexports.yaml
|
||||||
- bases/multicluster.x-k8s.io_serviceimports.yaml
|
- bases/multicluster.x-k8s.io_serviceimports.yaml
|
||||||
- bases/policy.karmada.io_clusteroverridepolicies.yaml
|
- bases/policy.karmada.io_clusteroverridepolicies.yaml
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
FROM alpine:3.7
|
||||||
|
|
||||||
|
RUN apk add --no-cache ca-certificates
|
||||||
|
|
||||||
|
ADD karmada-aggregated-apiserver /bin/
|
||||||
|
|
||||||
|
CMD ["/bin/karmada-aggregated-apiserver"]
|
2
go.mod
2
go.mod
|
@ -35,6 +35,6 @@ require (
|
||||||
sigs.k8s.io/controller-runtime v0.10.3
|
sigs.k8s.io/controller-runtime v0.10.3
|
||||||
sigs.k8s.io/kind v0.11.1
|
sigs.k8s.io/kind v0.11.1
|
||||||
sigs.k8s.io/mcs-api v0.1.0
|
sigs.k8s.io/mcs-api v0.1.0
|
||||||
sigs.k8s.io/yaml v1.3.0
|
|
||||||
sigs.k8s.io/structured-merge-diff/v4 v4.1.2
|
sigs.k8s.io/structured-merge-diff/v4 v4.1.2
|
||||||
|
sigs.k8s.io/yaml v1.3.0
|
||||||
)
|
)
|
||||||
|
|
|
@ -86,6 +86,10 @@ function generate_cert_secret {
|
||||||
sed -i'' -e "s/{{client_cer}}/${KARMADA_CRT}/g" "${TEMP_PATH}"/karmada-cert-secret-tmp.yaml
|
sed -i'' -e "s/{{client_cer}}/${KARMADA_CRT}/g" "${TEMP_PATH}"/karmada-cert-secret-tmp.yaml
|
||||||
sed -i'' -e "s/{{client_key}}/${KARMADA_KEY}/g" "${TEMP_PATH}"/karmada-cert-secret-tmp.yaml
|
sed -i'' -e "s/{{client_key}}/${KARMADA_KEY}/g" "${TEMP_PATH}"/karmada-cert-secret-tmp.yaml
|
||||||
|
|
||||||
|
sed -i'' -e "s/{{front_proxy_ca_crt}}/${FRONT_PROXY_CA_CRT}/g" "${TEMP_PATH}"/karmada-cert-secret-tmp.yaml
|
||||||
|
sed -i'' -e "s/{{front_proxy_client_crt}}/${FRONT_PROXY_CLIENT_CRT}/g" "${TEMP_PATH}"/karmada-cert-secret-tmp.yaml
|
||||||
|
sed -i'' -e "s/{{front_proxy_client_key}}/${FRONT_PROXY_CLIENT_KEY}/g" "${TEMP_PATH}"/karmada-cert-secret-tmp.yaml
|
||||||
|
|
||||||
sed -i'' -e "s/{{ca_crt}}/${karmada_ca}/g" "${TEMP_PATH}"/secret-tmp.yaml
|
sed -i'' -e "s/{{ca_crt}}/${karmada_ca}/g" "${TEMP_PATH}"/secret-tmp.yaml
|
||||||
sed -i'' -e "s/{{client_cer}}/${KARMADA_CRT}/g" "${TEMP_PATH}"/secret-tmp.yaml
|
sed -i'' -e "s/{{client_cer}}/${KARMADA_CRT}/g" "${TEMP_PATH}"/secret-tmp.yaml
|
||||||
sed -i'' -e "s/{{client_key}}/${KARMADA_KEY}/g" "${TEMP_PATH}"/secret-tmp.yaml
|
sed -i'' -e "s/{{client_key}}/${KARMADA_KEY}/g" "${TEMP_PATH}"/secret-tmp.yaml
|
||||||
|
@ -113,8 +117,10 @@ util::cmd_must_exist "openssl"
|
||||||
util::cmd_must_exist_cfssl ${CFSSL_VERSION}
|
util::cmd_must_exist_cfssl ${CFSSL_VERSION}
|
||||||
# create CA signers
|
# create CA signers
|
||||||
util::create_signing_certkey "" "${CERT_DIR}" server '"client auth","server auth"'
|
util::create_signing_certkey "" "${CERT_DIR}" server '"client auth","server auth"'
|
||||||
|
util::create_signing_certkey "" "${CERT_DIR}" front-proxy '"client auth","server auth"'
|
||||||
# signs a certificate
|
# signs a certificate
|
||||||
util::create_certkey "" "${CERT_DIR}" "server-ca" karmada system:admin kubernetes.default.svc "*.etcd.karmada-system.svc.cluster.local" "*.karmada-system.svc.cluster.local" "*.karmada-system.svc" "localhost" "127.0.0.1"
|
util::create_certkey "" "${CERT_DIR}" "server-ca" karmada system:admin kubernetes.default.svc "*.etcd.karmada-system.svc.cluster.local" "*.karmada-system.svc.cluster.local" "*.karmada-system.svc" "localhost" "127.0.0.1"
|
||||||
|
util::create_certkey "" "${CERT_DIR}" "front-proxy-ca" front-proxy-client front-proxy-client kubernetes.default.svc "*.etcd.karmada-system.svc.cluster.local" "*.karmada-system.svc.cluster.local" "*.karmada-system.svc" "localhost" "127.0.0.1"
|
||||||
|
|
||||||
# create namespace for control plane components
|
# create namespace for control plane components
|
||||||
kubectl apply -f "${REPO_ROOT}/artifacts/deploy/namespace.yaml"
|
kubectl apply -f "${REPO_ROOT}/artifacts/deploy/namespace.yaml"
|
||||||
|
@ -126,6 +132,9 @@ kubectl apply -f "${REPO_ROOT}/artifacts/deploy/clusterrolebinding.yaml"
|
||||||
|
|
||||||
KARMADA_CRT=$(base64 "${CERT_DIR}/karmada.crt" | tr -d '\r\n')
|
KARMADA_CRT=$(base64 "${CERT_DIR}/karmada.crt" | tr -d '\r\n')
|
||||||
KARMADA_KEY=$(base64 "${CERT_DIR}/karmada.key" | tr -d '\r\n')
|
KARMADA_KEY=$(base64 "${CERT_DIR}/karmada.key" | tr -d '\r\n')
|
||||||
|
FRONT_PROXY_CA_CRT=$(base64 "${CERT_DIR}/front-proxy-ca.crt" | tr -d '\r\n')
|
||||||
|
FRONT_PROXY_CLIENT_CRT=$(base64 "${CERT_DIR}/front-proxy-client.crt" | tr -d '\r\n')
|
||||||
|
FRONT_PROXY_CLIENT_KEY=$(base64 "${CERT_DIR}/front-proxy-client.key" | tr -d '\r\n')
|
||||||
generate_cert_secret
|
generate_cert_secret
|
||||||
|
|
||||||
# deploy karmada etcd
|
# deploy karmada etcd
|
||||||
|
@ -191,6 +200,9 @@ util::append_client_kubeconfig "${HOST_CLUSTER_KUBECONFIG}" "${CERT_DIR}/karmada
|
||||||
|
|
||||||
# deploy kube controller manager
|
# deploy kube controller manager
|
||||||
kubectl apply -f "${REPO_ROOT}/artifacts/deploy/kube-controller-manager.yaml"
|
kubectl apply -f "${REPO_ROOT}/artifacts/deploy/kube-controller-manager.yaml"
|
||||||
|
# deploy aggregated-apiserver on host cluster
|
||||||
|
kubectl apply -f "${REPO_ROOT}/artifacts/deploy/karmada-aggregated-apiserver.yaml"
|
||||||
|
util::wait_pod_ready "${KARMADA_AGGREGATION_APISERVER_LABEL}" "${KARMADA_SYSTEM_NAMESPACE}"
|
||||||
|
|
||||||
# install CRD APIs on karmada apiserver.
|
# install CRD APIs on karmada apiserver.
|
||||||
if ! kubectl config use-context karmada-apiserver > /dev/null 2>&1;
|
if ! kubectl config use-context karmada-apiserver > /dev/null 2>&1;
|
||||||
|
@ -210,6 +222,11 @@ rm -rf "${TEMP_PATH_CRDS}"
|
||||||
# deploy webhook configurations on karmada apiserver
|
# deploy webhook configurations on karmada apiserver
|
||||||
util::deploy_webhook_configuration "${ROOT_CA_FILE}" "${REPO_ROOT}/artifacts/deploy/webhook-configuration.yaml"
|
util::deploy_webhook_configuration "${ROOT_CA_FILE}" "${REPO_ROOT}/artifacts/deploy/webhook-configuration.yaml"
|
||||||
|
|
||||||
|
# deploy APIService on karmada apiserver for karmada-aggregated-apiserver
|
||||||
|
kubectl apply -f "${REPO_ROOT}/artifacts/deploy/apiservice.yaml"
|
||||||
|
# make sure apiservice for v1alpha1.cluster.karmada.io is Available
|
||||||
|
util::wait_apiservice_ready "${KARMADA_AGGREGATION_APISERVER_LABEL}"
|
||||||
|
|
||||||
kubectl config use-context "${HOST_CLUSTER_NAME}"
|
kubectl config use-context "${HOST_CLUSTER_NAME}"
|
||||||
|
|
||||||
# deploy controller-manager on host cluster
|
# deploy controller-manager on host cluster
|
||||||
|
|
|
@ -47,6 +47,7 @@ dockerfile_list=( # Dockerfile files need to be replaced
|
||||||
"cluster/images/karmada-scheduler-estimator/Dockerfile"
|
"cluster/images/karmada-scheduler-estimator/Dockerfile"
|
||||||
"cluster/images/karmada-scheduler/Dockerfile"
|
"cluster/images/karmada-scheduler/Dockerfile"
|
||||||
"cluster/images/karmada-webhook/Dockerfile"
|
"cluster/images/karmada-webhook/Dockerfile"
|
||||||
|
"cluster/images/karmada-aggregated-apiserver/Dockerfile"
|
||||||
)
|
)
|
||||||
for dockerfile in "${dockerfile_list[@]}"; do
|
for dockerfile in "${dockerfile_list[@]}"; do
|
||||||
grep 'mirrors.ustc.edu.cn' ${REPO_ROOT}/${dockerfile} > /dev/null || sed -i'' -e "s#FROM alpine:3.7#FROM alpine:3.7\nRUN echo -e http://mirrors.ustc.edu.cn/alpine/v3.7/main/ > /etc/apk/repositories#" ${REPO_ROOT}/${dockerfile}
|
grep 'mirrors.ustc.edu.cn' ${REPO_ROOT}/${dockerfile} > /dev/null || sed -i'' -e "s#FROM alpine:3.7#FROM alpine:3.7\nRUN echo -e http://mirrors.ustc.edu.cn/alpine/v3.7/main/ > /etc/apk/repositories#" ${REPO_ROOT}/${dockerfile}
|
||||||
|
@ -122,6 +123,7 @@ kind load docker-image "${REGISTRY}/karmada-controller-manager:${VERSION}" --nam
|
||||||
kind load docker-image "${REGISTRY}/karmada-scheduler:${VERSION}" --name="${HOST_CLUSTER_NAME}"
|
kind load docker-image "${REGISTRY}/karmada-scheduler:${VERSION}" --name="${HOST_CLUSTER_NAME}"
|
||||||
kind load docker-image "${REGISTRY}/karmada-webhook:${VERSION}" --name="${HOST_CLUSTER_NAME}"
|
kind load docker-image "${REGISTRY}/karmada-webhook:${VERSION}" --name="${HOST_CLUSTER_NAME}"
|
||||||
kind load docker-image "${REGISTRY}/karmada-scheduler-estimator:${VERSION}" --name="${HOST_CLUSTER_NAME}"
|
kind load docker-image "${REGISTRY}/karmada-scheduler-estimator:${VERSION}" --name="${HOST_CLUSTER_NAME}"
|
||||||
|
kind load docker-image "${REGISTRY}/karmada-aggregated-apiserver:${VERSION}" --name="${HOST_CLUSTER_NAME}"
|
||||||
|
|
||||||
#step5. install karmada control plane components
|
#step5. install karmada control plane components
|
||||||
"${REPO_ROOT}"/hack/deploy-karmada.sh "${MAIN_KUBECONFIG}" "${HOST_CLUSTER_NAME}"
|
"${REPO_ROOT}"/hack/deploy-karmada.sh "${MAIN_KUBECONFIG}" "${HOST_CLUSTER_NAME}"
|
||||||
|
|
|
@ -18,6 +18,11 @@ deepcopy-gen \
|
||||||
--input-dirs=github.com/karmada-io/karmada/pkg/apis/cluster/v1alpha1 \
|
--input-dirs=github.com/karmada-io/karmada/pkg/apis/cluster/v1alpha1 \
|
||||||
--output-package=github.com/karmada-io/karmada/pkg/apis/cluster/v1alpha1 \
|
--output-package=github.com/karmada-io/karmada/pkg/apis/cluster/v1alpha1 \
|
||||||
--output-file-base=zz_generated.deepcopy
|
--output-file-base=zz_generated.deepcopy
|
||||||
|
deepcopy-gen \
|
||||||
|
--go-header-file hack/boilerplate/boilerplate.go.txt \
|
||||||
|
--input-dirs=github.com/karmada-io/karmada/pkg/apis/cluster \
|
||||||
|
--output-package=github.com/karmada-io/karmada/pkg/apis/cluster \
|
||||||
|
--output-file-base=zz_generated.deepcopy
|
||||||
deepcopy-gen \
|
deepcopy-gen \
|
||||||
--go-header-file hack/boilerplate/boilerplate.go.txt \
|
--go-header-file hack/boilerplate/boilerplate.go.txt \
|
||||||
--input-dirs=github.com/karmada-io/karmada/pkg/apis/policy/v1alpha1 \
|
--input-dirs=github.com/karmada-io/karmada/pkg/apis/policy/v1alpha1 \
|
||||||
|
@ -77,6 +82,14 @@ register-gen \
|
||||||
--output-package=github.com/karmada-io/karmada/examples/customresourceinterpreter/apis/workload/v1alpha1 \
|
--output-package=github.com/karmada-io/karmada/examples/customresourceinterpreter/apis/workload/v1alpha1 \
|
||||||
--output-file-base=zz_generated.register
|
--output-file-base=zz_generated.register
|
||||||
|
|
||||||
|
echo "Generating with conversion-gen"
|
||||||
|
GO111MODULE=on go install k8s.io/code-generator/cmd/conversion-gen
|
||||||
|
conversion-gen \
|
||||||
|
--go-header-file hack/boilerplate/boilerplate.go.txt \
|
||||||
|
--input-dirs=github.com/karmada-io/karmada/pkg/apis/cluster/v1alpha1 \
|
||||||
|
--output-package=github.com/karmada-io/karmada/pkg/apis/cluster/v1alpha1 \
|
||||||
|
--output-file-base=zz_generated.conversion
|
||||||
|
|
||||||
echo "Generating with client-gen"
|
echo "Generating with client-gen"
|
||||||
GO111MODULE=on go install k8s.io/code-generator/cmd/client-gen
|
GO111MODULE=on go install k8s.io/code-generator/cmd/client-gen
|
||||||
client-gen \
|
client-gen \
|
||||||
|
@ -101,4 +114,3 @@ informer-gen \
|
||||||
--versioned-clientset-package=github.com/karmada-io/karmada/pkg/generated/clientset/versioned \
|
--versioned-clientset-package=github.com/karmada-io/karmada/pkg/generated/clientset/versioned \
|
||||||
--listers-package=github.com/karmada-io/karmada/pkg/generated/listers \
|
--listers-package=github.com/karmada-io/karmada/pkg/generated/listers \
|
||||||
--output-package=github.com/karmada-io/karmada/pkg/generated/informers
|
--output-package=github.com/karmada-io/karmada/pkg/generated/informers
|
||||||
|
|
||||||
|
|
|
@ -13,5 +13,7 @@ echo "Generating with controller-gen"
|
||||||
util::install_tools ${CONTROLLER_GEN_PKG} ${CONTROLLER_GEN_VER} >/dev/null 2>&1
|
util::install_tools ${CONTROLLER_GEN_PKG} ${CONTROLLER_GEN_VER} >/dev/null 2>&1
|
||||||
|
|
||||||
# Unify the crds used by helm chart and the installation scripts
|
# Unify the crds used by helm chart and the installation scripts
|
||||||
controller-gen crd paths=./pkg/apis/... output:crd:dir=./charts/_crds/bases
|
controller-gen crd paths=./pkg/apis/config/... output:crd:dir=./charts/_crds/bases
|
||||||
|
controller-gen crd paths=./pkg/apis/policy/... output:crd:dir=./charts/_crds/bases
|
||||||
|
controller-gen crd paths=./pkg/apis/work/... output:crd:dir=./charts/_crds/bases
|
||||||
controller-gen crd paths=./examples/customresourceinterpreter/apis/... output:crd:dir=./examples/customresourceinterpreter/apis/
|
controller-gen crd paths=./examples/customresourceinterpreter/apis/... output:crd:dir=./examples/customresourceinterpreter/apis/
|
||||||
|
|
20
hack/util.sh
20
hack/util.sh
|
@ -10,6 +10,7 @@ KARMADA_SYSTEM_NAMESPACE="karmada-system"
|
||||||
ETCD_POD_LABEL="etcd"
|
ETCD_POD_LABEL="etcd"
|
||||||
APISERVER_POD_LABEL="karmada-apiserver"
|
APISERVER_POD_LABEL="karmada-apiserver"
|
||||||
KUBE_CONTROLLER_POD_LABEL="kube-controller-manager"
|
KUBE_CONTROLLER_POD_LABEL="kube-controller-manager"
|
||||||
|
KARMADA_AGGREGATION_APISERVER_LABEL="karmada-aggregated-apiserver"
|
||||||
KARMADA_CONTROLLER_LABEL="karmada-controller-manager"
|
KARMADA_CONTROLLER_LABEL="karmada-controller-manager"
|
||||||
KARMADA_SCHEDULER_LABEL="karmada-scheduler"
|
KARMADA_SCHEDULER_LABEL="karmada-scheduler"
|
||||||
KARMADA_WEBHOOK_LABEL="karmada-webhook"
|
KARMADA_WEBHOOK_LABEL="karmada-webhook"
|
||||||
|
@ -301,6 +302,25 @@ function util::wait_pod_ready() {
|
||||||
return ${ret}
|
return ${ret}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# util::wait_apiservice_ready waits for apiservice state becomes Available until timeout.
|
||||||
|
# Parmeters:
|
||||||
|
# - $1: apiservice label, such as "app=etcd"
|
||||||
|
# - $3: time out, such as "200s"
|
||||||
|
function util::wait_apiservice_ready() {
|
||||||
|
local apiservice_label=$1
|
||||||
|
|
||||||
|
echo "wait the $apiservice_label Available..."
|
||||||
|
set +e
|
||||||
|
util::kubectl_with_retry wait --for=condition=Available --timeout=30s apiservices -l app=${apiservice_label}
|
||||||
|
ret=$?
|
||||||
|
set -e
|
||||||
|
if [ $ret -ne 0 ];then
|
||||||
|
echo "kubectl describe info:"
|
||||||
|
kubectl describe apiservices -l app=${apiservice_label}
|
||||||
|
fi
|
||||||
|
return ${ret}
|
||||||
|
}
|
||||||
|
|
||||||
# util::kubectl_with_retry will retry if execute kubectl command failed
|
# util::kubectl_with_retry will retry if execute kubectl command failed
|
||||||
# tolerate kubectl command failure that may happen before the pod is created by StatefulSet/Deployment.
|
# tolerate kubectl command failure that may happen before the pod is created by StatefulSet/Deployment.
|
||||||
function util::kubectl_with_retry() {
|
function util::kubectl_with_retry() {
|
||||||
|
|
Loading…
Reference in New Issue