k3s/pkg/agent/run.go

122 lines
2.6 KiB
Go
Raw Normal View History

2019-01-09 16:54:15 +00:00
package agent
import (
"context"
2019-02-08 04:13:43 +00:00
"errors"
"io/ioutil"
2019-01-09 16:54:15 +00:00
"os"
"path/filepath"
2019-02-08 04:13:43 +00:00
"strings"
2019-01-09 16:54:15 +00:00
"time"
"github.com/rancher/k3s/pkg/agent/config"
"github.com/rancher/k3s/pkg/agent/containerd"
"github.com/rancher/k3s/pkg/agent/flannel"
"github.com/rancher/k3s/pkg/agent/syssetup"
"github.com/rancher/k3s/pkg/agent/tunnel"
"github.com/rancher/k3s/pkg/cli/cmds"
2019-05-09 22:05:51 +00:00
"github.com/rancher/k3s/pkg/clientaccess"
2019-01-09 16:54:15 +00:00
"github.com/rancher/k3s/pkg/daemons/agent"
2019-03-08 22:47:44 +00:00
"github.com/rancher/k3s/pkg/rootless"
2019-01-22 21:14:58 +00:00
"github.com/sirupsen/logrus"
2019-01-09 16:54:15 +00:00
)
func run(ctx context.Context, cfg cmds.Agent) error {
nodeConfig := config.Get(ctx, cfg)
2019-05-03 12:41:08 +00:00
if err := config.HostnameCheck(cfg); err != nil {
return err
}
2019-01-09 16:54:15 +00:00
if !nodeConfig.NoFlannel {
if err := flannel.Prepare(ctx, nodeConfig); err != nil {
return err
}
}
2019-03-04 06:29:06 +00:00
if nodeConfig.Docker || nodeConfig.ContainerRuntimeEndpoint != "" {
nodeConfig.AgentConfig.RuntimeSocket = nodeConfig.ContainerRuntimeEndpoint
nodeConfig.AgentConfig.CNIPlugin = true
2019-01-09 16:54:15 +00:00
} else {
if err := containerd.Run(ctx, nodeConfig); err != nil {
return err
}
}
if err := syssetup.Configure(); err != nil {
return err
}
if err := tunnel.Setup(nodeConfig); err != nil {
return err
}
if err := agent.Agent(&nodeConfig.AgentConfig); err != nil {
return err
}
if !nodeConfig.NoFlannel {
if err := flannel.Run(ctx, nodeConfig); err != nil {
return err
}
}
<-ctx.Done()
return ctx.Err()
}
func Run(ctx context.Context, cfg cmds.Agent) error {
2019-02-08 04:13:43 +00:00
if err := validate(); err != nil {
return err
}
2019-03-08 22:47:44 +00:00
if cfg.Rootless {
if err := rootless.Rootless(cfg.DataDir); err != nil {
return err
}
}
2019-01-09 16:54:15 +00:00
cfg.DataDir = filepath.Join(cfg.DataDir, "agent")
2019-01-22 21:14:58 +00:00
if cfg.ClusterSecret != "" {
cfg.Token = "K10node:" + cfg.ClusterSecret
}
2019-01-09 16:54:15 +00:00
for {
tmpFile, err := clientaccess.AgentAccessInfoToTempKubeConfig("", cfg.ServerURL, cfg.Token)
if err != nil {
logrus.Error(err)
select {
case <-ctx.Done():
return ctx.Err()
case <-time.After(2 * time.Second):
}
continue
}
os.Remove(tmpFile)
break
}
os.MkdirAll(cfg.DataDir, 0700)
return run(ctx, cfg)
}
2019-02-08 04:13:43 +00:00
func validate() error {
cgroups, err := ioutil.ReadFile("/proc/self/cgroup")
if err != nil {
return err
}
if !strings.Contains(string(cgroups), "cpuset") {
logrus.Warn("Failed to find cpuset cgroup, you may need to add \"cgroup_enable=cpuset\" to your linux cmdline (/boot/cmdline.txt on a Raspberry Pi)")
}
if !strings.Contains(string(cgroups), "memory") {
msg := "ailed to find memory cgroup, you may need to add \"cgroup_memory=1 cgroup_enable=memory\" to your linux cmdline (/boot/cmdline.txt on a Raspberry Pi)"
logrus.Error("F" + msg)
return errors.New("f" + msg)
}
return nil
}