Helm2 ile Kubernetes Rolling Güncellemesi

Oct 01 2020

Helm v2 kullanarak Kubernetes Rolling Güncellemesi yapmaya çalışıyorum ; ancak yapamıyorum.

Ben gerçekleştirdiğinizde helm upgradebir üzerinde yavaş Tomcat görüntüsü , orijinal koza yok edilir.

Kapsül örneklerini aşamalı olarak yenileriyle güncelleyerek ve eskilerini boşaltarak sıfır kesinti süresine nasıl ulaşılacağını bulmak istiyorum.

Göstermek için örnek bir yavaş Tomcat Docker görüntüsü ve bir Helm grafiği oluşturdum .

Yüklemek:

helm install https://github.com/h-q/slowtom/raw/master/docs/slowtom.tgz --name slowtom \
     -f https://github.com/h-q/slowtom/raw/master/docs/slowtom/environments/initial.yaml

Günlükleri çalıştırarak takip edebilir kubectl logs -f slowtom-sf-0ve hazır olduğunuzda uygulamaya şuradan erişebilirsiniz.http://localhost:30901

Yükseltmek:

(ve yardıma ihtiyacım olan yer orası)

helm upgrade slowtom https://github.com/h-q/slowtom/raw/master/docs/slowtom.tgz \
     -f https://github.com/h-q/slowtom/raw/master/docs/slowtom/environments/upgrade.yaml

upgrade.yamlİle aynıdır initial.yamletiket sürüm numarasıyla dışında dağıtım dosyası.

Burada orijinal bölme yok edilir ve yenisi başlar. Bu arada, kullanıcılar uygulamaya erişemezler.http://localhost:30901

Silmek:

helm del slowtom --purge

Referans

Yerel Dümen Grafiği

Dümen şemasını indirin:

curl -LO https://github.com/h-q/slowtom/raw/master/docs/slowtom.tgz
tar vxfz ./slowtom.tgz

Yerel dümen haritasından yükleyin:

helm install --debug ./slowtom --name slowtom -f ./slowtom/environments/initial.yaml

Yerel dümen haritasından yükseltme:

helm upgrade --debug slowtom ./slowtom -f ./slowtom/environments/upgrade.yaml

Docker Görüntüsü

Dockerfile

FROM tomcat:8.5-jdk8-corretto

RUN mkdir /usr/local/tomcat/webapps/ROOT && \
    echo '<html><head><title>Slow Tomcat</title></head><body><h1>Slow Tomcat Now Ready</h1></body></html>' >> /usr/local/tomcat/webapps/ROOT/index.html

RUN echo '#!/usr/bin/env bash' >> /usr/local/tomcat/bin/slowcatalina.sh && \
    echo 'x=2' >> /usr/local/tomcat/bin/slowcatalina.sh && \
    echo 'secs=$(($x * 60))' >> /usr/local/tomcat/bin/slowcatalina.sh && \
    echo 'while [ $secs -gt 0 ]; do' >> /usr/local/tomcat/bin/slowcatalina.sh && \ echo ' >&2 echo -e "Blast off in $secs\033[0K\r"' >> /usr/local/tomcat/bin/slowcatalina.sh && \
    echo '   sleep 1' >> /usr/local/tomcat/bin/slowcatalina.sh && \
    echo '   : $((secs--))' >> /usr/local/tomcat/bin/slowcatalina.sh && \
    echo 'done' >> /usr/local/tomcat/bin/slowcatalina.sh && \
    echo '>&2 echo "slow cataline done. will now start real catalina"' >> /usr/local/tomcat/bin/slowcatalina.sh && \
    echo 'exec catalina.sh run' >> /usr/local/tomcat/bin/slowcatalina.sh && \
    chmod +x /usr/local/tomcat/bin/slowcatalina.sh 

ENTRYPOINT ["/usr/local/tomcat/bin/slowcatalina.sh"]

Dümen Şeması İçeriği

slowtom/Chart.yaml

apiVersion: v1
description: slow-tomcat Helm chart for Kubernetes
name: slowtom
version: 1.1.2  # whatever

slowtom/values.yaml

# Do not use this file, but ones from environmments folder

slowtom/environments/initial.yaml

# Storefront
slowtom_sf:
  name: "slowtom-sf"
  hasHealthcheck: "true"
  isResilient: "false"
  replicaCount: 2
  aspect_values:
    - name: y_aspect
      value: "storefront"

image:
  repository: hqasem/slow-tomcat
  pullPolicy: IfNotPresent
  tag: 1
env:
  - name: y_env
    value: whatever

slowtom/environments/upgrade.yaml

# Storefront
slowtom_sf:
  name: "slowtom-sf"
  hasHealthcheck: "true"
  isResilient: "false"
  replicaCount: 2
  aspect_values:
    - name: y_aspect
      value: "storefront"

image:
  repository: hqasem/slow-tomcat
  pullPolicy: IfNotPresent
  tag: 2
env:
  - name: y_env
    value: whatever

slowtom/templates/deployment.yaml

---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: {{ .Values.slowtom_sf.name }} 
  labels:
    chart: "{{ .Chart.Name | trunc 63 }}"
    chartVersion: "{{ .Chart.Version | trunc 63 }}" 
    visualize: "true" 
    app: {{ .Values.slowtom_sf.name }} 
spec:
  replicas: {{ .Values.slowtom_sf.replicaCount }} 
  selector: 
    matchLabels:
      app: {{ .Values.slowtom_sf.name }}
  template:
    metadata:
      labels:
        app: {{ .Values.slowtom_sf.name }}
        visualize: "true" 
    spec:
      dnsPolicy: ClusterFirstWithHostNet
      containers: 
        - name: {{ .Values.slowtom_sf.name }} 
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          imagePullPolicy: {{ .Values.image.pullPolicy }}
          command: ["/usr/local/tomcat/bin/slowcatalina.sh"]
          args: ["whatever"]
          env:
{{ toYaml .Values.env | indent 12 }}
{{ toYaml .Values.slowtom_sf.aspect_values | indent 12 }}
          resources: 
{{ toYaml .Values.resources | indent 12 }}
---

slowtom/templates/service.yaml

kind: Service
apiVersion: v1
metadata:
  name: {{.Values.slowtom_sf.name}} 
  labels:
    chart: "{{ .Chart.Name | trunc 63 }}"
    chartVersion: "{{ .Chart.Version | trunc 63 }}"
    app: {{.Values.slowtom_sf.name}}
    visualize: "true" 
    hasHealthcheck: "{{ .Values.slowtom_sf.hasHealthcheck }}" 
    isResilient: "{{ .Values.slowtom_sf.isResilient }}"
spec:
  type: NodePort
  selector:
    app: {{.Values.slowtom_sf.name}}
  sessionAffinity: ClientIP
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 8080
      name: http
      nodePort: 30901
---

Yanıtlar

2 superstator Oct 01 2020 at 22:49

Aksine Deployment, StatefulSetbir sürekli güncelleme sırasında eskisini yok etmeden önce yeni bir kapsül başlatmaz. Bunun yerine, beklenti birden fazla bölmeniz olması ve bunların birer birer değiştirilmesidir. Yapılandırılmış yalnızca 1 replikanız olduğundan, önce onu yok etmesi gerekir. Kopya sayınızı 2 veya daha fazla artırın ya da bir Deploymentşablona geçin .

https://kubernetes.io/docs/tutorials/stateful-application/basic-stateful-set/#rolling-update