Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Migrate to CRI container log format #224

Open
wants to merge 4 commits into
base: master
Choose a base branch
from

Conversation

nwneisen
Copy link
Collaborator

@nwneisen nwneisen commented Aug 18, 2023

This change makes cri-dockerd output logs in CRI format instead of json-file format. This fixes the #213 and bumps integration test's pinned SHA so they now include these tests.

cri-docker previously had no interaction with the container logs. It would only create a symlink from the dockerd output path to the location expected by kube. This change now tails the logs created by dockerd, formats them to CRI, and creates a separate file in the log location expected by kube.

@nwneisen nwneisen force-pushed the 213-migrate-to-cri-log-format branch 3 times, most recently from bf88c53 to 0480e9f Compare August 23, 2023 04:15
@nwneisen nwneisen mentioned this pull request Aug 25, 2023
@nwneisen nwneisen force-pushed the 213-migrate-to-cri-log-format branch 2 times, most recently from 4f22570 to 64ac84a Compare September 5, 2023 19:31
@nwneisen nwneisen requested a review from neersighted September 5, 2023 21:10
core/logs.go Outdated
return nil
}

type Log struct {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Instead of creating a fully new type, what do you think about extending the JSONLog type (since this is tied to that struct not moving anyway: https://github.com/moby/moby/blob/6ce5aa1cd5a46e02ffaa3fe0c794642b35601676/daemon/logger/jsonfilelog/jsonlog/jsonlog.go#L8) and keeping the CRIFormat() method on the new type?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(Also, I think this is a good opportunity to kill IsCRISupportedLogDriver in favor of moving the logic into this file, and perhaps supporting local as well with an interface to different conversion functions.)

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think that all sounds like a good plan. The only catch I see right now is waiting on those changes to get these tests running again.

What do you think about a comment and issue for a followup PR to replace this new type with JSONLog? I'm also not seeing it exported in the docker API anywhere so that will need to be added.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's not in the API types (since it's not visible over the API), but it's in a public (non-internal/) package and specifically, the type is in a minimal github.com/docker/docker/daemon/logger/jsonfilelog/jsonlog package that has no non-std dependencies inside the larger github.com/docker/docker/daemon/logger/jsonfilelog package for exactly this use-case.

I think it should be trivial to extend this PR, but I'm also fine with taking it earlier to unblock tests. In that case, I have a couple objections to the current design, but I'll need a bit more time to get them written out in a coherent way.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@neersighted Take a look and see what you think. This required me to bump the docker lib a major version but the actual code changes needed were trivial. I pushed them up to make sure CI doesn't find anything.

I'm still thinking this will need to be organized differently. I'd love to hear your thoughts on the current design. I'm not convinced myself that there isn't a better way and I'd love to hear the feedback.

@nwneisen nwneisen force-pushed the 213-migrate-to-cri-log-format branch 2 times, most recently from 858c294 to bb4f8f6 Compare September 11, 2023 17:28
@@ -376,7 +377,7 @@ func recoverFromCreationConflictIfNeeded(
client libdocker.DockerClientInterface,
createConfig dockertypes.ContainerCreateConfig,
err error,
) (*dockercontainer.ContainerCreateCreatedBody, error) {
) (*dockercontainer.CreateResponse, error) {
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changing to these CreateResponse methods were the changes needed due to updating the docker/docker lib

return nil
}

type log struct {
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm thinking that it might make sense to put this log structure and its methods in its own file in the libdocker directory. I see this as a "wrapper" around the docker interface and that seems like what that folder is for.. but it doesn't seem like much is in there yet..

@nwneisen nwneisen force-pushed the 213-migrate-to-cri-log-format branch from 6731833 to 97f36f2 Compare November 30, 2023 19:32
@nwneisen nwneisen mentioned this pull request Nov 30, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants