Merge pull request #2655 from helen-frank/feature/karmada-image-registry
introduce `--private-image-registry` flag to `karmadactl init`
This commit is contained in:
commit
9a4a6684c0
|
@ -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")
|
||||
|
@ -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("docker.io/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("docker.io/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("docker.io/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("docker.io/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
|
||||
|
|
|
@ -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 (
|
||||
|
@ -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 (
|
||||
|
@ -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("docker.io/karmada/karmada-scheduler:%s", releaseVer.PatchRelease())
|
||||
DefaultKarmadaControllerManagerImage = fmt.Sprintf("docker.io/karmada/karmada-controller-manager:%s", releaseVer.PatchRelease())
|
||||
DefualtKarmadaWebhookImage = fmt.Sprintf("docker.io/karmada/karmada-webhook:%s", releaseVer.PatchRelease())
|
||||
DefaultKarmadaAggregatedAPIServerImage = fmt.Sprintf("docker.io/karmada/karmada-aggregated-apiserver:%s", releaseVer.PatchRelease())
|
||||
}
|
||||
|
||||
// CommandInitOption holds all flags options for init.
|
||||
type CommandInitOption struct {
|
||||
ImageRegistry string
|
||||
KubeImageRegistry string
|
||||
KubeImageMirrorCountry string
|
||||
EtcdImage string
|
||||
|
@ -508,6 +541,9 @@ func (i *CommandInitOption) kubeRegistry() string {
|
|||
}
|
||||
}
|
||||
|
||||
if i.ImageRegistry != "" {
|
||||
return i.ImageRegistry
|
||||
}
|
||||
return imageRepositories["global"]
|
||||
}
|
||||
|
||||
|
@ -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 != "" {
|
||||
|
@ -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 {
|
||||
|
|
|
@ -417,7 +417,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",
|
||||
|
@ -532,7 +532,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",
|
||||
|
@ -649,7 +649,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",
|
||||
|
@ -794,7 +794,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",
|
||||
|
|
|
@ -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
|
||||
|
@ -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{
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue