mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-25 12:43:23 +00:00
Add option to disable persistence storage for etcd
This commit is contained in:
parent
4ecd52b8ac
commit
b943c9c2dd
@ -134,6 +134,7 @@ func NewCmdInit(cmdOut io.Writer, config util.AdminConfig) *cobra.Command {
|
|||||||
cmd.Flags().String("image", defaultImage, "Image to use for federation API server and controller manager binaries.")
|
cmd.Flags().String("image", defaultImage, "Image to use for federation API server and controller manager binaries.")
|
||||||
cmd.Flags().String("dns-provider", "google-clouddns", "Dns provider to be used for this deployment.")
|
cmd.Flags().String("dns-provider", "google-clouddns", "Dns provider to be used for this deployment.")
|
||||||
cmd.Flags().String("etcd-pv-capacity", "10Gi", "Size of persistent volume claim to be used for etcd.")
|
cmd.Flags().String("etcd-pv-capacity", "10Gi", "Size of persistent volume claim to be used for etcd.")
|
||||||
|
cmd.Flags().Bool("etcd-persistent-storage", true, "Use persistent volume for etcd. Defaults to 'true'.")
|
||||||
cmd.Flags().Bool("dry-run", false, "dry run without sending commands to server.")
|
cmd.Flags().Bool("dry-run", false, "dry run without sending commands to server.")
|
||||||
cmd.Flags().String("storage-backend", "etcd2", "The storage backend for persistence. Options: 'etcd2' (default), 'etcd3'.")
|
cmd.Flags().String("storage-backend", "etcd2", "The storage backend for persistence. Options: 'etcd2' (default), 'etcd3'.")
|
||||||
return cmd
|
return cmd
|
||||||
@ -158,6 +159,7 @@ func initFederation(cmdOut io.Writer, config util.AdminConfig, cmd *cobra.Comman
|
|||||||
image := cmdutil.GetFlagString(cmd, "image")
|
image := cmdutil.GetFlagString(cmd, "image")
|
||||||
dnsProvider := cmdutil.GetFlagString(cmd, "dns-provider")
|
dnsProvider := cmdutil.GetFlagString(cmd, "dns-provider")
|
||||||
etcdPVCapacity := cmdutil.GetFlagString(cmd, "etcd-pv-capacity")
|
etcdPVCapacity := cmdutil.GetFlagString(cmd, "etcd-pv-capacity")
|
||||||
|
etcdPersistence := cmdutil.GetFlagBool(cmd, "etcd-persistent-storage")
|
||||||
dryRun := cmdutil.GetDryRunFlag(cmd)
|
dryRun := cmdutil.GetDryRunFlag(cmd)
|
||||||
storageBackend := cmdutil.GetFlagString(cmd, "storage-backend")
|
storageBackend := cmdutil.GetFlagString(cmd, "storage-backend")
|
||||||
|
|
||||||
@ -208,10 +210,13 @@ func initFederation(cmdOut io.Writer, config util.AdminConfig, cmd *cobra.Comman
|
|||||||
// 5. Create a persistent volume and a claim to store the federation
|
// 5. Create a persistent volume and a claim to store the federation
|
||||||
// API server's state. This is where federation API server's etcd
|
// API server's state. This is where federation API server's etcd
|
||||||
// stores its data.
|
// stores its data.
|
||||||
pvc, err := createPVC(hostClientset, initFlags.FederationSystemNamespace, svc.Name, etcdPVCapacity, dryRun)
|
var pvc *api.PersistentVolumeClaim
|
||||||
|
if etcdPersistence {
|
||||||
|
pvc, err = createPVC(hostClientset, initFlags.FederationSystemNamespace, svc.Name, etcdPVCapacity, dryRun)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Since only one IP address can be specified as advertise address,
|
// Since only one IP address can be specified as advertise address,
|
||||||
// we arbitrarily pick the first available IP address
|
// we arbitrarily pick the first available IP address
|
||||||
@ -226,7 +231,7 @@ 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, image, serverCredName, pvc.Name, advertiseAddress, storageBackend, dryRun)
|
_, err = createAPIServer(hostClientset, initFlags.FederationSystemNamespace, serverName, image, serverCredName, advertiseAddress, storageBackend, pvc, dryRun)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -445,7 +450,7 @@ func createPVC(clientset *client.Clientset, namespace, svcName, etcdPVCapacity s
|
|||||||
return clientset.Core().PersistentVolumeClaims(namespace).Create(pvc)
|
return clientset.Core().PersistentVolumeClaims(namespace).Create(pvc)
|
||||||
}
|
}
|
||||||
|
|
||||||
func createAPIServer(clientset *client.Clientset, namespace, name, image, credentialsName, pvcName, advertiseAddress, storageBackend string, dryRun bool) (*extensions.Deployment, error) {
|
func createAPIServer(clientset *client.Clientset, namespace, name, image, credentialsName, advertiseAddress, storageBackend string, pvc *api.PersistentVolumeClaim, dryRun bool) (*extensions.Deployment, error) {
|
||||||
command := []string{
|
command := []string{
|
||||||
"/hyperkube",
|
"/hyperkube",
|
||||||
"federation-apiserver",
|
"federation-apiserver",
|
||||||
@ -462,8 +467,6 @@ func createAPIServer(clientset *client.Clientset, namespace, name, image, creden
|
|||||||
command = append(command, fmt.Sprintf("--advertise-address=%s", advertiseAddress))
|
command = append(command, fmt.Sprintf("--advertise-address=%s", advertiseAddress))
|
||||||
}
|
}
|
||||||
|
|
||||||
dataVolumeName := "etcddata"
|
|
||||||
|
|
||||||
dep := &extensions.Deployment{
|
dep := &extensions.Deployment{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: name,
|
Name: name,
|
||||||
@ -509,12 +512,6 @@ func createAPIServer(clientset *client.Clientset, namespace, name, image, creden
|
|||||||
"--data-dir",
|
"--data-dir",
|
||||||
"/var/etcd/data",
|
"/var/etcd/data",
|
||||||
},
|
},
|
||||||
VolumeMounts: []api.VolumeMount{
|
|
||||||
{
|
|
||||||
Name: dataVolumeName,
|
|
||||||
MountPath: "/var/etcd",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Volumes: []api.Volume{
|
Volumes: []api.Volume{
|
||||||
@ -526,19 +523,34 @@ func createAPIServer(clientset *client.Clientset, namespace, name, image, creden
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
if pvc != nil {
|
||||||
|
dataVolumeName := "etcddata"
|
||||||
|
etcdVolume := api.Volume{
|
||||||
Name: dataVolumeName,
|
Name: dataVolumeName,
|
||||||
VolumeSource: api.VolumeSource{
|
VolumeSource: api.VolumeSource{
|
||||||
PersistentVolumeClaim: &api.PersistentVolumeClaimVolumeSource{
|
PersistentVolumeClaim: &api.PersistentVolumeClaimVolumeSource{
|
||||||
ClaimName: pvcName,
|
ClaimName: pvc.Name,
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
etcdVolumeMount := api.VolumeMount{
|
||||||
|
Name: dataVolumeName,
|
||||||
|
MountPath: "/var/etcd",
|
||||||
|
}
|
||||||
|
|
||||||
|
dep.Spec.Template.Spec.Volumes = append(dep.Spec.Template.Spec.Volumes, etcdVolume)
|
||||||
|
for i, container := range dep.Spec.Template.Spec.Containers {
|
||||||
|
if container.Name == "etcd" {
|
||||||
|
dep.Spec.Template.Spec.Containers[i].VolumeMounts = append(dep.Spec.Template.Spec.Containers[i].VolumeMounts, etcdVolumeMount)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if dryRun {
|
if dryRun {
|
||||||
return dep, nil
|
return dep, nil
|
||||||
|
@ -79,6 +79,7 @@ func TestInitFederation(t *testing.T) {
|
|||||||
lbIP string
|
lbIP string
|
||||||
image string
|
image string
|
||||||
etcdPVCapacity string
|
etcdPVCapacity string
|
||||||
|
etcdPersistence string
|
||||||
expectedErr string
|
expectedErr string
|
||||||
dnsProvider string
|
dnsProvider string
|
||||||
storageBackend string
|
storageBackend string
|
||||||
@ -92,6 +93,7 @@ func TestInitFederation(t *testing.T) {
|
|||||||
lbIP: "10.20.30.40",
|
lbIP: "10.20.30.40",
|
||||||
image: "example.test/foo:bar",
|
image: "example.test/foo:bar",
|
||||||
etcdPVCapacity: "5Gi",
|
etcdPVCapacity: "5Gi",
|
||||||
|
etcdPersistence: "true",
|
||||||
expectedErr: "",
|
expectedErr: "",
|
||||||
dnsProvider: "test-dns-provider",
|
dnsProvider: "test-dns-provider",
|
||||||
storageBackend: "etcd2",
|
storageBackend: "etcd2",
|
||||||
@ -105,6 +107,7 @@ func TestInitFederation(t *testing.T) {
|
|||||||
lbIP: "10.20.30.40",
|
lbIP: "10.20.30.40",
|
||||||
image: "example.test/foo:bar",
|
image: "example.test/foo:bar",
|
||||||
etcdPVCapacity: "", //test for default value of pvc-size
|
etcdPVCapacity: "", //test for default value of pvc-size
|
||||||
|
etcdPersistence: "true",
|
||||||
expectedErr: "",
|
expectedErr: "",
|
||||||
dnsProvider: "", //test for default value of dns provider
|
dnsProvider: "", //test for default value of dns provider
|
||||||
storageBackend: "etcd2",
|
storageBackend: "etcd2",
|
||||||
@ -118,6 +121,7 @@ func TestInitFederation(t *testing.T) {
|
|||||||
lbIP: "10.20.30.40",
|
lbIP: "10.20.30.40",
|
||||||
image: "example.test/foo:bar",
|
image: "example.test/foo:bar",
|
||||||
etcdPVCapacity: "",
|
etcdPVCapacity: "",
|
||||||
|
etcdPersistence: "true",
|
||||||
expectedErr: "",
|
expectedErr: "",
|
||||||
dnsProvider: "test-dns-provider",
|
dnsProvider: "test-dns-provider",
|
||||||
storageBackend: "etcd2",
|
storageBackend: "etcd2",
|
||||||
@ -131,6 +135,7 @@ func TestInitFederation(t *testing.T) {
|
|||||||
lbIP: "10.20.30.40",
|
lbIP: "10.20.30.40",
|
||||||
image: "example.test/foo:bar",
|
image: "example.test/foo:bar",
|
||||||
etcdPVCapacity: "5Gi",
|
etcdPVCapacity: "5Gi",
|
||||||
|
etcdPersistence: "false",
|
||||||
expectedErr: "",
|
expectedErr: "",
|
||||||
dnsProvider: "test-dns-provider",
|
dnsProvider: "test-dns-provider",
|
||||||
storageBackend: "etcd3",
|
storageBackend: "etcd3",
|
||||||
@ -150,7 +155,7 @@ func TestInitFederation(t *testing.T) {
|
|||||||
} else {
|
} else {
|
||||||
dnsProvider = "google-clouddns" //default value of dns-provider
|
dnsProvider = "google-clouddns" //default value of dns-provider
|
||||||
}
|
}
|
||||||
hostFactory, err := fakeInitHostFactory(tc.federation, util.DefaultFederationSystemNamespace, tc.lbIP, tc.dnsZoneName, tc.image, dnsProvider, tc.etcdPVCapacity, tc.storageBackend)
|
hostFactory, err := fakeInitHostFactory(tc.federation, util.DefaultFederationSystemNamespace, tc.lbIP, tc.dnsZoneName, tc.image, dnsProvider, tc.etcdPersistence, tc.etcdPVCapacity, tc.storageBackend)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("[%d] unexpected error: %v", i, err)
|
t.Fatalf("[%d] unexpected error: %v", i, err)
|
||||||
}
|
}
|
||||||
@ -175,6 +180,9 @@ func TestInitFederation(t *testing.T) {
|
|||||||
if tc.etcdPVCapacity != "" {
|
if tc.etcdPVCapacity != "" {
|
||||||
cmd.Flags().Set("etcd-pv-capacity", tc.etcdPVCapacity)
|
cmd.Flags().Set("etcd-pv-capacity", tc.etcdPVCapacity)
|
||||||
}
|
}
|
||||||
|
if tc.etcdPersistence != "true" {
|
||||||
|
cmd.Flags().Set("etcd-persistent-storage", tc.etcdPersistence)
|
||||||
|
}
|
||||||
if tc.dryRun == "valid-run" {
|
if tc.dryRun == "valid-run" {
|
||||||
cmd.Flags().Set("dry-run", "true")
|
cmd.Flags().Set("dry-run", "true")
|
||||||
}
|
}
|
||||||
@ -445,7 +453,7 @@ func TestCertsHTTPS(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func fakeInitHostFactory(federationName, namespaceName, ip, dnsZoneName, image, dnsProvider, etcdPVCapacity, storageProvider string) (cmdutil.Factory, error) {
|
func fakeInitHostFactory(federationName, namespaceName, ip, dnsZoneName, image, dnsProvider, etcdPersistence, etcdPVCapacity, storageProvider 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"
|
||||||
@ -673,12 +681,6 @@ func fakeInitHostFactory(federationName, namespaceName, ip, dnsZoneName, image,
|
|||||||
"--data-dir",
|
"--data-dir",
|
||||||
"/var/etcd/data",
|
"/var/etcd/data",
|
||||||
},
|
},
|
||||||
VolumeMounts: []v1.VolumeMount{
|
|
||||||
{
|
|
||||||
Name: "etcddata",
|
|
||||||
MountPath: "/var/etcd",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Volumes: []v1.Volume{
|
Volumes: []v1.Volume{
|
||||||
@ -690,18 +692,32 @@ func fakeInitHostFactory(federationName, namespaceName, ip, dnsZoneName, image,
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
},
|
||||||
Name: "etcddata",
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
if etcdPersistence == "true" {
|
||||||
|
dataVolumeName := "etcddata"
|
||||||
|
etcdVolume := v1.Volume{
|
||||||
|
Name: dataVolumeName,
|
||||||
VolumeSource: v1.VolumeSource{
|
VolumeSource: v1.VolumeSource{
|
||||||
PersistentVolumeClaim: &v1.PersistentVolumeClaimVolumeSource{
|
PersistentVolumeClaim: &v1.PersistentVolumeClaimVolumeSource{
|
||||||
ClaimName: pvcName,
|
ClaimName: pvcName,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
}
|
||||||
},
|
etcdVolumeMount := v1.VolumeMount{
|
||||||
},
|
Name: dataVolumeName,
|
||||||
},
|
MountPath: "/var/etcd",
|
||||||
},
|
}
|
||||||
|
|
||||||
|
apiserver.Spec.Template.Spec.Volumes = append(apiserver.Spec.Template.Spec.Volumes, etcdVolume)
|
||||||
|
for i, container := range apiserver.Spec.Template.Spec.Containers {
|
||||||
|
if container.Name == "etcd" {
|
||||||
|
apiserver.Spec.Template.Spec.Containers[i].VolumeMounts = append(apiserver.Spec.Template.Spec.Containers[i].VolumeMounts, etcdVolumeMount)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cmName := federationName + "-controller-manager"
|
cmName := federationName + "-controller-manager"
|
||||||
|
@ -177,6 +177,7 @@ etcd-keyfile
|
|||||||
etcd-mutation-timeout
|
etcd-mutation-timeout
|
||||||
etcd-prefix
|
etcd-prefix
|
||||||
etcd-pv-capacity
|
etcd-pv-capacity
|
||||||
|
etcd-persistent-storage
|
||||||
etcd-quorum-read
|
etcd-quorum-read
|
||||||
etcd-server
|
etcd-server
|
||||||
etcd-servers
|
etcd-servers
|
||||||
|
Loading…
Reference in New Issue
Block a user