เรามีคอนเทนเนอร์คลัสเตอร์ที่มีโหมด: Autopilot ทำงานใน GKE
ขณะนี้เราได้รับข้อผิดพลาดในหน้าต่างสั้นๆ เมื่อดำเนินการปรับใช้ "สีน้ำเงิน/สีเขียว" จาก Jenkins
เมื่อเราเปลี่ยนบริการเป็นการปรับใช้ใหม่ จะมีหน้าต่างน้อยกว่า 100 มิลลิวินาทีที่จะทำให้เกิดข้อผิดพลาดต่อไปนี้
<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>
ฉันคิดว่าเป็นเพราะหนึ่งในพ็อดยังไม่เริ่มทำงาน แต่ยังคงเริ่มกำหนดเส้นทางทราฟฟิกไปยังการปรับใช้
เราตรวจสอบว่าการปรับใช้นั้นเริ่มใช้งานหลังจากการปรับใช้ถูกสร้างขึ้นในลักษณะนี้
ด้วยปลั๊กอินเจนกินส์: https://github.com/jenkinsci/google-kubernetes-engine-plugin
เรามี ตรวจสอบการปรับใช้ แอตทริบิวต์ที่กำหนดเป็น จริง.
ขั้นตอน ([
  $คลาส: 'KubernetesEngineBuilder'
  รหัสโครงการ: env.PROJECT_ID,
  ชื่อคลัสเตอร์: env.CLUSTER_NAME
  เนมสเปซ: env.NAMESPACE,
  ตำแหน่ง: env.CLUSTER_LOCATION
  manifestPattern: './apps/app/deployments/green.yaml',
  รหัสประจำตัว: env.APP_CREDENTIALS_ID,
  ตรวจสอบการปรับใช้: จริง
])
นอกจากนี้ เรายังรวมการตรวจสอบครั้งที่สองเพื่อตรวจสอบว่าการปรับใช้จริงได้เริ่มใช้งานแล้ว
เห็นได้ชัดว่าปลั๊กอิน Jenkins ดูเหมือนจะไม่น่าเชื่อถือมากนัก
สถานะการเปิดตัว kubectl การปรับใช้แอปการปรับใช้ --namespace app-namespace --watch --timeout=5m
นอกจากนี้เรายังสังเกตเห็นว่าการปรับใช้อาจเกิดข้อผิดพลาดได้และบริการจะถูกสร้างขึ้นในขั้นตอนต่อไปซึ่งจะทำให้แอปพลิเคชันขัดข้อง แต่นี่เป็นอีกกรณีหนึ่งที่เราต้องหาวิธีแก้ไข ซึ่งอาจเกี่ยวข้องกับปลั๊กอิน Jenkins
ของเรา การปรับใช้ YAML มีลักษณะดังนี้:
apiVersion: แอป/v1
ประเภท: การปรับใช้
ข้อมูลเมตา:
  ชื่อ: แอพ-ฟ้า
  เนมสเปซ: แอป
  ป้ายกำกับ: {app.kubernetes.io/managed-by: graphite-jenkins-gke}
ข้อมูลจำเพาะ:
  ความคืบหน้า Deadline วินาที: 600
  แบบจำลอง: 3
  ตัวเลือก:
    matchLabels: {แอป: แอปสีน้ำเงิน}
  แม่แบบ:
    ข้อมูลเมตา:
      ป้ายกำกับ: {แอป: แอปสีน้ำเงิน}
    ข้อมูลจำเพาะ:
      automountServiceAccountToken: จริง
      ตู้คอนเทนเนอร์:
        ภาพ: eu.gcr.io/container-registry-project/app:latest
        imagePullPolicy: เสมอ
        ชื่อ: แอพ
        พอร์ต:
        - {containerPort: 8080, ชื่อ: http, โปรโตคอล: TCP}
        livenessProbe:
          httpรับ:
            เส้นทาง: /สุขภาพ
            พอร์ต: 8080
          initialDelaySeconds: 15
          periodSeconds: 10
        ความพร้อม Probe:
          httpรับ:
            เส้นทาง: /
            พอร์ต: 8080
          initialDelaySeconds: 15
          periodSeconds: 5
        ทรัพยากร:
          ขีดจำกัด: {cpu: 500m, พื้นที่เก็บข้อมูลชั่วคราว: 1Gi, หน่วยความจำ: 512Mi}
          คำขอ: {cpu: 500m, พื้นที่เก็บข้อมูลชั่วคราว: 1Gi, หน่วยความจำ: 512Mi}
        บริบทความปลอดภัย:
          allowPrivilegeEscalation: เท็จ
          ความสามารถ:
            ดร็อป: [NET_RAW]
          สิทธิพิเศษ: เท็จ
          readOnlyRootFilesystem: เท็จ
          runAsNonRoot: เท็จ
      นโยบายรีสตาร์ท: เสมอ
      ชื่อตัวกำหนดตารางเวลา: ตัวกำหนดตารางเวลาเริ่มต้น
      บัญชีบริการ: แอป
      ชื่อบัญชีบริการ: แอป
ของเรา บริการ YAML มีลักษณะดังนี้:
api เวอร์ชัน: v1
ชนิด:บริการ
ข้อมูลเมตา:
  ชื่อ: แอพ-บริการ
  เนมสเปซ: แอป
ข้อมูลจำเพาะ:
  ตัวเลือก:
    แอพ: แอพ-blue
  พอร์ต:
    - โปรโตคอล: TCP
      พอร์ต: 80
      พอร์ตเป้าหมาย: 8080
เราเพียงแค่สลับตัวเลือก - แอป: ในบริการ ไปที่การปรับใช้แอปสีน้ำเงินหรือแอปสีเขียวเพื่อสลับไปยังการปรับใช้ใหม่ แต่มักจะพบข้อผิดพลาดเล็กน้อยเมื่อทำเช่นนี้ ใครก็ตามมีความคิดว่าเราคืออะไร ทำผิด?