何为容器镜像(Image)?
①容器镜像承载了 封装了应用程序及其所有软件依赖的二进制数据。
②其同时也是可执行的软件包,可以单独运行;
③该软件包对所处的runtime环境具有
Well Defined(无歧义,不会导致矛盾)的假定。
通常创建应用对应的容器镜像后将其推送至仓库,然后在Pod中引用它。
容器镜像中的概念
-
镜像名称,
镜像名称被赋予pause、example/mycontainer、kube-apiserver
也可以包含仓库所在的主机名,比如 fictional.registry.example/imagename
也可以包含端口号,fictional.registry.example:10443/imagename
若不指定主机名,Kubernetes默认使用Docker公共仓库。
在镜像名称之后可以添加Tag(标签),用于辨识同一镜像序列中的不同版本。若不指定Tag,Kubernetes默认使用latest
PS:在生产环境中使用latest标签会使得跟踪所运行的镜像版本难度上升,也难以回滚。
所以一般使用 v1.42.0 这种有意义的TAG -
更新镜像,
默认的镜像拉取策略:IfNotPresent:镜像已经存在的情况下,kubelet将不再拉取镜像。
若希望强制总是拉取镜像,可以执行:
设置容器的imagePullPolicy 为Always -
使用清单(manifest)构建多架构镜像,
容器仓库不仅提供二进制的镜像,也提供容器镜像清单。Manifest可以为特定于体系结构的镜像版本引用镜像清单。使得在给镜像命名的同时,允许不同的系统基于他们所使用的机器体系取回正确的二进制镜像。
Kubernetes通常在命名容器镜像时添加后缀 -$(ARCH)
为了向前兼容,生成较老的镜像时也提供后缀。
为某镜像生成针对所有平台适用的清单时,生成XXXX-amd64 这类镜像,以便较老的配置文件或者将镜像后缀编码到其中的YAML文件也能兼容 -
使用私有仓库
从私有仓库取镜像时需要密钥。凭证有以下形式:
配置节点向私有仓库进行身份验证
预拉镜像
Pod中设置ImagePullSecrets(只有提供自己密钥的Pod才能访问私有仓库)
特定于厂商的扩展或本地扩展(厂商实现节点向仓库认证的机制)