我尝试使用C#(https://github.com/kubernetes-client/csharp)中的Kubernetes客户端动态构建Kubernetes作业。当作业尝试从存储库中提取图像时,我收到错误。
我试图附加到作业的映像位于本地Docker存储库中。这工作得很好,但是在构建过程中,会在透镜中抛出一个错误(见图)。
建立工作的代码:
var job = new V1Job
{
ApiVersion = "batch/v1",
Kind = "Job",
Metadata = new V1ObjectMeta
{
Name = name,
Labels = new Dictionary<string, string>(),
},
Spec = new V1JobSpec
{
BackoffLimit = backoffLimit,
TtlSecondsAfterFinished = 0,
Template = new V1PodTemplateSpec
{
Spec = new V1PodSpec
{
Tolerations = new List<V1Toleration>(),
Volumes = new List<V1Volume>
{
new V1Volume
{
Name = "podinfo",
DownwardAPI = new V1DownwardAPIVolumeSource
{
Items = new V1DownwardAPIVolumeFile[]
{
new V1DownwardAPIVolumeFile { Path = "namespace", FieldRef = new V1ObjectFieldSelector("metadata.namespace") },
new V1DownwardAPIVolumeFile { Path = "name", FieldRef = new V1ObjectFieldSelector("metadata.name") },
},
},
},
},
Containers = new[]
{
new V1Container
{
Name = "tapereader-job-x-1",
Image = "tapereader_sample_calculation",
Resources = new V1ResourceRequirements
{
Limits = new Dictionary<string, ResourceQuantity>
{
{ "cpu", new ResourceQuantity("4") },
{ "memory", new ResourceQuantity("4G") },
},
Requests = new Dictionary<string, ResourceQuantity>
{
{ "cpu", new ResourceQuantity("0.5") },
{ "memory", new ResourceQuantity("2G") },
},
},
VolumeMounts = new List<V1VolumeMount>
{
new V1VolumeMount { Name = "podinfo", MountPath = "/etc/podinfo", ReadOnlyProperty = true },
},
Env = new List<V1EnvVar>(),
},
},
RestartPolicy = "Never",
},
},
},
};
await Client.CreateNamespacedJobAsync(job, "local-tapereader");
容器是好的,它存在于Docker桌面(本地repo)中,我可以构建和运行它,没有任何问题-它也以它应该在Docker桌面中的方式执行。
k8s客户端成功创建pod & job,但我在透镜中收到以下错误:
所以基本上,它声明访问被拒绝了?我如何克服这个问题?
我已尝试添加凭据,但此操作无效
最新消息:
我实际上运行了以下代码,就像zero 0建议的那样:
创建密码一般注册--从文件=.dockerconfigjson=C:\用户\〈用户名〉.docker\配置.json --类型= kubernetes.io/dockerconfigjson
3条答案
按热度按时间2eafrhcq1#
您是否为config.json指定了正确的路径?如果您运行了所提供的命令,则该命令无效。您必须为此确定正确的路径。
1.在Windows上,这将是
C:\Users\<USER_NAME>\.docker\config.json
1.在Mac上,该值为
/Users/<USER_NAME>/.docker/config.json
1.在Linux上,该值为
/home/<USER_NAME>/.docker/config.json
然后您将执行:
bjg7j2ky2#
已找到解决方案。映像驻留在Docker Desktop的本地存储库中。因此,不必提取映像。若要避免提取映像,Container对象的参数ImagePullPolicy应等于**“Never”**。
ar7v8xwq3#
这里最好的解决方案是复制用户名和密码并将它们编码为base64到.dockerconfigjson中,然后复制整个.dockerconfigjson文件并将其转换为base64,然后复制编码文本并粘贴到YAML中并应用。