Skip to content
This repository was archived by the owner on Jul 30, 2021. It is now read-only.

Commit 53dc8fa

Browse files
authored
Move etcd TPR generation to render phase. (#496)
This requires putting the boot etcd server behind a service so it can have a pre-determined IP address (before this change the pod IP was being dynamically detected).
1 parent 8dfb446 commit 53dc8fa

File tree

6 files changed

+151
-102
lines changed

6 files changed

+151
-102
lines changed

cmd/bootkube/render.go

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ const (
2121
apiOffset = 1
2222
dnsOffset = 10
2323
etcdOffset = 15
24+
bootEtcdOffset = 200
2425
defaultServiceBaseIP = "10.3.0.0"
2526
defaultEtcdServers = "https://127.0.0.1:2379"
2627
defaultSelfHostedEtcdServers = "http://127.0.0.1:2379"
@@ -171,6 +172,11 @@ func flagsToAssetConfig() (c *asset.Config, err error) {
171172
return nil, err
172173
}
173174

175+
bootEtcdServiceIP, err := offsetServiceIP(serviceNet, bootEtcdOffset)
176+
if err != nil {
177+
return nil, err
178+
}
179+
174180
etcdServiceIP, err := offsetServiceIP(serviceNet, etcdOffset)
175181
if err != nil {
176182
return nil, err
@@ -226,24 +232,25 @@ func flagsToAssetConfig() (c *asset.Config, err error) {
226232
}
227233

228234
return &asset.Config{
229-
EtcdCACert: etcdCACert,
230-
EtcdClientCert: etcdClientCert,
231-
EtcdClientKey: etcdClientKey,
232-
EtcdServers: etcdServers,
233-
EtcdUseTLS: etcdUseTLS,
234-
CACert: caCert,
235-
CAPrivKey: caPrivKey,
236-
APIServers: apiServers,
237-
AltNames: altNames,
238-
PodCIDR: podNet,
239-
ServiceCIDR: serviceNet,
240-
APIServiceIP: apiServiceIP,
241-
DNSServiceIP: dnsServiceIP,
242-
EtcdServiceIP: etcdServiceIP,
243-
SelfHostKubelet: renderOpts.selfHostKubelet,
244-
CloudProvider: renderOpts.cloudProvider,
245-
SelfHostedEtcd: renderOpts.selfHostedEtcd,
246-
Images: imageVersions,
235+
EtcdCACert: etcdCACert,
236+
EtcdClientCert: etcdClientCert,
237+
EtcdClientKey: etcdClientKey,
238+
EtcdServers: etcdServers,
239+
EtcdUseTLS: etcdUseTLS,
240+
CACert: caCert,
241+
CAPrivKey: caPrivKey,
242+
APIServers: apiServers,
243+
AltNames: altNames,
244+
PodCIDR: podNet,
245+
ServiceCIDR: serviceNet,
246+
APIServiceIP: apiServiceIP,
247+
BootEtcdServiceIP: bootEtcdServiceIP,
248+
DNSServiceIP: dnsServiceIP,
249+
EtcdServiceIP: etcdServiceIP,
250+
SelfHostKubelet: renderOpts.selfHostKubelet,
251+
CloudProvider: renderOpts.cloudProvider,
252+
SelfHostedEtcd: renderOpts.selfHostedEtcd,
253+
Images: imageVersions,
247254
}, nil
248255
}
249256

pkg/asset/asset.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ const (
5555
AssetPathBootstrapControllerManager = "bootstrap-manifests/bootstrap-controller-manager.yaml"
5656
AssetPathBootstrapScheduler = "bootstrap-manifests/bootstrap-scheduler.yaml"
5757
AssetPathBootstrapEtcd = "bootstrap-manifests/bootstrap-etcd.yaml"
58+
AssetPathBootstrapEtcdService = "etcd/bootstrap-etcd-service.json"
59+
AssetPathMigrateEtcdCluster = "etcd/migrate-etcd-cluster.json"
5860
)
5961

6062
var (
@@ -76,6 +78,7 @@ type Config struct {
7678
PodCIDR *net.IPNet
7779
ServiceCIDR *net.IPNet
7880
APIServiceIP net.IP
81+
BootEtcdServiceIP net.IP
7982
DNSServiceIP net.IP
8083
EtcdServiceIP net.IP
8184
EtcdServiceName string

pkg/asset/internal/templates.go

Lines changed: 58 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -915,21 +915,71 @@ spec:
915915
- --name=boot-etcd
916916
- --listen-client-urls=http://0.0.0.0:12379
917917
- --listen-peer-urls=http://0.0.0.0:12380
918-
- --advertise-client-urls=http://$(MY_POD_IP):12379
919-
- --initial-advertise-peer-urls=http://$(MY_POD_IP):12380
920-
- --initial-cluster=boot-etcd=http://$(MY_POD_IP):12380
918+
- --advertise-client-urls=http://{{ .BootEtcdServiceIP }}:12379
919+
- --initial-advertise-peer-urls=http://{{ .BootEtcdServiceIP }}:12380
920+
- --initial-cluster=boot-etcd=http://{{ .BootEtcdServiceIP }}:12380
921921
- --initial-cluster-token=bootkube
922922
- --initial-cluster-state=new
923923
- --data-dir=/var/etcd/data
924-
env:
925-
- name: MY_POD_IP
926-
valueFrom:
927-
fieldRef:
928-
fieldPath: status.podIP
929924
hostNetwork: true
930925
restartPolicy: Never
931926
`)
932927

928+
BootstrapEtcdSvcTemplate = []byte(`{
929+
"apiVersion": "v1",
930+
"kind": "Service",
931+
"metadata": {
932+
"name": "bootstrap-etcd-service",
933+
"namespace": "kube-system"
934+
},
935+
"spec": {
936+
"selector": {
937+
"k8s-app": "boot-etcd"
938+
},
939+
"clusterIP": "{{ .BootEtcdServiceIP }}",
940+
"ports": [
941+
{
942+
"name": "client",
943+
"port": 12379,
944+
"protocol": "TCP"
945+
},
946+
{
947+
"name": "peers",
948+
"port": 12380,
949+
"protocol": "TCP"
950+
}
951+
]
952+
}
953+
}`)
954+
955+
EtcdTPRTemplate = []byte(`{
956+
"apiVersion": "etcd.coreos.com/v1beta1",
957+
"kind": "Cluster",
958+
"metadata": {
959+
"name": "kube-etcd",
960+
"namespace": "kube-system"
961+
},
962+
"spec": {
963+
"size": 1,
964+
"version": "v3.1.6",
965+
"pod": {
966+
"nodeSelector": {
967+
"node-role.kubernetes.io/master": ""
968+
},
969+
"tolerations": [
970+
{
971+
"key": "node-role.kubernetes.io/master",
972+
"operator": "Exists",
973+
"effect": "NoSchedule"
974+
}
975+
]
976+
},
977+
"selfHosted": {
978+
"bootMemberClientEndpoint": "http://{{ .BootEtcdServiceIP }}:12379"
979+
}
980+
}
981+
}`)
982+
933983
KubeFlannelCfgTemplate = []byte(`apiVersion: v1
934984
kind: ConfigMap
935985
metadata:

pkg/asset/k8s.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,8 @@ func newDynamicAssets(conf Config) Assets {
5959
mustCreateAssetFromTemplate(AssetPathEtcdSvc, internal.EtcdSvcTemplate, conf),
6060
mustCreateAssetFromTemplate(AssetPathKenc, internal.KencTemplate, conf),
6161
mustCreateAssetFromTemplate(AssetPathBootstrapEtcd, internal.BootstrapEtcdTemplate, conf),
62-
)
62+
mustCreateAssetFromTemplate(AssetPathBootstrapEtcdService, internal.BootstrapEtcdSvcTemplate, conf),
63+
mustCreateAssetFromTemplate(AssetPathMigrateEtcdCluster, internal.EtcdTPRTemplate, conf))
6364
}
6465
return assets
6566
}

pkg/bootkube/bootkube.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ func (b *bootkube) Run() error {
8787

8888
if selfHostedEtcd {
8989
UserOutput("Migrating to self-hosted etcd cluster...\n")
90-
if err = etcdutil.Migrate(kubeConfig); err != nil {
90+
if err = etcdutil.Migrate(kubeConfig, filepath.Join(b.assetDir, asset.AssetPathBootstrapEtcdService), filepath.Join(b.assetDir, asset.AssetPathMigrateEtcdCluster)); err != nil {
9191
return err
9292
}
9393
}

0 commit comments

Comments
 (0)