mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-09-15 14:14:39 +00:00
[Federation][init-10a] Make the federation API server and controller manager image names configurable.
This enables testing non-release images.
This commit is contained in:
@@ -27,6 +27,7 @@ go_library(
|
|||||||
"//pkg/util/cert/triple:go_default_library",
|
"//pkg/util/cert/triple:go_default_library",
|
||||||
"//pkg/util/intstr:go_default_library",
|
"//pkg/util/intstr:go_default_library",
|
||||||
"//pkg/util/wait:go_default_library",
|
"//pkg/util/wait:go_default_library",
|
||||||
|
"//pkg/version:go_default_library",
|
||||||
"//vendor:github.com/spf13/cobra",
|
"//vendor:github.com/spf13/cobra",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
@@ -48,6 +48,7 @@ import (
|
|||||||
triple "k8s.io/kubernetes/pkg/util/cert/triple"
|
triple "k8s.io/kubernetes/pkg/util/cert/triple"
|
||||||
"k8s.io/kubernetes/pkg/util/intstr"
|
"k8s.io/kubernetes/pkg/util/intstr"
|
||||||
"k8s.io/kubernetes/pkg/util/wait"
|
"k8s.io/kubernetes/pkg/util/wait"
|
||||||
|
"k8s.io/kubernetes/pkg/version"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
@@ -92,7 +93,7 @@ var (
|
|||||||
"module": "federation-controller-manager",
|
"module": "federation-controller-manager",
|
||||||
}
|
}
|
||||||
|
|
||||||
hyperkubeImage = "gcr.io/google_containers/hyperkube-amd64:v1.5.0"
|
hyperkubeImageName = "gcr.io/google_containers/hyperkube-amd64"
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewCmdInit defines the `init` command that bootstraps a federation
|
// NewCmdInit defines the `init` command that bootstraps a federation
|
||||||
@@ -109,8 +110,11 @@ func NewCmdInit(cmdOut io.Writer, config util.AdminConfig) *cobra.Command {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
defaultImage := fmt.Sprintf("%s:%s", hyperkubeImageName, version.Get())
|
||||||
|
|
||||||
util.AddSubcommandFlags(cmd)
|
util.AddSubcommandFlags(cmd)
|
||||||
cmd.Flags().String("dns-zone-name", "", "DNS suffix for this federation. Federated Service DNS names are published with this suffix.")
|
cmd.Flags().String("dns-zone-name", "", "DNS suffix for this federation. Federated Service DNS names are published with this suffix.")
|
||||||
|
cmd.Flags().String("image", defaultImage, "Image to use for federation API server and controller manager binaries.")
|
||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -129,6 +133,7 @@ func initFederation(cmdOut io.Writer, config util.AdminConfig, cmd *cobra.Comman
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
dnsZoneName := cmdutil.GetFlagString(cmd, "dns-zone-name")
|
dnsZoneName := cmdutil.GetFlagString(cmd, "dns-zone-name")
|
||||||
|
image := cmdutil.GetFlagString(cmd, "image")
|
||||||
|
|
||||||
hostFactory := config.HostFactory(initFlags.Host, initFlags.Kubeconfig)
|
hostFactory := config.HostFactory(initFlags.Host, initFlags.Kubeconfig)
|
||||||
hostClientset, err := hostFactory.ClientSet()
|
hostClientset, err := hostFactory.ClientSet()
|
||||||
@@ -190,13 +195,13 @@ func initFederation(cmdOut io.Writer, config util.AdminConfig, cmd *cobra.Comman
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 6. Create federation API server
|
// 6. Create federation API server
|
||||||
_, err = createAPIServer(hostClientset, initFlags.FederationSystemNamespace, serverName, serverCredName, pvc.Name, advertiseAddress)
|
_, err = createAPIServer(hostClientset, initFlags.FederationSystemNamespace, serverName, image, serverCredName, pvc.Name, advertiseAddress)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// 7. Create federation controller manager
|
// 7. Create federation controller manager
|
||||||
_, err = createControllerManager(hostClientset, initFlags.FederationSystemNamespace, initFlags.Name, cmName, cmKubeconfigName, dnsZoneName)
|
_, err = createControllerManager(hostClientset, initFlags.FederationSystemNamespace, initFlags.Name, cmName, image, cmKubeconfigName, dnsZoneName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -356,7 +361,7 @@ func createPVC(clientset *client.Clientset, namespace, svcName string) (*api.Per
|
|||||||
return clientset.Core().PersistentVolumeClaims(namespace).Create(pvc)
|
return clientset.Core().PersistentVolumeClaims(namespace).Create(pvc)
|
||||||
}
|
}
|
||||||
|
|
||||||
func createAPIServer(clientset *client.Clientset, namespace, name, credentialsName, pvcName, advertiseAddress string) (*extensions.Deployment, error) {
|
func createAPIServer(clientset *client.Clientset, namespace, name, image, credentialsName, pvcName, advertiseAddress string) (*extensions.Deployment, error) {
|
||||||
command := []string{
|
command := []string{
|
||||||
"/hyperkube",
|
"/hyperkube",
|
||||||
"federation-apiserver",
|
"federation-apiserver",
|
||||||
@@ -394,7 +399,7 @@ func createAPIServer(clientset *client.Clientset, namespace, name, credentialsNa
|
|||||||
Containers: []api.Container{
|
Containers: []api.Container{
|
||||||
{
|
{
|
||||||
Name: "apiserver",
|
Name: "apiserver",
|
||||||
Image: hyperkubeImage,
|
Image: image,
|
||||||
Command: command,
|
Command: command,
|
||||||
Ports: []api.ContainerPort{
|
Ports: []api.ContainerPort{
|
||||||
{
|
{
|
||||||
@@ -456,7 +461,7 @@ func createAPIServer(clientset *client.Clientset, namespace, name, credentialsNa
|
|||||||
return clientset.Extensions().Deployments(namespace).Create(dep)
|
return clientset.Extensions().Deployments(namespace).Create(dep)
|
||||||
}
|
}
|
||||||
|
|
||||||
func createControllerManager(clientset *client.Clientset, namespace, name, cmName, kubeconfigName, dnsZoneName string) (*extensions.Deployment, error) {
|
func createControllerManager(clientset *client.Clientset, namespace, name, cmName, image, kubeconfigName, dnsZoneName string) (*extensions.Deployment, error) {
|
||||||
dep := &extensions.Deployment{
|
dep := &extensions.Deployment{
|
||||||
ObjectMeta: api.ObjectMeta{
|
ObjectMeta: api.ObjectMeta{
|
||||||
Name: cmName,
|
Name: cmName,
|
||||||
@@ -474,7 +479,7 @@ func createControllerManager(clientset *client.Clientset, namespace, name, cmNam
|
|||||||
Containers: []api.Container{
|
Containers: []api.Container{
|
||||||
{
|
{
|
||||||
Name: "controller-manager",
|
Name: "controller-manager",
|
||||||
Image: hyperkubeImage,
|
Image: image,
|
||||||
Command: []string{
|
Command: []string{
|
||||||
"/hyperkube",
|
"/hyperkube",
|
||||||
"federation-controller-manager",
|
"federation-controller-manager",
|
||||||
|
@@ -73,6 +73,7 @@ func TestInitFederation(t *testing.T) {
|
|||||||
kubeconfigExplicit string
|
kubeconfigExplicit string
|
||||||
dnsZoneName string
|
dnsZoneName string
|
||||||
lbIP string
|
lbIP string
|
||||||
|
image string
|
||||||
expectedErr string
|
expectedErr string
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
@@ -81,6 +82,7 @@ func TestInitFederation(t *testing.T) {
|
|||||||
kubeconfigExplicit: "",
|
kubeconfigExplicit: "",
|
||||||
dnsZoneName: "example.test.",
|
dnsZoneName: "example.test.",
|
||||||
lbIP: "10.20.30.40",
|
lbIP: "10.20.30.40",
|
||||||
|
image: "example.test/foo:bar",
|
||||||
expectedErr: "",
|
expectedErr: "",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@@ -89,7 +91,7 @@ func TestInitFederation(t *testing.T) {
|
|||||||
cmdErrMsg = ""
|
cmdErrMsg = ""
|
||||||
buf := bytes.NewBuffer([]byte{})
|
buf := bytes.NewBuffer([]byte{})
|
||||||
|
|
||||||
hostFactory, err := fakeInitHostFactory(tc.federation, util.DefaultFederationSystemNamespace, tc.lbIP, tc.dnsZoneName)
|
hostFactory, err := fakeInitHostFactory(tc.federation, util.DefaultFederationSystemNamespace, tc.lbIP, tc.dnsZoneName, tc.image)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("[%d] unexpected error: %v", i, err)
|
t.Fatalf("[%d] unexpected error: %v", i, err)
|
||||||
}
|
}
|
||||||
@@ -104,6 +106,7 @@ func TestInitFederation(t *testing.T) {
|
|||||||
cmd.Flags().Set("kubeconfig", tc.kubeconfigExplicit)
|
cmd.Flags().Set("kubeconfig", tc.kubeconfigExplicit)
|
||||||
cmd.Flags().Set("host-cluster-context", "substrate")
|
cmd.Flags().Set("host-cluster-context", "substrate")
|
||||||
cmd.Flags().Set("dns-zone-name", tc.dnsZoneName)
|
cmd.Flags().Set("dns-zone-name", tc.dnsZoneName)
|
||||||
|
cmd.Flags().Set("image", tc.image)
|
||||||
cmd.Run(cmd, []string{tc.federation})
|
cmd.Run(cmd, []string{tc.federation})
|
||||||
|
|
||||||
if tc.expectedErr == "" {
|
if tc.expectedErr == "" {
|
||||||
@@ -364,7 +367,7 @@ func TestCertsHTTPS(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func fakeInitHostFactory(federationName, namespaceName, ip, dnsZoneName string) (cmdutil.Factory, error) {
|
func fakeInitHostFactory(federationName, namespaceName, ip, dnsZoneName, image string) (cmdutil.Factory, error) {
|
||||||
svcName := federationName + "-apiserver"
|
svcName := federationName + "-apiserver"
|
||||||
svcUrlPrefix := "/api/v1/namespaces/federation-system/services"
|
svcUrlPrefix := "/api/v1/namespaces/federation-system/services"
|
||||||
credSecretName := svcName + "-credentials"
|
credSecretName := svcName + "-credentials"
|
||||||
@@ -492,7 +495,7 @@ func fakeInitHostFactory(federationName, namespaceName, ip, dnsZoneName string)
|
|||||||
Containers: []v1.Container{
|
Containers: []v1.Container{
|
||||||
{
|
{
|
||||||
Name: "apiserver",
|
Name: "apiserver",
|
||||||
Image: hyperkubeImage,
|
Image: image,
|
||||||
Command: []string{
|
Command: []string{
|
||||||
"/hyperkube",
|
"/hyperkube",
|
||||||
"federation-apiserver",
|
"federation-apiserver",
|
||||||
@@ -587,7 +590,7 @@ func fakeInitHostFactory(federationName, namespaceName, ip, dnsZoneName string)
|
|||||||
Containers: []v1.Container{
|
Containers: []v1.Container{
|
||||||
{
|
{
|
||||||
Name: "controller-manager",
|
Name: "controller-manager",
|
||||||
Image: hyperkubeImage,
|
Image: image,
|
||||||
Command: []string{
|
Command: []string{
|
||||||
"/hyperkube",
|
"/hyperkube",
|
||||||
"federation-controller-manager",
|
"federation-controller-manager",
|
||||||
|
Reference in New Issue
Block a user