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
a666c1e7
Commit
a666c1e7
authored
Apr 21, 2015
by
Dawn Chen
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #7134 from yifan-gu/version
kubelet: Refactor GetDockerVersion().
parents
70624f0c
611fb259
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
81 additions
and
37 deletions
+81
-37
runtime.go
pkg/kubelet/container/runtime.go
+11
-2
docker.go
pkg/kubelet/dockertools/docker.go
+3
-3
docker_test.go
pkg/kubelet/dockertools/docker_test.go
+3
-3
manager.go
pkg/kubelet/dockertools/manager.go
+40
-0
kubelet.go
pkg/kubelet/kubelet.go
+5
-6
kubelet_test.go
pkg/kubelet/kubelet_test.go
+0
-4
server.go
pkg/kubelet/server.go
+9
-10
server_test.go
pkg/kubelet/server_test.go
+10
-9
No files found.
pkg/kubelet/container/runtime.go
View file @
a666c1e7
...
...
@@ -25,11 +25,20 @@ import (
"github.com/GoogleCloudPlatform/kubernetes/pkg/volume"
)
type
Version
interface
{
// Compare compares two versions of the runtime. On success it returns -1
// if the version is less than the other, 1 if it is greater than the other,
// or 0 if they are equal.
Compare
(
other
string
)
(
int
,
error
)
// String returns a string that represents the version.
String
()
string
}
// Runtime interface defines the interfaces that should be implemented
// by a container runtime.
type
Runtime
interface
{
// Version returns
a map of
version information of the container runtime.
Version
()
(
map
[
string
]
string
,
error
)
// Version returns
the
version information of the container runtime.
Version
()
(
Version
,
error
)
// GetPods returns a list containers group by pods. The boolean parameter
// specifies whether the runtime returns all containers including those already
// exited and dead containers (used for garbage collection).
...
...
pkg/kubelet/dockertools/docker.go
View file @
a666c1e7
...
...
@@ -120,7 +120,8 @@ type dockerContainerCommandRunner struct {
var
dockerAPIVersionWithExec
,
_
=
docker
.
NewAPIVersion
(
"1.15"
)
// Returns the major and minor version numbers of docker server.
func
(
d
*
dockerContainerCommandRunner
)
GetDockerServerVersion
()
(
docker
.
APIVersion
,
error
)
{
// TODO(yifan): Remove this once the ContainerCommandRunner is implemented by dockerManager.
func
(
d
*
dockerContainerCommandRunner
)
getDockerServerVersion
()
(
docker
.
APIVersion
,
error
)
{
env
,
err
:=
d
.
client
.
Version
()
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"failed to get docker server version - %v"
,
err
)
...
...
@@ -136,7 +137,7 @@ func (d *dockerContainerCommandRunner) GetDockerServerVersion() (docker.APIVersi
}
func
(
d
*
dockerContainerCommandRunner
)
nativeExecSupportExists
()
(
bool
,
error
)
{
version
,
err
:=
d
.
G
etDockerServerVersion
()
version
,
err
:=
d
.
g
etDockerServerVersion
()
if
err
!=
nil
{
return
false
,
err
}
...
...
@@ -483,7 +484,6 @@ func ConnectToDockerOrDie(dockerEndpoint string) DockerInterface {
// TODO(yifan): Move this to container.Runtime.
type
ContainerCommandRunner
interface
{
RunInContainer
(
containerID
string
,
cmd
[]
string
)
([]
byte
,
error
)
GetDockerServerVersion
()
(
docker
.
APIVersion
,
error
)
ExecInContainer
(
containerID
string
,
cmd
[]
string
,
in
io
.
Reader
,
out
,
err
io
.
WriteCloser
,
tty
bool
)
error
PortForward
(
pod
*
kubecontainer
.
Pod
,
port
uint16
,
stream
io
.
ReadWriteCloser
)
error
}
...
...
pkg/kubelet/dockertools/docker_test.go
View file @
a666c1e7
...
...
@@ -129,10 +129,10 @@ func TestContainerManifestNaming(t *testing.T) {
}
}
func
Test
GetDockerServer
Version
(
t
*
testing
.
T
)
{
func
TestVersion
(
t
*
testing
.
T
)
{
fakeDocker
:=
&
FakeDockerClient
{
VersionInfo
:
docker
.
Env
{
"Version=1.1.3"
,
"ApiVersion=1.15"
}}
runner
:=
dockerContainerCommandRunner
{
fakeDocker
}
version
,
err
:=
runner
.
GetDockerServer
Version
()
manager
:=
&
DockerManager
{
client
:
fakeDocker
}
version
,
err
:=
manager
.
Version
()
if
err
!=
nil
{
t
.
Errorf
(
"got error while getting docker server version - %s"
,
err
)
}
...
...
pkg/kubelet/dockertools/manager.go
View file @
a666c1e7
...
...
@@ -655,3 +655,43 @@ func (dm *DockerManager) PodInfraContainerChanged(pod *api.Pod, podInfraContaine
}
return
podInfraContainer
.
Hash
!=
HashContainer
(
expectedPodInfraContainer
),
nil
}
type
dockerVersion
docker
.
APIVersion
func
NewVersion
(
input
string
)
(
dockerVersion
,
error
)
{
version
,
err
:=
docker
.
NewAPIVersion
(
input
)
return
dockerVersion
(
version
),
err
}
func
(
dv
dockerVersion
)
String
()
string
{
return
docker
.
APIVersion
(
dv
)
.
String
()
}
func
(
dv
dockerVersion
)
Compare
(
other
string
)
(
int
,
error
)
{
a
:=
docker
.
APIVersion
(
dv
)
b
,
err
:=
docker
.
NewAPIVersion
(
other
)
if
err
!=
nil
{
return
0
,
err
}
if
a
.
LessThan
(
b
)
{
return
-
1
,
nil
}
if
a
.
GreaterThan
(
b
)
{
return
1
,
nil
}
return
0
,
nil
}
func
(
dm
*
DockerManager
)
Version
()
(
kubecontainer
.
Version
,
error
)
{
env
,
err
:=
dm
.
client
.
Version
()
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"docker: failed to get docker version: %v"
,
err
)
}
apiVersion
:=
env
.
Get
(
"ApiVersion"
)
version
,
err
:=
docker
.
NewAPIVersion
(
apiVersion
)
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"docker: failed to parse docker server version %q: %v"
,
apiVersion
,
err
)
}
return
dockerVersion
(
version
),
nil
}
pkg/kubelet/kubelet.go
View file @
a666c1e7
...
...
@@ -1658,13 +1658,12 @@ func (kl *Kubelet) syncLoop(updates <-chan PodUpdate, handler SyncHandler) {
}
}
// Returns
Docker
version for this Kubelet.
func
(
kl
*
Kubelet
)
Get
DockerVersion
()
(
docker
.
API
Version
,
error
)
{
if
kl
.
dockerClient
==
nil
{
return
nil
,
fmt
.
Errorf
(
"no
Docker client
"
)
// Returns
the container runtime
version for this Kubelet.
func
(
kl
*
Kubelet
)
Get
ContainerRuntimeVersion
()
(
kubecontainer
.
Version
,
error
)
{
if
kl
.
containerManager
==
nil
{
return
nil
,
fmt
.
Errorf
(
"no
container runtime
"
)
}
dockerRunner
:=
dockertools
.
NewDockerContainerCommandRunner
(
kl
.
dockerClient
)
return
dockerRunner
.
GetDockerServerVersion
()
return
kl
.
containerManager
.
Version
()
}
func
(
kl
*
Kubelet
)
validatePodPhase
(
podStatus
*
api
.
PodStatus
)
error
{
...
...
pkg/kubelet/kubelet_test.go
View file @
a666c1e7
...
...
@@ -1597,10 +1597,6 @@ func (f *fakeContainerCommandRunner) RunInContainer(id string, cmd []string) ([]
return
[]
byte
{},
f
.
E
}
func
(
f
*
fakeContainerCommandRunner
)
GetDockerServerVersion
()
(
docker
.
APIVersion
,
error
)
{
return
nil
,
nil
}
func
(
f
*
fakeContainerCommandRunner
)
ExecInContainer
(
id
string
,
cmd
[]
string
,
in
io
.
Reader
,
out
,
err
io
.
WriteCloser
,
tty
bool
)
error
{
f
.
Cmd
=
cmd
f
.
ID
=
id
...
...
pkg/kubelet/server.go
View file @
a666c1e7
...
...
@@ -41,7 +41,6 @@ import (
"github.com/GoogleCloudPlatform/kubernetes/pkg/util/flushwriter"
"github.com/GoogleCloudPlatform/kubernetes/pkg/util/httpstream"
"github.com/GoogleCloudPlatform/kubernetes/pkg/util/httpstream/spdy"
"github.com/fsouza/go-dockerclient"
"github.com/golang/glog"
cadvisorApi
"github.com/google/cadvisor/info/v1"
"github.com/prometheus/client_golang/prometheus"
...
...
@@ -101,7 +100,7 @@ func ListenAndServeKubeletReadOnlyServer(host HostInterface, address net.IP, por
type
HostInterface
interface
{
GetContainerInfo
(
podFullName
string
,
uid
types
.
UID
,
containerName
string
,
req
*
cadvisorApi
.
ContainerInfoRequest
)
(
*
cadvisorApi
.
ContainerInfo
,
error
)
GetRootInfo
(
req
*
cadvisorApi
.
ContainerInfoRequest
)
(
*
cadvisorApi
.
ContainerInfo
,
error
)
Get
DockerVersion
()
(
docker
.
API
Version
,
error
)
Get
ContainerRuntimeVersion
()
(
kubecontainer
.
Version
,
error
)
GetCachedMachineInfo
()
(
*
cadvisorApi
.
MachineInfo
,
error
)
GetPods
()
[]
*
api
.
Pod
GetPodByName
(
namespace
,
name
string
)
(
*
api
.
Pod
,
bool
)
...
...
@@ -160,18 +159,18 @@ func (s *Server) error(w http.ResponseWriter, err error) {
http
.
Error
(
w
,
msg
,
http
.
StatusInternalServerError
)
}
func
isValidDockerVersion
(
ver
docker
.
APIVersion
)
bool
{
minAllowedVersion
,
_
:=
docker
.
NewAPIVersion
(
"1.15"
)
return
ver
.
GreaterThanOrEqualTo
(
minAllowedVersion
)
}
func
(
s
*
Server
)
dockerHealthCheck
(
req
*
http
.
Request
)
error
{
version
,
err
:=
s
.
host
.
Get
Docker
Version
()
version
,
err
:=
s
.
host
.
Get
ContainerRuntime
Version
()
if
err
!=
nil
{
return
errors
.
New
(
"unknown Docker version"
)
}
if
!
isValidDockerVersion
(
version
)
{
return
fmt
.
Errorf
(
"Docker version is too old (%v)"
,
version
.
String
())
// Verify the docker version.
result
,
err
:=
version
.
Compare
(
"1.15"
)
if
err
!=
nil
{
return
err
}
if
result
<
0
{
return
fmt
.
Errorf
(
"Docker version is too old: %q"
,
version
.
String
())
}
return
nil
}
...
...
pkg/kubelet/server_test.go
View file @
a666c1e7
...
...
@@ -32,10 +32,11 @@ import (
"time"
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
kubecontainer
"github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/container"
"github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/dockertools"
"github.com/GoogleCloudPlatform/kubernetes/pkg/types"
"github.com/GoogleCloudPlatform/kubernetes/pkg/util/httpstream"
"github.com/GoogleCloudPlatform/kubernetes/pkg/util/httpstream/spdy"
"github.com/fsouza/go-dockerclient"
cadvisorApi
"github.com/google/cadvisor/info/v1"
)
...
...
@@ -48,7 +49,7 @@ type fakeKubelet struct {
podsFunc
func
()
[]
*
api
.
Pod
logFunc
func
(
w
http
.
ResponseWriter
,
req
*
http
.
Request
)
runFunc
func
(
podFullName
string
,
uid
types
.
UID
,
containerName
string
,
cmd
[]
string
)
([]
byte
,
error
)
dockerVersionFunc
func
()
(
docker
.
API
Version
,
error
)
containerVersionFunc
func
()
(
kubecontainer
.
Version
,
error
)
execFunc
func
(
pod
string
,
uid
types
.
UID
,
container
string
,
cmd
[]
string
,
in
io
.
Reader
,
out
,
err
io
.
WriteCloser
,
tty
bool
)
error
portForwardFunc
func
(
name
string
,
uid
types
.
UID
,
port
uint16
,
stream
io
.
ReadWriteCloser
)
error
containerLogsFunc
func
(
podFullName
,
containerName
,
tail
string
,
follow
bool
,
stdout
,
stderr
io
.
Writer
)
error
...
...
@@ -72,8 +73,8 @@ func (fk *fakeKubelet) GetRootInfo(req *cadvisorApi.ContainerInfoRequest) (*cadv
return
fk
.
rootInfoFunc
(
req
)
}
func
(
fk
*
fakeKubelet
)
Get
DockerVersion
()
(
docker
.
API
Version
,
error
)
{
return
fk
.
dock
erVersionFunc
()
func
(
fk
*
fakeKubelet
)
Get
ContainerRuntimeVersion
()
(
kubecontainer
.
Version
,
error
)
{
return
fk
.
contain
erVersionFunc
()
}
func
(
fk
*
fakeKubelet
)
GetCachedMachineInfo
()
(
*
cadvisorApi
.
MachineInfo
,
error
)
{
...
...
@@ -450,8 +451,8 @@ func TestPodsInfo(t *testing.T) {
func
TestHealthCheck
(
t
*
testing
.
T
)
{
fw
:=
newServerTest
()
fw
.
fakeKubelet
.
dockerVersionFunc
=
func
()
(
docker
.
API
Version
,
error
)
{
return
docker
.
NewAPI
Version
(
"1.15"
)
fw
.
fakeKubelet
.
containerVersionFunc
=
func
()
(
kubecontainer
.
Version
,
error
)
{
return
docker
tools
.
New
Version
(
"1.15"
)
}
fw
.
fakeKubelet
.
hostnameFunc
=
func
()
string
{
return
"127.0.0.1"
...
...
@@ -489,9 +490,9 @@ func TestHealthCheck(t *testing.T) {
t
.
Errorf
(
"expected status code %d, got %d"
,
http
.
StatusOK
,
resp
.
StatusCode
)
}
//Test with old
docker
version
fw
.
fakeKubelet
.
dockerVersionFunc
=
func
()
(
docker
.
API
Version
,
error
)
{
return
docker
.
NewAPI
Version
(
"1.1"
)
//Test with old
container runtime
version
fw
.
fakeKubelet
.
containerVersionFunc
=
func
()
(
kubecontainer
.
Version
,
error
)
{
return
docker
tools
.
New
Version
(
"1.1"
)
}
resp
,
err
=
http
.
Get
(
fw
.
testHTTPServer
.
URL
+
"/healthz"
)
...
...
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