move initsystem to kubeadm

Signed-off-by: Yassine TIJANI <ytijani@vmware.com>
This commit is contained in:
Yassine TIJANI 2019-06-14 16:06:01 +02:00
parent e91556c62f
commit c3904bbce6
14 changed files with 32 additions and 10 deletions

View File

@ -78,7 +78,6 @@
"k8s.io/kubernetes/pkg/util/conntrack", "k8s.io/kubernetes/pkg/util/conntrack",
"k8s.io/kubernetes/pkg/util/dbus", "k8s.io/kubernetes/pkg/util/dbus",
"k8s.io/kubernetes/pkg/util/hash", "k8s.io/kubernetes/pkg/util/hash",
"k8s.io/kubernetes/pkg/util/initsystem",
"k8s.io/kubernetes/pkg/util/ipset", "k8s.io/kubernetes/pkg/util/ipset",
"k8s.io/kubernetes/pkg/util/iptables", "k8s.io/kubernetes/pkg/util/iptables",
"k8s.io/kubernetes/pkg/util/ipvs", "k8s.io/kubernetes/pkg/util/ipvs",

View File

@ -20,9 +20,9 @@ go_library(
"//cmd/kubeadm/app/phases/etcd:go_default_library", "//cmd/kubeadm/app/phases/etcd:go_default_library",
"//cmd/kubeadm/app/phases/uploadconfig:go_default_library", "//cmd/kubeadm/app/phases/uploadconfig:go_default_library",
"//cmd/kubeadm/app/preflight:go_default_library", "//cmd/kubeadm/app/preflight:go_default_library",
"//cmd/kubeadm/app/util/initsystem:go_default_library",
"//cmd/kubeadm/app/util/runtime:go_default_library", "//cmd/kubeadm/app/util/runtime:go_default_library",
"//cmd/kubeadm/app/util/staticpod:go_default_library", "//cmd/kubeadm/app/util/staticpod:go_default_library",
"//pkg/util/initsystem:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
"//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library",
"//vendor/k8s.io/klog:go_default_library", "//vendor/k8s.io/klog:go_default_library",

View File

@ -28,8 +28,8 @@ import (
"k8s.io/kubernetes/cmd/kubeadm/app/cmd/options" "k8s.io/kubernetes/cmd/kubeadm/app/cmd/options"
"k8s.io/kubernetes/cmd/kubeadm/app/cmd/phases/workflow" "k8s.io/kubernetes/cmd/kubeadm/app/cmd/phases/workflow"
kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants" kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants"
"k8s.io/kubernetes/cmd/kubeadm/app/util/initsystem"
utilruntime "k8s.io/kubernetes/cmd/kubeadm/app/util/runtime" utilruntime "k8s.io/kubernetes/cmd/kubeadm/app/util/runtime"
"k8s.io/kubernetes/pkg/util/initsystem"
utilsexec "k8s.io/utils/exec" utilsexec "k8s.io/utils/exec"
) )

View File

@ -17,8 +17,8 @@ go_library(
"//cmd/kubeadm/app/images:go_default_library", "//cmd/kubeadm/app/images:go_default_library",
"//cmd/kubeadm/app/util:go_default_library", "//cmd/kubeadm/app/util:go_default_library",
"//cmd/kubeadm/app/util/apiclient:go_default_library", "//cmd/kubeadm/app/util/apiclient:go_default_library",
"//cmd/kubeadm/app/util/initsystem:go_default_library",
"//pkg/kubelet/apis/config:go_default_library", "//pkg/kubelet/apis/config:go_default_library",
"//pkg/util/initsystem:go_default_library",
"//pkg/util/node:go_default_library", "//pkg/util/node:go_default_library",
"//pkg/util/procfs:go_default_library", "//pkg/util/procfs:go_default_library",
"//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library",

View File

@ -19,7 +19,7 @@ package kubelet
import ( import (
"fmt" "fmt"
"k8s.io/kubernetes/pkg/util/initsystem" "k8s.io/kubernetes/cmd/kubeadm/app/util/initsystem"
) )
// TryStartKubelet attempts to bring up kubelet service // TryStartKubelet attempts to bring up kubelet service

View File

@ -21,11 +21,11 @@ go_library(
"//cmd/kubeadm/app/apis/kubeadm:go_default_library", "//cmd/kubeadm/app/apis/kubeadm:go_default_library",
"//cmd/kubeadm/app/constants:go_default_library", "//cmd/kubeadm/app/constants:go_default_library",
"//cmd/kubeadm/app/images:go_default_library", "//cmd/kubeadm/app/images:go_default_library",
"//cmd/kubeadm/app/util/initsystem:go_default_library",
"//cmd/kubeadm/app/util/runtime:go_default_library", "//cmd/kubeadm/app/util/runtime:go_default_library",
"//cmd/kubeadm/app/util/system:go_default_library", "//cmd/kubeadm/app/util/system:go_default_library",
"//pkg/master/ports:go_default_library", "//pkg/master/ports:go_default_library",
"//pkg/registry/core/service/ipallocator:go_default_library", "//pkg/registry/core/service/ipallocator:go_default_library",
"//pkg/util/initsystem:go_default_library",
"//pkg/util/ipvs:go_default_library", "//pkg/util/ipvs:go_default_library",
"//pkg/version:go_default_library", "//pkg/version:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/net:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/net:go_default_library",

View File

@ -44,11 +44,11 @@ import (
kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm"
kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants" kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants"
"k8s.io/kubernetes/cmd/kubeadm/app/images" "k8s.io/kubernetes/cmd/kubeadm/app/images"
"k8s.io/kubernetes/cmd/kubeadm/app/util/initsystem"
utilruntime "k8s.io/kubernetes/cmd/kubeadm/app/util/runtime" utilruntime "k8s.io/kubernetes/cmd/kubeadm/app/util/runtime"
"k8s.io/kubernetes/cmd/kubeadm/app/util/system" "k8s.io/kubernetes/cmd/kubeadm/app/util/system"
"k8s.io/kubernetes/pkg/master/ports" "k8s.io/kubernetes/pkg/master/ports"
"k8s.io/kubernetes/pkg/registry/core/service/ipallocator" "k8s.io/kubernetes/pkg/registry/core/service/ipallocator"
"k8s.io/kubernetes/pkg/util/initsystem"
ipvsutil "k8s.io/kubernetes/pkg/util/ipvs" ipvsutil "k8s.io/kubernetes/pkg/util/ipvs"
kubeadmversion "k8s.io/kubernetes/pkg/version" kubeadmversion "k8s.io/kubernetes/pkg/version"
utilsexec "k8s.io/utils/exec" utilsexec "k8s.io/utils/exec"

View File

@ -84,6 +84,7 @@ filegroup(
"//cmd/kubeadm/app/util/crypto:all-srcs", "//cmd/kubeadm/app/util/crypto:all-srcs",
"//cmd/kubeadm/app/util/dryrun:all-srcs", "//cmd/kubeadm/app/util/dryrun:all-srcs",
"//cmd/kubeadm/app/util/etcd:all-srcs", "//cmd/kubeadm/app/util/etcd:all-srcs",
"//cmd/kubeadm/app/util/initsystem:all-srcs",
"//cmd/kubeadm/app/util/kubeconfig:all-srcs", "//cmd/kubeadm/app/util/kubeconfig:all-srcs",
"//cmd/kubeadm/app/util/pkiutil:all-srcs", "//cmd/kubeadm/app/util/pkiutil:all-srcs",
"//cmd/kubeadm/app/util/pubkeypin:all-srcs", "//cmd/kubeadm/app/util/pubkeypin:all-srcs",

View File

@ -12,7 +12,7 @@ go_library(
"initsystem_unix.go", "initsystem_unix.go",
"initsystem_windows.go", "initsystem_windows.go",
], ],
importpath = "k8s.io/kubernetes/pkg/util/initsystem", importpath = "k8s.io/kubernetes/cmd/kubeadm/app/util/initsystem",
deps = select({ deps = select({
"@io_bazel_rules_go//go/platform:windows": [ "@io_bazel_rules_go//go/platform:windows": [
"//vendor/golang.org/x/sys/windows/svc:go_default_library", "//vendor/golang.org/x/sys/windows/svc:go_default_library",

View File

@ -16,6 +16,7 @@ limitations under the License.
package initsystem package initsystem
// InitSystem is the interface that describe behaviors of an init system
type InitSystem interface { type InitSystem interface {
// return a string describing how to enable a service // return a string describing how to enable a service
EnableCommand(service string) string EnableCommand(service string) string

View File

@ -24,23 +24,28 @@ import (
"strings" "strings"
) )
// OpenRCInitSystem defines openrc
type OpenRCInitSystem struct{} type OpenRCInitSystem struct{}
// ServiceStart tries to start a specific service
func (openrc OpenRCInitSystem) ServiceStart(service string) error { func (openrc OpenRCInitSystem) ServiceStart(service string) error {
args := []string{service, "start"} args := []string{service, "start"}
return exec.Command("rc-service", args...).Run() return exec.Command("rc-service", args...).Run()
} }
// ServiceStop tries to stop a specific service
func (openrc OpenRCInitSystem) ServiceStop(service string) error { func (openrc OpenRCInitSystem) ServiceStop(service string) error {
args := []string{service, "stop"} args := []string{service, "stop"}
return exec.Command("rc-service", args...).Run() return exec.Command("rc-service", args...).Run()
} }
// ServiceRestart tries to reload the environment and restart the specific service
func (openrc OpenRCInitSystem) ServiceRestart(service string) error { func (openrc OpenRCInitSystem) ServiceRestart(service string) error {
args := []string{service, "restart"} args := []string{service, "restart"}
return exec.Command("rc-service", args...).Run() return exec.Command("rc-service", args...).Run()
} }
// ServiceExists ensures the service is defined for this init system.
// openrc writes to stderr if a service is not found or not enabled // openrc writes to stderr if a service is not found or not enabled
// this is in contrast to systemd which only writes to stdout. // this is in contrast to systemd which only writes to stdout.
// Hence, we use the Combinedoutput, and ignore the error. // Hence, we use the Combinedoutput, and ignore the error.
@ -53,6 +58,7 @@ func (openrc OpenRCInitSystem) ServiceExists(service string) bool {
return true return true
} }
// ServiceIsEnabled ensures the service is enabled to start on each boot.
func (openrc OpenRCInitSystem) ServiceIsEnabled(service string) bool { func (openrc OpenRCInitSystem) ServiceIsEnabled(service string) bool {
args := []string{"show", "default"} args := []string{"show", "default"}
outBytes, _ := exec.Command("rc-update", args...).Output() outBytes, _ := exec.Command("rc-update", args...).Output()
@ -62,6 +68,7 @@ func (openrc OpenRCInitSystem) ServiceIsEnabled(service string) bool {
return false return false
} }
// ServiceIsActive ensures the service is running, or attempting to run. (crash looping in the case of kubelet)
func (openrc OpenRCInitSystem) ServiceIsActive(service string) bool { func (openrc OpenRCInitSystem) ServiceIsActive(service string) bool {
args := []string{service, "status"} args := []string{service, "status"}
outBytes, _ := exec.Command("rc-service", args...).Output() outBytes, _ := exec.Command("rc-service", args...).Output()
@ -71,16 +78,20 @@ func (openrc OpenRCInitSystem) ServiceIsActive(service string) bool {
return true return true
} }
// EnableCommand return a string describing how to enable a service
func (openrc OpenRCInitSystem) EnableCommand(service string) string { func (openrc OpenRCInitSystem) EnableCommand(service string) string {
return fmt.Sprintf("rc-update add %s default", service) return fmt.Sprintf("rc-update add %s default", service)
} }
// SystemdInitSystem defines systemd
type SystemdInitSystem struct{} type SystemdInitSystem struct{}
// EnableCommand return a string describing how to enable a service
func (sysd SystemdInitSystem) EnableCommand(service string) string { func (sysd SystemdInitSystem) EnableCommand(service string) string {
return fmt.Sprintf("systemctl enable %s.service", service) return fmt.Sprintf("systemctl enable %s.service", service)
} }
// reloadSystemd reloeads the systemd daemon
func (sysd SystemdInitSystem) reloadSystemd() error { func (sysd SystemdInitSystem) reloadSystemd() error {
if err := exec.Command("systemctl", "daemon-reload").Run(); err != nil { if err := exec.Command("systemctl", "daemon-reload").Run(); err != nil {
return fmt.Errorf("failed to reload systemd: %v", err) return fmt.Errorf("failed to reload systemd: %v", err)
@ -88,6 +99,7 @@ func (sysd SystemdInitSystem) reloadSystemd() error {
return nil return nil
} }
// ServiceStart tries to start a specific service
func (sysd SystemdInitSystem) ServiceStart(service string) error { func (sysd SystemdInitSystem) ServiceStart(service string) error {
// Before we try to start any service, make sure that systemd is ready // Before we try to start any service, make sure that systemd is ready
if err := sysd.reloadSystemd(); err != nil { if err := sysd.reloadSystemd(); err != nil {
@ -97,6 +109,7 @@ func (sysd SystemdInitSystem) ServiceStart(service string) error {
return exec.Command("systemctl", args...).Run() return exec.Command("systemctl", args...).Run()
} }
// ServiceRestart tries to reload the environment and restart the specific service
func (sysd SystemdInitSystem) ServiceRestart(service string) error { func (sysd SystemdInitSystem) ServiceRestart(service string) error {
// Before we try to restart any service, make sure that systemd is ready // Before we try to restart any service, make sure that systemd is ready
if err := sysd.reloadSystemd(); err != nil { if err := sysd.reloadSystemd(); err != nil {
@ -106,11 +119,13 @@ func (sysd SystemdInitSystem) ServiceRestart(service string) error {
return exec.Command("systemctl", args...).Run() return exec.Command("systemctl", args...).Run()
} }
// ServiceStop tries to stop a specific service
func (sysd SystemdInitSystem) ServiceStop(service string) error { func (sysd SystemdInitSystem) ServiceStop(service string) error {
args := []string{"stop", service} args := []string{"stop", service}
return exec.Command("systemctl", args...).Run() return exec.Command("systemctl", args...).Run()
} }
// ServiceExists ensures the service is defined for this init system.
func (sysd SystemdInitSystem) ServiceExists(service string) bool { func (sysd SystemdInitSystem) ServiceExists(service string) bool {
args := []string{"status", service} args := []string{"status", service}
outBytes, _ := exec.Command("systemctl", args...).Output() outBytes, _ := exec.Command("systemctl", args...).Output()
@ -121,6 +136,7 @@ func (sysd SystemdInitSystem) ServiceExists(service string) bool {
return true return true
} }
// ServiceIsEnabled ensures the service is enabled to start on each boot.
func (sysd SystemdInitSystem) ServiceIsEnabled(service string) bool { func (sysd SystemdInitSystem) ServiceIsEnabled(service string) bool {
args := []string{"is-enabled", service} args := []string{"is-enabled", service}
err := exec.Command("systemctl", args...).Run() err := exec.Command("systemctl", args...).Run()

View File

@ -29,10 +29,12 @@ import (
// WindowsInitSystem is the windows implementation of InitSystem // WindowsInitSystem is the windows implementation of InitSystem
type WindowsInitSystem struct{} type WindowsInitSystem struct{}
// EnableCommand return a string describing how to enable a service
func (sysd WindowsInitSystem) EnableCommand(service string) string { func (sysd WindowsInitSystem) EnableCommand(service string) string {
return fmt.Sprintf("Set-Service '%s' -StartupType Automatic", service) return fmt.Sprintf("Set-Service '%s' -StartupType Automatic", service)
} }
// ServiceStart tries to start a specific service
// Following Windows documentation: https://docs.microsoft.com/en-us/windows/desktop/Services/starting-a-service // Following Windows documentation: https://docs.microsoft.com/en-us/windows/desktop/Services/starting-a-service
func (sysd WindowsInitSystem) ServiceStart(service string) error { func (sysd WindowsInitSystem) ServiceStart(service string) error {
m, err := mgr.Connect() m, err := mgr.Connect()
@ -94,6 +96,7 @@ func (sysd WindowsInitSystem) ServiceStart(service string) error {
return nil return nil
} }
// ServiceRestart tries to reload the environment and restart the specific service
func (sysd WindowsInitSystem) ServiceRestart(service string) error { func (sysd WindowsInitSystem) ServiceRestart(service string) error {
if err := sysd.ServiceStop(service); err != nil { if err := sysd.ServiceStop(service); err != nil {
return fmt.Errorf("couldn't stop service %s: %v", service, err) return fmt.Errorf("couldn't stop service %s: %v", service, err)
@ -105,6 +108,7 @@ func (sysd WindowsInitSystem) ServiceRestart(service string) error {
return nil return nil
} }
// ServiceStop tries to stop a specific service
// Following Windows documentation: https://docs.microsoft.com/en-us/windows/desktop/Services/stopping-a-service // Following Windows documentation: https://docs.microsoft.com/en-us/windows/desktop/Services/stopping-a-service
func (sysd WindowsInitSystem) ServiceStop(service string) error { func (sysd WindowsInitSystem) ServiceStop(service string) error {
m, err := mgr.Connect() m, err := mgr.Connect()
@ -170,6 +174,7 @@ func (sysd WindowsInitSystem) ServiceStop(service string) error {
return nil return nil
} }
// ServiceExists ensures the service is defined for this init system.
func (sysd WindowsInitSystem) ServiceExists(service string) bool { func (sysd WindowsInitSystem) ServiceExists(service string) bool {
m, err := mgr.Connect() m, err := mgr.Connect()
if err != nil { if err != nil {
@ -185,6 +190,7 @@ func (sysd WindowsInitSystem) ServiceExists(service string) bool {
return true return true
} }
// ServiceIsEnabled ensures the service is enabled to start on each boot.
func (sysd WindowsInitSystem) ServiceIsEnabled(service string) bool { func (sysd WindowsInitSystem) ServiceIsEnabled(service string) bool {
m, err := mgr.Connect() m, err := mgr.Connect()
if err != nil { if err != nil {
@ -206,6 +212,7 @@ func (sysd WindowsInitSystem) ServiceIsEnabled(service string) bool {
return c.StartType != mgr.StartDisabled return c.StartType != mgr.StartDisabled
} }
// ServiceIsActive ensures the service is running, or attempting to run. (crash looping in the case of kubelet)
func (sysd WindowsInitSystem) ServiceIsActive(service string) bool { func (sysd WindowsInitSystem) ServiceIsActive(service string) bool {
m, err := mgr.Connect() m, err := mgr.Connect()
if err != nil { if err != nil {

View File

@ -284,7 +284,6 @@ pkg/util/config
pkg/util/ebtables pkg/util/ebtables
pkg/util/env pkg/util/env
pkg/util/goroutinemap/exponentialbackoff pkg/util/goroutinemap/exponentialbackoff
pkg/util/initsystem
pkg/util/iptables pkg/util/iptables
pkg/util/iptables/testing pkg/util/iptables/testing
pkg/util/labels pkg/util/labels

View File

@ -25,7 +25,6 @@ filegroup(
"//pkg/util/flock:all-srcs", "//pkg/util/flock:all-srcs",
"//pkg/util/goroutinemap:all-srcs", "//pkg/util/goroutinemap:all-srcs",
"//pkg/util/hash:all-srcs", "//pkg/util/hash:all-srcs",
"//pkg/util/initsystem:all-srcs",
"//pkg/util/interrupt:all-srcs", "//pkg/util/interrupt:all-srcs",
"//pkg/util/ipconfig:all-srcs", "//pkg/util/ipconfig:all-srcs",
"//pkg/util/ipset:all-srcs", "//pkg/util/ipset:all-srcs",