如何通过 kubectl 在 kubernetes 中使用本地 docker 镜像

gau*_*tri 14 docker kubernetes

我创建了自定义 Docker 镜像并存储在本地系统中,现在我想通过 kubectl 使用该 Docker 镜像。

Docker 镜像:- 1:- docker build -t backend:v1 。

然后 Kubernetes 文件:-

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: backend
  namespace: web-console
spec:
  replicas: 1
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: backend
    spec:
      containers:
      - env:
        - name: mail_auth_pass
        - name: mail_auth_user
        - name: mail_from
        - name: mail_greeting
        - name: mail_service
        - name: mail_sign
        - name: mongodb_url
          value: mongodb://mongodb.mongodb.svc.cluster.local/console
        - name: server_host
          value: "0.0.0.0"
        - name: server_port
          value: "3000"
        - name: server_sessionSecret
          value: "1234"
          image: backend
          imagePullPolicy: Never
        name: backend
        resources: {}
      restartPolicy: Always
status: {}
Run Code Online (Sandbox Code Playgroud)

运行 kubectl 的命令:

kubectl create -f  backend-deployment.yaml
Run Code Online (Sandbox Code Playgroud)

得到错误:

error: error validating "backend-deployment.yaml": error validating data: [ValidationError(Deployment.spec.template.spec.containers[0].env[9]): unknown field "image" in io.k8s.api.core.v1.EnvVar, ValidationError(Deployment.spec.template.spec.containers[0].env[9]): unknown field "imagePullPolicy" in io.k8s.api.core.v1.EnvVar]; if you choose to ignore these errors, turn validation off with --validate=false
Run Code Online (Sandbox Code Playgroud)

Ama*_*ino 29

本地登记处

首先使用此命令设置本地注册表

docker run -d -p 5000:5000 --restart=always --name registry registry:2

图片标签

给定 a Dockerfile,可以通过以下简单的方式构建和标记图像:

docker build . -t localhost:5000/my-image

将镜像推送到本地仓库:

docker push localhost:5000/my-image

使用图像

现在可以使用推送的图像:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
  labels:
    app: my-app
spec:
  containers:
    - name: app
      image: localhost:5000/my-image
      imagePullPolicy: IfNotPresent
Run Code Online (Sandbox Code Playgroud)

部署 Pod

可以使用以下方式部署 Pod:

kubectl create -f pod.yml

希望这能派上用场:)

  • 在“docker build”之后,我们需要将其推送到本地注册表:“docker push localhost:5000/my-image”。之后,正如您所描述的那样,它工作得很好:) (4认同)

mch*_*wre 3

正如错误指定的那样unknown field "image" and unknown field "imagePullPolicy"

您的 kubernetes 部署文件中存在语法错误。

在 yaml 文件中进行这些更改。

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: backend
  namespace: web-console
spec:
  replicas: 1
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: backend
    spec:
      containers:
      - name: backend
        image: backend
        imagePullPolicy: Never
        env:
        - name: mail_auth_pass
        - name: mail_auth_user
        - name: mail_from
        - name: mail_greeting
        - name: mail_service
        - name: mail_sign
        - name: mongodb_url
          value: mongodb://mongodb.mongodb.svc.cluster.local/console
        - name: server_host
          value: "0.0.0.0"
        - name: server_port
          value: "3000"
        - name: server_sessionSecret
          value: "1234"
        resources: {}
      restartPolicy: Always
status: {}
Run Code Online (Sandbox Code Playgroud)

使用https://kubeyaml.com/在线验证您的 kubernetes yaml 文件

或者与kubectl apply --validate=true --dry-run=true -f deployment.yaml

希望这可以帮助。