2017-11-28 3 views
1

In dieser Frage Stackoverflow implementieren: kubernetes Deployment. how to change container environment variables for rolling updates?Wie neue App-Versionen in Kubernetes

Der Fragesteller hat erwähnt erwähnt er den Einsatz bearbeitet die Version v2 zu ändern. Was ist der Workflow für automatisierte Bereitstellungen einer neuen Version, wenn der Container v2 bereits existiert? Wie stellen Sie es dann bereit, ohne die Deployment-Konfiguration manuell zu bearbeiten oder eine neue Version des Yamls einzutippen?

Wenn Sie den zugrunde liegenden Container ändern (wie v1 -> eine andere Version auch v1 genannt) wird Kubernetes das neue oder das alte bereitstellen?

+0

denke ich sein basierend auf Bild Pull Politik. Standard ist "imagePullPolicy: Always". was bedeutet, dass es das neue bekommen wird. – sfgroups

Antwort

1

Wenn Sie nicht wollen:

  • Überprüfung in der neuen Version von YAML
  • Manuelles Aktualisieren der Konfigurations

Sie kann die Bereitstellung entweder aktualisieren durch:

  • Ein REST-Aufruf an die fragliche Bereitstellung, indem Sie Ihr neues Image als Ressourcenmodifizierung patchen/setzen. das heißt PUT /apis/extensions/v1beta1/namespaces/{namespace}/deployments -d {... deployment with v2...}
  • Set the imagekubectl set image deployment/<DEPLOYMENT_NAME> <CONTAINER_NAME>:< IMAGE_NAME>:v2
1

Angenommen, v1 wird bereits ausgeführt, und Sie versuchen, v1 erneut mit denselben Umgebungsvariablenwerten usw. bereitzustellen, dann wird K8s keinen Unterschied zwischen Ihrer aktuellen und aktualisierten Bereitstellungsressource feststellen. Ohne Diff geht der k8s scheduler davon aus, dass der gewünschte Zustand bereits erreicht ist und plant keine neuen Pods, auch wenn imagePullPolicy: Always gesetzt ist. Der Grund dafür ist, dass imagePullPolicy nur Auswirkungen auf neu erstellte Pods hat. Wenn also ein neuer Pod geplant wird, zieht k8s das Bild immer wieder. Noch ohne diff in der Bereitstellung, kein neues pod wird .. ich immer einen Dummy-Umgebungsvariable

Für meine Einsätze in erster Linie geplant werden, wie ein deploy Zeitstempel DEPLOY_TS, zB:

containers: 
    - name: my-app 
    image: my-app:{{ .Values.app.version }} ## value dynamically set by my deployment pipeline 
    env: 
    - name: DEPLOY_TS 
     value: "{{ .Values.deploy_ts }}" ## value dynamically set by my deployment pipeline 

Der Wert DEPLOY_TS wird immer auf den aktuellen Zeitstempel gesetzt - es ist also immer ein anderer Wert. Auf diese Weise sieht k8s bei jeder Bereitstellung ein diff und plant einen neuen Pod - selbst wenn die gleiche Version erneut bereitgestellt wird.

(ich derzeit laufenden K8S 1.7)

Verwandte Themen