Kubernetes:不会出现代码更改,有没有一种同步方法?

时间:2019-01-04 15:19:44

标签: docker kubernetes devops minikube

Dockerfile中,我提到了以下内容:

COPY src/ /var/www/html/,但我的代码更改似乎不像以前那样仅在Docker上出现。除非我删除Pod,否则它不会出现。如何同步?

我正在使用minikube。

webserver.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: webserver
  labels:
    app: apache
spec:
  replicas: 3
  selector:
    matchLabels:
      app: apache
  template:
    metadata:
      labels:
        app: apache
    spec:
      containers:
      - name: php-apache
        image: learningk8s_website
        imagePullPolicy: Never
        ports:
        - containerPort: 80

1 个答案:

答案 0 :(得分:5)

当您的容器规格说明:

image: learningk8s_website
imagePullPolicy: Never

第二次kubectl apply时,Kubernetes确定它与您已经拥有的Deployment规范完全相同,并且不执行任何操作。即使服务器确实生成了新的Pod,服务器也很可能会注意到它已经有一个映像learningk8s_website:latest并且不会提取新映像。实际上,您是在明确地告诉Kubernetes不要。

通常的做法是在图像名称中包含一些唯一的标识符,例如日期戳或提交哈希。

IMAGE=$REGISTRY/name/learningk8s_website:$(git rev-parse --short HEAD)
docker build -t "$IMAGE" .
docker push "$IMAGE"

然后,您需要在“部署”规范中进行相应的更改,然后kubectl apply进行更改。这将使Kubernetes注意到Pod规范中有一些更改,使用新映像创建新Pod,并按此顺序销毁旧Pod。您可能会发现像Helm这样的模板引擎对使将此值轻松注入YAML有用。