Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
小 白蛋
Rke
Commits
9c5de9f5
Commit
9c5de9f5
authored
5 years ago
by
galal-hussein
Committed by
Alena Prokharchyk
5 years ago
Browse files
Options
Download
Email Patches
Plain Diff
Handle etcd changing its public IP address
parent
cf2f8a20
release/v1.3
1.2.5
enable_fossa
githubaction-go-generate-2022-01-19-14-09-53
githubaction-go-generate-2022-01-19-16-59-09
githubaction-go-generate-2022-02-02-16-53-10
githubaction-go-generate-2022-03-19-01-55-24
githubaction-go-generate-2022-03-19-02-28-40
githubaction-go-generate-2022-03-24-18-41-17
githubaction-go-generate-2022-03-24-19-00-43
githubaction-go-generate-2022-04-27-01-07-30
githubaction-go-generate-2022-04-27-16-36-37
githubaction-go-generate-2022-04-28-23-21-04
githubaction-go-generate-2022-04-29-00-20-33
githubaction-go-generate-2022-04-29-03-20-39
githubaction-go-generate-2022-04-29-03-34-38
githubaction-go-generate-2022-05-05-16-15-24
githubaction-go-generate-2022-05-06-15-36-45
githubaction-go-generate-2022-05-06-21-32-47
kinarashah-patch-1
label-opened-issues
master
rancherbot_port_2796_release/v1.2_6efce927fbafb32468ad2dc45acb64511f4a6f31
release/v0.3
release/v1.0
release/v1.1
release/v1.1.10
release/v1.1.13
release/v1.1.2
release/v1.2
release/v1.2.1
revert-2326-rotate-encryption-keys
revert-2374-revert-2326-rotate-encryption-keys
revert-2541-no_selinux_relabel
v1.0
wg-10699
v1.3.11-rc2
v1.3.11-rc1
v1.3.10
v1.3.10-rc7
v1.3.10-rc6
v1.3.10-rc5
v1.3.10-rc4
v1.3.10-rc3
v1.3.10-rc2
v1.3.10-rc1
v1.3.9
v1.3.9-rc1
v1.3.8
v1.3.8-rc12
v1.3.8-rc11
v1.3.8-rc10
v1.3.8-rc9
v1.3.8-rc8
v1.3.8-rc7
v1.3.8-rc6
v1.3.8-rc5
v1.3.8-rc4
v1.3.8-rc3
v1.3.8-rc2
v1.3.8-rc1
v1.3.7
v1.3.7-rc1
v1.3.6
v1.3.6-rc1
v1.3.5
v1.3.5-rc1
v1.3.5-alpha1
v1.3.4
v1.3.4-rc1
v1.3.3
v1.3.3-rc6
v1.3.3-rc5
v1.3.3-rc4
v1.3.3-rc3
v1.3.3-rc2
v1.3.3-rc1
v1.3.2
v1.3.2-rc2
v1.3.2-rc1
v1.3.1
v1.3.1-rc1
v1.3.0
v1.3.0-rc20
v1.3.0-rc19
v1.3.0-rc18
v1.3.0-rc17
v1.3.0-rc16
v1.3.0-rc15
v1.3.0-rc14
v1.3.0-rc13
v1.3.0-rc12
v1.3.0-rc11
v1.3.0-rc10
v1.3.0-rc9
v1.3.0-rc8
v1.3.0-rc7
v1.3.0-rc6
v1.3.0-rc5
v1.3.0-rc4
v1.3.0-rc3
v1.3.0-rc2
v1.3.0-rc1
v1.2.20
v1.2.20-rc1
v1.2.19
v1.2.19-rc4
v1.2.19-rc3
v1.2.19-rc2
v1.2.19-rc1
v1.2.18
v1.2.18-rc1
v1.2.17
v1.2.17-rc1
v1.2.16
v1.2.16-rc1
v1.2.15
v1.2.15-rc1
v1.2.14
v1.2.14-rc2
v1.2.14-rc1
v1.2.13
v1.2.13-rc2
v1.2.13-rc1
v1.2.12
v1.2.12-rc1
v1.2.11
v1.2.11-rc0
v1.2.10
v1.2.10-rc0
v1.2.9
v1.2.9-rc2
v1.2.9-rc1
v1.2.8
v1.2.8-rc4
v1.2.8-rc3
v1.2.8-rc2
v1.2.8-rc1
v1.2.7
v1.2.7-rc1
v1.2.6
v1.2.6-rc6
v1.2.6-rc5
v1.2.6-rc4
v1.2.6-rc3
v1.2.6-rc2
v1.2.6-rc1
v1.2.5
v1.2.5-rc2
v1.2.5-rc1
v1.2.4
v1.2.4-rc9
v1.2.4-rc8
v1.2.4-rc7
v1.2.4-rc6
v1.2.4-rc5
v1.2.4-rc4
v1.2.4-rc3
v1.2.4-rc2
v1.2.4-rc1
v1.2.3
v1.2.3-rc1
v1.2.2
v1.2.2-rc6
v1.2.2-rc5
v1.2.2-rc4
v1.2.2-rc3
v1.2.2-rc2
v1.2.2-rc1
v1.2.1
v1.2.1-rc1
v1.2.0
v1.2.0-rc17
v1.2.0-rc16
v1.2.0-rc15
v1.2.0-rc14
v1.2.0-rc13
v1.2.0-rc12
v1.2.0-rc11
v1.2.0-rc10
v1.2.0-rc9
v1.2.0-rc8
v1.2.0-rc7
v1.2.0-rc6
v1.2.0-rc5
v1.2.0-rc4
v1.2.0-rc3
v1.2.0-rc2
v1.2.0-rc1
v1.1.19
v1.1.19-rc1
v1.1.18
v1.1.18-rc2
v1.1.18-rc1
v1.1.17
v1.1.17-rc2
v1.1.17-rc1
v1.1.16
v1.1.16-rc1
v1.1.15
v1.1.15-rc4
v1.1.15-rc3
v1.1.15-rc2
v1.1.15-rc1
v1.1.14
v1.1.14-rc3
v1.1.14-rc2
v1.1.14-rc1
v1.1.13
v1.1.13-rc3
v1.1.13-rc2
v1.1.13-rc1
v1.1.12
v1.1.12-rc1
v1.1.11
v1.1.11-rc6
v1.1.11-rc5
v1.1.11-rc4
v1.1.11-rc3
v1.1.11-rc2
v1.1.11-rc1
v1.1.10
v1.1.10-rc1
v1.1.9
v1.1.9-rc3
v1.1.9-rc2
v1.1.9-rc1
v1.1.8-rc1
v1.1.7
v1.1.6
v1.1.5
v1.1.5-rc9
v1.1.5-rc8
v1.1.5-rc7
v1.1.5-rc6
v1.1.5-rc5
v1.1.5-rc4
v1.1.5-rc3
v1.1.5-rc2
v1.1.5-rc1
v1.1.4
v1.1.4-rc2
v1.1.4-rc1
v1.1.3
v1.1.3-rc6
v1.1.3-rc5
v1.1.3-rc4
v1.1.3-rc3
v1.1.3-rc2
v1.1.3-rc1
v1.1.2
v1.1.2-rc4
v1.1.2-rc3
v1.1.2-rc1
v1.1.1
v1.1.1-rc1
v1.1.0
v1.1.0-rc19
v1.1.0-rc18
v1.1.0-rc17
v1.1.0-rc16
v1.1.0-rc15
v1.1.0-rc14
v1.1.0-rc13
v1.1.0-rc12
v1.1.0-rc11
v1.1.0-rc10
v1.1.0-rc9
v1.1.0-rc8
v1.1.0-rc7
v1.1.0-rc6
v1.1.0-rc5
v1.1.0-rc4
v1.1.0-rc3
v1.1.0-rc2
v1.1.0-rc1
v1.0.16
v1.0.16-rc1
v1.0.15
v1.0.15-rc2
v1.0.15-rc1
v1.0.14
v1.0.14-rc2
v1.0.14-rc1
v1.0.13
v1.0.13-rc1
v1.0.12
v1.0.12-rc1
v1.0.11
v1.0.11-rc1
v1.0.10
v1.0.10-rc1
v1.0.9
v1.0.9-rc2
v1.0.9-rc1
v1.0.8
v1.0.7
v1.0.7-rc3
v1.0.7-rc2
v1.0.7-rc1
v1.0.6
v1.0.6-rc4
v1.0.6-rc3
v1.0.6-rc2
v1.0.6-rc1
v1.0.5
v1.0.5-rc1
v1.0.4
v1.0.3
v1.0.2
v1.0.1
v1.0.1-rc5
v1.0.1-rc4
v1.0.1-rc3
v1.0.1-rc2
v1.0.1-rc1
v1.0.0
v1.0.0-rc6
v1.0.0-rc5
v1.0.0-rc4
v1.0.0-rc3
v1.0.0-rc2
v1.0.0-rc1
v0.3.2
v0.3.2-rc3
v0.3.2-rc2
v0.3.2-rc1
v0.3.1
v0.3.1-rc3
v0.3.1-rc2
v0.3.1-rc1
v0.3.0
v0.3.0-rc12
v0.3.0-rc11
v0.3.0-rc10
v0.3.0-rc9
v0.3.0-rc8
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
cluster/reconcile.go
+46
-25
cluster/reconcile.go
hosts/tunnel.go
+6
-2
hosts/tunnel.go
with
52 additions
and
27 deletions
+52
-27
cluster/reconcile.go
+
46
-
25
View file @
9c5de9f5
...
...
@@ -173,46 +173,46 @@ func reconcileHost(ctx context.Context, toDeleteHost *hosts.Host, worker, etcd b
}
func
reconcileEtcd
(
ctx
context
.
Context
,
currentCluster
,
kubeCluster
*
Cluster
,
kubeClient
*
kubernetes
.
Clientset
,
svcOptions
*
v3
.
KubernetesServicesOptions
)
error
{
log
.
Infof
(
ctx
,
"[reconcile] Check etcd hosts to be deleted"
)
etcdToDelete
:=
hosts
.
GetToDeleteHosts
(
currentCluster
.
EtcdHosts
,
kubeCluster
.
EtcdHosts
,
kubeCluster
.
InactiveHosts
,
false
)
etcdToAdd
:=
hosts
.
GetToAddHosts
(
currentCluster
.
EtcdHosts
,
kubeCluster
.
EtcdHosts
)
clientCert
:=
cert
.
EncodeCertPEM
(
currentCluster
.
Certificates
[
pki
.
KubeNodeCertName
]
.
Certificate
)
clientKey
:=
cert
.
EncodePrivateKeyPEM
(
currentCluster
.
Certificates
[
pki
.
KubeNodeCertName
]
.
Key
)
// check if the whole etcd plane is replaced
if
isEtcdPlaneReplaced
(
ctx
,
currentCluster
,
kubeCluster
)
{
logrus
.
Warnf
(
"%v"
,
EtcdPlaneNodesReplacedErr
)
return
fmt
.
Errorf
(
"%v"
,
EtcdPlaneNodesReplacedErr
)
}
// get tls for the first current etcd host
clientCert
:=
cert
.
EncodeCertPEM
(
currentCluster
.
Certificates
[
pki
.
KubeNodeCertName
]
.
Certificate
)
clientkey
:=
cert
.
EncodePrivateKeyPEM
(
currentCluster
.
Certificates
[
pki
.
KubeNodeCertName
]
.
Key
)
etcdToDelete
:=
hosts
.
GetToDeleteHosts
(
currentCluster
.
EtcdHosts
,
kubeCluster
.
EtcdHosts
,
kubeCluster
.
InactiveHosts
,
false
)
for
_
,
etcdHost
:=
range
etcdToDelete
{
etcdHost
.
IsEtcd
=
false
if
err
:=
services
.
RemoveEtcdMember
(
ctx
,
etcdHost
,
kubeCluster
.
EtcdHosts
,
currentCluster
.
LocalConnDialerFactory
,
clientCert
,
clientkey
);
err
!=
nil
{
log
.
Warnf
(
ctx
,
"[reconcile] %v"
,
err
)
continue
}
if
err
:=
hosts
.
DeleteNode
(
ctx
,
etcdHost
,
kubeClient
,
etcdHost
.
IsControl
||
etcdHost
.
IsWorker
,
kubeCluster
.
CloudProvider
.
Name
);
err
!=
nil
{
log
.
Warnf
(
ctx
,
"Failed to delete etcd node [%s] from cluster: %v"
,
etcdHost
.
Address
,
err
)
continue
}
// attempting to clean services/files on the host
if
err
:=
reconcileHost
(
ctx
,
etcdHost
,
false
,
true
,
currentCluster
.
SystemImages
.
Alpine
,
currentCluster
.
DockerDialerFactory
,
currentCluster
.
PrivateRegistriesMap
,
currentCluster
.
PrefixPath
,
currentCluster
.
Version
);
err
!=
nil
{
log
.
Warnf
(
ctx
,
"[reconcile] Couldn't clean up etcd node [%s]: %v"
,
etcdHost
.
Address
,
err
)
continue
// check if Node changed its public IP
for
i
:=
range
etcdToDelete
{
for
j
:=
range
etcdToAdd
{
if
etcdToDelete
[
i
]
.
InternalAddress
==
etcdToAdd
[
j
]
.
InternalAddress
{
etcdToDelete
[
i
]
.
Address
=
etcdToAdd
[
j
]
.
Address
}
break
}
}
// handle etcd member delete
if
err
:=
deleteEtcdMembers
(
ctx
,
currentCluster
,
kubeCluster
,
kubeClient
,
clientCert
,
clientKey
,
etcdToDelete
);
err
!=
nil
{
return
err
}
// handle etcd member add
return
addEtcdMembers
(
ctx
,
currentCluster
,
kubeCluster
,
kubeClient
,
svcOptions
,
clientCert
,
clientKey
,
etcdToAdd
)
}
func
addEtcdMembers
(
ctx
context
.
Context
,
currentCluster
,
kubeCluster
*
Cluster
,
kubeClient
*
kubernetes
.
Clientset
,
svcOptions
*
v3
.
KubernetesServicesOptions
,
clientCert
,
clientKey
[]
byte
,
etcdToAdd
[]
*
hosts
.
Host
)
error
{
log
.
Infof
(
ctx
,
"[reconcile] Check etcd hosts to be added"
)
etcdToAdd
:=
hosts
.
GetToAddHosts
(
currentCluster
.
EtcdHosts
,
kubeCluster
.
EtcdHosts
)
for
_
,
etcdHost
:=
range
etcdToAdd
{
kubeCluster
.
UpdateWorkersOnly
=
false
etcdHost
.
ToAddEtcdMember
=
true
}
for
_
,
etcdHost
:=
range
etcdToAdd
{
// Check if the host already part of the cluster -- this will cover cluster with lost quorum
isEtcdMember
,
err
:=
services
.
IsEtcdMember
(
ctx
,
etcdHost
,
kubeCluster
.
EtcdHosts
,
currentCluster
.
LocalConnDialerFactory
,
clientCert
,
client
k
ey
)
isEtcdMember
,
err
:=
services
.
IsEtcdMember
(
ctx
,
etcdHost
,
kubeCluster
.
EtcdHosts
,
currentCluster
.
LocalConnDialerFactory
,
clientCert
,
client
K
ey
)
if
err
!=
nil
{
return
err
}
if
!
isEtcdMember
{
if
err
:=
services
.
AddEtcdMember
(
ctx
,
etcdHost
,
kubeCluster
.
EtcdHosts
,
currentCluster
.
LocalConnDialerFactory
,
clientCert
,
client
k
ey
);
err
!=
nil
{
if
err
:=
services
.
AddEtcdMember
(
ctx
,
etcdHost
,
kubeCluster
.
EtcdHosts
,
currentCluster
.
LocalConnDialerFactory
,
clientCert
,
client
K
ey
);
err
!=
nil
{
return
err
}
}
...
...
@@ -225,13 +225,34 @@ func reconcileEtcd(ctx context.Context, currentCluster, kubeCluster *Cluster, ku
}
// this will start the newly added etcd node and make sure it started correctly before restarting other node
// https://github.com/etcd-io/etcd/blob/master/Documentation/op-guide/runtime-configuration.md#add-a-new-member
if
err
:=
services
.
ReloadEtcdCluster
(
ctx
,
kubeCluster
.
EtcdReadyHosts
,
etcdHost
,
currentCluster
.
LocalConnDialerFactory
,
clientCert
,
client
k
ey
,
currentCluster
.
PrivateRegistriesMap
,
etcdNodePlanMap
,
kubeCluster
.
SystemImages
.
Alpine
);
err
!=
nil
{
if
err
:=
services
.
ReloadEtcdCluster
(
ctx
,
kubeCluster
.
EtcdReadyHosts
,
etcdHost
,
currentCluster
.
LocalConnDialerFactory
,
clientCert
,
client
K
ey
,
currentCluster
.
PrivateRegistriesMap
,
etcdNodePlanMap
,
kubeCluster
.
SystemImages
.
Alpine
);
err
!=
nil
{
return
err
}
}
return
nil
}
func
deleteEtcdMembers
(
ctx
context
.
Context
,
currentCluster
,
kubeCluster
*
Cluster
,
kubeClient
*
kubernetes
.
Clientset
,
clientCert
,
clientKey
[]
byte
,
etcdToDelete
[]
*
hosts
.
Host
)
error
{
log
.
Infof
(
ctx
,
"[reconcile] Check etcd hosts to be deleted"
)
for
_
,
etcdHost
:=
range
etcdToDelete
{
etcdHost
.
IsEtcd
=
false
if
err
:=
services
.
RemoveEtcdMember
(
ctx
,
etcdHost
,
kubeCluster
.
EtcdHosts
,
currentCluster
.
LocalConnDialerFactory
,
clientCert
,
clientKey
);
err
!=
nil
{
log
.
Warnf
(
ctx
,
"[reconcile] %v"
,
err
)
continue
}
if
err
:=
hosts
.
DeleteNode
(
ctx
,
etcdHost
,
kubeClient
,
etcdHost
.
IsControl
||
etcdHost
.
IsWorker
,
kubeCluster
.
CloudProvider
.
Name
);
err
!=
nil
{
log
.
Warnf
(
ctx
,
"Failed to delete etcd node [%s] from cluster: %v"
,
etcdHost
.
Address
,
err
)
continue
}
// attempting to clean services/files on the host
if
err
:=
reconcileHost
(
ctx
,
etcdHost
,
false
,
true
,
currentCluster
.
SystemImages
.
Alpine
,
currentCluster
.
DockerDialerFactory
,
currentCluster
.
PrivateRegistriesMap
,
currentCluster
.
PrefixPath
,
currentCluster
.
Version
);
err
!=
nil
{
log
.
Warnf
(
ctx
,
"[reconcile] Couldn't clean up etcd node [%s]: %v"
,
etcdHost
.
Address
,
err
)
continue
}
}
return
nil
}
func
syncLabels
(
ctx
context
.
Context
,
currentCluster
,
kubeCluster
*
Cluster
)
{
currentHosts
:=
hosts
.
GetUniqueHostList
(
currentCluster
.
EtcdHosts
,
currentCluster
.
ControlPlaneHosts
,
currentCluster
.
WorkerHosts
)
configHosts
:=
hosts
.
GetUniqueHostList
(
kubeCluster
.
EtcdHosts
,
kubeCluster
.
ControlPlaneHosts
,
kubeCluster
.
WorkerHosts
)
...
...
This diff is collapsed.
Click to expand it.
hosts/tunnel.go
+
6
-
2
View file @
9c5de9f5
...
...
@@ -3,11 +3,12 @@ package hosts
import
(
"context"
"fmt"
"github.com/rancher/rke/metadata"
"io/ioutil"
"os"
"path/filepath"
"github.com/rancher/rke/metadata"
"net"
"github.com/docker/docker/client"
...
...
@@ -34,7 +35,10 @@ func (h *Host) TunnelUp(ctx context.Context, dialerFactory DialerFactory, cluste
}
// set Docker client
logrus
.
Debugf
(
"Connecting to Docker API for host [%s]"
,
h
.
Address
)
h
.
DClient
,
err
=
client
.
NewClient
(
"unix:///var/run/docker.sock"
,
DockerAPIVersion
,
httpClient
,
nil
)
h
.
DClient
,
err
=
client
.
NewClientWithOpts
(
client
.
WithHost
(
"unix:///var/run/docker.sock"
),
client
.
WithVersion
(
DockerAPIVersion
),
client
.
WithHTTPClient
(
httpClient
))
if
err
!=
nil
{
return
fmt
.
Errorf
(
"Can't initiate NewClient: %v"
,
err
)
}
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment
Menu
Projects
Groups
Snippets
Help