如何在Kubernetes中使用本地docker镜像?

cod*_*ent 7 docker kubernetes

我有这个基本的Dockerfile:

FROM nginx
RUN apt-get -y update && apt install -y curl
Run Code Online (Sandbox Code Playgroud)

在我的Kubernetes集群的主节点中,构建该映像:

docker build -t cnginx:v1 . 
Run Code Online (Sandbox Code Playgroud)

docker images 显示图像已正确生成:

REPOSITORY                                 TAG                 IMAGE ID            CREATED             SIZE
cgninx                                     v1                  d3b1b19d069e        39 minutes ago      141MB
Run Code Online (Sandbox Code Playgroud)

我使用此部署引用此自定义映像:

apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2 
  template: 
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: cnginx
        image: cnginx:v1
        imagePullPolicy: Never
        ports:
        - containerPort: 80
      nodeSelector:
        nodetype: webserver
Run Code Online (Sandbox Code Playgroud)

但是找不到该图像:

NAME                                READY     STATUS              RESTARTS   AGE
nginx-deployment-7dd98bd746-lw6tp   0/1       ErrImageNeverPull   0          4s
nginx-deployment-7dd98bd746-szr9n   0/1       ErrImageNeverPull   0          4s
Run Code Online (Sandbox Code Playgroud)

描述广告连播信息:

Events:
  Type     Reason                 Age              From                Message
  ----     ------                 ----             ----                -------
  Normal   Scheduled              1m               default-scheduler   Successfully assigned nginx-deployment-7dd98bd746-szr9n to kubenode2
  Normal   SuccessfulMountVolume  1m               kubelet, kubenode2  MountVolume.SetUp succeeded for volume "default-token-bpbpl"
  Warning  ErrImageNeverPull      9s (x9 over 1m)  kubelet, kubenode2  Container image "cnginx:v1" is not present with pull policy of Never
  Warning  Failed                 9s (x9 over 1m)  kubelet, kubenode2  Error: ErrImageNeverPull
Run Code Online (Sandbox Code Playgroud)

我还尝试使用默认的imagePullPolicy和其他一些东西,例如使用最新标签标记图像...

那么,如何让Kubernetes使用本地生成的Docker映像?

whi*_*s11 7

您的POD已安排在您的工作节点上。由于设置imagePullPolicyNever,因此需要使图像可用于两个节点。换句话说,您需要像在主节点上一样在两个节点上进行构建。

附带说明,从长远来看,如果您设置自定义docker注册表并将映像推送到那里,可能会更容易。