Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
1bf04b6a
Unverified
Commit
1bf04b6a
authored
Mar 02, 2021
by
Hussein Galal
Committed by
GitHub
Mar 02, 2021
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #3003 from galal-hussein/fix_etcd_only_nodes
Fix etcd only nodes
parents
66b9e9c4
ef999f0b
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
41 additions
and
14 deletions
+41
-14
go.mod
go.mod
+1
-1
go.sum
go.sum
+2
-2
server.go
pkg/cli/server/server.go
+7
-2
cluster.go
pkg/cluster/cluster.go
+8
-1
drivers.go
pkg/cluster/managed/drivers.go
+1
-0
controller.go
pkg/etcd/controller.go
+1
-1
etcd.go
pkg/etcd/etcd.go
+19
-5
memory.go
...thub.com/rancher/dynamiclistener/storage/memory/memory.go
+1
-1
modules.txt
vendor/modules.txt
+1
-1
No files found.
go.mod
View file @
1bf04b6a
...
@@ -93,7 +93,7 @@ require (
...
@@ -93,7 +93,7 @@ require (
github.com/opencontainers/selinux v1.6.0
github.com/opencontainers/selinux v1.6.0
github.com/pierrec/lz4 v2.5.2+incompatible
github.com/pierrec/lz4 v2.5.2+incompatible
github.com/pkg/errors v0.9.1
github.com/pkg/errors v0.9.1
github.com/rancher/dynamiclistener v0.2.
1
github.com/rancher/dynamiclistener v0.2.
2
github.com/rancher/remotedialer v0.2.0
github.com/rancher/remotedialer v0.2.0
github.com/rancher/wrangler v0.6.1
github.com/rancher/wrangler v0.6.1
github.com/rancher/wrangler-api v0.6.0
github.com/rancher/wrangler-api v0.6.0
...
...
go.sum
View file @
1bf04b6a
...
@@ -768,8 +768,8 @@ github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40T
...
@@ -768,8 +768,8 @@ github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40T
github.com/quobyte/api v0.1.8/go.mod h1:jL7lIHrmqQ7yh05OJ+eEEdHr0u/kmT1Ff9iHd+4H6VI=
github.com/quobyte/api v0.1.8/go.mod h1:jL7lIHrmqQ7yh05OJ+eEEdHr0u/kmT1Ff9iHd+4H6VI=
github.com/rakelkar/gonetsh v0.0.0-20190930180311-e5c5ffe4bdf0 h1:iXE9kmlAqhusXxzkXictdNgWS7p4ZBnmv9SdyMgTf6E=
github.com/rakelkar/gonetsh v0.0.0-20190930180311-e5c5ffe4bdf0 h1:iXE9kmlAqhusXxzkXictdNgWS7p4ZBnmv9SdyMgTf6E=
github.com/rakelkar/gonetsh v0.0.0-20190930180311-e5c5ffe4bdf0/go.mod h1:4XHkfaUj+URzGO9sohoAgt2V9Y8nIW7fugpu0E6gShk=
github.com/rakelkar/gonetsh v0.0.0-20190930180311-e5c5ffe4bdf0/go.mod h1:4XHkfaUj+URzGO9sohoAgt2V9Y8nIW7fugpu0E6gShk=
github.com/rancher/dynamiclistener v0.2.
1 h1:QiY1jxs2TOLrKB04G36vE2ehEvPMPGiWp8zEHLKB1nE
=
github.com/rancher/dynamiclistener v0.2.
2 h1:70dMwOr1sqb6mQqfU2nDb/fr5cv7HJjH+kFYzoxb8KU
=
github.com/rancher/dynamiclistener v0.2.
1
/go.mod h1:9WusTANoiRr8cDWCTtf5txieulezHbpv4vhLADPp0zU=
github.com/rancher/dynamiclistener v0.2.
2
/go.mod h1:9WusTANoiRr8cDWCTtf5txieulezHbpv4vhLADPp0zU=
github.com/rancher/moq v0.0.0-20190404221404-ee5226d43009/go.mod h1:wpITyDPTi/Na5h73XkbuEf2AP9fbgrIGqqxVzFhYD6U=
github.com/rancher/moq v0.0.0-20190404221404-ee5226d43009/go.mod h1:wpITyDPTi/Na5h73XkbuEf2AP9fbgrIGqqxVzFhYD6U=
github.com/rancher/remotedialer v0.2.0 h1:xD7t3K6JYwTdAsxmGtTHQMkEkFgKouQ1foLxVW424Dc=
github.com/rancher/remotedialer v0.2.0 h1:xD7t3K6JYwTdAsxmGtTHQMkEkFgKouQ1foLxVW424Dc=
github.com/rancher/remotedialer v0.2.0/go.mod h1:tkU8ZvrR5lRgaKWaX71nAy6daeqvPFx/lJEnbW7tXSI=
github.com/rancher/remotedialer v0.2.0/go.mod h1:tkU8ZvrR5lRgaKWaX71nAy6daeqvPFx/lJEnbW7tXSI=
...
...
pkg/cli/server/server.go
View file @
1bf04b6a
...
@@ -267,8 +267,13 @@ func run(app *cli.Context, cfg *cmds.Server) error {
...
@@ -267,8 +267,13 @@ func run(app *cli.Context, cfg *cmds.Server) error {
}
}
go
func
()
{
go
func
()
{
<-
serverConfig
.
ControlConfig
.
Runtime
.
APIServerReady
if
!
serverConfig
.
ControlConfig
.
DisableAPIServer
{
logrus
.
Info
(
"Kube API server is now running"
)
<-
serverConfig
.
ControlConfig
.
Runtime
.
APIServerReady
logrus
.
Info
(
"Kube API server is now running"
)
}
else
{
<-
serverConfig
.
ControlConfig
.
Runtime
.
ETCDReady
logrus
.
Info
(
"ETCD server is now running"
)
}
logrus
.
Info
(
version
.
Program
+
" is up and running"
)
logrus
.
Info
(
version
.
Program
+
" is up and running"
)
if
notifySocket
!=
""
{
if
notifySocket
!=
""
{
os
.
Setenv
(
"NOTIFY_SOCKET"
,
notifySocket
)
os
.
Setenv
(
"NOTIFY_SOCKET"
,
notifySocket
)
...
...
pkg/cluster/cluster.go
View file @
1bf04b6a
...
@@ -12,6 +12,7 @@ import (
...
@@ -12,6 +12,7 @@ import (
"github.com/rancher/k3s/pkg/cluster/managed"
"github.com/rancher/k3s/pkg/cluster/managed"
"github.com/rancher/k3s/pkg/daemons/config"
"github.com/rancher/k3s/pkg/daemons/config"
"github.com/rancher/k3s/pkg/etcd"
"github.com/rancher/k3s/pkg/etcd"
"github.com/sirupsen/logrus"
)
)
type
Cluster
struct
{
type
Cluster
struct
{
...
@@ -41,7 +42,7 @@ func (c *Cluster) Start(ctx context.Context) (<-chan struct{}, error) {
...
@@ -41,7 +42,7 @@ func (c *Cluster) Start(ctx context.Context) (<-chan struct{}, error) {
defer
close
(
ready
)
defer
close
(
ready
)
// try to get /db/info urls first before attempting to use join url
// try to get /db/info urls first before attempting to use join url
clientURLs
,
_
,
err
:=
etcd
.
ClientURLs
(
ctx
,
c
.
clientAccessInfo
)
clientURLs
,
_
,
err
:=
etcd
.
ClientURLs
(
ctx
,
c
.
clientAccessInfo
,
c
.
config
.
PrivateIP
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
...
@@ -58,6 +59,12 @@ func (c *Cluster) Start(ctx context.Context) (<-chan struct{}, error) {
...
@@ -58,6 +59,12 @@ func (c *Cluster) Start(ctx context.Context) (<-chan struct{}, error) {
return
nil
,
err
return
nil
,
err
}
}
c
.
setupEtcdProxy
(
ctx
,
etcdProxy
)
c
.
setupEtcdProxy
(
ctx
,
etcdProxy
)
// remove etcd member if it exists
if
err
:=
c
.
managedDB
.
RemoveSelf
(
ctx
);
err
!=
nil
{
logrus
.
Warnf
(
"Failed to remove this node from etcd members"
)
}
return
ready
,
nil
return
ready
,
nil
}
}
...
...
pkg/cluster/managed/drivers.go
View file @
1bf04b6a
...
@@ -23,6 +23,7 @@ type Driver interface {
...
@@ -23,6 +23,7 @@ type Driver interface {
EndpointName
()
string
EndpointName
()
string
Snapshot
(
ctx
context
.
Context
,
config
*
config
.
Control
)
error
Snapshot
(
ctx
context
.
Context
,
config
*
config
.
Control
)
error
GetMembersClientURLs
(
ctx
context
.
Context
)
([]
string
,
error
)
GetMembersClientURLs
(
ctx
context
.
Context
)
([]
string
,
error
)
RemoveSelf
(
ctx
context
.
Context
)
error
}
}
func
RegisterDriver
(
d
Driver
)
{
func
RegisterDriver
(
d
Driver
)
{
...
...
pkg/etcd/controller.go
View file @
1bf04b6a
...
@@ -87,5 +87,5 @@ func (h *handler) onRemove(key string, node *v1.Node) (*v1.Node, error) {
...
@@ -87,5 +87,5 @@ func (h *handler) onRemove(key string, node *v1.Node) (*v1.Node, error) {
if
!
ok
{
if
!
ok
{
return
node
,
nil
return
node
,
nil
}
}
return
node
,
h
.
etcd
.
removePeer
(
h
.
ctx
,
id
,
address
)
return
node
,
h
.
etcd
.
removePeer
(
h
.
ctx
,
id
,
address
,
false
)
}
}
pkg/etcd/etcd.go
View file @
1bf04b6a
...
@@ -245,7 +245,7 @@ func (e *ETCD) Start(ctx context.Context, clientAccessInfo *clientaccess.Info) e
...
@@ -245,7 +245,7 @@ func (e *ETCD) Start(ctx context.Context, clientAccessInfo *clientaccess.Info) e
// join attempts to add a member to an existing cluster
// join attempts to add a member to an existing cluster
func
(
e
*
ETCD
)
join
(
ctx
context
.
Context
,
clientAccessInfo
*
clientaccess
.
Info
)
error
{
func
(
e
*
ETCD
)
join
(
ctx
context
.
Context
,
clientAccessInfo
*
clientaccess
.
Info
)
error
{
clientURLs
,
memberList
,
err
:=
ClientURLs
(
ctx
,
clientAccessInfo
)
clientURLs
,
memberList
,
err
:=
ClientURLs
(
ctx
,
clientAccessInfo
,
e
.
config
.
PrivateIP
)
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
}
...
@@ -524,7 +524,7 @@ func (e *ETCD) cluster(ctx context.Context, forceNew bool, options executor.Init
...
@@ -524,7 +524,7 @@ func (e *ETCD) cluster(ctx context.Context, forceNew bool, options executor.Init
}
}
// removePeer removes a peer from the cluster. The peer ID and IP address must both match.
// removePeer removes a peer from the cluster. The peer ID and IP address must both match.
func
(
e
*
ETCD
)
removePeer
(
ctx
context
.
Context
,
id
,
address
string
)
error
{
func
(
e
*
ETCD
)
removePeer
(
ctx
context
.
Context
,
id
,
address
string
,
removeSelf
bool
)
error
{
members
,
err
:=
e
.
client
.
MemberList
(
ctx
)
members
,
err
:=
e
.
client
.
MemberList
(
ctx
)
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
...
@@ -540,7 +540,7 @@ func (e *ETCD) removePeer(ctx context.Context, id, address string) error {
...
@@ -540,7 +540,7 @@ func (e *ETCD) removePeer(ctx context.Context, id, address string) error {
return
err
return
err
}
}
if
u
.
Hostname
()
==
address
{
if
u
.
Hostname
()
==
address
{
if
e
.
address
==
address
{
if
e
.
address
==
address
&&
!
removeSelf
{
return
errors
.
New
(
"node has been deleted from the cluster"
)
return
errors
.
New
(
"node has been deleted from the cluster"
)
}
}
logrus
.
Infof
(
"Removing name=%s id=%d address=%s from etcd"
,
member
.
Name
,
member
.
ID
,
address
)
logrus
.
Infof
(
"Removing name=%s id=%d address=%s from etcd"
,
member
.
Name
,
member
.
ID
,
address
)
...
@@ -687,7 +687,7 @@ func (e *ETCD) setLearnerProgress(ctx context.Context, status *learnerProgress)
...
@@ -687,7 +687,7 @@ func (e *ETCD) setLearnerProgress(ctx context.Context, status *learnerProgress)
}
}
// clientURLs returns a list of all non-learner etcd cluster member client access URLs
// clientURLs returns a list of all non-learner etcd cluster member client access URLs
func
ClientURLs
(
ctx
context
.
Context
,
clientAccessInfo
*
clientaccess
.
Info
)
([]
string
,
Members
,
error
)
{
func
ClientURLs
(
ctx
context
.
Context
,
clientAccessInfo
*
clientaccess
.
Info
,
selfIP
string
)
([]
string
,
Members
,
error
)
{
var
memberList
Members
var
memberList
Members
resp
,
err
:=
clientaccess
.
Get
(
"/db/info"
,
clientAccessInfo
)
resp
,
err
:=
clientaccess
.
Get
(
"/db/info"
,
clientAccessInfo
)
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -697,13 +697,22 @@ func ClientURLs(ctx context.Context, clientAccessInfo *clientaccess.Info) ([]str
...
@@ -697,13 +697,22 @@ func ClientURLs(ctx context.Context, clientAccessInfo *clientaccess.Info) ([]str
if
err
:=
json
.
Unmarshal
(
resp
,
&
memberList
);
err
!=
nil
{
if
err
:=
json
.
Unmarshal
(
resp
,
&
memberList
);
err
!=
nil
{
return
nil
,
memberList
,
err
return
nil
,
memberList
,
err
}
}
ip
,
err
:=
GetAdvertiseAddress
(
selfIP
)
if
err
!=
nil
{
return
nil
,
memberList
,
err
}
var
clientURLs
[]
string
var
clientURLs
[]
string
members
:
for
_
,
member
:=
range
memberList
.
Members
{
for
_
,
member
:=
range
memberList
.
Members
{
// excluding learner member from the client list
// excluding learner member from the client list
if
member
.
IsLearner
{
if
member
.
IsLearner
{
continue
continue
}
}
for
_
,
url
:=
range
member
.
ClientURLs
{
if
strings
.
Contains
(
url
,
ip
)
{
continue
members
}
}
clientURLs
=
append
(
clientURLs
,
member
.
ClientURLs
...
)
clientURLs
=
append
(
clientURLs
,
member
.
ClientURLs
...
)
}
}
return
clientURLs
,
memberList
,
nil
return
clientURLs
,
memberList
,
nil
...
@@ -941,3 +950,8 @@ func (e *ETCD) GetMembersClientURLs(ctx context.Context) ([]string, error) {
...
@@ -941,3 +950,8 @@ func (e *ETCD) GetMembersClientURLs(ctx context.Context) ([]string, error) {
}
}
return
memberUrls
,
nil
return
memberUrls
,
nil
}
}
// RemoveSelf will remove the member if it exists in the cluster
func
(
e
*
ETCD
)
RemoveSelf
(
ctx
context
.
Context
)
error
{
return
e
.
removePeer
(
ctx
,
e
.
name
,
e
.
address
,
true
)
}
vendor/github.com/rancher/dynamiclistener/storage/memory/memory.go
View file @
1bf04b6a
...
@@ -32,7 +32,7 @@ func (m *memory) Get() (*v1.Secret, error) {
...
@@ -32,7 +32,7 @@ func (m *memory) Get() (*v1.Secret, error) {
}
}
func
(
m
*
memory
)
Update
(
secret
*
v1
.
Secret
)
error
{
func
(
m
*
memory
)
Update
(
secret
*
v1
.
Secret
)
error
{
if
m
.
secret
==
nil
||
m
.
secret
.
ResourceVersion
!=
secret
.
ResourceVersion
{
if
m
.
secret
==
nil
||
m
.
secret
.
ResourceVersion
==
""
||
m
.
secret
.
ResourceVersion
!=
secret
.
ResourceVersion
{
if
m
.
storage
!=
nil
{
if
m
.
storage
!=
nil
{
if
err
:=
m
.
storage
.
Update
(
secret
);
err
!=
nil
{
if
err
:=
m
.
storage
.
Update
(
secret
);
err
!=
nil
{
return
err
return
err
...
...
vendor/modules.txt
View file @
1bf04b6a
...
@@ -842,7 +842,7 @@ github.com/prometheus/procfs/internal/util
...
@@ -842,7 +842,7 @@ github.com/prometheus/procfs/internal/util
# github.com/rakelkar/gonetsh v0.0.0-20190930180311-e5c5ffe4bdf0
# github.com/rakelkar/gonetsh v0.0.0-20190930180311-e5c5ffe4bdf0
github.com/rakelkar/gonetsh/netroute
github.com/rakelkar/gonetsh/netroute
github.com/rakelkar/gonetsh/netsh
github.com/rakelkar/gonetsh/netsh
# github.com/rancher/dynamiclistener v0.2.
1
# github.com/rancher/dynamiclistener v0.2.
2
## explicit
## explicit
github.com/rancher/dynamiclistener
github.com/rancher/dynamiclistener
github.com/rancher/dynamiclistener/cert
github.com/rancher/dynamiclistener/cert
...
...
Write
Preview
Markdown
is supported
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