Kubernetes - 如何利用 K8S 拉取私有仓库镜像

问题描述

最近实战时,发现一个很奇怪的问题,在通过 k8s 创建 pod,拉取镜像时,总是显示如下信息:

Error syncing pod, skipping: failed to "StartContainer" for "POD" with ImagePullBackOff: "Back-off pulling image ..."

原因分析

该现象出现的原因可能是网络问题、docker 环境问题等。但如果访问的是一个公开的镜像仓库,在 pull image 的时候,不应该会提示:ImagePullBackOff,但如果访问的是私有仓库,那就有可能出现如下的错误:

这个错误出现的原因,刚才说了,有可能的网络问题,也有可能是 docker 问题,但有时候,这些不能解决的情况下,可以采用下面三种方式来解决。

解决方案

方式一

第一种方式,我们可以使用文件生成 secret,然后通过 k8s 中的 imagePullSecrets 来解决拉取镜像时的验证问题。具体方式如下:

修改 /etc/docker/daemon.json

在 k8s 集群节点上,修改 docker 的 daemon.json 配置文件:

{"registry-mirrors": [ "https://registry.docker-cn.com"],"insecure-registries":["私有仓库服务地址"]
}

在里面加上自己私有的仓库服务地址,然后重启 docker 服务,使其生效。

生成 ~/.docker/config.json 文件
docker login 私有服务地址

在命令行输入上面的命令,回车后,会提示输入用户名和密码。输入正确信息后,这会生成一个 /root/.docker/config.json 文件。同时会提示:

Login Succeeded

生成 Secret 串

根据上面生成的 ~/.docker/config.json 文件,我们可以生成一个密文秘钥:

base64 -w 0 ~/.docker/config.json

执行上面的命令后,会生成一个长串,即为我们所要的 Secret 串。

我们会在 source 下看见一个新的文件夹,_drafts,这个里面会装我们所有的草稿文件。

创建 Secret

通过 k8s 我们可以生成一个 Secret 资源:

apiVersion: v1
kind: Secret
metadata:name: docker_reg_secretnamespace: default
data:.dockerconfigjson: ewoJImF1dGhjNWdlpHVnVaenB5Wld4aFFFeFdUa2xCVGtBeU1ERTMiCgkJfASEkidXJlZy5rOHMueXVud2VpLnJlbGEubWUiOiB7CgkJCSJhdXRoIjogIloyRnZaM1Z2WkdWdVSrsaaehoUUV4V1RrbEJUa0F5TURFMyIKCQl9Cgl9LAoJIkh0dHBIZWFkZXJzIjogewoJSetcaFTssZW50IjogIkRvY2tlci1DbGllbnQvMTguMDYuMS1jZSAobGludXgpIgoJfQp9
type: kubernetes.io/dockerconfigjson

执行这个资源的配置:

kubectl create -f secret.yml

在服务配置加上依赖

最后,可以在 我们的服务 yml 文件中加上拉取镜像时的依赖 secret,部分代码如下:

imagePullSecrets:
- name: docker_reg_secret

方式二

第二种方式,我们可以直接使用 docker 的用户信息来生成 secret:

kubectl create secret docker-registry docker_reg_secret --docker-server=XXX --docker-username=XXX --docker-password=XXX

参数含义:

  • docker_reg_secret:指定密钥的键名称,自定义
  • docker-server: 指定docker仓库地址
  • docker-username:指定docker仓库账号
  • docker-password:指定docker仓库密码

创建完 Secret 资源后,其他的如方式一,这就简单了。

方式三

第三种方式所使用的是最简单的办法,即我们利用 k8s 的拉取镜像的策略来处理,主要有如下三种:

  • Always:每次创建时都会拉取镜像
  • IfNotPresent:宿主机器不存在时拉取镜像(默认值)
  • Never:从不主动拉取镜像

使用 IfNotPresent、Never 策略来处理。

以上三种方式,我比较推荐第二种,最中意第二种,因为假如密码修改了,就更新一下 secret 就好了,k8s node 不需要改动。而第一种需要改动,第三种会导致镜像丢失,毕竟只有本地存在。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/675852.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux命令行工具使用HTTP代理的方法详解

亲爱的Linux用户们,有没有想过在命令行世界里,你的每一个指令都能悄无声息地穿越千山万水,而不被外界窥探?哈哈,没错,就是通过HTTP代理!今天,我们就来一起探索如何在Linux命令行工具…

数字图像处理与Python语言实现-常见图像特效(三)

文章目录 18、提高曝光度19、轮廓滤镜/图像锐化20、风格化滤镜21、颜色化滤镜22、扩散/毛玻璃效果23、碧绿效果24、漫画效果25、边缘发光/增强效果26、冰冻效果本文为前面文章: 数字图像处理与Python语言实现-常见图像特效(二)数字图像处理与Python语言实现-常见图像特效(一…

lnmp指令

LNMP官网:https://lnmp.org 作者: licess adminlnmp.org 问题反馈&技术支持论坛:https://bbs.vpser.net/forum-25-1.html 打赏捐赠:https://lnmp.org/donation.html 自定义参数 lnmp.conf配置文件,可以修改lnmp.conf自定义下…

如果通过浏览器调试?

背景:博主是一个有丰富经验的后端开发人员,在前端开发中感觉总是有种力不从心的感觉,因为没有后端debug调试的清晰感。 解决办法:掌握chorm浏览器调试技巧。 F12, F5 打上断点之后,这不就是梦寐之中的调试…

让AI更“智能”的Agent,究竟是什么?

引言 我相信对许多对AI感兴趣的读者来说,“Agent”是个听起来既熟悉又陌生的词汇,而由于ChatGPT引发的浪潮又将Agent的概念推上顶峰,正好借助这个机会我来好好解释一下这个词汇。 Agent的基本含义 在AI领域,Agent基本可以被理解…

STL之list容器的介绍与模拟实现+适配器

STL之list容器的介绍与模拟实现适配器 1. list的介绍2. list容器的使用2.1 list的定义2.2 list iterator的使用2.3 list capacity2.4 list element access2.5 list modifiers2.6 list的迭代器失效 3. list的模拟实现3.1 架构搭建3.2 迭代器3.2.1 正向迭代器3.2.2反向迭代器适配…

Python常见的免杀方式

10.1节介绍了通过msfvenom生成shellcode ,并通过Python程序加载执行,又 介绍了如何将Python的.py文件生成为exe文件。使用pyinstaller生成的可执行文件 本身就具有一定的免杀能力,但是在与杀毒软件对抗时,部分杀毒软件也可以通 过…

前端配置了axios.defaults.withCredentials = true,但出现了跨域问题

报错如下: :5173/#/login:1 Uncaught (in promise) AxiosError {message: Network Error, name: AxiosError, code: ERR_NETWORK, config: {…}, request: XMLHttpRequest, …} 刚开始的时候,因为前端登录时候获取的session无法传递给其他的界面&#x…

你好,2024——有梦就去追

身份表明: 姓名:余**(根据法律要求,不可随意外泄真实姓名) 出生日期:2013/01/31 CSP - J 考号:10028 CSP - J 考试时间:2023/9/26 CSP - J 准考证号: SD - 2023926 …

每日OJ题_位运算②_力扣136. 只出现一次的数字+力扣260. 只出现一次的数字 III

目录 ①力扣136. 只出现一次的数字 解析代码 力扣260. 只出现一次的数字 III 解析代码 ①力扣136. 只出现一次的数字 136. 只出现一次的数字 难度 简单 给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个…

06 MP之自动填充+SQL执行的语句和速度分析

1. 自动填充 在项目中有一些属性,比如常见的创建时间和更新时间可以设置为自动填充。 1.1 实例 需求: 将创建时间和更新时间设置为自动填充, 这样每次插入数据时可以不用理会这两个字段 1.1.1 在数据库增加字段 默认开启驼峰映射 createTime --> create_time…

使用HLS FFT报错: undefined reference to‘xilinx_ip_xfft_v9_1_*‘问题解决方法

最近需要用到HLS的FFT库,写了一个简单代码后编译报错: ../Vitis_HLS/hls_fft.h:670: undefined reference to xilinx_ip_xfft_v9_1_create_state ../Vitis_HLS/hls_fft.h:771: undefined reference to xilinx_ip_xfft_v9_1_bitacc_simulate ../Vitis_HL…

Spring Boot 笔记 004 自动配置和自定义starter

003讲到了导入jar包中的方法,但其实是个半成品,别人写的jar包中的方法我要在自己的代码中去调用,非常的不方便。原则上写给别人用的jar包,人家要能直接用,而不用写注入的方法。 在springboot中会自动扫描imports文件中…

原来阿里通义千问开源并可以本地运行咯

原来阿里通义千问开源版本V1.5大模型并可以本地运行咯, 一个不错的视频介绍,可以看这里:https://www.bilibili.com/video/BV1cC41167gn/?spm_id_from333.788.recommend_more_video.10&vd_source620d2f52625a6dcff7b49ea3d9f978f3

CCUS技术概述和应用意义

1CCUS技术概述和应用意义 1.1CCUS技术概述 CCUS(碳捕集、利用与封存)技术是一项针对温室气体的减排技术,能够大幅减少使用化石燃料的温室气体排放,涵盖二氧化碳(CO2)捕集、运输、利用与封存4个环节。 在…

[Python] 深入理解列表和元组

在学习的C语言中有数组可以用来存储数据,那么在Python中是否也有这样的工具呢?接下来让可莉来给大家讲解列表和元组这两个强力工具吧~ 专栏:《Python》 blog:Keven ’ s blog 在 Python 中,列表和元组是两种常用的序列…

今日学习总结

今天在看kmp算法和复习之前学习过的内容,把之前没认真看懂的内容全部又看了一边理解了一遍。 KMP kmp算法基本的作用是查找一个字符串在另一个字符串中出现的位置(优化算法)。是对暴力算法的优化,暴力算法是在主串中一个一个向后…

Linux操作系统基础(三):虚拟机与Linux系统安装

文章目录 虚拟机与Linux系统安装 一、系统的安装方式 二、虚拟机概念 三、虚拟机的安装 四、Linux系统安装 1、解压人工智能虚拟机 2、找到解压目录中的node1.vmx 3、启动操作系统 虚拟机与Linux系统安装 一、系统的安装方式 Linux操作系统也有两种安装方式&#xf…

【Linux系统学习】3.Linux用户和权限

Linux用户和权限 1.认知root用户 1.1 root用户(超级管理员) 无论是Windows、MacOS、Linux均采用多用户的管理模式进行权限管理。 在Linux系统中,拥有最大权限的账户名为:root(超级管理员) 而在前期&#…

代码随想录 Leetcode55. 跳跃游戏

题目&#xff1a; 代码(首刷自解 2024年2月9日&#xff09;&#xff1a; class Solution { public:bool canJump(vector<int>& nums) {int noz 0;for (int i nums.size() - 2; i > 0; --i) {if (nums[i] 0) {noz;continue;} else {if (nums[i] > noz) noz …