Skip to content

Commit

Permalink
add image-registry
Browse files Browse the repository at this point in the history
Signed-off-by: helen <haitao.zhang@daocloud.io>
  • Loading branch information
helen-frank committed Nov 15, 2022
1 parent eee362c commit 06b0287
Show file tree
Hide file tree
Showing 4 changed files with 89 additions and 19 deletions.
20 changes: 7 additions & 13 deletions pkg/karmadactl/cmdinit/cmdinit.go
Original file line number Diff line number Diff line change
Expand Up @@ -93,12 +93,7 @@ func NewCmdInit(parentCommand string) *cobra.Command {
},
}
flags := cmd.Flags()

releaseVer, err := version.ParseGitVersion(version.Get().GitVersion)
if err != nil {
klog.Infof("No default release version found. build version: %s", version.Get().String())
releaseVer = &version.ReleaseVersion{} // initialize to avoid panic
}
flags.StringVarP(&opts.ImageRegistry, "private-image-registry", "", "", "Private image registry where pull images from. If set, all required images will be downloaded from it, it would be useful in offline installation scenarios. In addition, you still can use --kube-image-registry to specify the registry for Kubernetes's images.")
// kube image registry
flags.StringVarP(&opts.KubeImageMirrorCountry, "kube-image-mirror-country", "", "", "Country code of the kube image registry to be used. For Chinese mainland users, set it to cn")
flags.StringVarP(&opts.KubeImageRegistry, "kube-image-registry", "", "", "Kube image registry. For Chinese mainland users, you may use local gcr.io mirrors such as registry.cn-hangzhou.aliyuncs.com/google_containers to override default kube image registry")
Expand All @@ -114,29 +109,28 @@ func NewCmdInit(parentCommand string) *cobra.Command {
flags.StringVarP(&opts.EtcdStorageMode, "etcd-storage-mode", "", "hostPath",
fmt.Sprintf("etcd data storage mode(%s). value is PVC, specify --storage-classes-name", strings.Join(kubernetes.SupportedStorageMode(), ",")))
flags.StringVarP(&opts.EtcdImage, "etcd-image", "", "", "etcd image")
flags.StringVarP(&opts.EtcdInitImage, "etcd-init-image", "", "docker.io/alpine:3.15.1", "etcd init container image")
flags.StringVarP(&opts.EtcdInitImage, "etcd-init-image", "", kubernetes.DefaultInitImage, "etcd init container image")
flags.Int32VarP(&opts.EtcdReplicas, "etcd-replicas", "", 1, "etcd replica set, cluster 3,5...singular")
flags.StringVarP(&opts.EtcdHostDataPath, "etcd-data", "", "/var/lib/karmada-etcd", "etcd data path,valid in hostPath mode.")
flags.StringVarP(&opts.EtcdNodeSelectorLabels, "etcd-node-selector-labels", "", "", "etcd pod select the labels of the node. valid in hostPath mode ( e.g. --etcd-node-selector-labels karmada.io/etcd=true)")
flags.StringVarP(&opts.EtcdPersistentVolumeSize, "etcd-pvc-size", "", "5Gi", "etcd data path,valid in pvc mode.")
// karmada
crdURL := fmt.Sprintf("https://github.com/karmada-io/karmada/releases/download/%s/crds.tar.gz", releaseVer.FirstMinorRelease())
flags.StringVar(&opts.CRDs, "crds", crdURL, "Karmada crds resource.(local file e.g. --crds /root/crds.tar.gz)")
flags.StringVar(&opts.CRDs, "crds", kubernetes.DefaultCrdURL, "Karmada crds resource.(local file e.g. --crds /root/crds.tar.gz)")
flags.StringVarP(&opts.KarmadaAPIServerAdvertiseAddress, "karmada-apiserver-advertise-address", "", "", "The IP address the Karmada API Server will advertise it's listening on. If not set, the address on the master node will be used.")
flags.Int32VarP(&opts.KarmadaAPIServerNodePort, "port", "p", 32443, "Karmada apiserver service node port")
flags.StringVarP(&opts.KarmadaDataPath, "karmada-data", "d", "/etc/karmada", "Karmada data path. kubeconfig cert and crds files")
flags.StringVarP(&opts.KarmadaPkiPath, "karmada-pki", "", "/etc/karmada/pki", "Karmada pki path. Karmada cert files")
flags.StringVarP(&opts.KarmadaAPIServerImage, "karmada-apiserver-image", "", "", "Kubernetes apiserver image")
flags.Int32VarP(&opts.KarmadaAPIServerReplicas, "karmada-apiserver-replicas", "", 1, "Karmada apiserver replica set")
flags.StringVarP(&opts.KarmadaSchedulerImage, "karmada-scheduler-image", "", fmt.Sprintf("swr.ap-southeast-1.myhuaweicloud.com/karmada/karmada-scheduler:%s", releaseVer.PatchRelease()), "Karmada scheduler image")
flags.StringVarP(&opts.KarmadaSchedulerImage, "karmada-scheduler-image", "", kubernetes.DefaultKarmadaSchedulerImage, "Karmada scheduler image")
flags.Int32VarP(&opts.KarmadaSchedulerReplicas, "karmada-scheduler-replicas", "", 1, "Karmada scheduler replica set")
flags.StringVarP(&opts.KubeControllerManagerImage, "karmada-kube-controller-manager-image", "", "", "Kubernetes controller manager image")
flags.Int32VarP(&opts.KubeControllerManagerReplicas, "karmada-kube-controller-manager-replicas", "", 1, "Karmada kube controller manager replica set")
flags.StringVarP(&opts.KarmadaControllerManagerImage, "karmada-controller-manager-image", "", fmt.Sprintf("swr.ap-southeast-1.myhuaweicloud.com/karmada/karmada-controller-manager:%s", releaseVer.PatchRelease()), "Karmada controller manager image")
flags.StringVarP(&opts.KarmadaControllerManagerImage, "karmada-controller-manager-image", "", kubernetes.DefaultKarmadaControllerManagerImage, "Karmada controller manager image")
flags.Int32VarP(&opts.KarmadaControllerManagerReplicas, "karmada-controller-manager-replicas", "", 1, "Karmada controller manager replica set")
flags.StringVarP(&opts.KarmadaWebhookImage, "karmada-webhook-image", "", fmt.Sprintf("swr.ap-southeast-1.myhuaweicloud.com/karmada/karmada-webhook:%s", releaseVer.PatchRelease()), "Karmada webhook image")
flags.StringVarP(&opts.KarmadaWebhookImage, "karmada-webhook-image", "", kubernetes.DefualtKarmadaWebhookImage, "Karmada webhook image")
flags.Int32VarP(&opts.KarmadaWebhookReplicas, "karmada-webhook-replicas", "", 1, "Karmada webhook replica set")
flags.StringVarP(&opts.KarmadaAggregatedAPIServerImage, "karmada-aggregated-apiserver-image", "", fmt.Sprintf("swr.ap-southeast-1.myhuaweicloud.com/karmada/karmada-aggregated-apiserver:%s", releaseVer.PatchRelease()), "Karmada aggregated apiserver image")
flags.StringVarP(&opts.KarmadaAggregatedAPIServerImage, "karmada-aggregated-apiserver-image", "", kubernetes.DefaultKarmadaAggregatedAPIServerImage, "Karmada aggregated apiserver image")
flags.Int32VarP(&opts.KarmadaAggregatedAPIServerReplicas, "karmada-aggregated-apiserver-replicas", "", 1, "Karmada aggregated apiserver replica set")

return cmd
Expand Down
76 changes: 76 additions & 0 deletions pkg/karmadactl/cmdinit/kubernetes/deploy.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import (
"github.com/karmada-io/karmada/pkg/karmadactl/cmdinit/utils"
"github.com/karmada-io/karmada/pkg/karmadactl/util"
"github.com/karmada-io/karmada/pkg/karmadactl/util/apiclient"
"github.com/karmada-io/karmada/pkg/version"
)

var (
Expand All @@ -44,9 +45,24 @@ var (
options.FrontProxyClientCertAndKeyName,
}

karmadaRelease string

defaultEtcdImage = "etcd:3.5.3-0"
defaultKubeAPIServerImage = "kube-apiserver:v1.25.2"
defaultKubeControllerManagerImage = "kube-controller-manager:v1.25.2"

// DefaultCrdURL Karmada crds resource
DefaultCrdURL string
// DefaultInitImage etcd init container image
DefaultInitImage string
// DefaultKarmadaSchedulerImage Karmada scheduler image
DefaultKarmadaSchedulerImage string
// DefaultKarmadaControllerManagerImage Karmada controller manager image
DefaultKarmadaControllerManagerImage string
// DefualtKarmadaWebhookImage Karmada webhook image
DefualtKarmadaWebhookImage string
// DefaultKarmadaAggregatedAPIServerImage Karmada aggregated apiserver image
DefaultKarmadaAggregatedAPIServerImage string
)

const (
Expand All @@ -55,8 +71,25 @@ const (
etcdStorageModeHostPath = "hostPath"
)

func init() {
releaseVer, err := version.ParseGitVersion(version.Get().GitVersion)
if err != nil {
klog.Infof("No default release version found. build version: %s", version.Get().String())
releaseVer = &version.ReleaseVersion{} // initialize to avoid panic
}
karmadaRelease = releaseVer.PatchRelease()

DefaultCrdURL = fmt.Sprintf("https://github.com/karmada-io/karmada/releases/download/%s/crds.tar.gz", releaseVer.FirstMinorRelease())
DefaultInitImage = "docker.io/alpine:3.15.1"
DefaultKarmadaSchedulerImage = fmt.Sprintf("swr.ap-southeast-1.myhuaweicloud.com/karmada/karmada-scheduler:%s", karmadaRelease)
DefaultKarmadaControllerManagerImage = fmt.Sprintf("swr.ap-southeast-1.myhuaweicloud.com/karmada/karmada-controller-manager:%s", karmadaRelease)
DefualtKarmadaWebhookImage = fmt.Sprintf("swr.ap-southeast-1.myhuaweicloud.com/karmada/karmada-webhook:%s", karmadaRelease)
DefaultKarmadaAggregatedAPIServerImage = fmt.Sprintf("swr.ap-southeast-1.myhuaweicloud.com/karmada/karmada-aggregated-apiserver:%s", karmadaRelease)
}

// CommandInitOption holds all flags options for init.
type CommandInitOption struct {
ImageRegistry string
KubeImageRegistry string
KubeImageMirrorCountry string
EtcdImage string
Expand Down Expand Up @@ -508,6 +541,9 @@ func (i *CommandInitOption) kubeRegistry() string {
}
}

if i.ImageRegistry != "" {
return i.ImageRegistry
}
return imageRepositories["global"]
}

Expand All @@ -527,6 +563,14 @@ func (i *CommandInitOption) kubeControllerManagerImage() string {
return i.kubeRegistry() + "/" + defaultKubeControllerManagerImage
}

// get etcd-init image
func (i *CommandInitOption) etcdInitImage() string {
if i.ImageRegistry != "" && i.EtcdInitImage == DefaultInitImage {
return i.ImageRegistry + "/alpine:3.15.1"
}
return i.EtcdInitImage
}

// get etcd image
func (i *CommandInitOption) etcdImage() string {
if i.EtcdImage != "" {
Expand All @@ -535,6 +579,38 @@ func (i *CommandInitOption) etcdImage() string {
return i.kubeRegistry() + "/" + defaultEtcdImage
}

// get karmada-scheduler image
func (i *CommandInitOption) karmadaSchedulerImage() string {
if i.ImageRegistry != "" && i.KarmadaSchedulerImage == DefaultKarmadaSchedulerImage {
return i.ImageRegistry + "/karmada-scheduler:" + karmadaRelease
}
return i.KarmadaSchedulerImage
}

// get karmada-controller-manager
func (i *CommandInitOption) karmadaControllerManagerImage() string {
if i.ImageRegistry != "" && i.KarmadaControllerManagerImage == DefaultKarmadaControllerManagerImage {
return i.ImageRegistry + "/karmada-controller-manager:" + karmadaRelease
}
return i.KarmadaControllerManagerImage
}

// get karmada-webhook image
func (i *CommandInitOption) karmadaWebhookImage() string {
if i.ImageRegistry != "" && i.KarmadaWebhookImage == DefualtKarmadaWebhookImage {
return i.ImageRegistry + "/karmada-webhook:" + karmadaRelease
}
return i.KarmadaWebhookImage
}

// get karmada-aggregated-apiserver image
func (i *CommandInitOption) karmadaAggregatedAPIServerImage() string {
if i.ImageRegistry != "" && i.KarmadaAggregatedAPIServerImage == DefaultKarmadaAggregatedAPIServerImage {
return i.ImageRegistry + "/karmada-aggregated-apiserver:" + karmadaRelease
}
return i.KarmadaAggregatedAPIServerImage
}

func generateServerURL(serverIP string, nodePort int32) (string, error) {
_, ipType, err := utils.ParseIP(serverIP)
if err != nil {
Expand Down
8 changes: 4 additions & 4 deletions pkg/karmadactl/cmdinit/kubernetes/deployments.go
Original file line number Diff line number Diff line change
Expand Up @@ -399,7 +399,7 @@ func (i *CommandInitOption) makeKarmadaSchedulerDeployment() *appsv1.Deployment
Containers: []corev1.Container{
{
Name: schedulerDeploymentNameAndServiceAccountName,
Image: i.KarmadaSchedulerImage,
Image: i.karmadaSchedulerImage(),
Command: []string{
"/bin/karmada-scheduler",
"--kubeconfig=/etc/kubeconfig",
Expand Down Expand Up @@ -514,7 +514,7 @@ func (i *CommandInitOption) makeKarmadaControllerManagerDeployment() *appsv1.Dep
Containers: []corev1.Container{
{
Name: controllerManagerDeploymentAndServiceName,
Image: i.KarmadaControllerManagerImage,
Image: i.karmadaControllerManagerImage(),
Command: []string{
"/bin/karmada-controller-manager",
"--kubeconfig=/etc/kubeconfig",
Expand Down Expand Up @@ -631,7 +631,7 @@ func (i *CommandInitOption) makeKarmadaWebhookDeployment() *appsv1.Deployment {
Containers: []corev1.Container{
{
Name: webhookDeploymentAndServiceAccountAndServiceName,
Image: i.KarmadaWebhookImage,
Image: i.karmadaWebhookImage(),
Command: []string{
"/bin/karmada-webhook",
"--kubeconfig=/etc/kubeconfig",
Expand Down Expand Up @@ -776,7 +776,7 @@ func (i *CommandInitOption) makeKarmadaAggregatedAPIServerDeployment() *appsv1.D
Containers: []corev1.Container{
{
Name: karmadaAggregatedAPIServerDeploymentAndServiceName,
Image: i.KarmadaAggregatedAPIServerImage,
Image: i.karmadaAggregatedAPIServerImage(),
Command: []string{
"/bin/karmada-aggregated-apiserver",
"--kubeconfig=/etc/kubeconfig",
Expand Down
4 changes: 2 additions & 2 deletions pkg/karmadactl/cmdinit/kubernetes/statefulset.go
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ peer-transport-security:
initial-cluster-state: new
initial-cluster-token: etcd-cluster
initial-cluster: %s
listen-peer-urls: http://${%s}:%v
listen-peer-urls: http://${%s}:%v
listen-client-urls: https://${%s}:%v,http://127.0.0.1:%v
initial-advertise-peer-urls: http://${%s}:%v
advertise-client-urls: https://${%s}.%s.%s.svc.cluster.local:%v
Expand Down Expand Up @@ -288,7 +288,7 @@ func (i *CommandInitOption) makeETCDStatefulSet() *appsv1.StatefulSet {
podSpec.InitContainers = []corev1.Container{
{
Name: "etcd-init-conf",
Image: i.EtcdInitImage,
Image: i.etcdInitImage(),
Command: i.etcdInitContainerCommand(),
VolumeMounts: []corev1.VolumeMount{
{
Expand Down

0 comments on commit 06b0287

Please sign in to comment.