mirror of https://github.com/k3s-io/k3s
commit
63dfc168d7
|
@ -37,6 +37,9 @@ func readToken(path string) (string, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func Run(ctx *cli.Context) error {
|
func Run(ctx *cli.Context) error {
|
||||||
|
if err := cmds.InitLogging(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
if os.Getuid() != 0 {
|
if os.Getuid() != 0 {
|
||||||
return fmt.Errorf("agent must be ran as root")
|
return fmt.Errorf("agent must be ran as root")
|
||||||
}
|
}
|
||||||
|
|
|
@ -109,6 +109,10 @@ func NewAgentCommand(action func(ctx *cli.Context) error) cli.Command {
|
||||||
UsageText: appName + " agent [OPTIONS]",
|
UsageText: appName + " agent [OPTIONS]",
|
||||||
Action: action,
|
Action: action,
|
||||||
Flags: []cli.Flag{
|
Flags: []cli.Flag{
|
||||||
|
VLevel,
|
||||||
|
VModule,
|
||||||
|
LogFile,
|
||||||
|
AlsoLogToStderr,
|
||||||
cli.StringFlag{
|
cli.StringFlag{
|
||||||
Name: "token,t",
|
Name: "token,t",
|
||||||
Usage: "Token to use for authentication",
|
Usage: "Token to use for authentication",
|
||||||
|
|
|
@ -0,0 +1,100 @@
|
||||||
|
package cmds
|
||||||
|
|
||||||
|
import (
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"os"
|
||||||
|
"strconv"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/docker/docker/pkg/reexec"
|
||||||
|
"github.com/natefinch/lumberjack"
|
||||||
|
"github.com/urfave/cli"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Log struct {
|
||||||
|
VLevel int
|
||||||
|
VModule string
|
||||||
|
LogFile string
|
||||||
|
AlsoLogToStderr bool
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
LogConfig Log
|
||||||
|
|
||||||
|
VLevel = cli.IntFlag{
|
||||||
|
Name: "v",
|
||||||
|
Usage: "Number for the log level verbosity",
|
||||||
|
Destination: &LogConfig.VLevel,
|
||||||
|
}
|
||||||
|
VModule = cli.StringFlag{
|
||||||
|
Name: "vmodule",
|
||||||
|
Usage: "Comma-separated list of pattern=N settings for file-filtered logging",
|
||||||
|
Destination: &LogConfig.VModule,
|
||||||
|
}
|
||||||
|
LogFile = cli.StringFlag{
|
||||||
|
Name: "log,l",
|
||||||
|
Usage: "Log to file",
|
||||||
|
Destination: &LogConfig.LogFile,
|
||||||
|
}
|
||||||
|
AlsoLogToStderr = cli.BoolFlag{
|
||||||
|
Name: "alsologtostderr",
|
||||||
|
Usage: "Log to standard error as well as file (if set)",
|
||||||
|
Destination: &LogConfig.AlsoLogToStderr,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
func InitLogging() error {
|
||||||
|
if LogConfig.LogFile != "" && os.Getenv("_K3S_LOG_REEXEC_") == "" {
|
||||||
|
return runWithLogging()
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := checkUnixTimestamp(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
setupLogging()
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func checkUnixTimestamp() error {
|
||||||
|
timeNow := time.Now()
|
||||||
|
// check if time before 01/01/1980
|
||||||
|
if timeNow.Before(time.Unix(315532800, 0)) {
|
||||||
|
return fmt.Errorf("server time isn't set properly: %v", timeNow)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func runWithLogging() error {
|
||||||
|
var (
|
||||||
|
l io.Writer
|
||||||
|
)
|
||||||
|
l = &lumberjack.Logger{
|
||||||
|
Filename: LogConfig.LogFile,
|
||||||
|
MaxSize: 50,
|
||||||
|
MaxBackups: 3,
|
||||||
|
MaxAge: 28,
|
||||||
|
Compress: true,
|
||||||
|
}
|
||||||
|
if LogConfig.AlsoLogToStderr {
|
||||||
|
l = io.MultiWriter(l, os.Stderr)
|
||||||
|
}
|
||||||
|
|
||||||
|
args := append([]string{"k3s"}, os.Args[1:]...)
|
||||||
|
cmd := reexec.Command(args...)
|
||||||
|
cmd.Env = os.Environ()
|
||||||
|
cmd.Env = append(cmd.Env, "_K3S_LOG_REEXEC_=true")
|
||||||
|
cmd.Stderr = l
|
||||||
|
cmd.Stdout = l
|
||||||
|
cmd.Stdin = os.Stdin
|
||||||
|
return cmd.Run()
|
||||||
|
}
|
||||||
|
|
||||||
|
func setupLogging() {
|
||||||
|
flag.Set("v", strconv.Itoa(LogConfig.VLevel))
|
||||||
|
flag.Set("vmodule", LogConfig.VModule)
|
||||||
|
flag.Set("alsologtostderr", strconv.FormatBool(debug))
|
||||||
|
flag.Set("logtostderr", strconv.FormatBool(!debug))
|
||||||
|
}
|
|
@ -5,7 +5,6 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
type Server struct {
|
type Server struct {
|
||||||
Log string
|
|
||||||
ClusterCIDR string
|
ClusterCIDR string
|
||||||
ClusterSecret string
|
ClusterSecret string
|
||||||
ServiceCIDR string
|
ServiceCIDR string
|
||||||
|
@ -43,6 +42,10 @@ func NewServerCommand(action func(*cli.Context) error) cli.Command {
|
||||||
UsageText: appName + " server [OPTIONS]",
|
UsageText: appName + " server [OPTIONS]",
|
||||||
Action: action,
|
Action: action,
|
||||||
Flags: []cli.Flag{
|
Flags: []cli.Flag{
|
||||||
|
VLevel,
|
||||||
|
VModule,
|
||||||
|
LogFile,
|
||||||
|
AlsoLogToStderr,
|
||||||
cli.StringFlag{
|
cli.StringFlag{
|
||||||
Name: "bind-address",
|
Name: "bind-address",
|
||||||
Usage: "k3s bind address (default: localhost)",
|
Usage: "k3s bind address (default: localhost)",
|
||||||
|
@ -70,11 +73,6 @@ func NewServerCommand(action func(*cli.Context) error) cli.Command {
|
||||||
Usage: "Do not run a local agent and register a local kubelet",
|
Usage: "Do not run a local agent and register a local kubelet",
|
||||||
Destination: &ServerConfig.DisableAgent,
|
Destination: &ServerConfig.DisableAgent,
|
||||||
},
|
},
|
||||||
cli.StringFlag{
|
|
||||||
Name: "log,l",
|
|
||||||
Usage: "Log to file",
|
|
||||||
Destination: &ServerConfig.Log,
|
|
||||||
},
|
|
||||||
cli.StringFlag{
|
cli.StringFlag{
|
||||||
Name: "cluster-cidr",
|
Name: "cluster-cidr",
|
||||||
Usage: "Network CIDR to use for pod IPs",
|
Usage: "Network CIDR to use for pod IPs",
|
||||||
|
|
|
@ -2,19 +2,15 @@ package server
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"flag"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
net2 "net"
|
net2 "net"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/rancher/k3s/pkg/netutil"
|
"github.com/rancher/k3s/pkg/netutil"
|
||||||
|
|
||||||
systemd "github.com/coreos/go-systemd/daemon"
|
systemd "github.com/coreos/go-systemd/daemon"
|
||||||
"github.com/docker/docker/pkg/reexec"
|
|
||||||
"github.com/natefinch/lumberjack"
|
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"github.com/rancher/k3s/pkg/agent"
|
"github.com/rancher/k3s/pkg/agent"
|
||||||
"github.com/rancher/k3s/pkg/cli/cmds"
|
"github.com/rancher/k3s/pkg/cli/cmds"
|
||||||
|
@ -33,34 +29,10 @@ import (
|
||||||
_ "github.com/mattn/go-sqlite3" // ensure we have sqlite
|
_ "github.com/mattn/go-sqlite3" // ensure we have sqlite
|
||||||
)
|
)
|
||||||
|
|
||||||
func setupLogging(app *cli.Context) {
|
|
||||||
if !app.GlobalBool("debug") {
|
|
||||||
flag.Set("stderrthreshold", "WARNING")
|
|
||||||
flag.Set("alsologtostderr", "false")
|
|
||||||
flag.Set("logtostderr", "false")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func runWithLogging(app *cli.Context, cfg *cmds.Server) error {
|
|
||||||
l := &lumberjack.Logger{
|
|
||||||
Filename: cfg.Log,
|
|
||||||
MaxSize: 50,
|
|
||||||
MaxBackups: 3,
|
|
||||||
MaxAge: 28,
|
|
||||||
Compress: true,
|
|
||||||
}
|
|
||||||
|
|
||||||
args := append([]string{"k3s"}, os.Args[1:]...)
|
|
||||||
cmd := reexec.Command(args...)
|
|
||||||
cmd.Env = os.Environ()
|
|
||||||
cmd.Env = append(cmd.Env, "_RIO_REEXEC_=true")
|
|
||||||
cmd.Stderr = l
|
|
||||||
cmd.Stdout = l
|
|
||||||
cmd.Stdin = os.Stdin
|
|
||||||
return cmd.Run()
|
|
||||||
}
|
|
||||||
|
|
||||||
func Run(app *cli.Context) error {
|
func Run(app *cli.Context) error {
|
||||||
|
if err := cmds.InitLogging(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
return run(app, &cmds.ServerConfig)
|
return run(app, &cmds.ServerConfig)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,16 +41,6 @@ func run(app *cli.Context, cfg *cmds.Server) error {
|
||||||
err error
|
err error
|
||||||
)
|
)
|
||||||
|
|
||||||
if cfg.Log != "" && os.Getenv("_RIO_REEXEC_") == "" {
|
|
||||||
return runWithLogging(app, cfg)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := checkUnixTimestamp(); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
setupLogging(app)
|
|
||||||
|
|
||||||
if !cfg.DisableAgent && os.Getuid() != 0 && !cfg.Rootless {
|
if !cfg.DisableAgent && os.Getuid() != 0 && !cfg.Rootless {
|
||||||
return fmt.Errorf("must run as root unless --disable-agent is specified")
|
return fmt.Errorf("must run as root unless --disable-agent is specified")
|
||||||
}
|
}
|
||||||
|
@ -227,12 +189,3 @@ func knownIPs(ips []string) []string {
|
||||||
}
|
}
|
||||||
return ips
|
return ips
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkUnixTimestamp() error {
|
|
||||||
timeNow := time.Now()
|
|
||||||
// check if time before 01/01/1980
|
|
||||||
if timeNow.Before(time.Unix(315532800, 0)) {
|
|
||||||
return fmt.Errorf("server time isn't set properly: %v", timeNow)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in New Issue