Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Chu Peng 楚鹏
minikube
提交
ea6d6832
M
minikube
项目概览
Chu Peng 楚鹏
/
minikube
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
M
minikube
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
ea6d6832
编写于
3月 19, 2020
作者:
T
Thomas Stromberg
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Only restart docker service if unit file has updated
上级
8d1f4552
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
60 addition
and
75 deletion
+60
-75
pkg/provision/buildroot.go
pkg/provision/buildroot.go
+13
-34
pkg/provision/provision.go
pkg/provision/provision.go
+33
-7
pkg/provision/ubuntu.go
pkg/provision/ubuntu.go
+14
-34
未找到文件。
pkg/provision/buildroot.go
浏览文件 @
ea6d6832
...
...
@@ -19,18 +19,16 @@ package provision
import
(
"bytes"
"fmt"
"path"
"text/template"
"time"
"github.com/docker/machine/libmachine/auth"
"github.com/docker/machine/libmachine/drivers"
"github.com/docker/machine/libmachine/engine"
"github.com/docker/machine/libmachine/log"
"github.com/docker/machine/libmachine/provision"
"github.com/docker/machine/libmachine/provision/pkgaction"
"github.com/docker/machine/libmachine/provision/serviceaction"
"github.com/docker/machine/libmachine/swarm"
"github.com/golang/glog"
"k8s.io/minikube/pkg/util/retry"
)
...
...
@@ -42,7 +40,7 @@ type BuildrootProvisioner struct {
// NewBuildrootProvisioner creates a new BuildrootProvisioner
func
NewBuildrootProvisioner
(
d
drivers
.
Driver
)
provision
.
Provisioner
{
return
&
BuildrootProvisioner
{
provision
.
NewSystemdProvisioner
(
"buildroot"
,
d
),
NewSystemdProvisioner
(
"buildroot"
,
d
),
}
}
...
...
@@ -65,7 +63,7 @@ func (p *BuildrootProvisioner) GenerateDockerOptions(dockerPort int) (*provision
noPivot
:=
true
// Using pivot_root is not supported on fstype rootfs
if
fstype
,
err
:=
rootFileSystemType
(
p
);
err
==
nil
{
log
.
Debug
f
(
"root file system type: %s"
,
fstype
)
glog
.
Info
f
(
"root file system type: %s"
,
fstype
)
noPivot
=
fstype
==
"rootfs"
}
...
...
@@ -79,7 +77,7 @@ Requires= minikube-automount.service docker.socket
Type=notify
`
if
noPivot
{
log
.
Warn
(
"Using fundamentally insecure --no-pivot option"
)
glog
.
Warning
(
"Using fundamentally insecure --no-pivot option"
)
engineConfigTmpl
+=
`
# DOCKER_RAMDISK disables pivot_root in Docker, using MS_MOVE instead.
Environment=DOCKER_RAMDISK=yes
...
...
@@ -140,30 +138,11 @@ WantedBy=multi-user.target
return
nil
,
err
}
do
ckerCfg
:=
&
provision
.
DockerOptions
{
do
:=
&
provision
.
DockerOptions
{
EngineOptions
:
engineCfg
.
String
(),
EngineOptionsPath
:
"/lib/systemd/system/docker.service"
,
}
log
.
Info
(
"Setting Docker configuration on the remote daemon..."
)
if
_
,
err
=
p
.
SSHCommand
(
fmt
.
Sprintf
(
"sudo mkdir -p %s && printf %%s
\"
%s
\"
| sudo tee %s"
,
path
.
Dir
(
dockerCfg
.
EngineOptionsPath
),
dockerCfg
.
EngineOptions
,
dockerCfg
.
EngineOptionsPath
));
err
!=
nil
{
return
nil
,
err
}
// To make sure if there is a already-installed docker on the ISO to pick up the new systemd file
if
err
:=
p
.
Service
(
""
,
serviceaction
.
DaemonReload
);
err
!=
nil
{
return
nil
,
err
}
if
err
:=
p
.
Service
(
"docker"
,
serviceaction
.
Enable
);
err
!=
nil
{
return
nil
,
err
}
if
err
:=
p
.
Service
(
"docker"
,
serviceaction
.
Restart
);
err
!=
nil
{
return
nil
,
err
}
return
dockerCfg
,
nil
return
do
,
updateUnit
(
p
,
"docker"
,
do
.
EngineOptions
,
do
.
EngineOptionsPath
)
}
// Package installs a package
...
...
@@ -177,18 +156,18 @@ func (p *BuildrootProvisioner) Provision(swarmOptions swarm.Options, authOptions
p
.
AuthOptions
=
authOptions
p
.
EngineOptions
=
engineOptions
log
.
Infof
(
"provisioning hostname %q"
,
p
.
Driver
.
GetMachineName
())
g
log
.
Infof
(
"provisioning hostname %q"
,
p
.
Driver
.
GetMachineName
())
if
err
:=
p
.
SetHostname
(
p
.
Driver
.
GetMachineName
());
err
!=
nil
{
return
err
}
p
.
AuthOptions
=
setRemoteAuthOptions
(
p
)
log
.
Debug
f
(
"set auth options %+v"
,
p
.
AuthOptions
)
glog
.
Info
f
(
"set auth options %+v"
,
p
.
AuthOptions
)
log
.
Debug
f
(
"setting up certificates"
)
glog
.
Info
f
(
"setting up certificates"
)
configAuth
:=
func
()
error
{
if
err
:=
configureAuth
(
p
);
err
!=
nil
{
log
.
Warn
f
(
"configureAuth failed: %v"
,
err
)
glog
.
Warning
f
(
"configureAuth failed: %v"
,
err
)
return
&
retry
.
RetriableError
{
Err
:
err
}
}
return
nil
...
...
@@ -196,13 +175,13 @@ func (p *BuildrootProvisioner) Provision(swarmOptions swarm.Options, authOptions
err
:=
retry
.
Expo
(
configAuth
,
time
.
Second
,
2
*
time
.
Minute
)
if
err
!=
nil
{
log
.
Debug
f
(
"Error configuring auth during provisioning %v"
,
err
)
glog
.
Info
f
(
"Error configuring auth during provisioning %v"
,
err
)
return
err
}
log
.
Debug
f
(
"setting minikube options for container-runtime"
)
glog
.
Info
f
(
"setting minikube options for container-runtime"
)
if
err
:=
setContainerRuntimeOptions
(
p
.
Driver
.
GetMachineName
(),
p
);
err
!=
nil
{
log
.
Debug
f
(
"Error setting container-runtime options during provisioning %v"
,
err
)
glog
.
Info
f
(
"Error setting container-runtime options during provisioning %v"
,
err
)
return
err
}
...
...
pkg/provision/provision.go
浏览文件 @
ea6d6832
...
...
@@ -31,10 +31,10 @@ import (
"github.com/docker/machine/libmachine/cert"
"github.com/docker/machine/libmachine/drivers"
"github.com/docker/machine/libmachine/engine"
"github.com/docker/machine/libmachine/log"
"github.com/docker/machine/libmachine/mcnutils"
"github.com/docker/machine/libmachine/provision"
"github.com/docker/machine/libmachine/swarm"
"github.com/golang/glog"
"github.com/pkg/errors"
"k8s.io/minikube/pkg/minikube/assets"
"k8s.io/minikube/pkg/minikube/command"
...
...
@@ -66,11 +66,24 @@ func init() {
}
// NewSystemdProvisioner is our fork of the same name in the upstream provision library, without the packages
func
NewSystemdProvisioner
(
osReleaseID
string
,
d
drivers
.
Driver
)
provision
.
SystemdProvisioner
{
return
provision
.
SystemdProvisioner
{
provision
.
GenericProvisioner
{
SSHCommander
:
provision
.
GenericSSHCommander
{
Driver
:
d
},
DockerOptionsDir
:
"/etc/docker"
,
DaemonOptionsFile
:
"/etc/systemd/system/docker.service.d/10-machine.conf"
,
OsReleaseID
:
osReleaseID
,
Driver
:
d
,
},
}
}
func
configureAuth
(
p
miniProvisioner
)
error
{
log
.
Infof
(
"configureAuth start"
)
g
log
.
Infof
(
"configureAuth start"
)
start
:=
time
.
Now
()
defer
func
()
{
log
.
Infof
(
"configureAuth took %s"
,
time
.
Since
(
start
))
g
log
.
Infof
(
"configureAuth took %s"
,
time
.
Since
(
start
))
}()
driver
:=
p
.
GetDriver
()
...
...
@@ -90,7 +103,7 @@ func configureAuth(p miniProvisioner) error {
// The Host IP is always added to the certificate's SANs list
hosts
:=
append
(
authOptions
.
ServerCertSANs
,
ip
,
"localhost"
,
"127.0.0.1"
)
log
.
Debug
f
(
"generating server cert: %s ca-key=%s private-key=%s org=%s san=%s"
,
glog
.
Info
f
(
"generating server cert: %s ca-key=%s private-key=%s org=%s san=%s"
,
authOptions
.
ServerCertPath
,
authOptions
.
CaCertPath
,
authOptions
.
CaPrivateKeyPath
,
...
...
@@ -116,11 +129,11 @@ func configureAuth(p miniProvisioner) error {
}
func
copyHostCerts
(
authOptions
auth
.
Options
)
error
{
log
.
Infof
(
"copyHostCerts"
)
g
log
.
Infof
(
"copyHostCerts"
)
err
:=
os
.
MkdirAll
(
authOptions
.
StorePath
,
0700
)
if
err
!=
nil
{
log
.
Errorf
(
"mkdir failed: %v"
,
err
)
g
log
.
Errorf
(
"mkdir failed: %v"
,
err
)
}
hostCerts
:=
map
[
string
]
string
{
...
...
@@ -144,7 +157,7 @@ func copyHostCerts(authOptions auth.Options) error {
}
func
copyRemoteCerts
(
authOptions
auth
.
Options
,
driver
drivers
.
Driver
)
error
{
log
.
Infof
(
"copyRemoteCerts"
)
g
log
.
Infof
(
"copyRemoteCerts"
)
remoteCerts
:=
map
[
string
]
string
{
authOptions
.
CaCertPath
:
authOptions
.
CaCertRemotePath
,
...
...
@@ -276,3 +289,16 @@ func concatStrings(src []string, prefix string, postfix string) []string {
}
return
ret
}
// updateUnit efficiently updates a systemd unit file
func
updateUnit
(
p
provision
.
SSHCommander
,
name
string
,
content
string
,
dst
string
)
error
{
glog
.
Infof
(
"Updating %s ..."
,
dst
)
if
_
,
err
:=
p
.
SSHCommand
(
fmt
.
Sprintf
(
"sudo mkdir -p %s && printf %%s
\"
%s
\"
| sudo tee %s.new"
,
path
.
Dir
(
dst
),
content
,
dst
));
err
!=
nil
{
return
err
}
if
_
,
err
:=
p
.
SSHCommand
(
fmt
.
Sprintf
(
"sudo diff -u %s %s.new || { sudo mv %s.new %s; sudo systemctl -f daemon-reload && sudo sudo systemctl -f restart docker; }"
,
dst
,
dst
,
dst
,
dst
));
err
!=
nil
{
return
err
}
return
nil
}
pkg/provision/ubuntu.go
浏览文件 @
ea6d6832
...
...
@@ -19,18 +19,16 @@ package provision
import
(
"bytes"
"fmt"
"path"
"text/template"
"time"
"github.com/docker/machine/libmachine/auth"
"github.com/docker/machine/libmachine/drivers"
"github.com/docker/machine/libmachine/engine"
"github.com/docker/machine/libmachine/log"
"github.com/docker/machine/libmachine/provision"
"github.com/docker/machine/libmachine/provision/pkgaction"
"github.com/docker/machine/libmachine/provision/serviceaction"
"github.com/docker/machine/libmachine/swarm"
"github.com/golang/glog"
"k8s.io/minikube/pkg/util/retry"
)
...
...
@@ -43,7 +41,7 @@ type UbuntuProvisioner struct {
func
NewUbuntuProvisioner
(
d
drivers
.
Driver
)
provision
.
Provisioner
{
return
&
UbuntuProvisioner
{
BuildrootProvisioner
{
provision
.
NewSystemdProvisioner
(
"ubuntu"
,
d
),
NewSystemdProvisioner
(
"ubuntu"
,
d
),
},
}
}
...
...
@@ -67,7 +65,7 @@ func (p *UbuntuProvisioner) GenerateDockerOptions(dockerPort int) (*provision.Do
noPivot
:=
true
// Using pivot_root is not supported on fstype rootfs
if
fstype
,
err
:=
rootFileSystemType
(
p
);
err
==
nil
{
log
.
Debug
f
(
"root file system type: %s"
,
fstype
)
glog
.
Info
f
(
"root file system type: %s"
,
fstype
)
noPivot
=
fstype
==
"rootfs"
}
...
...
@@ -83,7 +81,7 @@ Requires=docker.socket
Type=notify
`
if
noPivot
{
log
.
Warn
(
"Using fundamentally insecure --no-pivot option"
)
glog
.
Warning
(
"Using fundamentally insecure --no-pivot option"
)
engineConfigTmpl
+=
`
# DOCKER_RAMDISK disables pivot_root in Docker, using MS_MOVE instead.
Environment=DOCKER_RAMDISK=yes
...
...
@@ -144,30 +142,11 @@ WantedBy=multi-user.target
return
nil
,
err
}
do
ckerCfg
:=
&
provision
.
DockerOptions
{
do
:=
&
provision
.
DockerOptions
{
EngineOptions
:
engineCfg
.
String
(),
EngineOptionsPath
:
"/lib/systemd/system/docker.service"
,
}
log
.
Info
(
"Setting Docker configuration on the remote daemon..."
)
if
_
,
err
=
p
.
SSHCommand
(
fmt
.
Sprintf
(
"sudo mkdir -p %s && printf %%s
\"
%s
\"
| sudo tee %s"
,
path
.
Dir
(
dockerCfg
.
EngineOptionsPath
),
dockerCfg
.
EngineOptions
,
dockerCfg
.
EngineOptionsPath
));
err
!=
nil
{
return
nil
,
err
}
// because in kic base image we pre-install docker it already has a service file. we need to daemon-reload for the new systemd file
if
err
:=
p
.
Service
(
""
,
serviceaction
.
DaemonReload
);
err
!=
nil
{
return
nil
,
err
}
if
err
:=
p
.
Service
(
"docker"
,
serviceaction
.
Enable
);
err
!=
nil
{
return
nil
,
err
}
if
err
:=
p
.
Service
(
"docker"
,
serviceaction
.
Restart
);
err
!=
nil
{
return
nil
,
err
}
return
dockerCfg
,
nil
return
do
,
updateUnit
(
p
,
"docker"
,
do
.
EngineOptions
,
do
.
EngineOptionsPath
)
}
// Package installs a package
...
...
@@ -181,32 +160,33 @@ func (p *UbuntuProvisioner) Provision(swarmOptions swarm.Options, authOptions au
p
.
AuthOptions
=
authOptions
p
.
EngineOptions
=
engineOptions
log
.
Infof
(
"provisioning hostname %q"
,
p
.
Driver
.
GetMachineName
())
g
log
.
Infof
(
"provisioning hostname %q"
,
p
.
Driver
.
GetMachineName
())
if
err
:=
p
.
SetHostname
(
p
.
Driver
.
GetMachineName
());
err
!=
nil
{
return
err
}
p
.
AuthOptions
=
setRemoteAuthOptions
(
p
)
log
.
Debug
f
(
"set auth options %+v"
,
p
.
AuthOptions
)
glog
.
Info
f
(
"set auth options %+v"
,
p
.
AuthOptions
)
log
.
Debug
f
(
"setting up certificates"
)
glog
.
Info
f
(
"setting up certificates"
)
configAuth
:=
func
()
error
{
if
err
:=
configureAuth
(
p
);
err
!=
nil
{
log
.
Warn
f
(
"configureAuth failed: %v"
,
err
)
glog
.
Warning
f
(
"configureAuth failed: %v"
,
err
)
return
&
retry
.
RetriableError
{
Err
:
err
}
}
return
nil
}
err
:=
retry
.
Expo
(
configAuth
,
time
.
Second
,
2
*
time
.
Minute
)
if
err
!=
nil
{
log
.
Debug
f
(
"Error configuring auth during provisioning %v"
,
err
)
glog
.
Info
f
(
"Error configuring auth during provisioning %v"
,
err
)
return
err
}
log
.
Debug
f
(
"setting minikube options for container-runtime"
)
glog
.
Info
f
(
"setting minikube options for container-runtime"
)
if
err
:=
setContainerRuntimeOptions
(
p
.
Driver
.
GetMachineName
(),
p
);
err
!=
nil
{
log
.
Debug
f
(
"Error setting container-runtime options during provisioning %v"
,
err
)
glog
.
Info
f
(
"Error setting container-runtime options during provisioning %v"
,
err
)
return
err
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录