Cập nhật Rolling Kubernetes với Helm2
Tôi đang cố gắng thực hiện Cập nhật cuộn Kubernetes bằng Helm v2 ; tuy nhiên, tôi không thể.
Khi tôi thực hiện helm upgradetrên một hình ảnh Tomcat chậm , nhóm gốc sẽ bị phá hủy.
Tôi muốn tìm ra cách để đạt được thời gian chết bằng không bằng cách cập nhật từng bước các phiên bản Pods bằng các phiên bản mới và loại bỏ các phiên bản cũ.
Để chứng minh, tôi đã tạo một hình ảnh Tomcat Docker chậm mẫu và biểu đồ Helm .
Để cài đặt:
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
Bạn có thể theo dõi nhật ký bằng cách chạy kubectl logs -f slowtom-sf-0và khi đã sẵn sàng, bạn có thể truy cập ứng dụng trênhttp://localhost:30901
Nâng cấp:
(và đó là nơi tôi cần giúp đỡ)
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
Các upgrade.yamlgiống với initial.yamltập tin triển khai với ngoại lệ của số phiên bản thẻ.
Tại đây nhóm ban đầu bị phá hủy và nhóm mới bắt đầu. Trong khi đó, người dùng không thể truy cập ứng dụng trênhttp://localhost:30901
Xóa:
helm del slowtom --purge
Tài liệu tham khảo
Biểu đồ Helm cục bộ
Tải xuống biểu đồ hướng dẫn:
curl -LO https://github.com/h-q/slowtom/raw/master/docs/slowtom.tgz
tar vxfz ./slowtom.tgz
Cài đặt từ biểu đồ hướng dẫn cục bộ:
helm install --debug ./slowtom --name slowtom -f ./slowtom/environments/initial.yaml
Nâng cấp từ biểu đồ quản lý địa phương:
helm upgrade --debug slowtom ./slowtom -f ./slowtom/environments/upgrade.yaml
Hình ảnh Docker
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"]
Nội dung biểu đồ Helm
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
---
Trả lời
Không giống như Deployment, StatefulSetkhông bắt đầu một nhóm mới trước khi phá hủy nhóm cũ trong quá trình cập nhật liên tục. Thay vào đó, kỳ vọng là bạn có nhiều nhóm và chúng sẽ được thay thế từng nhóm một. Vì bạn chỉ có 1 bản sao được cấu hình nên nó phải phá hủy nó trước. Tăng số lượng bản sao của bạn lên 2 hoặc nhiều hơn hoặc chuyển sang một Deploymentmẫu.
https://kubernetes.io/docs/tutorials/stateful-application/basic-stateful-set/#rolling-update