diff --git a/cri/apis/v1alpha2/api.proto b/cri/apis/v1alpha2/api.proto index df9005f6ad..a4ec2505b0 100644 --- a/cri/apis/v1alpha2/api.proto +++ b/cri/apis/v1alpha2/api.proto @@ -111,6 +111,12 @@ service ImageService { rpc ImageFsInfo(ImageFsInfoRequest) returns (ImageFsInfoResponse) {} } +// VolumeService defines the public APIs for managing volumes. +service VolumeService { + // RemoveVolume removes the volume. + rpc RemoveVolume(RemoveVolumeRequest) returns (RemoveVolumeResponse) {} +} + message VersionRequest { // Version of the kubelet runtime API. string version = 1; @@ -181,6 +187,8 @@ message Mount { bool selinux_relabel = 4; // Requested propagation mode. MountPropagation propagation = 5; + // Name of volume + string name = 100; } // A NamespaceMode describes the intended namespace configuration for each @@ -1282,4 +1290,12 @@ message ReopenContainerLogRequest { } message ReopenContainerLogResponse{ -} \ No newline at end of file +} + +message RemoveVolumeRequest { + // Name of the volume to remove + string volume_name = 1; +} + +message RemoveVolumeResponse { +} diff --git a/cri/criservice.go b/cri/criservice.go index 63bba8298e..ed9531c394 100644 --- a/cri/criservice.go +++ b/cri/criservice.go @@ -14,7 +14,7 @@ import ( ) // RunCriService start cri service if pouchd is specified with --enable-cri. -func RunCriService(daemonconfig *config.Config, containerMgr mgr.ContainerMgr, imageMgr mgr.ImageMgr, stopCh chan error, readyCh chan bool) { +func RunCriService(daemonconfig *config.Config, containerMgr mgr.ContainerMgr, imageMgr mgr.ImageMgr, volumeMgr mgr.VolumeMgr, stopCh chan error, readyCh chan bool) { var err error defer func() { @@ -30,7 +30,7 @@ func RunCriService(daemonconfig *config.Config, containerMgr mgr.ContainerMgr, i case "v1alpha1": err = runv1alpha1(daemonconfig, containerMgr, imageMgr, readyCh) case "v1alpha2": - err = runv1alpha2(daemonconfig, containerMgr, imageMgr, readyCh) + err = runv1alpha2(daemonconfig, containerMgr, imageMgr, volumeMgr, readyCh) default: readyCh <- false err = fmt.Errorf("invalid CRI version,failed to start CRI service") @@ -79,9 +79,9 @@ func runv1alpha1(daemonconfig *config.Config, containerMgr mgr.ContainerMgr, ima } // Start CRI service with CRI version: v1alpha2 -func runv1alpha2(daemonconfig *config.Config, containerMgr mgr.ContainerMgr, imageMgr mgr.ImageMgr, readyCh chan bool) error { +func runv1alpha2(daemonconfig *config.Config, containerMgr mgr.ContainerMgr, imageMgr mgr.ImageMgr, volumeMgr mgr.VolumeMgr, readyCh chan bool) error { logrus.Infof("Start CRI service with CRI version: v1alpha2") - criMgr, err := criv1alpha2.NewCriManager(daemonconfig, containerMgr, imageMgr) + criMgr, err := criv1alpha2.NewCriManager(daemonconfig, containerMgr, imageMgr, volumeMgr) if err != nil { readyCh <- false return fmt.Errorf("failed to get CriManager with error: %v", err) diff --git a/cri/v1alpha2/cri.go b/cri/v1alpha2/cri.go index 8463f089b8..75b6eb8524 100644 --- a/cri/v1alpha2/cri.go +++ b/cri/v1alpha2/cri.go @@ -91,6 +91,9 @@ type CriMgr interface { // ImageServiceServer is interface of CRI image service. runtime.ImageServiceServer + // VolumeServiceServer is interface of CRI volume service. + runtime.VolumeServiceServer + // StreamServerStart starts the stream server of CRI. StreamServerStart() error } @@ -99,6 +102,7 @@ type CriMgr interface { type CriManager struct { ContainerMgr mgr.ContainerMgr ImageMgr mgr.ImageMgr + VolumeMgr mgr.VolumeMgr CniMgr cni.CniMgr // StreamServer is the stream server of CRI serves container streaming request. @@ -121,7 +125,7 @@ type CriManager struct { } // NewCriManager creates a brand new cri manager. -func NewCriManager(config *config.Config, ctrMgr mgr.ContainerMgr, imgMgr mgr.ImageMgr) (CriMgr, error) { +func NewCriManager(config *config.Config, ctrMgr mgr.ContainerMgr, imgMgr mgr.ImageMgr, volumeMgr mgr.VolumeMgr) (CriMgr, error) { streamServer, err := newStreamServer(ctrMgr, streamServerAddress, streamServerPort) if err != nil { return nil, fmt.Errorf("failed to create stream server for cri manager: %v", err) @@ -130,6 +134,7 @@ func NewCriManager(config *config.Config, ctrMgr mgr.ContainerMgr, imgMgr mgr.Im c := &CriManager{ ContainerMgr: ctrMgr, ImageMgr: imgMgr, + VolumeMgr: volumeMgr, CniMgr: cni.NewCniManager(&config.CriConfig), StreamServer: streamServer, SandboxBaseDir: path.Join(config.HomeDir, "sandboxes"), @@ -671,6 +676,7 @@ func (c *CriManager) ContainerStatus(ctx context.Context, r *runtime.ContainerSt HostPath: m.Source, ContainerPath: m.Destination, Readonly: !m.RW, + Name: m.Name, // Note: can't set SeLinuxRelabel. }) } @@ -1104,3 +1110,12 @@ func (c *CriManager) ImageFsInfo(ctx context.Context, r *runtime.ImageFsInfoRequ }, }, nil } + +// RemoveVolume removes the volume. +func (c *CriManager) RemoveVolume(ctx context.Context, r *runtime.RemoveVolumeRequest) (*runtime.RemoveVolumeResponse, error) { + volumeName := r.GetVolumeName() + if err := c.VolumeMgr.Remove(ctx, volumeName); err != nil { + return nil, err + } + return &runtime.RemoveVolumeResponse{}, nil +} diff --git a/cri/v1alpha2/cri_wrapper.go b/cri/v1alpha2/cri_wrapper.go index be757448b7..61142ee019 100644 --- a/cri/v1alpha2/cri_wrapper.go +++ b/cri/v1alpha2/cri_wrapper.go @@ -400,3 +400,16 @@ func (c *CriWrapper) ImageFsInfo(ctx context.Context, r *runtime.ImageFsInfoRequ }() return c.CriManager.ImageFsInfo(ctx, r) } + +// RemoveVolume removes the volume. +func (c *CriWrapper) RemoveVolume(ctx context.Context, r *runtime.RemoveVolumeRequest) (res *runtime.RemoveVolumeResponse, err error) { + logrus.Infof("RemoveVolume %q", r.GetVolumeName()) + defer func() { + if err != nil { + logrus.Errorf("RemoveVolume %q failed, error: %v", r.GetVolumeName(), err) + } else { + logrus.Infof("RemoveVolume %q returns successfully", r.GetVolumeName()) + } + }() + return c.CriManager.RemoveVolume(ctx, r) +} diff --git a/cri/v1alpha2/service/cri.go b/cri/v1alpha2/service/cri.go index 2a0367f45f..1be998af96 100644 --- a/cri/v1alpha2/service/cri.go +++ b/cri/v1alpha2/service/cri.go @@ -26,6 +26,7 @@ func NewService(cfg *config.Config, criMgr cri.CriMgr) (*Service, error) { runtime.RegisterRuntimeServiceServer(s.server, s.criMgr) runtime.RegisterImageServiceServer(s.server, s.criMgr) + runtime.RegisterVolumeServiceServer(s.server, s.criMgr) return s, nil } diff --git a/daemon/daemon.go b/daemon/daemon.go index 2671361b54..66875d1182 100644 --- a/daemon/daemon.go +++ b/daemon/daemon.go @@ -228,7 +228,7 @@ func (d *Daemon) Run() error { }() criStopCh := make(chan error) - go criservice.RunCriService(d.config, d.containerMgr, d.imageMgr, criStopCh, criReadyCh) + go criservice.RunCriService(d.config, d.containerMgr, d.imageMgr, d.volumeMgr, criStopCh, criReadyCh) httpReady := <-httpReadyCh criReady := <-criReadyCh diff --git a/hack/protoc.sh b/hack/protoc.sh index 4e36f0832e..616b215544 100644 --- a/hack/protoc.sh +++ b/hack/protoc.sh @@ -39,7 +39,6 @@ generateproto(){ } main(){ - API_ROOT="${DIR}/cri/apis/v1alpha1" YEAR_TIME=" $(date '+%Y')" generateproto API_ROOT="${DIR}/cri/apis/v1alpha2" YEAR_TIME="" generateproto } main "$@"