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
61cd691f
Commit
61cd691f
authored
Jan 16, 2025
by
Derek Nola
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add support for restarting k3s docker nodes
Signed-off-by:
Derek Nola
<
derek.nola@suse.com
>
parent
0deab52c
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
107 additions
and
37 deletions
+107
-37
basics_test.go
tests/docker/basics/basics_test.go
+1
-0
test-helpers.go
tests/docker/test-helpers.go
+106
-37
No files found.
tests/docker/basics/basics_test.go
View file @
61cd691f
...
@@ -27,6 +27,7 @@ var _ = Describe("Basic Tests", Ordered, func() {
...
@@ -27,6 +27,7 @@ var _ = Describe("Basic Tests", Ordered, func() {
It
(
"should provision servers and agents"
,
func
()
{
It
(
"should provision servers and agents"
,
func
()
{
var
err
error
var
err
error
config
,
err
=
tester
.
NewTestConfig
(
*
k3sImage
)
config
,
err
=
tester
.
NewTestConfig
(
*
k3sImage
)
config
.
NeedRestart
=
true
Expect
(
err
)
.
NotTo
(
HaveOccurred
())
Expect
(
err
)
.
NotTo
(
HaveOccurred
())
Expect
(
config
.
ProvisionServers
(
1
))
.
To
(
Succeed
())
Expect
(
config
.
ProvisionServers
(
1
))
.
To
(
Succeed
())
Expect
(
config
.
ProvisionAgents
(
1
))
.
To
(
Succeed
())
Expect
(
config
.
ProvisionAgents
(
1
))
.
To
(
Succeed
())
...
...
tests/docker/test-helpers.go
View file @
61cd691f
...
@@ -30,18 +30,21 @@ type TestConfig struct {
...
@@ -30,18 +30,21 @@ type TestConfig struct {
K3sImage
string
K3sImage
string
NumServers
int
NumServers
int
NumAgents
int
NumAgents
int
Servers
[]
ServerConfig
NeedRestart
bool
Agents
[]
AgentConfig
Servers
[]
Server
Agents
[]
Agent
ServerYaml
string
AgentYaml
string
}
}
type
Server
Config
struct
{
type
Server
struct
{
Name
string
Name
string
Port
int
Port
int
IP
string
IP
string
URL
string
URL
string
}
}
type
Agent
Config
struct
{
type
Agent
struct
{
Name
string
Name
string
IP
string
IP
string
}
}
...
@@ -117,6 +120,15 @@ func (config *TestConfig) ProvisionServers(numOfServers int) error {
...
@@ -117,6 +120,15 @@ func (config *TestConfig) ProvisionServers(numOfServers int) error {
serverImage
:=
getEnvOrDefault
(
"K3S_IMAGE_SERVER"
,
config
.
K3sImage
)
serverImage
:=
getEnvOrDefault
(
"K3S_IMAGE_SERVER"
,
config
.
K3sImage
)
// Write the server yaml to a tmp file and mount it into the container
var
yamlMount
string
if
config
.
ServerYaml
!=
""
{
if
err
:=
os
.
WriteFile
(
filepath
.
Join
(
config
.
TestDir
,
fmt
.
Sprintf
(
"server-%d.yaml"
,
i
)),
[]
byte
(
config
.
ServerYaml
),
0644
);
err
!=
nil
{
return
fmt
.
Errorf
(
"failed to write server yaml: %v"
,
err
)
}
yamlMount
=
fmt
.
Sprintf
(
"--mount type=bind,src=%s,dst=/etc/rancher/k3s/config.yaml"
,
filepath
.
Join
(
config
.
TestDir
,
fmt
.
Sprintf
(
"server-%d.yaml"
,
i
)))
}
var
joinOrStart
string
var
joinOrStart
string
if
numOfServers
>
0
{
if
numOfServers
>
0
{
if
i
==
0
{
if
i
==
0
{
...
@@ -129,22 +141,53 @@ func (config *TestConfig) ProvisionServers(numOfServers int) error {
...
@@ -129,22 +141,53 @@ func (config *TestConfig) ProvisionServers(numOfServers int) error {
}
}
}
}
// Assemble all the Docker args
// If we need restarts, we use the systemd-node container, volume mount the k3s binary
dRun
:=
strings
.
Join
([]
string
{
"docker run -d"
,
// and start the server using the install script
"--name"
,
name
,
if
config
.
NeedRestart
{
"--hostname"
,
name
,
dRun
:=
strings
.
Join
([]
string
{
"docker run -d"
,
"--privileged"
,
"--name"
,
name
,
"-p"
,
fmt
.
Sprintf
(
"127.0.0.1:%d:6443"
,
port
),
"--hostname"
,
name
,
"-p"
,
"6443"
,
"--privileged"
,
"-e"
,
fmt
.
Sprintf
(
"K3S_TOKEN=%s"
,
config
.
Secret
),
"-p"
,
fmt
.
Sprintf
(
"127.0.0.1:%d:6443"
,
port
),
"-e"
,
"K3S_DEBUG=true"
,
"--memory"
,
"2048m"
,
os
.
Getenv
(
"SERVER_DOCKER_ARGS"
),
"-e"
,
fmt
.
Sprintf
(
"K3S_TOKEN=%s"
,
config
.
Secret
),
os
.
Getenv
(
fmt
.
Sprintf
(
"SERVER_%d_DOCKER_ARGS"
,
i
)),
"-e"
,
"K3S_DEBUG=true"
,
os
.
Getenv
(
"REGISTRY_CLUSTER_ARGS"
),
"-v"
,
"/sys/fs/bpf:/sys/fs/bpf"
,
serverImage
,
"-v"
,
"/lib/modules:/lib/modules"
,
"server"
,
joinOrStart
,
os
.
Getenv
(
"SERVER_ARGS"
),
os
.
Getenv
(
fmt
.
Sprintf
(
"SERVER_%d_ARGS"
,
i
))},
" "
)
"-v"
,
"/var/run/docker.sock:/var/run/docker.sock"
,
if
out
,
err
:=
RunCommand
(
dRun
);
err
!=
nil
{
"-v"
,
"/var/lib/docker:/var/lib/docker"
,
return
fmt
.
Errorf
(
"failed to run server container: %s: %v"
,
out
,
err
)
yamlMount
,
"--mount"
,
"type=bind,source=$(pwd)/../../../dist/artifacts/k3s,target=/usr/local/bin/k3s"
,
"rancher/systemd-node:v0.0.5"
,
"/usr/lib/systemd/systemd --unit=noop.target --show-status=true"
},
" "
)
if
out
,
err
:=
RunCommand
(
dRun
);
err
!=
nil
{
return
fmt
.
Errorf
(
"failed to start systemd container: %s: %v"
,
out
,
err
)
}
time
.
Sleep
(
5
*
time
.
Second
)
// The pipe requires that we use sh -c with "" to run the command
sCmd
:=
fmt
.
Sprintf
(
"/bin/sh -c
\"
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC='%s' INSTALL_K3S_SKIP_DOWNLOAD=true sh -
\"
"
,
joinOrStart
+
" "
+
os
.
Getenv
(
fmt
.
Sprintf
(
"SERVER_%d_ARGS"
,
i
)))
if
out
,
err
:=
RunCmdOnDocker
(
name
,
sCmd
);
err
!=
nil
{
return
fmt
.
Errorf
(
"failed to start server: %s: %v"
,
out
,
err
)
}
}
else
{
// Assemble all the Docker args
dRun
:=
strings
.
Join
([]
string
{
"docker run -d"
,
"--name"
,
name
,
"--hostname"
,
name
,
"--privileged"
,
"-p"
,
fmt
.
Sprintf
(
"127.0.0.1:%d:6443"
,
port
),
"-p"
,
"6443"
,
"-e"
,
fmt
.
Sprintf
(
"K3S_TOKEN=%s"
,
config
.
Secret
),
"-e"
,
"K3S_DEBUG=true"
,
os
.
Getenv
(
"SERVER_DOCKER_ARGS"
),
os
.
Getenv
(
fmt
.
Sprintf
(
"SERVER_%d_DOCKER_ARGS"
,
i
)),
os
.
Getenv
(
"REGISTRY_CLUSTER_ARGS"
),
serverImage
,
"server"
,
joinOrStart
,
os
.
Getenv
(
"SERVER_ARGS"
),
os
.
Getenv
(
fmt
.
Sprintf
(
"SERVER_%d_ARGS"
,
i
))},
" "
)
if
out
,
err
:=
RunCommand
(
dRun
);
err
!=
nil
{
return
fmt
.
Errorf
(
"failed to run server container: %s: %v"
,
out
,
err
)
}
}
}
// Get the IP address of the container
// Get the IP address of the container
...
@@ -156,7 +199,7 @@ func (config *TestConfig) ProvisionServers(numOfServers int) error {
...
@@ -156,7 +199,7 @@ func (config *TestConfig) ProvisionServers(numOfServers int) error {
url
:=
fmt
.
Sprintf
(
"https://%s:6443"
,
ip
)
url
:=
fmt
.
Sprintf
(
"https://%s:6443"
,
ip
)
config
.
Servers
=
append
(
config
.
Servers
,
Server
Config
{
config
.
Servers
=
append
(
config
.
Servers
,
Server
{
Name
:
name
,
Name
:
name
,
Port
:
port
,
Port
:
port
,
IP
:
ip
,
IP
:
ip
,
...
@@ -192,21 +235,47 @@ func (config *TestConfig) ProvisionAgents(numOfAgents int) error {
...
@@ -192,21 +235,47 @@ func (config *TestConfig) ProvisionAgents(numOfAgents int) error {
agentInstanceArgs
:=
fmt
.
Sprintf
(
"AGENT_%d_ARGS"
,
i
)
agentInstanceArgs
:=
fmt
.
Sprintf
(
"AGENT_%d_ARGS"
,
i
)
// Assemble all the Docker args
if
config
.
NeedRestart
{
dRun
:=
strings
.
Join
([]
string
{
"docker run -d"
,
dRun
:=
strings
.
Join
([]
string
{
"docker run -d"
,
"--name"
,
name
,
"--name"
,
name
,
"--hostname"
,
name
,
"--hostname"
,
name
,
"--privileged"
,
"--privileged"
,
"-e"
,
fmt
.
Sprintf
(
"K3S_TOKEN=%s"
,
config
.
Secret
),
"-e"
,
fmt
.
Sprintf
(
"K3S_TOKEN=%s"
,
config
.
Secret
),
"-e"
,
fmt
.
Sprintf
(
"K3S_URL=%s"
,
k3sURL
),
"-e"
,
fmt
.
Sprintf
(
"K3S_URL=%s"
,
k3sURL
),
os
.
Getenv
(
"AGENT_DOCKER_ARGS"
),
"-v"
,
"/sys/fs/bpf:/sys/fs/bpf"
,
os
.
Getenv
(
fmt
.
Sprintf
(
"AGENT_%d_DOCKER_ARGS"
,
i
)),
"-v"
,
"/lib/modules:/lib/modules"
,
os
.
Getenv
(
"REGISTRY_CLUSTER_ARGS"
),
"-v"
,
"/var/run/docker.sock:/var/run/docker.sock"
,
getEnvOrDefault
(
"K3S_IMAGE_AGENT"
,
config
.
K3sImage
),
"-v"
,
"/var/lib/docker:/var/lib/docker"
,
"agent"
,
os
.
Getenv
(
"ARGS"
),
os
.
Getenv
(
"AGENT_ARGS"
),
os
.
Getenv
(
agentInstanceArgs
)},
" "
)
"--mount"
,
"type=bind,source=$(pwd)/../../../dist/artifacts/k3s,target=/usr/local/bin/k3s"
,
"rancher/systemd-node:v0.0.5"
,
if
out
,
err
:=
RunCommand
(
dRun
);
err
!=
nil
{
"/usr/lib/systemd/systemd --unit=noop.target --show-status=true"
},
" "
)
return
fmt
.
Errorf
(
"failed to run agent container: %s: %v"
,
out
,
err
)
if
out
,
err
:=
RunCommand
(
dRun
);
err
!=
nil
{
return
fmt
.
Errorf
(
"failed to start systemd container: %s: %v"
,
out
,
err
)
}
time
.
Sleep
(
5
*
time
.
Second
)
// The pipe requires that we use sh -c with "" to run the command
sCmd
:=
fmt
.
Sprintf
(
"/bin/sh -c
\"
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC='agent %s' INSTALL_K3S_SKIP_DOWNLOAD=true sh -
\"
"
,
os
.
Getenv
(
agentInstanceArgs
))
if
out
,
err
:=
RunCmdOnDocker
(
name
,
sCmd
);
err
!=
nil
{
return
fmt
.
Errorf
(
"failed to start server: %s: %v"
,
out
,
err
)
}
}
else
{
// Assemble all the Docker args
dRun
:=
strings
.
Join
([]
string
{
"docker run -d"
,
"--name"
,
name
,
"--hostname"
,
name
,
"--privileged"
,
"-e"
,
fmt
.
Sprintf
(
"K3S_TOKEN=%s"
,
config
.
Secret
),
"-e"
,
fmt
.
Sprintf
(
"K3S_URL=%s"
,
k3sURL
),
os
.
Getenv
(
"AGENT_DOCKER_ARGS"
),
os
.
Getenv
(
fmt
.
Sprintf
(
"AGENT_%d_DOCKER_ARGS"
,
i
)),
os
.
Getenv
(
"REGISTRY_CLUSTER_ARGS"
),
getEnvOrDefault
(
"K3S_IMAGE_AGENT"
,
config
.
K3sImage
),
"agent"
,
os
.
Getenv
(
"ARGS"
),
os
.
Getenv
(
"AGENT_ARGS"
),
os
.
Getenv
(
agentInstanceArgs
)},
" "
)
if
out
,
err
:=
RunCommand
(
dRun
);
err
!=
nil
{
return
fmt
.
Errorf
(
"failed to run agent container: %s: %v"
,
out
,
err
)
}
}
}
// Get the IP address of the container
// Get the IP address of the container
...
@@ -216,7 +285,7 @@ func (config *TestConfig) ProvisionAgents(numOfAgents int) error {
...
@@ -216,7 +285,7 @@ func (config *TestConfig) ProvisionAgents(numOfAgents int) error {
}
}
ip
:=
strings
.
TrimSpace
(
ipOutput
)
ip
:=
strings
.
TrimSpace
(
ipOutput
)
config
.
Agents
=
append
(
config
.
Agents
,
Agent
Config
{
config
.
Agents
=
append
(
config
.
Agents
,
Agent
{
Name
:
name
,
Name
:
name
,
IP
:
ip
,
IP
:
ip
,
})
})
...
...
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