我找到了containerd的image.proto文件, https://github.com/containerd/containerd/blob/main/api/services/images/v1/images.proto#L90
我可以使用proto文件获取本地图像,
[root@master-18-86 ~]# ./grpcurl -d '{"name":"DaoCloud.redhat/registry.k8s.io/kube-apiserver:v1.27.5"}' -plaintext -proto image.proto -rpc-header containerd-namespace:k8s.io -unix /run/containerd/containerd.sock containerd.services.images.v1.Images/Get
{
"image": {
"name": "DaoCloud.redhat/registry.k8s.io/kube-apiserver:v1.27.5",
"labels": {
"io.cri-containerd.image": "managed"
},
"target": {
"mediaType": "application/vnd.oci.image.manifest.v1+json",
"digest": "sha256:d7b036dcf284a11517256774c28d073d83617b65bdbbec35fafd29bb51872c7d",
"size": "1960"
},
"createdAt": "2024-04-29T06:53:51.439354485Z",
"updatedAt": "2024-04-29T06:53:51.447932784Z"
}
}
[root@master-18-86 ~]#
但我不知道如何使用grpcurl工具通过proto文件下载图像,
[root@master-18-86 ~]# ./grpcurl -d '{"image":"DaoCloud.redhat/registry.k8s.io/kube-apiserver:v1.27.5"}' -plaintext -proto image.proto -rpc-header containerd-namespace:k8s.io -unix /run/containerd/containerd.sock containerd.services.images.v1.Images/Create
Error invoking method "containerd.services.images.v1.Images/Create": error getting request data: bad input: expecting start of JSON object: '{' ; instead got DaoCloud.redhat/registry.k8s.io/kube-apiserver:v1.27.5
我添加了名字,
[root@master-18-86 ~]# ./grpcurl -d '{"image":{"name":"DaoCloud.redhat/registry.k8s.io/kube-apiserver:v1.27.5"}}' -plaintext -proto image.proto -rpc-header containerd-namespace:k8s.io -unix /run/containerd/containerd.sock containerd.services.images.v1.Images/Create
ERROR:
Code: Unavailable
Message: error reading from server: EOF
我想通过proto pull进行镜像,有人可以帮我吗?
或者使用 api.proto 拉取?
./grpcurl -plaintext -d '{"image":{"image":"{image_name}"}}' -proto api.proto -rpc-header containerd-namespace:k8s.io -unix /run/containerd/containerd.sock runtime.v1.ImageService/PullImage
这对我有用!