Merge pull request #25851 from euank/fixJournaldUsage

Automatic merge from submit-queue

rkt: Get logs via syslog identifier

This change works around https://github.com/coreos/rkt/issues/2630
Without this change, logs cannot reliably be collected for containers
with short lifetimes.

With this change, logs cannot be collected on rkt versions v1.6.0 and
before.

I'd like to also bump the required rkt version, but I don't want to do that until there's a released version that can be pointed to (so the next rkt release).

I haven't added tests (which were missing) because this code will be removed if/when logs are retrieved via the API. I have run E2E tests with this merged in and verified the tests which previously failed no longer fail.

cc @yifan-gu
This commit is contained in:
k8s-merge-robot 2016-06-02 15:53:39 -07:00
commit 4c316979c8
4 changed files with 11 additions and 44 deletions

View File

@ -118,7 +118,9 @@ func (r *Runtime) GetContainerLogs(pod *api.Pod, containerID kubecontainer.Conta
return err
}
cmd := exec.Command("journalctl", "-m", fmt.Sprintf("_MACHINE_ID=%s", strings.Replace(id.uuid, "-", "", -1)), "-u", id.appName, "-a")
// Note: this only works for rkt versions after 1.6.0
// See https://github.com/coreos/rkt/issues/2630
cmd := exec.Command("journalctl", "-m", fmt.Sprintf("_MACHINE_ID=%s", strings.Replace(id.uuid, "-", "", -1)), "-t", id.appName, "-a")
// Get the json structured logs.
cmd.Args = append(cmd.Args, "-o", "json")

View File

@ -66,11 +66,11 @@ const (
RktType = "rkt"
DefaultRktAPIServiceEndpoint = "localhost:15441"
minimumAppcVersion = "0.8.1"
minimumRktBinVersion = "1.6.0"
recommendedRktBinVersion = "1.6.0"
minimumRktApiVersion = "1.0.0-alpha"
minimumSystemdVersion = "219"
minimumRktBinVersion = "1.7.0"
recommendedRktBinVersion = "1.7.0"
minimumRktApiVersion = "1.0.0-alpha"
minimumSystemdVersion = "219"
systemdServiceDir = "/run/systemd/system"
rktDataDir = "/var/lib/rkt"
@ -1579,7 +1579,7 @@ func (r *Runtime) APIVersion() (kubecontainer.Version, error) {
// Status returns error if rkt is unhealthy, nil otherwise.
func (r *Runtime) Status() error {
return r.checkVersion(minimumRktBinVersion, recommendedRktBinVersion, minimumAppcVersion, minimumRktApiVersion, minimumSystemdVersion)
return r.checkVersion(minimumRktBinVersion, recommendedRktBinVersion, minimumRktApiVersion, minimumSystemdVersion)
}
// SyncPod syncs the running pod to match the specified desired pod.

View File

@ -172,7 +172,6 @@ func TestCheckVersion(t *testing.T) {
tests := []struct {
minimumRktBinVersion string
recommendedRktBinVersion string
minimumAppcVersion string
minimumRktApiVersion string
minimumSystemdVersion string
err error
@ -183,7 +182,6 @@ func TestCheckVersion(t *testing.T) {
{
"1.2.3",
"1.2.3",
"1.2.4",
"1.2.5",
"99",
nil,
@ -194,7 +192,6 @@ func TestCheckVersion(t *testing.T) {
{
"1.2.3+git",
"1.2.3+git",
"1.2.4+git",
"1.2.6-alpha",
"100",
nil,
@ -203,7 +200,6 @@ func TestCheckVersion(t *testing.T) {
},
// Requires greater binary version.
{
"1.2.4",
"1.2.4",
"1.2.4",
"1.2.6-alpha",
@ -212,22 +208,10 @@ func TestCheckVersion(t *testing.T) {
true,
true,
},
// Requires greater Appc version.
{
"1.2.3",
"1.2.3",
"1.2.5",
"1.2.6-alpha",
"100",
fmt.Errorf("rkt: appc version is too old(%v), requires at least %v", fr.info.AppcVersion, "1.2.5"),
true,
true,
},
// Requires greater API version.
{
"1.2.3",
"1.2.3",
"1.2.4",
"1.2.6",
"100",
fmt.Errorf("rkt: API version is too old(%v), requires at least %v", fr.info.ApiVersion, "1.2.6"),
@ -238,7 +222,6 @@ func TestCheckVersion(t *testing.T) {
{
"1.2.3",
"1.2.3",
"1.2.4",
"1.2.7",
"100",
fmt.Errorf("rkt: API version is too old(%v), requires at least %v", fr.info.ApiVersion, "1.2.7"),
@ -249,7 +232,6 @@ func TestCheckVersion(t *testing.T) {
{
"1.2.3",
"1.2.3",
"1.2.4",
"1.2.7",
"101",
fmt.Errorf("rkt: systemd version(%v) is too old, requires at least %v", fs.version, "101"),
@ -260,7 +242,7 @@ func TestCheckVersion(t *testing.T) {
for i, tt := range tests {
testCaseHint := fmt.Sprintf("test case #%d", i)
err := r.checkVersion(tt.minimumRktBinVersion, tt.recommendedRktBinVersion, tt.minimumAppcVersion, tt.minimumRktApiVersion, tt.minimumSystemdVersion)
err := r.checkVersion(tt.minimumRktBinVersion, tt.recommendedRktBinVersion, tt.minimumRktApiVersion, tt.minimumSystemdVersion)
assert.Equal(t, tt.err, err, testCaseHint)
if tt.calledGetInfo {
@ -271,7 +253,6 @@ func TestCheckVersion(t *testing.T) {
}
if err == nil {
assert.Equal(t, fr.info.RktVersion, r.versions.binVersion.String(), testCaseHint)
assert.Equal(t, fr.info.AppcVersion, r.versions.appcVersion.String(), testCaseHint)
assert.Equal(t, fr.info.ApiVersion, r.versions.apiVersion.String(), testCaseHint)
}
fr.CleanCalls()

View File

@ -30,7 +30,6 @@ type versions struct {
sync.RWMutex
binVersion rktVersion
apiVersion rktVersion
appcVersion rktVersion
systemdVersion systemdVersion
}
@ -87,12 +86,6 @@ func (r *Runtime) getVersions() error {
return err
}
// Get Appc version.
r.versions.appcVersion, err = newRktVersion(resp.Info.AppcVersion)
if err != nil {
return err
}
// Get rkt API version.
r.versions.apiVersion, err = newRktVersion(resp.Info.ApiVersion)
if err != nil {
@ -103,7 +96,7 @@ func (r *Runtime) getVersions() error {
// checkVersion tests whether the rkt/systemd/rkt-api-service that meet the version requirement.
// If all version requirements are met, it returns nil.
func (r *Runtime) checkVersion(minimumRktBinVersion, recommendedRktBinVersion, minimumAppcVersion, minimumRktApiVersion, minimumSystemdVersion string) error {
func (r *Runtime) checkVersion(minimumRktBinVersion, recommendedRktBinVersion, minimumRktApiVersion, minimumSystemdVersion string) error {
if err := r.getVersions(); err != nil {
return err
}
@ -137,15 +130,6 @@ func (r *Runtime) checkVersion(minimumRktBinVersion, recommendedRktBinVersion, m
glog.Warningf("rkt: current binary version %q is not recommended (recommended version %q)", r.versions.binVersion, recommendedRktBinVersion)
}
// Check Appc version.
result, err = r.versions.appcVersion.Compare(minimumAppcVersion)
if err != nil {
return err
}
if result < 0 {
return fmt.Errorf("rkt: appc version is too old(%v), requires at least %v", r.versions.appcVersion, minimumAppcVersion)
}
// Check rkt API version.
result, err = r.versions.apiVersion.Compare(minimumRktApiVersion)
if err != nil {