---
schema_version: "1"
id: 5e52aa4d62dbfd8898cab7318c14063591b927620edb9e2af4b4450225ab2757
title: การปรับขนาดแบบไดนามิกในที่เก็บ - แบ็กกราวเดอร์ของ Tableau Server
collection: tableau
version: next
locale: th-th
portal_url: https://docs.salesforce.com/tableau/next/th-th/server-linux/server-backgrounder-autoscaling.md
canonical_url: https://help.tableau.com/v0.0/server-linux/th-th/server-backgrounder-autoscaling.htm
source_site: help.tableau.com
content_type: documentation
content_hash: 857531df39bc6daa8967824d8fa9578cef87b4e5f901c20ed37dd3a54b778e98
description: Configure dynamic scaling of Backgrounders for Tableau Server in a container.
---
[ข้ามไปยังเนื้อหาหลัก](#main-content)

# การปรับขนาดแบบไดนามิกในที่เก็บ - แบ็กกราวเดอร์ของ Tableau Server

## บทนำ

การปรับขนาดแบบไดนามิกของแบ็กกราวเดอร์ในที่เก็บช่วยให้สามารถใช้กลยุทธ์การปรับขนาดต่างๆ กับแบ็กกราวเดอร์และงานที่กำหนดเวลาไว้ใน Tableau Server ได้ การปรับขนาดอัตโนมัติในบริบทนี้หมายความว่าบริการต่างๆ จะสามารถได้รับการปรับขนาดได้อย่างอิสระเพื่อจัดการกับภาระงานที่หลากหลายโดยไม่ต้องมีการแทรกแซงของมนุษย์หรือส่งผลกระทบต่อเวลาทำงานของระบบเซิร์ฟเวอร์อื่นๆ ที่เก็บของ Tableau Server ที่มีโหนดที่สมบูรณ์ของกระบวนการ Tableau Server จะยังคงทำงานเป็นระบบ Monolithic แต่ชุดบริการที่เก็บอิสระแบบแยกส่วนที่มีขนาดเล็กกว่า ซึ่งประกอบด้วยบทบาทบริการ "แบ็กกราวเดอร์" จะสามารถปรับขนาดแบบไดนามิกและจัดการโหลดการคำนวณที่ปกติจะถูกจัดการโดยที่เก็บ Tableau Server ได้ บริการแบ็กกราวเดอร์มีหน้าที่รับผิดชอบในการประมวลผลงานของระบบซึ่งรวมถึงการรีเฟรช/สร้างข้อมูลที่แยก การส่งการสมัครรับข้อมูล การตรวจสอบการแจ้งเตือนข้อมูล และงานบำรุงรักษาจำนวนมาก ตัวอย่างเช่น หากบางครั้งการรีเฟรชชุดข้อมูลจำนวนมากหรือการคำนวณการแจ้งเตือนข้อมูลที่มีราคาสูงเป็นจำนวนเท่าๆ กันเป็นประโยชน์ต่อคุณ คุณจะสามารถใช้ประโยชน์จาก Kubernetes เพื่อขยายกำลังการประมวลผลเพื่อทำงานเหล่านั้นให้เสร็จลุล่วงได้อย่างคุ้มค่าได้แล้ว คู่มือนี้ครอบคลุมข้อกำหนดในการกำหนดค่าและการปรับใช้สำหรับการปรับขนาดแบ็กกราวเดอร์อัตโนมัติใน Kubernetes เอกสารนี้เป็นส่วนเสริมของ [Tableau Server ในคอนเทนเนอร์](https://help.tableau.com/v0.0/server-linux/th-th/server-in-container.htm)

## ข้อกำหนดเบื้องต้น

การปรับขนาดแบ็กกราวเดอร์อัตโนมัติใช้ได้เฉพาะใน Kubernetes และอิงตาม Tableau Server ในที่เก็บ ในการใช้ฟีเจอร์การปรับขนาดแบ็กกราวเดอร์อัตโนมัติ คุณต้องมีคุณสมบัติตรงตามข้อกำหนดเบื้องต้นบางประการ:

- Tableau Server จะต้องมีความสามารถ Advanced Management หากต้องการข้อมูลเพิ่มเติม โปรดดู [เกี่ยวกับ Tableau Advanced Management ใน Tableau Server](https://help.tableau.com/v0.0/server-linux/th-th/itm_intro.htm)
- คุณต้องใช้การให้สิทธิ์อนุญาตตามบทบาท ไม่รองรับใบอนุญาตตามคอร์ หากต้องการรายละเอียดเกี่ยวกับการให้สิทธิ์อนุญาต โปรดดู [การทำความเข้าใจรุ่นใบอนุญาตและคีย์ผลิตภัณฑ์](https://help.tableau.com/v0.0/server-linux/th-th/license_product_keys.htm)
- ต้องเปิดใช้งานฟีเจอร์ Advanced Management ต่อไปนี้:
    - [ที่จัดเก็บไฟล์ภายนอกของ Tableau Server](https://help.tableau.com/v0.0/server-linux/th-th/server_external_filestore_storage.htm)
    - [ที่เก็บภายนอกของ Tableau Server](https://help.tableau.com/v0.0/server-linux/th-th/server_external_repo.htm)
- คุณต้องมีคลัสเตอร์ Kubernetes เวอร์ชัน 1.20 ขึ้นไป และเข้าใจวิธีใช้และจัดการคลัสเตอร์ดังกล่าว

## ข้อจำกัด

- ฟีเจอร์นี้ทำงานเป็นส่วนหนึ่งของการปรับใช้บน Linux เท่านั้น
- การปรับขนาดแบ็กกราวเดอร์อัตโนมัติไม่รองรับงานลำดับงาน งานลำดับงานจะได้รับการจัดการโดยบริการแบ็กกราวเดอร์ที่จะทำงานต่อไปในที่เก็บ Tableau Server

## การสร้าง Tableau Server และอิมเมจจากพ็อดสำหรับแบ็กกราวเดอร์

ขั้นตอนแรกสำหรับการใช้การปรับขนาดแบ็กกราวเดอร์อัตโนมัติในที่เก็บคือการสร้างอิมเมจของบริการที่ประกอบเป็นการติดตั้ง Tableau Server อิมเมจเหล่านี้จะรวมถึงอิมเมจของ Tableau Server รวมทั้งอิมเมจสำหรับแบ็กกราวเดอร์แยกต่างหากและบริการสนับสนุน คุณควรใช้เครื่องมือสร้างเดียวกันกับที่ใช้ในการสร้างอิมเมจที่เก็บ Tableau Server แบบ all-in-one ที่ครอบคลุม แต่เครื่องมือต้องเป็นเวอร์ชัน 2022.3.0 หรือใหม่กว่า นอกจากนั้นยังต้องมีใบอนุญาตใช้ Advanced Management และจำเป็นต้องใช้แฟล็กพิเศษเมื่อสร้างอิมเมจอีกด้วย

1. ในการสร้างอิมเมจของบริการ ให้เรียกคำสั่งนี้:
    
    build-image --accepteula -i <installer> --backgrounder-images
    
    คำสั่งนี้จะสร้าง Tableau Server และอิมเมจใหม่ 4 รายการ อิมเมจเพิ่มเติมเหล่านี้จะมีบริการต่างๆ ที่ประกอบเป็นพ็อดแบ็กกราวเดอร์ที่ปรับขนาดอัตโนมัติได้ใหม่
    
    รายการคำสั่ง `docker images` ที่อิมเมจสร้างขึ้นในที่เก็บด็อกเกอร์ภายใน:
    
    hyper                          20214.21.1117.1006             52fd9843c178   10 seconds ago
    gateway                        20214.21.1117.1006             2308e602a2a3   11 seconds ago
    backgrounder                   20214.21.1117.1006             4540e459cf23   12 seconds ago
    dataserver                     20214.21.1117.1006             c5345ed47f51   12 seconds ago
    tableau\_server\_image           20214.21.1117.1006             b27817047dd1   7 minutes ago
    
    อิมเมจ Hyper, เกตเวย์, แบ็กกราวเดอร์ และเซิร์ฟเวอร์ข้อมูลจะประกอบเป็นพ็อดแบ็กกราวเดอร์ใหม่ ไดรเวอร์ที่กำหนดเอง สคริปต์การติดตั้ง และพร็อพเพอร์ตี้จะถูกแชร์กับทั้ง 5 อิมเมจเหล่านี้ หากต้องการข้อมูลเพิ่มเติม โปรดดู [การปรับแต่งอิมเมจ](https://help.tableau.com/v0.0/server-linux/th-th/server-in-container_setup-tool.htm#CustomizingImage)
2. เผยแพร่อิมเมจเหล่านี้ทั้งหมดไปยังที่เก็บอิมเมจภายในของคุณเพื่อปรับใช้

## คู่มือการนำไปใช้งาน

ข้อมูลต่อไปนี้จะให้บริบทเกี่ยวกับวิธีการปรับใช้ Tableau Server ในที่เก็บและที่ใช้การปรับขนาดแบ็กกราวเดอร์อัตโนมัติ ข้อมูลนี้จะถือว่าคุณเข้าใจและรู้วิธีปรับใช้ Tableau Server ในที่เก็บที่มีอยู่ในตัวแล้ว หากต้องการข้อมูลเพิ่มเติม โปรดดู[Tableau Server ในคอนเทนเนอร์](https://help.tableau.com/v0.0/server-linux/th-th/server-in-container.htm) ไฟล์การกำหนดค่า Kubernetes 3 ไฟล์ในส่วนการกำหนดค่า Kubernetes เป็นเทมเพลตที่ใช้ตั้งค่าการปรับใช้งาน ส่วนอื่นๆ ในคู่มือนี้จะอธิบายข้อกำหนดและรายละเอียดของการปรับใช้

การปรับใช้ Tableau Server และการปรับใช้แบ็กกราวเดอร์อัตโนมัติควรจะง่ายพอๆ กับการปรับใช้ไฟล์การกำหนดค่า Kubernetes ที่แสดงขึ้นที่ด้านล่างของคู่มือ:

kubectl apply -f <tableau-kubeconfig-dir>

### งานของแบ็กกราวเดอร์

พ็อดแบ็กกราวเดอร์จะช่วย Tableau Server ในที่เก็บคำนวณปริมาณงานที่กำหนดเวลาเพิ่มเติมควบคู่กันได้ แบ็กกราวเดอร์จะจัดการการรีเฟรชการแยกข้อมูล การสมัครรับข้อมูล การแจ้งเตือน ลำดับงาน และปริมาณงานของระบบ การกระจายงานระหว่างพ็อดแบ็กกราวเดอร์หมายความว่าจะมีทรัพยากรการประมวลผลมากขึ้นสำหรับ Tableau Server ในการจัดการงานอื่นๆ อย่างเช่น กิจกรรมของผู้ใช้แบบโต้ตอบ เช่น การแสดงผลเวิร์กบุ๊กและแดชบอร์ด งานลำดับงานเป็นงานของแบ็กกราวเดอร์ประเภทเดียวที่ไม่ทำงานในแบ็กกราวเดอร์ หากต้องการรายละเอียดเกี่ยวกับงานของแบ็กกราวเดอร์ โปรดดู [การจัดการงานพื้นหลังใน Tableau Server](https://help.tableau.com/v0.0/server-linux/th-th/server_backgrounder_job_management.htm)

พ็อดแบ็กกราวเดอร์สามารถจัดการปริมาณงานได้ทุกประเภท ยกเว้นงานลำดับงาน ซึ่งต้องเรียกใช้ในที่เก็บ Tableau Server หลัก ซึ่งจะเรียกใช้บริการแบ็กกราวด์ต่อไป

ฟีเจอร์บทบาทของโหนดช่วยให้ผู้ใช้มีความยืดหยุ่นในการใช้พ็อดแบ็กกราวเดอร์สำหรับงานบางประเภทโดยเฉพาะ ฟีเจอร์นี้เป็นส่วนขยายของฟีเจอร์บทบาทของโหนดบน Tableau server คำอธิบายโดยละเอียดเกี่ยวกับบทบาทของโหนดต่างๆ สามารถดูได้ที่นี่ โปรดทราบว่า โดยค่าเริ่มต้นแล้ว งานลำดับงานจะถูกปิดใช้งานบนพ็อดแบ็กกราวเดอร์ (เช่น บทบาทถูกตั้งค่าเป็น "ไม่มีลำดับงาน") เนื่องจากพ็อดแบ็คกราวเดอร์ไม่สามารถเรียกใช้งานลำดับงานได้

ในการตั้งค่าบทบาทของโหนดสำหรับแบ็กกราวเดอร์ คุณต้องตั้งค่าตัวแปรสภาพแวดล้อม `NODE_ROLES` เป็นส่วนหนึ่งของ kubeconfig สำหรับที่เก็บที่เรียกใช้บริการแบ็กกราวเดอร์ ตัวอย่างเช่น หากต้องการตั้งค่าให้แบ็กกราวเดอร์เรียกใช้เฉพาะงานรีเฟรชการแยกข้อมูล ให้ตั้งค่าตัวแปรสภาพแวดล้อม `NODE_ROLES` เป็น extract-refreshes ดังแสดงด้านล่าง:

#### NODE\_ROLE\_CONFIG

containers:  
      - name: backgrounder  
        image: <backgrounder\_image> # Backgrounder Image  
        ports:  
        - containerPort: 8600  
        volumeMounts:  
        - name: logmount  
          mountPath: /var/log/tableau  
        - name: clone-volume  
          mountPath: /docker/clone  
        - name: dataengine-volume  
          mountPath: /docker/dataengine  
        - name: temp  
          mountPath: /var/opt/tableau/tableau\_server/data/tabsvc/temp  
        env:  
          - name: ROOT\_LOG\_DIR  
            value: /var/log/tableau  
          - name: CLONE\_ARTIFACT\_DIR  
            value: /docker/clone/clone-artifacts  
          - name: FILESTORE\_MOUNT\_PATH  
            value: /docker/dataengine  
          - name: NODE\_ROLES  
            value: extract-refreshes

พ็อด Tableau Server จะมีการกำหนดค่าแบ็กกราวเดอร์อย่างน้อยหนึ่งรายการในโทโพโลยี ซึ่งจำเป็นต้องทำเช่นนี้เพื่อให้แน่ใจว่ามีที่สำหรับเรียกใช้งานแบ็กกราวเดอร์เสมอ โดยค่าเริ่มต้น TSM จะกำหนดให้ต้องมีแบ็กกราวเดอร์ที่สามารถจัดการงานแบ็กกราวเดอร์ทุกบทบาทได้ ในบางสถานการณ์ คุณอาจต้องการให้พ็อดแบ็กกราวเดอร์จัดการงานทุกๆ รายการของประเภทงานที่กำหนด ในการดำเนินการดังกล่าว คุณต้องตั้งค่าคีย์การกำหนดค่าเซิร์ฟเวอร์ `topology.roles_handle_all_jobs_constraint_disabled` เป็น `true` ซึ่งจะปิดใช้งานข้อกำหนดที่ให้โทโพโลยี TSM จัดการกับงานทุกประเภท เมื่อตั้งค่าพารามิเตอร์เช่นนี้ บทบาทของแบ็กกราวเดอร์สำหรับอินสแตนซ์แบ็กกราวเดอร์ของ Tableau Server จะสามารถตั้งค่าเป็น `no-extract-refreshes` และบทบาทสำหรับพ็อดแบ็กกราวเดอร์สามารถตั้งค่าเป็น `extract-refreshes` ได้ ซึ่งจะทำให้มั่นใจได้ว่างานการรีเฟรชการแยกข้อมูลทั้งหมดจะทำงานบนพ็อดแบ็กกราวเดอร์เท่านั้น

**หมายเหตุ:** การปิดใช้งานข้อจำกัดนี้จะทำให้คุณสามารถกำหนดค่าบทบาทได้ในระดับที่อาจไม่มีการกำหนดเวลาให้กับงานบางประเภทเลยก็ได้ ต้องตั้งค่าการกำหนดค่าบทบาทของแบ็กกราวเดอร์และงานของแบ็กกราวเดอร์ของ TSM อย่างระมัดระวัง เนื่องจาก TSM จะไม่ตรวจสอบยืนยันอีกต่อไปว่าสามารถกำหนดเวลางานประเภทแบ็กกราวเดอร์ทั้งหมดได้หรือไม่

### พ็อด Tableau Server ในที่เก็บ

ที่เก็บที่มี Tableau Server เป็นส่วนหนึ่งของพ็อดการปรับขนาดแบ็กกราวเดอร์อัตโนมัติจะปรับใช้ในลักษณะเดียวกันกับ Tableau Server ในที่เก็บที่มีอยู่ มีการเปลี่ยนแปลงข้อกำหนดที่สำคัญบางประการ:

- กำหนดให้_ต้อง_แชร์ไฟล์เครือข่ายเพื่อถ่ายโอนการกำหนดค่าระหว่างที่เก็บ Tableau Server และพ็อดแบ็กกราวเดอร์
- คุณต้องเปิดใช้งานและใช้ฟีเจอร์ที่เก็บไฟล์ภายนอก นอกจากนี้ยังต้องมีการแชร์ไฟล์เครือข่ายโดยเฉพาะ

### พ็อดแบ็กกราวเดอร์

พ็อดแบ็กกราวเดอร์ประกอบด้วยที่เก็บบริการอิสระ 4 รายการที่ทำงานร่วมกัน: **เกตเวย์**, **Hyper**, **เซิร์ฟเวอร์ข้อมูล** และ**แบ็กกราวเดอร์** คุณสามารถปรับใช้พ็อดเหล่านี้ได้เหมือนกับพ็อดที่เก็บ Kubernetes ทั่วไป โดยพ็อดดังกล่าวจะมีข้อกำหนดดังต่อไปนี้:

- พ็อดแบ็กกราวเดอร์ต้องสามารถเข้าถึงโหนด Tableau Server ได้โดยใช้การแก้ปัญหา DNS เกี่ยวกับชื่อโฮสต์
- ต้องจัดเตรียมที่เก็บไฟล์ภายนอกและการแชร์ไฟล์เครือข่ายการโคลนไว้

**หมายเหตุ:** พ็อดแบ็กกราวเดอร์ได้รับการกำหนดค่าด้วย init-container ให้รอจนกว่าที่เก็บ Tableau Server จะสร้างเอาต์พุตการกำหนดค่าการโคลนได้สำเร็จก่อนที่จะดำเนินการทำงานต่อไป

#### บันทึก

บริการพ็อดแบ็กกราวเดอร์ (เช่น Tableau Server) ยังคงเขียนบันทึกส่วนใหญ่ไปยังดิสก์ เนื่องจากพ็อดแบ็กกราวเดอร์สามารถปรับขนาดเข้าและออกได้ จึงจำเป็นอย่างยิ่งที่จะต้องตรวจสอบให้แน่ใจว่าบันทึกจะถูกจัดเก็บนอกพ็อด ลูกค้าจำนวนมากที่มีสภาพแวดล้อม K8 อยู่แล้วจะใช้บริการการรวมบันทึกบางประเภทอยู่แล้ว ทั้งนี้เพื่อรวบรวมบันทึกจากพ็อดที่พวกเขาปรับใช้ ตัวอย่างของบริการการรวมบันทึกคือ Splunk และ Fluentd เราขอแนะนำอย่างยิ่งให้ลูกค้าใช้บริการรวมบันทึกบางประเภทเพื่อรวบรวมบันทึกจากพ็อดแบ็กกราวเดอร์ของตนเอง เพื่อให้การจัดการบันทึกเป็นไปได้ง่ายขึ้น kubeconfig ที่เราจัดเตรียมไว้จะกำหนดค่าแต่ละบริการในพ็อดให้เขียนไปยังโวลุ่มบันทึกที่แชร์ พาธของไดเรกทอรีในที่เก็บบริการแต่ละรายการจะถูกระบุโดยตัวแปรสภาพแวดล้อม `ROOT_LOG_DIR`

หากคุณต้องการเปิดกรณีการสนับสนุนและจัดเตรียมบันทึก คุณจะต้องจัดเตรียมบันทึกสองชุด: ziplogs ที่รวบรวมจากที่เก็บเซิร์ฟเวอร์หลัก และบันทึกจากพ็อดแบ็กกราวเดอร์ (ไม่ว่าจะดึงมาจากบริการรวมบันทึกของคุณ หรือใช้กระบวนการจัดการด้วยตนเองด้านล่าง)

สำหรับลูกค้าที่ไม่สามารถใช้บริการรวมบันทึกได้ สามารถดึงบันทึกด้วยตนเองจากพ็อดได้

**หมายเหตุ:** บันทึกจากพ็อดใดๆ ที่ไม่ได้ใช้ Persistent Volume Claim สำหรับโวลุ่มที่มีบันทึกจะสูญหายไปเมื่อพ็อดถูกลดขนาดลง!

คุณจะสามารถดูบันทึกที่เกี่ยวข้องทั้งหมดได้ที่ไดเรกทอรี `/var/log/tableau` (กำหนดค่าได้ผ่านตัวแปรสภาพแวดล้อม `ROOT_LOG_DIR`) ภายในพ็อดแบ็กกราวเดอร์ เราขอแนะนำให้คุณติดตั้ง PersistantVolumeClaim ที่ตำแหน่งนี้ เพื่อให้บันทึกพร้อมใช้งานเมื่อพ็อดไม่ทำงาน

##### การรวบรวมบันทึกเมื่อพ็อดแบ็กกราวเดอร์กำลังทำงาน:

สร้างไฟล์ tar ของบันทึกภายในที่เก็บ:

kubectl exec -it <backgrounder-pod-name> -- bash -c "tar -czf /docker/user/backgrounder-pod-logs.tar.gz /var/log/tableau"

คัดลอกไฟล์ tar ไปยังภายนอกที่เก็บ:

kubectl cp <backgrounder-pod-name>:docker/user/backgrounder-pod-logs.tar.gz ./backgrounder-pod-logs.tar.gz

##### การรวบรวมบันทึกเมื่อพ็อดแบ็กกราวเดอร์ปิดอยู่ (หรือไม่สามารถใช้งานได้)

แนบพ็อดที่ใช้งานได้ยาวนานด้วยการติดตั้ง PersistantVolumeClaim ซึ่งใช้สำหรับบันทึกการปรับใช้พ็อดแบ็กกราวเดอร์ ตัวอย่างการกำหนดค่าหนึ่งตัวอย่าง:

apiVersion: v1  
kind: Pod  
metadata:  
  name: <name>  
  namespace: <namespace>  
spec:  
  containers:  
  - name: get-logs-pod  
    image: busybox:1.28  
    securityContext:  
      runAsUser: 0  
      allowPrivilegeEscalation: true  
    command: \['sh', '-c', "while :; do sleep 5; done"\]  
    volumeMounts:  
    - name: logmount  
      mountPath: /var/log/tableau
restartPolicy: Never  
volumes:  
  - name: logmount  
    persistentVolumeClaim:  
      claimName: logvolume

สร้างไฟล์ tar ของบันทึกภายในที่เก็บ:

kubectl exec -it <backgrounder-pod-name> -- bash -c "tar -czf /backgrounder-pod-logs.tar.gz /var/log/tableau"

คัดลอกไฟล์ tar ไปยังภายนอกที่เก็บ:

kubectl cp <backgrounder-pod-name>:/backgrounder-pod-logs.tar.gz ./backgrounder-pod-logs.tar.gz

#### การเปลี่ยนการกำหนดค่าแบบสด

หากคุณทำการเปลี่ยนแปลงการกำหนดค่าใน Tableau Server ในที่เก็บ (เช่น การใช้บรรทัดคำสั่ง tsm) และต้องการให้การเปลี่ยนแปลงการกำหนดค่าเหล่านั้นแสดงในพ็อดแบ็กกราวเดอร์ คุณต้องเรียกใช้คำสั่ง `[tsm settings clone](https://help.tableau.com/v0.0/server-linux/th-th/cli_settings_tsm.htm#TSMSettingsClone)` เพื่อสร้างไฟล์การกำหนดค่าการโคลนชุดใหม่ ("เพย์โหลดการโคลน")

1. ใช้ TSM เพื่อทำการเปลี่ยนแปลงการกำหนดค่าใน Tableau Server ในพ็อดที่เก็บและปรับใช้การเปลี่ยนแปลงการกำหนดค่ากับเซิร์ฟเวอร์
2. เรียกใช้คำสั่งต่อไปนี้ในพ็อด Tableau Server ในที่เก็บ
    
    \## Run this command in the Tableau Server in a Container pod.
    tsm settings clone -d $CLONE\_ARTIFACT\_DIR
    
    คำสั่งนี้จะสร้างชุดไฟล์การกำหนดค่าใหม่และเขียนลงในตำแหน่งไดรฟ์ Clone NFS
3. ปรับใช้พ็อดแบ็กกราวเดอร์ของคุณอีกครั้ง ควรกำหนดค่าพ็อดให้ใช้ไดรฟ์ Clone NFS และพ็อดจะรับการกำหนดค่าใหม่นั้นมาใช้

### กลยุทธ์การปรับขนาด

พ็อดแบ็กกราวเดอร์สามารถปรับขนาดได้ใน Kubernetes โดยใช้เทคนิคและกลยุทธ์ที่หลากหลาย เราจะให้ตัวอย่างกลยุทธ์การปรับขนาดที่เปลี่ยนขนาดพูลของพ็อดแบ็กกราวเดอร์ตามกำหนดเวลา

โปรดทราบว่าการใช้ CPU และหน่วยความจำ**ไม่ใช่**ตัวชี้วัดที่ดีสำหรับการปรับขนาดพ็อดแบ็กกราวเดอร์ การใช้หน่วยความจำและ CPU ไม่ได้แสดงถึงความต้องการด้านโหลดงานโดยรวมบนคลัสเตอร์อย่างถูกต้อง ตัวอย่างเช่น พ็อดแบ็กกราวเดอร์อาจใช้ประโยชน์ได้สูงสุดเพื่อรีเฟรชการแยกข้อมูล แต่ไม่มีงานเพิ่มเติมรออยู่ในคิวงานแบ็กกราวเดอร์ ในกรณีนี้ การปรับขนาดอัตโนมัติจะไม่ปรับปรุงอัตราความเร็วการประมวลผลงาน

#### การปรับขนาดตามกำหนดเวลา

กลไกของ Kubernetes มาตรฐานที่ใช้งาน Cron ช่วยให้คุณกำหนดเวลาโซลูชันการปรับขนาดได้

ตัวอย่างการกำหนดค่า Kubernetes สำหรับการดำเนินการนี้มีอยู่ในส่วนการกำหนดค่า Kubernetes ด้านล่าง

## การกำหนดค่า Kubernetes

### ตัวแปรสภาพแวดล้อมใหม่

นอกเหนือจากตัวแปรสภาพแวดล้อมที่เก็บ Tableau Server มาตรฐานแล้ว (โปรดดู [ตัวเลือกการกำหนดค่าเบื้องต้น](https://help.tableau.com/v0.0/server-linux/th-th/server-in-container_image.htm#InitialConfigOptions-container)) ยังมีตัวแปรสภาพแวดล้อมใหม่ที่จำเป็นบางอย่างที่ต้องตั้งค่าในการกำหนดค่า Kubernetes อีกด้วย

<table style="width: 100%;mc-table-style: url('Resources/TableStyles/Basic-Border-Light.css');" class="TableStyle-Basic-Border" cellspacing="0"><colgroup><col class="TableStyle-Basic-Border-Column-Column1" style="width: 25%;"><col class="TableStyle-Basic-Border-Column-Column1" style="width: 25%;"><col class="TableStyle-Basic-Border-Column-Column1" style="width: 50%;"></colgroup><thead><tr class="TableStyle-Basic-Border-Head-Header1"><th class="TableStyle-Basic-Border-HeadE-Column1-Header1">ตัวแปรสภาพแวดล้อม</th><th class="TableStyle-Basic-Border-HeadE-Column1-Header1">ค่าที่แนะนำ</th><th class="TableStyle-Basic-Border-HeadD-Column1-Header1">คำอธิบาย</th></tr></thead><tbody><tr class="TableStyle-Basic-Border-Body-Body1"><td class="TableStyle-Basic-Border-BodyE-Column1-Body1"><code>FILESTORE_MOUNT_PATH</code></td><td class="TableStyle-Basic-Border-BodyE-Column1-Body1"><code>/docker/dataengine</code></td><td class="TableStyle-Basic-Border-BodyD-Column1-Body1">ตำแหน่งการติดตั้งไดเรกทอรีที่เก็บไฟล์ภายนอก ไดเรกทอรีนี้ควรชี้ไปที่ไดเรกทอรี dataengine NFS ที่ติดตั้งอยู่ภายในแต่ละที่เก็บ Tableau ที่ปรับใช้ หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับที่เก็บไฟล์ภายนอก โปรดดู <a href="https://help.tableau.com/v0.0/server-linux/th-th/server_external_filestore_storage.htm" class="xref">ที่จัดเก็บไฟล์ภายนอกของ Tableau Server</a> ค่านี้ควรเหมือนกันสำหรับ Tableau Server ในพ็อดที่เก็บและพ็อดแบ็กกราวเดอร์</td></tr><tr class="TableStyle-Basic-Border-Body-Body1"><td class="TableStyle-Basic-Border-BodyE-Column1-Body1"><code>CLONE_ARTIFACT_DIR</code></td><td class="TableStyle-Basic-Border-BodyE-Column1-Body1"><code>/docker/clone/clone-artifacts</code></td><td class="TableStyle-Basic-Border-BodyD-Column1-Body1">โคลนตำแหน่งการติดตั้งไดเรกทอรีการกำหนดค่า ไดเรกทอรีนี้ควรชี้ไปที่ไดเรกทอรี NFS ที่ติดตั้งอยู่ภายในที่เก็บ Tableau แต่ละรายการ Tableau Server จะส่งข้อมูลการกำหนดค่าที่พ็อดแบ็กกราวเดอร์ใช้เพื่อให้เป็นสมาชิกของคลัสเตอร์</td></tr><tr class="TableStyle-Basic-Border-Body-Body1"><td class="TableStyle-Basic-Border-BodyB-Column1-Body1"><code>ROOT_LOG_DIR</code></td><td class="TableStyle-Basic-Border-BodyB-Column1-Body1"><code>/var/log/tableau</code></td><td class="TableStyle-Basic-Border-BodyA-Column1-Body1">(พ็อดแบ็กกราวเดอร์เท่านั้น)<p>ตำแหน่งไดเรกทอรีบันทึกทั่วไปสำหรับบริการทั้งหมดที่ทำงานในพ็อดแบ็กกราวเดอร์</p></td></tr></tbody></table>

### พอร์ตของพ็อดแบ็กกราวเดอร์

พ็อดแบ็กกราวเดอร์ประกอบด้วยบริการ 4 รายการ โดยแต่ละรายการจะถูกตั้งค่าให้ทำงานบนพอร์ตที่ระบุตามค่าเริ่มต้น หากคุณต้องการเปลี่ยนพอร์ตที่บริการเชื่อมต่อภายในที่เก็บ คุณต้องระบุคีย์ที่สอดคล้องกับการกำหนดพอร์ตของบริการ ในกรณีส่วนใหญ่แล้วการกำหนดค่าประเภทนี้ไม่ควรเป็นสิ่งจำเป็น เว้นแต่จะมีที่เก็บแบบ Sidecar หรือส่วนประกอบเพิ่มเติมอื่นๆ ที่ถูกเพิ่มลงในพ็อดและมีความขัดแย้งกับพอร์ตของบริการ

| ตัวแปรสภาพแวดล้อมของพอร์ต | ค่าเริ่มต้น |
| --- | --- |
| `BACKGROUNDER_PORT` | `8600` |
| `DATASERVER_PORT` | `8400` |
| `HYPER_PORT` | `8200` |
| `GATEWAY_PORT` | `8080` |

เซิร์ฟเวอร์ข้อมูลยังใช้พอร์ต 8300 ซึ่งไม่สามารถกำหนดค่าใหม่ได้อีกด้วย

### ไดเรกทอรีเครือข่ายที่แชร์

การปรับใช้ Tableau Server นี้ต้องใช้การแชร์เครือข่ายสองรายการเพื่อให้ทำงานได้อย่างถูกต้อง โปรดทราบว่าในเทมเพลตการกำหนดค่า Tableau Server และแบ็กกราวเดอร์ของ Kubernetes ทั้งหมด จะมีไดเรกทอรีเครือข่ายเหล่านี้อยู่:

- **ไดเรกทอรี Dataengine** (`FILESTORE_MOUNT_PATH` ): พ็อดแบ็กกราวเดอร์ต้องใช้ฟีเจอร์ที่เก็บไฟล์ภายนอก การแชร์เครือข่ายนี้จะมีข้อมูลที่แยกและองค์ประกอบตามไฟล์อื่นๆ ที่จะแชร์ระหว่าง Tableau Server และพ็อดแบ็กกราวเดอร์
- **ไดเรกทอรีการโคลน** (`CLONE_ARTIFACT_DIR` ): Tableau Server จะเขียนข้อมูลการเชื่อมต่อและการกำหนดค่าแบบคงที่ไปยังการแชร์เครือข่าย พ็อดแบ็กกราวเดอร์จะใช้ข้อมูลนี้เพื่อให้เป็นสมาชิกของคลัสเตอร์ Tableau Server ในรุ่นก่อนเผยแพร่ในอนาคต การกำหนดค่านี้จะรวมอยู่ในวงจรชีวิตมาตรฐานของการกำหนดค่า Kubernetes ด้วย

**สำคัญ:** หากคุณต้องการปรับใช้คลัสเตอร์ใหม่ทั้งหมด (รวมถึงที่เก็บ Tableau Server ใหม่) คุณต้องล้างเนื้อหาของการติดตั้ง Clone NFS (มิฉะนั้น พ็อดแบ็กกราวเดอร์จะพยายามแนบกับเซิร์ฟเวอร์เก่า)

### ตัวอย่างการกำหนดค่า Kubernetes

**หมายเหตุ:** ตัวอย่างการกำหนดค่าจะมีการใช้โพรบความพร้อมด้วย คุณสามารถใช้โพรบความพร้อมเมื่อการปรับใช้ Tableau Server Container ของคุณเป็นการปรับใช้ TSM แบบโหนดเดียว (การปรับใช้สามารถรวมพ็อดแบ็คกราวด์ได้หลายตัว) แต่คุณไม่สามารถใช้โพรบความพร้อมกับ Tableau Server แบบหลายโหนดในการปรับใช้คอนเทนเนอร์

#### การกำหนค่าที่เก็บ Tableau Server

\---  
apiVersion: v1  
kind: Service  
metadata:  
  name: <service\_name>  
  namespace: <namespace>  
spec:  
  selector:  
    app: <service\_name>  
  ports:  
    - protocol: TCP  
      port: 8080  
      nodePort: <nodeport-number>  
      name: http  
    - protocol: TCP  
      port: 8443  
      nodePort: <nodeport-number>  
      name: https  
  type: NodePort  
\---  
apiVersion: v1  
kind: ConfigMap  
metadata:  
  name: configfile  
  namespace: <namespace>  
data:  
  config.json: |-  
    {  
      "configEntities": {  
      "identityStore": {  
        "\_type": "identityStoreType",  
        "type": "local"  
      }  
    },  
    "configKeys" : {  
      "tabadmincontroller.init.smart\_defaults.enable" : "false",  
      "wgserver.domain.ldap.starttls.enabled" : "false"  
    },  
    "daysLeftForMaintenanceExpiring" : 0  
  }  
\---  
apiVersion: v1  
kind: ConfigMap  
metadata:  
  name: extrepojsonfile  
  namespace: <namespace>  
data:  
  config.json: |-  
    {  
      "flavor":"generic",  
      "masterUsername":"<admin-name>",  
      "masterPassword":"<password>",  
      "host":"<hostname>",  
      "port":5432,  
      "prerequisiteCheckEnabled":false,  
      "requireSsl":false  
    }  
\---  
apiVersion: v1  
kind: PersistentVolumeClaim  
metadata:  
  name: datadir1  
  namespace: <namespace>  
spec:  
  accessModes:  
  - ReadWriteOnce  
  resources:  
    requests:  
    storage: 50Gi  
\---  
\# This is required for multi-node tableau server in container  
apiVersion: v1  
kind: PersistentVolume  
metadata:  
  name: bootstrapnfs  
  namespace: <namespace>  
spec:  
  accessModes:  
    - ReadWriteMany  
  capacity:  
    storage: 1Gi  
  nfs:  
    server: <nfs-ip>  
    path: <mount-path>  
\---  
\# This is required for multi-node tableau server in container  
apiVersion: v1  
kind: PersistentVolumeClaim  
metadata:  
  name: bootstrapnfs  
  namespace: <namespace>  
spec:  
  accessModes:  
    - ReadWriteMany  
  storageClassName: ""  
  resources:  
    requests:  
      storage: 1Mi  
\---  
apiVersion: v1  
kind: PersistentVolumn  
metadata:  
  name: clonenfs  
  namespace: <namespace>  
spec:  
  accessModes:  
    - ReadWriteMany  
capacity:  
  storage: 1Gi  
nfs:  
  server: <nfs-ip>  
  path: <mount-path>  
\---  
apiVersion: v1  
kind: PersistentVolumeClaim  
metadata:  
  name: clonenfs  
  namespace: <namespace>  
spec:  
  accessModes:  
    - ReadWriteMany  
  storageClassName: ""  
  resources:  
    requests:  
      storage: 1Mi  
\---  
apiVersion: v1  
kind: PersistentVolume  
metadata:  
    name: dataenginenfs  
    namespace: <namespace>  
spec:  
  accessModes:  
    - ReadWriteMany  
  capacity:  
    storage: 1Gi  
  nfs:  
    server: <nfs-ip>  
    path: <namespace>  
\---  
apiVersion: v1  
kind: PersistentVolumeClaim  
metadata:  
  name: dataenginenfs  
  namespace: <namespace>  
spec:  
  accessModes:  
    - ReadWriteMany  
  storageClassName: ""  
  resources:  
    requests:  
      storage: 1Mi  
\---  
apiVersion: v1  
kind: Secret  
type: Opaque  
metadata:
  name: tableau-server-in-a-container-secrets  
  namespace: <namespace>  
stringData:  
  license\_key: <license\_key> # Tableau License Key String  
  tableau\_username: <tableau\_username> # Initial admin username in Tableau Server  
  tableau\_password: <tableau\_password> # Initial admin password  
\---  
apiVersion: apps/v1  
kind: StatefulSet  
metadata:  
  name: tableau-server  
  namespace: <namespace>  
  labels:  
    app: <service\_name>  
spec:  
  selector:  
    matchLabels:  
      app: <service\_name>  
  replicas: 1  
  serviceName: <service\_name>  
  template:  
    metadata:  
      labels:  
        app: <service\_name>  
    spec:  
      securityContext:  
        runAsUser: 999  
        fsGroup: 998  
        fsGroupChangePolicy: "OnRootMismatch"  
      terminationGracePeriodSeconds: 120  
      dnsPolicy: "None"  
      dnsConfig:  
        nameservers:  
          - <dns\_ip> # DNS IP for resolving container hostnames  
        searches:  
          - <service\_name>.<namespace>.svc.<cluster\_domain>.<example> # SRV Record  
          - <namespace>.svc.<cluster\_domain>.<example> # SRV Record  
          - svc.<cluster\_domain>.<example> # SRV Record  
          - <cluster\_domain>.<example> # SRV Record  
        options:  
          - name: ndots  
            value: "5"  
      initContainers: # init containers are optional, to clear directory content if already exists  
        - name: clean-bootstrap-dir  
          image: busybox:1.28  
          securityContext:  
            runAsUser: 0  
            allowPrivilegeEscalation: true  
          volumeMounts:  
          - name: bootstrap  
            mountPath: /docker/config/bootstrap  
          command: \['sh', '-c', 'rm -rf /docker/config/bootstrap/\* || true'\]  
        - name: clean-clone-artifacts-dir  
          image: busybox:1.28  
          securityContext:  
            runAsUser: 0  
            allowPrivilegeEscalation: true  
          volumeMounts:  
          - name: clone  
            mountPath: /docker/clone  
          command: \['sh', '-c', 'rm -rf /docker/clone/clone-artifacts || true'\]  
      containers:  
      - name: <container\_name> # Name of container  
        image: <tableau\_server\_image> # Tableau Server in Container Image  
        env:  
        - name: LICENSE\_KEY  
          valueFrom:  
            secretKeyRef:  
              name: tableau-server-in-a-container-secrets  
              key: license\_key  
        - name: FILESTORE\_MOUNT\_PATH  
          value: /docker/dataengine  
        - name: CLONE\_ARTIFACT\_DIR\_FOR\_INDEPENDENT\_CONTAINERS  
          value: /docker/clone/clone-artifacts  
        - name: SERVER\_FOR\_INDEPENDENT\_SERVICE\_CONTAINERS  
          value: "1"  
        - name: EXT\_REP\_JSON\_FILE  
          value: /docker/external-repository/config.json  
        - name: TABLEAU\_USERNAME  
          valueFrom:  
            secretKeyRef:  
              name: tableau-server-in-a-container-secrets  
              key: tableau\_username  
        - name: TABLEAU\_PASSWORD  
          valueFrom:  
            secretKeyRef:  
              name: tableau-server-in-a-container-secrets  
              key: tableau\_password  
        resources:  
          requests:  
            memory: 40Gi  
            cpu: 15  
          limits:  
            memory: 40Gi  
            cpu: 15  
        ports:  
        - containerPort: 8080  
        volumeMounts:  
        - name: configmount  
          mountPath: /docker/config/config.json  
          subPath: config.json  
        - name: externalrepomount  
          mountPath: /docker/external-repository  
        - name: datadir1  
          mountPath: /var/opt/tableau  
        - name: bootstrap  
          mountPath: /docker/config/bootstrap  
        - name: clone  
          mountPath: /docker/clone  
        - name: dataengine  
          mountPath: /docker/dataengine  
        imagePullPolicy: IfNotPresent  
        startupProbe:  
          exec:  
            command:  
            - /bin/sh  
            - -c  
            - /docker/server-ready-check  
          initialDelaySeconds: 300  
          periodSeconds: 15  
          timeoutSeconds: 30  
          failureThreshold: 200  
        readinessProbe:  
          exec:  
            command:  
            - /bin/sh  
            - -c  
            - /docker/server-ready-check  
          periodSeconds: 30  
          timeoutSeconds: 60  
        livenessProbe:  
          exec:  
            command:  
            - /bin/sh  
            - -c  
            - /docker/alive-check  
          initialDelaySeconds: 600  
          periodSeconds: 60  
          timeoutSeconds: 60  
      volumes:  
      - name: configmount  
        configMap:  
          name: configfile  
      - name: externalrepomount  
        configMap:  
          name: extrepojsonfile  
      - name: datadir1  
        persistentVolumeClaim:  
          claimName: datadir1  
      - name: bootstrap  
        persistentVolumeClaim:  
          claimName: bootstrapnfs  
      - name: clone  
        persistentVolumeClaim:  
          claimName: clonenfs  
      - name: dataengine  
        persistentVolumeClaim:  
          claimName: dataenginenfs

#### การกำหนดค่าพ็อดแบ็กกราวเดอร์

\---  
apiVersion: v1  
kind: PersistentVolumeClaim  
metadata:  
  name: logvolume  
  namespace: <namespace>  
spec:  
  accessModes:  
  - ReadWriteOnce  
  resources:  
    requests:  
      storage: 20Gi  
\---  
apiVersion: apps/v1  
kind: Deployment  
metadata:  
  name: backgrounder  
  labels:  
    app: backgrounder  
  namespace: <namespace>   
spec:  
  replicas: 2  
  selector:  
    matchLabels:  
      app: backgrounder  
  template:  
    metadata:  
      labels:  
        app: backgrounder  
    spec:  
      securityContext:  
        runAsUser: 999  
        runAsGroup: 998  
        fsGroup: 998
        fsGroupChangePolicy: "OnRootMismatch"  
      hostname: backgrounder  
      dnsPolicy: "None"  
      dnsConfig:  
        nameservers:  
          - <dns\_ip> # DNS IP for resolving container hostnames  
        searches:  
          - <service\_name>.<namespace>.svc.<cluster\_domain>.<example> # SRV Record  
          - <namespace>.svc.<cluster\_domain>.<example> # SRV Record  
          - svc.<cluster\_domain>.<example> # SRV Record  
          - <cluster\_domain>.<example> # SRV Record  
        options:  
          - name: ndots  
            value: "5"
      initContainers:  
        - name: init-myservice  
          image: busybox # This init-container is optional (as long as there is a mechanism to set the log volume directory permissions and the pod waits for clone artifacts)  
          securityContext:  
            runAsUser: 0  
            allowPrivilegeEscalation: true  
          env:  
            - name: CLONE\_ARTIFACT\_DIR\_FOR\_INDEPENDENT\_CONTAINERS  
            value: /docker/clone/clone-artifacts  
          volumeMounts:  
          - name: logmount  
            mountPath: /var/log/tableau  
          - name: clone-volume  
            mountPath: /docker/clone  
          command: \['sh', '-c', "chmod 777 /var/log/tableau && while \[ ! -d ${CLONE\_ARTIFACT\_DIR\_FOR\_INDEPENDENT\_CONTAINERS} \]; do sleep 5; done"\]  
      containers:  
      - name: backgrounder  
        image: <backgrounder\_image> # Backgrounder Image  
        ports:  
        - containerPort: 8600
        imagePullPolicy: IfNotPresent
        readinessProbe:  
          exec:  
            command:  
              - /bin/sh  
              - -c  
              - /tsm\_docker\_utils/status\_check.sh | grep -E 'ACTIVE|BUSY'  
          periodSeconds: 30  
          timeoutSeconds: 60  
        livenessProbe:  
          exec:  
            command:  
              - /bin/sh  
              - -c  
              - /tsm\_docker\_utils/status\_check.sh | grep -E 'ACTIVE|BUSY'  
          initialDelaySeconds: 600  
          periodSeconds: 60  
          timeoutSeconds: 60
        volumeMounts:  
        - name: logmount  
          mountPath: /var/log/tableau  
        - name: clone-volume  
          mountPath: /docker/clone  
        - name: dataengine-volume  
          mountPath: /docker/dataengine  
        - name: temp  
          mountPath: /var/opt/tableau/tableau\_server/data/tabsvc/temp  
        env:  
          - name: ROOT\_LOG\_DIR  
            value: /var/log/tableau  
          - name: CLONE\_ARTIFACT\_DIR\_FOR\_INDEPENDENT\_CONTAINERS  
            value: /docker/clone/clone-artifacts  
          - name: FILESTORE\_MOUNT\_PATH  
            value: /docker/dataengine  
      - name: dataserver  
        image: <dataserver\_image> # Dataserver Image  
        ports:  
        - containerPort: 8400
        imagePullPolicy: IfNotPresent
        readinessProbe:  
          exec:  
            command:  
              - /bin/sh  
              - -c  
              - /tsm\_docker\_utils/status\_check.sh | grep -E 'ACTIVE|BUSY'  
          periodSeconds: 30  
          timeoutSeconds: 60  
        livenessProbe:  
          exec:  
            command:  
              - /bin/sh  
              - -c  
              - /tsm\_docker\_utils/status\_check.sh | grep -E 'ACTIVE|BUSY'  
          initialDelaySeconds: 600  
          periodSeconds: 60  
          timeoutSeconds: 60  
        volumeMounts:  
        - name: logmount  
          mountPath: /var/log/tableau  
        - name: clone-volume  
          mountPath: /docker/clone  
        - name: dataengine-volume  
          mountPath: /docker/dataengine  
        - name: temp  
          mountPath: /var/opt/tableau/tableau\_server/data/tabsvc/temp  
        env:  
          - name: ROOT\_LOG\_DIR  
            value: /var/log/tableau  
          - name: CLONE\_ARTIFACT\_DIR\_FOR\_INDEPENDENT\_CONTAINERS  
            value: /docker/clone/clone-artifacts  
          - name: FILESTORE\_MOUNT\_PATH  
            value: /docker/dataengine  
      - name: gateway  
        image: <gateway\_image> # Gateway Image  
        ports:  
        - containerPort: 8080
        imagePullPolicy: IfNotPresent
        readinessProbe:  
          exec:  
            command:  
              - /bin/sh  
              - -c  
              - /tsm\_docker\_utils/status\_check.sh | grep -E 'ACTIVE|BUSY'  
          periodSeconds: 30  
          timeoutSeconds: 60  
        livenessProbe:  
          exec:  
            command:  
              - /bin/sh  
              - -c  
              - /tsm\_docker\_utils/status\_check.sh | grep -E 'ACTIVE|BUSY'  
          initialDelaySeconds: 600  
          periodSeconds: 60  
          timeoutSeconds: 60
        volumeMounts:  
        - name: logmount  
          mountPath: /var/log/tableau  
        - name: clone-volume  
          mountPath: /docker/clone  
        - name: dataengine-volume  
          mountPath: /docker/dataengine  
        - name: temp  
          mountPath: /var/opt/tableau/tableau\_server/data/tabsvc/temp  
        env:  
          - name: ROOT\_LOG\_DIR  
            value: /var/log/tableau  
          - name: CLONE\_ARTIFACT\_DIR\_FOR\_INDEPENDENT\_CONTAINERS  
            value: /docker/clone/clone-artifacts  
          - name: FILESTORE\_MOUNT\_PATH  
            value: /docker/dataengine  
    - name: hyper  
      image: <hyper\_image> # Hyper Image  
      ports:
      - containerPort: 8200
      imagePullPolicy: IfNotPresent
      readinessProbe:  
        exec:  
          command:  
            - /bin/sh  
            - -c  
            - /tsm\_docker\_utils/status\_check.sh | grep -E 'ACTIVE|BUSY'  
        periodSeconds: 30  
        timeoutSeconds: 60  
      livenessProbe:  
        exec:  
          command:  
          - /bin/sh  
          - -c
          - /tsm\_docker\_utils/status\_check.sh | grep -E 'ACTIVE|BUSY'  
        initialDelaySeconds: 600  
        periodSeconds: 60  
        timeoutSeconds: 60
      volumeMounts:  
        - name: logmount  
          mountPath: /var/log/tableau  
        - name: clone-volume  
          mountPath: /docker/clone  
        - name: dataengine-volume  
          mountPath: /docker/dataengine  
        - name: temp  
          mountPath: /var/opt/tableau/tableau\_server/data/tabsvc/temp  
      env:  
        - name: ROOT\_LOG\_DIR  
          value: /var/log/tableau  
        - name: CLONE\_ARTIFACT\_DIR\_FOR\_INDEPENDENT\_CONTAINERS  
          value: /docker/clone/clone-artifacts  
        - name: FILESTORE\_MOUNT\_PATH  
          value: /docker/dataengine  
    volumes:  
      - name: clone-volume  
        nfs:  
          server: <nfs\_ip>   
          path: <mount\_path>  
      - name: dataengine-volume  
        nfs:  
          server: <nfs\_ip>   
          path: /dataengine  
      - name: logmount  
        persistentVolumeClaim:  
          claimName: logvolume  
      - name: temp  
        emptyDir: {}

#### การกำหนดค่าการปรับขนาดตามกำหนดเวลา

apiVersion: v1  
kind: ServiceAccount  
metadata:  
name: backgrounder-scaler-service-account  
namespace: <namespace> # Namespace  
\---  
apiVersion: rbac.authorization.k8s.io/v1  
kind: RoleBinding  
metadata:  
name: scale-backgrounder-pods  
namespace: <namespace> # Namespace  
subjects:  
\- kind: ServiceAccount  
name: backgrounder-scaler-service-account  
roleRef:  
kind: ClusterRole  
name: cluster-admin  
apiGroup: rbac.authorization.k8s.io  
\---  
apiVersion: batch/v1beta1  
kind: CronJob  
metadata:  
name: scale-up-job  
namespace: <namespace> # Namespace  
spec:  
schedule: "0 7 \* \* \*" # Cron Job timing to scale up deployment replicas  
jobTemplate:  
spec:  
template:  
spec:  
serviceAccountName: backgrounder-scaler-service-account  
restartPolicy: OnFailure  
containers:  
\- name: scale  
image: bitnami/kubectl:1.21  
imagePullPolicy: IfNotPresent  
args:  
\- scale  
\- --replicas=4  
\- deployment/backgrounder  
\---  
apiVersion: batch/v1beta1  
kind: CronJob  
metadata:  
name: scale-down-job  
namespace: <namespace>  
spec:  
schedule: "0 9 \* \* \*" # Cron Job timing to scale down deployment replicas  
jobTemplate:  
spec:  
template:  
spec:  
serviceAccountName: backgrounder-scaler-service-account  
restartPolicy: OnFailure  
containers:  
\- name: scale  
image: bitnami/kubectl:1.21  
imagePullPolicy: IfNotPresent  
args:  
\- scale  
\- --replicas=2  
\- deployment/backgrounder

#### งาน Kubernetes เพื่อล้างการกำหนดค่าการโคลน (ไม่บังคับ)

งานนี้เป็นงาน Kubernetes ที่ช่วยอำนวยความสะดวกซึ่งคุณอาจใช้ในระหว่างการทดสอบ หากคุณต้องการล้างการกำหนดค่าการโคลนที่สร้างโดย Tableau Server ในที่เก็บระหว่างการเรียกใช้การปรับใช้ที่แตกต่างกัน คุณสามารถเรียกใช้งานในลักษณะนี้เพื่อล้าง NFS ได้

apiVersion: batch/v1  
kind: Job  
metadata:  
name: delete-clone-artifacts-job  
namespace: manatee-cluster  
spec:  
template:  
spec:  
containers:  
\- name: delete-clone-artifacts  
image: busybox:1.28  
command: \['sh', '-c', "rm -rf ${CLONE\_ARTIFACT\_DIR}"\]  
env:  
\- name: CLONE\_ARTIFACT\_DIR  
value: /docker/clone/clone-artifacts  
securityContext:  
runAsUser: 0  
allowPrivilegeEscalation: true  
volumeMounts:  
\- name: clone-volume  
mountPath: /docker/clone  
restartPolicy: Never  
volumes:  
\- name: clone-volume  
nfs:  
server: <nfs\_ip> # IP for shared NFS directory for clone output  
path: /clone