Chúng tôi có một cụm container với chế độ: Autopilot đang chạy trong GKE.
Chúng tôi hiện đang nhận được lỗi trong một cửa sổ ngắn khi thực hiện triển khai "xanh lam/xanh lục" từ Jenkins.
Khi chúng tôi chuyển dịch vụ sang triển khai mới, có một cửa sổ dưới 100 mili giây sẽ tạo ra lỗi sau.
<html><head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>502 Server Error</title>
</head>
<body text=#000000 bgcolor=#ffffff>
<h1>Error: Server Error</h1>
<h2>The server encountered a temporary error and could not complete your request.<p>Please try again in 30 seconds.</h2>
<h2></h2>
</body></html>
Tôi cho rằng điều này là do một trong các nhóm chưa được khởi động nhưng vẫn bắt đầu định tuyến lưu lượng truy cập đến quá trình triển khai.
Chúng tôi kiểm tra xem triển khai có được triển khai sau khi triển khai được tạo như thế này không.
Với plugin Jenkins: https://github.com/jenkinsci/google-kubernetes-engine-plugin
Chúng ta có xác minh triển khai thuộc tính được đặt thành thật.
bước chân([
$class: 'KubernetesEngineBuilder',
projectId: env.PROJECT_ID,
tên cụm: env.CLUSTER_NAME,
không gian tên: env.NAMESPACE,
vị trí: env.CLUSTER_LOCATION,
manifestPotype: './apps/app/deployments/green.yaml',
thông tin xác thựcId: env.APP_CREDENTIALS_ID,
verifyDeployments: true
])
Chúng tôi cũng bao gồm một kiểm tra thứ hai để thực sự xác minh rằng việc triển khai đã được triển khai.
Rõ ràng plugin Jenkins dường như không thực hiện điều này một cách đáng tin cậy.
trạng thái triển khai triển khai kubectl app-deployment --namespace app-namespace --watch --timeout=5m
Chúng tôi cũng nhận thấy rằng có thể xảy ra lỗi khi triển khai và một dịch vụ vẫn được tạo ở bước tiếp theo, điều này sẽ làm hỏng ứng dụng, nhưng đây là một trường hợp khác mà chúng tôi cần tìm ra cách giải quyết, có thể liên quan đến plugin Jenkins.
Của chúng ta triển khai YAML trông như thế này:
apiVersion: ứng dụng/v1
loại: Triển khai
metadata:
tên: ứng dụng-màu xanh
không gian tên: ứng dụng
nhãn: {app.kubernetes.io/managed-by: graphite-jenkins-gke}
thông số kỹ thuật:
tiến trìnhDeadlineSeconds: 600
bản sao: 3
bộ chọn:
matchLabels: {app: app-blue}
mẫu:
metadata:
nhãn: {app: app-blue}
thông số kỹ thuật:
automountServiceAccountToken: đúng
hộp đựng:
hình ảnh: eu.gcr.io/container-registry-project/app:latest
imagePullPolicy: Luôn luôn
tên: ứng dụng
cổng:
- {containerPort: 8080, tên: http, giao thức: TCP}
livenessProbe:
httpNhận:
đường dẫn: /sức khỏe
cổng: 8080
ban đầuDelaySeconds: 15
chu kỳGiây: 10
sẵn sàngThăm dò:
httpNhận:
con đường: /
cổng: 8080
ban đầuDelaySeconds: 15
chu kỳGiây: 5
tài nguyên:
giới hạn: {cpu: 500m, bộ nhớ tạm thời: 1Gi, bộ nhớ: 512Mi}
yêu cầu: {cpu: 500m, bộ lưu trữ tạm thời: 1Gi, bộ nhớ: 512Mi}
bối cảnh bảo mật:
allowPrivilegeEscalation: sai
khả năng:
thả: [NET_RAW]
đặc quyền: sai
readOnlyRootFilesystem: sai
runAsNonRoot: sai
restartPolicy: Luôn luôn
tên bộ lập lịch: bộ lập lịch mặc định
tài khoản dịch vụ: ứng dụng
serviceAccountName: ứng dụng
Của chúng ta dịch vụ YAML trông như thế này:
phiên bản api: v1
loại: Dịch vụ
metadata:
tên: dịch vụ ứng dụng
không gian tên: ứng dụng
thông số kỹ thuật:
bộ chọn:
ứng dụng: ứng dụng-màu xanh
cổng:
- giao thức: TCP
cổng: 80
cổng mục tiêu: 8080
Chúng tôi chỉ cần chuyển bộ chọn - ứng dụng: trong dịch vụ, sang triển khai ứng dụng xanh lam hoặc ứng dụng xanh lục để chuyển sang triển khai mới, nhưng luôn gặp một cửa sổ lỗi nhỏ khi thực hiện việc này, bất kỳ ai cũng biết chúng tôi đang làm gì làm sai?