ಗ್ರಾಫನಾವನ್ನು ಉದಾಹರಣೆಯಾಗಿ ಬಳಸಿಕೊಂಡು Yandex.Cloud ನಲ್ಲಿ ವಿತರಿಸಿದ ಸೇವೆಗಳ ನಿಯೋಜನೆ

ಎಲ್ಲರಿಗು ನಮಸ್ಖರ! ನನ್ನ ಕೋರ್ಸ್ ಕೆಲಸದ ಭಾಗವಾಗಿ, ನಾನು ಅಂತಹ ದೇಶೀಯ ಕ್ಲೌಡ್ ಪ್ಲಾಟ್‌ಫಾರ್ಮ್‌ನ ಸಾಮರ್ಥ್ಯಗಳನ್ನು ಸಂಶೋಧಿಸಿದೆ Yandex.Cloud. ಪ್ರಾಯೋಗಿಕ ಸಮಸ್ಯೆಗಳನ್ನು ಪರಿಹರಿಸಲು ವೇದಿಕೆಯು ವಿವಿಧ ಸೇವೆಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ. ಆದಾಗ್ಯೂ, ಕೆಲವೊಮ್ಮೆ ನೀವು ಈ ಸೇವೆಗಳ ಆಧಾರದ ಮೇಲೆ ಸಾಕಷ್ಟು ವ್ಯಾಪಕವಾದ ಮೂಲಸೌಕರ್ಯದೊಂದಿಗೆ ನಿಮ್ಮ ಸ್ವಂತ ಕ್ಲೌಡ್ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಹೊಂದಿಸಬೇಕಾಗುತ್ತದೆ. ಈ ಲೇಖನದಲ್ಲಿ ನಾನು ಅಂತಹ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ನಿಯೋಜಿಸುವಲ್ಲಿ ನನ್ನ ಅನುಭವವನ್ನು ಹಂಚಿಕೊಳ್ಳಲು ಬಯಸುತ್ತೇನೆ.

ಗ್ರಾಫನಾವನ್ನು ಉದಾಹರಣೆಯಾಗಿ ಬಳಸಿಕೊಂಡು Yandex.Cloud ನಲ್ಲಿ ವಿತರಿಸಿದ ಸೇವೆಗಳ ನಿಯೋಜನೆ

ನೀವು ಏನನ್ನು ಸ್ವೀಕರಿಸಲು ಬಯಸುತ್ತೀರಿ?

ಗ್ರಾಫಾನಾ - ಯಾವುದೇ ವ್ಯವಸ್ಥೆಗಳ ವಿಶ್ಲೇಷಣಾತ್ಮಕ ಸಮಸ್ಯೆಗಳನ್ನು ಅಥವಾ ಮೇಲ್ವಿಚಾರಣೆ ಸಮಸ್ಯೆಗಳನ್ನು ಪರಿಹರಿಸಲು ಪ್ರಬಲ ಸಾಧನ. ಅದರ ಮೂಲ ಸಂರಚನೆಯಲ್ಲಿ, ಇದು ಗ್ರಾಫನಾ ವೆಬ್ ಸರ್ವರ್‌ನೊಂದಿಗೆ ವರ್ಚುವಲ್ ಯಂತ್ರವಾಗಿದೆ, ಜೊತೆಗೆ ಡೇಟಾಬೇಸ್ (ಕ್ಲಿಕ್‌ಹೌಸ್, ಇನ್‌ಫ್ಲಕ್ಸ್‌ಡಿಬಿ, ಇತ್ಯಾದಿ) ಜೊತೆಗೆ ವಿಶ್ಲೇಷಣೆಯನ್ನು ಆಧರಿಸಿದೆ.

ವೆಬ್ ಸರ್ವರ್ನೊಂದಿಗೆ ವರ್ಚುವಲ್ ಯಂತ್ರವನ್ನು ಪ್ರಾರಂಭಿಸಿದ ನಂತರ, ನೀವು ಅದರ ಹೋಸ್ಟ್ಗೆ ಹೋಗಬಹುದು ಮತ್ತು ಸುಂದರವಾದ UI ಅನ್ನು ಪಡೆಯಬಹುದು, ಹೆಚ್ಚಿನ ಕೆಲಸಕ್ಕಾಗಿ ಡೇಟಾಬೇಸ್ಗಳನ್ನು ಮೂಲಗಳಾಗಿ ನಿರ್ದಿಷ್ಟಪಡಿಸಿ, ಡ್ಯಾಶ್ಬೋರ್ಡ್ಗಳು ಮತ್ತು ಗ್ರಾಫ್ಗಳನ್ನು ರಚಿಸಿ.

ಗ್ರಾಫನಾವನ್ನು ಉದಾಹರಣೆಯಾಗಿ ಬಳಸಿಕೊಂಡು Yandex.Cloud ನಲ್ಲಿ ವಿತರಿಸಿದ ಸೇವೆಗಳ ನಿಯೋಜನೆ

ಮೂಲ ಆವೃತ್ತಿಯು ಒಂದು ಗಮನಾರ್ಹ ನ್ಯೂನತೆಯನ್ನು ಹೊಂದಿದೆ - ಇದು ಎಲ್ಲಾ ತಪ್ಪು-ಸಹಿಷ್ಣುತೆ ಅಲ್ಲ. ಅಂದರೆ, ಅಪ್ಲಿಕೇಶನ್‌ನ ಸಂಪೂರ್ಣ ಕಾರ್ಯವು ಒಂದು ವರ್ಚುವಲ್ ಯಂತ್ರದ ಕಾರ್ಯಸಾಧ್ಯತೆಯನ್ನು ಅವಲಂಬಿಸಿರುತ್ತದೆ. ಅದು ನಿರಾಕರಿಸಿದರೆ ಅಥವಾ 10 ಜನರು ಒಂದೇ ಸಮಯದಲ್ಲಿ UI ಅನ್ನು ತೆರೆದರೆ, ನಂತರ ಸಮಸ್ಯೆಗಳು ಉದ್ಭವಿಸುತ್ತವೆ.

ಅವುಗಳನ್ನು ಸರಳವಾಗಿ ಪರಿಹರಿಸಬಹುದು: ನೀವು ಕೇವಲ ಅಗತ್ಯವಿದೆ... ವೆಬ್ ಸರ್ವರ್‌ನೊಂದಿಗೆ ಒಂದೇ ರೀತಿಯ ವರ್ಚುವಲ್ ಯಂತ್ರಗಳನ್ನು ನಿಯೋಜಿಸಿ ಮತ್ತು ಅವುಗಳನ್ನು L3 ಬ್ಯಾಲೆನ್ಸರ್ ಅಡಿಯಲ್ಲಿ ಇರಿಸಿ. ಆದರೆ ಇಲ್ಲಿ ಎಲ್ಲವೂ ಅಷ್ಟು ಸ್ಪಷ್ಟವಾಗಿಲ್ಲ. ಗ್ರಾಫನಾ ಬಳಕೆದಾರರ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು (ಡೇಟಾಬೇಸ್‌ಗಳು, ಡ್ಯಾಶ್‌ಬೋರ್ಡ್‌ಗಳು, ಗ್ರಾಫ್‌ಗಳು ಇತ್ಯಾದಿಗಳಿಗೆ ಮಾರ್ಗಗಳು) ನೇರವಾಗಿ ಅದರ ವರ್ಚುವಲ್ ಗಣಕದ ಡಿಸ್ಕ್‌ನಲ್ಲಿ ಸಂಗ್ರಹಿಸುತ್ತದೆ. ಹೀಗಾಗಿ, ನಾವು UI ನಲ್ಲಿ ಕೆಲವು ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಬದಲಾಯಿಸಿದರೆ, ಈ ಬದಲಾವಣೆಗಳು ಬ್ಯಾಲೆನ್ಸರ್ ನಮಗೆ ಕಳುಹಿಸಿದ ವರ್ಚುವಲ್ ಗಣಕದಲ್ಲಿ ಮಾತ್ರ ಪ್ರತಿಫಲಿಸುತ್ತದೆ. ಇದು ನಮ್ಮ ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಅಸಮಂಜಸ ಸೆಟ್ಟಿಂಗ್‌ಗಳಿಗೆ ಕಾರಣವಾಗುತ್ತದೆ, ಉಡಾವಣೆ ಮತ್ತು ಬಳಕೆಯಲ್ಲಿ ಸಮಸ್ಯೆಗಳನ್ನು ಉಂಟುಮಾಡುತ್ತದೆ.

ಇಲ್ಲಿ ಮತ್ತೊಂದು ಡೇಟಾಬೇಸ್ ರಕ್ಷಣೆಗೆ ಬರುತ್ತದೆ, ಉದಾಹರಣೆಗೆ, MySQL ಅಥವಾ ಅದರ ಸಮಾನ. ಈ "ಸ್ಪೇರ್" ಡೇಟಾಬೇಸ್‌ನಲ್ಲಿ ಬಳಕೆದಾರರ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಸಂಗ್ರಹಿಸಬೇಕು ಎಂದು ನಾವು ಗ್ರಾಫನಾಗೆ ಹೇಳುತ್ತೇವೆ. ನಂತರ, ಪ್ರತಿ ಗಣಕದಲ್ಲಿ ಒಮ್ಮೆ ಈ ಡೇಟಾಬೇಸ್‌ಗೆ ಮಾರ್ಗವನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸಲು ಸಾಕು, ಮತ್ತು ಯಾವುದೇ ವರ್ಚುವಲ್ ಗಣಕಗಳಲ್ಲಿ ಎಲ್ಲಾ ಇತರ ಬಳಕೆದಾರರ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಸಂಪಾದಿಸಿ; ಅವರು ಇತರರಿಗೆ ವಿಸ್ತರಿಸುತ್ತಾರೆ.

ಅಂತಿಮ ಅಪ್ಲಿಕೇಶನ್ ಮೂಲಸೌಕರ್ಯದ ರೇಖಾಚಿತ್ರ ಇಲ್ಲಿದೆ:

ಗ್ರಾಫನಾವನ್ನು ಉದಾಹರಣೆಯಾಗಿ ಬಳಸಿಕೊಂಡು Yandex.Cloud ನಲ್ಲಿ ವಿತರಿಸಿದ ಸೇವೆಗಳ ನಿಯೋಜನೆ

ನಮ್ಮ ಕೈಗಳಿಂದ ಎತ್ತುವುದನ್ನು ಕಲಿಯೋಣ

MySQL ಮತ್ತು ಕ್ಲಿಕ್‌ಹೌಸ್

ಒಂದು ಗುಂಡಿಯನ್ನು ಕ್ಲಿಕ್ ಮಾಡುವ ಮೂಲಕ ಅಂತಹ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ನಿಯೋಜಿಸುವ ಮೊದಲು, ಅದರ ಪ್ರತಿಯೊಂದು ಘಟಕಗಳನ್ನು ಹೇಗೆ ನಿರ್ವಹಿಸುವುದು ಮತ್ತು ಅವುಗಳನ್ನು ಪರಸ್ಪರ ಸಂಯೋಜಿಸುವುದು ಹೇಗೆ ಎಂಬುದನ್ನು ಕಲಿಯುವುದು ಅಗತ್ಯವಾಗಿತ್ತು.

ಇಲ್ಲಿ Yandex.Cloud ನಮಗೆ ಸಹಾಯ ಮಾಡುತ್ತದೆ, ಇದು L3 balancers, ClickHouse ಮತ್ತು MySQL ಅನ್ನು ನಿರ್ವಹಿಸಿದ ಸೇವೆಗಳಾಗಿ ಒದಗಿಸುತ್ತದೆ. ಬಳಕೆದಾರರು ನಿಯತಾಂಕಗಳನ್ನು ಮಾತ್ರ ನಿರ್ದಿಷ್ಟಪಡಿಸಬೇಕು ಮತ್ತು ಪ್ಲಾಟ್‌ಫಾರ್ಮ್ ಎಲ್ಲವನ್ನೂ ಕಾರ್ಯ ಕ್ರಮಕ್ಕೆ ತರುವವರೆಗೆ ಕಾಯಬೇಕು.

ನಾನು ನೋಂದಾಯಿಸಿದ್ದೇನೆ, ಕ್ಲೌಡ್ ಮತ್ತು ಪಾವತಿ ಖಾತೆಯನ್ನು ರಚಿಸಿದ್ದೇನೆ. ಅದರ ನಂತರ, ನಾನು ಕ್ಲೌಡ್‌ಗೆ ಹೋದೆ ಮತ್ತು MySQL ಮತ್ತು ಕ್ಲಿಕ್‌ಹೌಸ್ ಕ್ಲಸ್ಟರ್‌ಗಳನ್ನು ಕನಿಷ್ಠ ಸೆಟ್ಟಿಂಗ್‌ಗಳೊಂದಿಗೆ ಹೊಂದಿಸಿದೆ. ಅವರು ಸಕ್ರಿಯರಾಗುವವರೆಗೆ ನಾನು ಕಾಯುತ್ತಿದ್ದೆ.

ಗ್ರಾಫನಾವನ್ನು ಉದಾಹರಣೆಯಾಗಿ ಬಳಸಿಕೊಂಡು Yandex.Cloud ನಲ್ಲಿ ವಿತರಿಸಿದ ಸೇವೆಗಳ ನಿಯೋಜನೆಗ್ರಾಫನಾವನ್ನು ಉದಾಹರಣೆಯಾಗಿ ಬಳಸಿಕೊಂಡು Yandex.Cloud ನಲ್ಲಿ ವಿತರಿಸಿದ ಸೇವೆಗಳ ನಿಯೋಜನೆ

ಪ್ರತಿ ಕ್ಲಸ್ಟರ್‌ನಲ್ಲಿ ಡೇಟಾಬೇಸ್ ರಚಿಸಲು ಮತ್ತು ಲಾಗಿನ್ ಮತ್ತು ಪಾಸ್‌ವರ್ಡ್ ಬಳಸಿ ಅದಕ್ಕೆ ಪ್ರವೇಶವನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಲು ಸಹ ನೀವು ನೆನಪಿಟ್ಟುಕೊಳ್ಳಬೇಕು. ನಾನು ಇಲ್ಲಿ ವಿವರಗಳಿಗೆ ಹೋಗುವುದಿಲ್ಲ - ಇಂಟರ್ಫೇಸ್ನಲ್ಲಿ ಎಲ್ಲವೂ ಸಾಕಷ್ಟು ಸ್ಪಷ್ಟವಾಗಿದೆ.

ಸ್ಪಷ್ಟವಲ್ಲದ ವಿವರವೆಂದರೆ ಈ ಡೇಟಾಬೇಸ್‌ಗಳು ಅನೇಕ ಹೋಸ್ಟ್‌ಗಳನ್ನು ಹೊಂದಿವೆ, ಅದು ಅವರ ತಪ್ಪು ಸಹಿಷ್ಣುತೆಯನ್ನು ಖಚಿತಪಡಿಸುತ್ತದೆ. ಆದಾಗ್ಯೂ, ಗ್ರಾಫನಾಗೆ ಅದು ಕಾರ್ಯನಿರ್ವಹಿಸುವ ಪ್ರತಿಯೊಂದು ಡೇಟಾಬೇಸ್‌ಗೆ ನಿಖರವಾಗಿ ಒಂದು ಹೋಸ್ಟ್ ಅಗತ್ಯವಿದೆ. ದೀರ್ಘ ಓದುವಿಕೆ ದಸ್ತಾವೇಜನ್ನು ಮೋಡಗಳು ನನ್ನನ್ನು ಒಂದು ನಿರ್ಧಾರಕ್ಕೆ ತಂದವು. ಇದು ಜಾತಿಗಳ ಹೋಸ್ಟ್ ಎಂದು ತಿರುಗುತ್ತದೆ c-<cluster_id>.rw.mdb.yandexcloud.net ಅನುಗುಣವಾದ ID ಯೊಂದಿಗೆ ಕ್ಲಸ್ಟರ್‌ನ ಪ್ರಸ್ತುತ ಸಕ್ರಿಯ ಮಾಸ್ಟರ್ ಹೋಸ್ಟ್‌ಗೆ ಮ್ಯಾಪ್ ಮಾಡಲಾಗಿದೆ. ಇದನ್ನೇ ಗ್ರಾಪಂಗೆ ನೀಡುತ್ತೇವೆ.

ವೆಬ್ ಸರ್ವರ್

ಈಗ ಅದು ವೆಬ್ ಸರ್ವರ್‌ಗೆ ಬಿಟ್ಟದ್ದು. ಲಿನಕ್ಸ್‌ನೊಂದಿಗೆ ಸಾಮಾನ್ಯ ವರ್ಚುವಲ್ ಯಂತ್ರವನ್ನು ಹೆಚ್ಚಿಸೋಣ ಮತ್ತು ಅದರ ಮೇಲೆ ಗ್ರಾಫನಾವನ್ನು ಹಸ್ತಚಾಲಿತವಾಗಿ ಕಾನ್ಫಿಗರ್ ಮಾಡೋಣ.

ಗ್ರಾಫನಾವನ್ನು ಉದಾಹರಣೆಯಾಗಿ ಬಳಸಿಕೊಂಡು Yandex.Cloud ನಲ್ಲಿ ವಿತರಿಸಿದ ಸೇವೆಗಳ ನಿಯೋಜನೆ

ಗ್ರಾಫನಾವನ್ನು ಉದಾಹರಣೆಯಾಗಿ ಬಳಸಿಕೊಂಡು Yandex.Cloud ನಲ್ಲಿ ವಿತರಿಸಿದ ಸೇವೆಗಳ ನಿಯೋಜನೆ

ssh ಮೂಲಕ ಸಂಪರ್ಕಿಸೋಣ ಮತ್ತು ಅಗತ್ಯ ಪ್ಯಾಕೇಜ್‌ಗಳನ್ನು ಸ್ಥಾಪಿಸೋಣ.

sudo apt-get install -y apt-transport-https software-properties-common wget
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
sudo add-apt-repository "deb https://packages.grafana.com/enterprise/deb stable main"
sudo apt-get update
sudo apt-get install -y grafana-enterprise 

ಅದರ ನಂತರ, ನಾವು systemctl ಅಡಿಯಲ್ಲಿ ಗ್ರಾಫನಾವನ್ನು ರನ್ ಮಾಡೋಣ ಮತ್ತು ಕ್ಲಿಕ್‌ಹೌಸ್‌ನೊಂದಿಗೆ ಕೆಲಸ ಮಾಡಲು ಪ್ಲಗಿನ್ ಅನ್ನು ಸ್ಥಾಪಿಸೋಣ (ಹೌದು, ಇದು ಮೂಲ ಪ್ಯಾಕೇಜ್‌ನಲ್ಲಿ ಸರಬರಾಜು ಮಾಡಲಾಗಿಲ್ಲ).

sudo systemctl start grafana-server
sudo systemctl enable grafana-server
sudo grafana-cli plugins install vertamedia-clickhouse-datasource

ಅದು ಇಲ್ಲಿದೆ, ಅದರ ನಂತರ ಸರಳ ಆಜ್ಞೆಯೊಂದಿಗೆ

sudo service grafana-server start

ನಾವು ವೆಬ್ ಸರ್ವರ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸುತ್ತೇವೆ. ಈಗ ನೀವು ಬ್ರೌಸರ್‌ನಲ್ಲಿ ವರ್ಚುವಲ್ ಯಂತ್ರದ ಬಾಹ್ಯ IP ವಿಳಾಸವನ್ನು ನಮೂದಿಸಬಹುದು, ಪೋರ್ಟ್ 3000 ಅನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸಿ ಮತ್ತು ಸುಂದರವಾದ ಗ್ರಾಫಾನಾ UI ಅನ್ನು ನೋಡಬಹುದು.
ಗ್ರಾಫನಾವನ್ನು ಉದಾಹರಣೆಯಾಗಿ ಬಳಸಿಕೊಂಡು Yandex.Cloud ನಲ್ಲಿ ವಿತರಿಸಿದ ಸೇವೆಗಳ ನಿಯೋಜನೆ

ಆದರೆ ಹೊರದಬ್ಬಬೇಡಿ, ಗ್ರಾಫಾನಾವನ್ನು ಹೊಂದಿಸುವ ಮೊದಲು, ಅಲ್ಲಿ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಸಂಗ್ರಹಿಸಲು MySQL ಗೆ ಮಾರ್ಗವನ್ನು ಹೇಳಲು ನೀವು ಮರೆಯದಿರಿ.

ಗ್ರಾಫನಾ ವೆಬ್ ಸರ್ವರ್‌ನ ಸಂಪೂರ್ಣ ಸಂರಚನೆಯು ಫೈಲ್‌ನಲ್ಲಿದೆ /etc/grafana/grafana.ini. ಅಗತ್ಯವಿರುವ ಸಾಲು ಈ ರೀತಿ ಕಾಣುತ್ತದೆ:

;url =

ನಾವು ಹೋಸ್ಟ್ ಅನ್ನು MySQL ಕ್ಲಸ್ಟರ್‌ಗೆ ಹೊಂದಿಸಿದ್ದೇವೆ. ಅದೇ ಫೈಲ್ ಮೇಲಿನ ಚಿತ್ರದಲ್ಲಿ ಗ್ರಾಫಾನಾವನ್ನು ಪ್ರವೇಶಿಸಲು ಲಾಗಿನ್ ಮತ್ತು ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ಒಳಗೊಂಡಿದೆ, ಇದು ಪೂರ್ವನಿಯೋಜಿತವಾಗಿ ಎರಡೂ ಸಮಾನವಾಗಿರುತ್ತದೆ admin.

ನೀವು sed ಆಜ್ಞೆಗಳನ್ನು ಬಳಸಬಹುದು:

sudo sed -i "s#.*;url =.*#url = mysql://${MYSQL_USERNAME}:${MYSQL_PASSWORD}@${MYSQL_CLUSTER_URI}#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_user =.*#admin_user = ${GRAFANA_USERNAME}#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_password =.*#admin_password = ${GRAFANA_PASSWORD}#" /etc/grafana/grafana.ini

ವೆಬ್ ಸರ್ವರ್ ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸುವ ಸಮಯ!

sudo service grafana-server restart

ಈಗ ಗ್ರಾಫನಾ UI ನಲ್ಲಿ ನಾವು ಕ್ಲಿಕ್‌ಹೌಸ್ ಅನ್ನು ಡೇಟಾಸೋರ್ಸ್ ಆಗಿ ನಿರ್ದಿಷ್ಟಪಡಿಸುತ್ತೇವೆ.

ಕೆಳಗಿನ ಸೆಟ್ಟಿಂಗ್‌ಗಳೊಂದಿಗೆ ನಾನು ಕೆಲಸದ ಸಂರಚನೆಯನ್ನು ಸಾಧಿಸಲು ಸಾಧ್ಯವಾಯಿತು:

ಗ್ರಾಫನಾವನ್ನು ಉದಾಹರಣೆಯಾಗಿ ಬಳಸಿಕೊಂಡು Yandex.Cloud ನಲ್ಲಿ ವಿತರಿಸಿದ ಸೇವೆಗಳ ನಿಯೋಜನೆ

ನಾನು URL ಎಂದು ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ್ದೇನೆ https://c-<cluster_id>.rw.mdb.yandexcloud.net:8443

ಎಲ್ಲಾ! CH ಮತ್ತು MySQL ಗೆ ಸಂಪರ್ಕಗೊಂಡಿರುವ ವೆಬ್ ಸರ್ವರ್‌ನೊಂದಿಗೆ ನಾವು ಒಂದು ವರ್ಚುವಲ್ ಯಂತ್ರವನ್ನು ಹೊಂದಿದ್ದೇವೆ. ನೀವು ಈಗಾಗಲೇ ಡೇಟಾಸೆಟ್ ಅನ್ನು ಕ್ಲಿಕ್‌ಹೌಸ್‌ಗೆ ಅಪ್‌ಲೋಡ್ ಮಾಡಬಹುದು ಮತ್ತು ಡ್ಯಾಶ್‌ಬೋರ್ಡ್‌ಗಳನ್ನು ನಿರ್ಮಿಸಬಹುದು. ಆದರೆ, ನಾವು ಇನ್ನೂ ನಮ್ಮ ಗುರಿಯನ್ನು ಸಾಧಿಸಿಲ್ಲ ಮತ್ತು ಪೂರ್ಣ ಪ್ರಮಾಣದ ಮೂಲಸೌಕರ್ಯವನ್ನು ನಿಯೋಜಿಸಿಲ್ಲ.

ಪ್ಯಾಕರ್

Yandex.Cloud ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ವರ್ಚುವಲ್ ಯಂತ್ರದ ಡಿಸ್ಕ್ ಇಮೇಜ್ ಅನ್ನು ರಚಿಸಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ, ಮತ್ತು ಅದರ ಆಧಾರದ ಮೇಲೆ - ಪರಸ್ಪರ ಒಂದೇ ರೀತಿಯ ಯಾವುದೇ ಸಂಖ್ಯೆಯ ಯಂತ್ರಗಳು. ಇದನ್ನೇ ನಾವು ಬಳಸುತ್ತೇವೆ. ಚಿತ್ರವನ್ನು ಅನುಕೂಲಕರವಾಗಿ ಜೋಡಿಸಲು, ಉಪಕರಣವನ್ನು ತೆಗೆದುಕೊಳ್ಳಿ ಪ್ಯಾಕರ್ HashiCorp ನಿಂದ. ಇದು ಚಿತ್ರವನ್ನು ಜೋಡಿಸಲು ಸೂಚನೆಗಳೊಂದಿಗೆ json ಫೈಲ್ ಅನ್ನು ಇನ್‌ಪುಟ್ ಆಗಿ ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ.

ನಮ್ಮ json ಫೈಲ್ ಎರಡು ಬ್ಲಾಕ್‌ಗಳನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ: ಬಿಲ್ಡರ್‌ಗಳು ಮತ್ತು ಪ್ರೊವಿಶನರ್‌ಗಳು. ಮೊದಲ ಬ್ಲಾಕ್ ಚಿತ್ರದ ನಿಯತಾಂಕಗಳನ್ನು ಒಂದು ಘಟಕವಾಗಿ ವಿವರಿಸುತ್ತದೆ, ಮತ್ತು ಎರಡನೇ ಬ್ಲಾಕ್ ಅಗತ್ಯ ವಿಷಯದೊಂದಿಗೆ ಅದನ್ನು ಭರ್ತಿ ಮಾಡುವ ಸೂಚನೆಗಳನ್ನು ವಿವರಿಸುತ್ತದೆ.

ಬಿಲ್ಡರ್ ಗಳು

{
"builders": [
    {
      "type": "yandex",
      "endpoint": "{{user `endpoint`}}",
      "folder_id": "<folder_id>",
      "subnet_id": "{{user `subnet_id`}}",
      "zone": "{{user `zone`}}",
      "labels": {},
      "use_ipv4_nat": true,
      "use_internal_ip": false,
      "service_account_key_file": "<service_account_key_file>",
      "image_name": "grafana-{{timestamp}}",
      "image_family": "grafana",
      "image_labels": {},
      "image_description": "GRAFANA",
      "source_image_family": "ubuntu-1804-lts",
      "disk_size_gb": 3,
      "disk_type": "network-hdd",
      "ssh_username": "ubuntu"
    }
  ],
...
}

ಈ ಟೆಂಪ್ಲೇಟ್‌ನಲ್ಲಿ, ನೀವು ಚಿತ್ರವನ್ನು ರಚಿಸಲು ಬಯಸುವ ಕ್ಲೌಡ್‌ನಲ್ಲಿ ವಿಭಾಗದ ಗುರುತಿಸುವಿಕೆಯನ್ನು ಹೊಂದಿಸಬೇಕು, ಜೊತೆಗೆ ಈ ವಿಭಾಗದಲ್ಲಿ ಹಿಂದೆ ರಚಿಸಿದ ಸೇವಾ ಖಾತೆಯಿಂದ ಕೀಲಿಗಳೊಂದಿಗೆ ಫೈಲ್‌ಗೆ ಮಾರ್ಗವನ್ನು ಹೊಂದಿಸಬೇಕು. ಅನುಗುಣವಾದ ವಿಭಾಗದಲ್ಲಿ ಫೈಲ್ ರೂಪದಲ್ಲಿ ಸೇವಾ ಖಾತೆಗಳು ಮತ್ತು ಕೀಗಳನ್ನು ರಚಿಸುವ ಕುರಿತು ನೀವು ಇನ್ನಷ್ಟು ಓದಬಹುದು ದಸ್ತಾವೇಜನ್ನು.

ವೇದಿಕೆಯ ಆಧಾರದ ಮೇಲೆ ಡಿಸ್ಕ್ ಇಮೇಜ್ ಅನ್ನು ನಿರ್ಮಿಸಲಾಗುವುದು ಎಂದು ಈ ಸಂರಚನೆಯು ಹೇಳುತ್ತದೆ ubuntu-1804-lts, ಚಿತ್ರ ಕುಟುಂಬದಲ್ಲಿ ಸೂಕ್ತವಾದ ಬಳಕೆದಾರ ವಿಭಾಗದಲ್ಲಿ ಇರಿಸಲಾಗಿದೆ GRAFANA ಹೆಸರಿನಲ್ಲಿ grafana-{{timestamp}}.

ಒದಗಿಸುವವರು

ಈಗ ಸಂರಚನೆಯ ಹೆಚ್ಚು ಆಸಕ್ತಿದಾಯಕ ಭಾಗ ಬರುತ್ತದೆ. ಅದರ ಸ್ಥಿತಿಯನ್ನು ಡಿಸ್ಕ್ ಇಮೇಜ್ ಆಗಿ ಫ್ರೀಜ್ ಮಾಡುವ ಮೊದಲು ವರ್ಚುವಲ್ ಗಣಕದಲ್ಲಿ ನಿರ್ವಹಿಸಬೇಕಾದ ಕ್ರಿಯೆಗಳ ಅನುಕ್ರಮವನ್ನು ಇದು ವಿವರಿಸುತ್ತದೆ.

{
...,
"provisioners": [
    {
            "type": "shell",
            "pause_before": "5s",
            "scripts": [
                "prepare-ctg.sh"
            ]
        },
    {
            "type": "file",
            "source": "setup.sh",
            "destination": "/opt/grafana/setup.sh"
        },
        {
            "type": "shell",
        "execute_command": "sudo {{ .Vars }} bash '{{ .Path }}'",
            "pause_before": "5s",
            "scripts": [
                "install-packages.sh",
                "grafana-setup.sh",
                "run-setup-at-reboot.sh"
        ]
        }
  ]
}

ಇಲ್ಲಿ ಎಲ್ಲಾ ಕ್ರಿಯೆಗಳನ್ನು 3 ಹಂತಗಳಾಗಿ ವಿಂಗಡಿಸಲಾಗಿದೆ. ಮೊದಲ ಹಂತದಲ್ಲಿ, ಸಹಾಯಕ ಡೈರೆಕ್ಟರಿಯನ್ನು ರಚಿಸುವ ಸರಳ ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲಾಗುತ್ತದೆ.

ಸಿದ್ಧ-ctg.sh:

#!/bin/bash
sudo mkdir -p /opt/grafana
sudo chown -R ubuntu:ubuntu /opt/grafana

ಮುಂದಿನ ಹಂತದಲ್ಲಿ, ನಾವು ಈ ಡೈರೆಕ್ಟರಿಯಲ್ಲಿ ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ಇರಿಸುತ್ತೇವೆ, ಅದನ್ನು ವರ್ಚುವಲ್ ಯಂತ್ರವನ್ನು ಪ್ರಾರಂಭಿಸಿದ ನಂತರ ತಕ್ಷಣವೇ ಪ್ರಾರಂಭಿಸಬೇಕಾಗುತ್ತದೆ. ಈ ಸ್ಕ್ರಿಪ್ಟ್ ಗ್ರಾಫನಾ ಸಂರಚನೆಯಲ್ಲಿ ನೋಂದಾಯಿಸಬೇಕಾದ ಬಳಕೆದಾರ ವೇರಿಯೇಬಲ್‌ಗಳನ್ನು ಹಾಕುತ್ತದೆ ಮತ್ತು ವೆಬ್ ಸರ್ವರ್ ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸುತ್ತದೆ.

setup.sh:

#!/bin/bash
CLUSTER_ID="<cluster_id>"
USERNAME="<username>"
PASSWORD="<password>"
sudo sed -i "s#.*;url =.*#url = mysql://${USERNAME}:${PASSWORD}@c-${CLUSTER_ID}.rw.mdb.yandexcloud.net#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_user =.*#admin_user = ${USERNAME}#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_password =.*#admin_password = ${PASSWORD}#" /etc/grafana/grafana.ini
sudo service grafana-server restart

ಇದರ ನಂತರ ಮಾಡಲು 3 ಕೆಲಸಗಳು ಉಳಿದಿವೆ:
1) ಪ್ಯಾಕೇಜುಗಳನ್ನು ಸ್ಥಾಪಿಸಿ
2) systemctl ಅಡಿಯಲ್ಲಿ Grafana ಅನ್ನು ರನ್ ಮಾಡಿ ಮತ್ತು ClickHouse ಪ್ಲಗಿನ್ ಅನ್ನು ಸ್ಥಾಪಿಸಿ
3) ವರ್ಚುವಲ್ ಗಣಕವನ್ನು ಆನ್ ಮಾಡಿದ ತಕ್ಷಣ ಲಾಂಚ್ ಕ್ಯೂನಲ್ಲಿ setup.sh ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ಇರಿಸಿ.

install-packages.sh:

#!/bin/bash
sudo systemd-run --property='After=apt-daily.service apt-daily-upgrade.service' --wait /bin/true
sudo apt-get install -y apt-transport-https
sudo apt-get install -y software-properties-common wget
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
sudo add-apt-repository "deb https://packages.grafana.com/enterprise/deb stable main"
sudo apt-get update
sudo apt-get install -y grafana-enterprise 

grafana-setup.sh:

#!/bin/bash
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
sudo grafana-cli plugins install vertamedia-clickhouse-datasource

run-setup-at-reboot.sh:

#!/bin/bash
chmod +x /opt/grafana/setup.sh
cat > /etc/cron.d/first-boot <<EOF
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
@reboot root /bin/bash /opt/grafana/setup.sh > /var/log/yc-setup.log 2>&1
EOF
chmod +x /etc/cron.d/first-boot;

ಈಗ ಉಳಿದಿರುವುದು ಪ್ಯಾಕರ್ ಅನ್ನು ರನ್ ಮಾಡುವುದು ಮತ್ತು ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ ವಿಭಾಗದಲ್ಲಿ ಔಟ್‌ಪುಟ್ ಇಮೇಜ್ ಅನ್ನು ಪಡೆಯುವುದು. ವರ್ಚುವಲ್ ಯಂತ್ರವನ್ನು ರಚಿಸುವಾಗ, ನೀವು ಅದನ್ನು ಬೂಟ್ ಡಿಸ್ಕ್ ಆಗಿ ಆಯ್ಕೆ ಮಾಡಬಹುದು ಮತ್ತು ಪ್ರಾರಂಭದ ನಂತರ ನೀವು ಸಿದ್ಧ ಗ್ರಾಫನಾ ವೆಬ್ ಸರ್ವರ್ ಅನ್ನು ಸ್ವೀಕರಿಸುತ್ತೀರಿ.

ಗ್ರಾಫನಾವನ್ನು ಉದಾಹರಣೆಯಾಗಿ ಬಳಸಿಕೊಂಡು Yandex.Cloud ನಲ್ಲಿ ವಿತರಿಸಿದ ಸೇವೆಗಳ ನಿಯೋಜನೆ
ಗ್ರಾಫನಾವನ್ನು ಉದಾಹರಣೆಯಾಗಿ ಬಳಸಿಕೊಂಡು Yandex.Cloud ನಲ್ಲಿ ವಿತರಿಸಿದ ಸೇವೆಗಳ ನಿಯೋಜನೆ

ನಿದರ್ಶನ ಗುಂಪು ಮತ್ತು ಬ್ಯಾಲೆನ್ಸರ್

ಒಂದೇ ರೀತಿಯ ಗ್ರಾಫನಾ ವೆಬ್ ಸರ್ವರ್‌ಗಳನ್ನು ರಚಿಸಲು ನಮಗೆ ಅನುಮತಿಸುವ ಡಿಸ್ಕ್ ಇಮೇಜ್ ಅನ್ನು ಒಮ್ಮೆ ನಾವು ಹೊಂದಿದ್ದರೆ, ನಾವು ನಿದರ್ಶನ ಗುಂಪನ್ನು ರಚಿಸಬಹುದು. Yandex.Cloud ವೇದಿಕೆಯಲ್ಲಿ, ಈ ಪದವು ಅದೇ ಗುಣಲಕ್ಷಣಗಳನ್ನು ಹೊಂದಿರುವ ವರ್ಚುವಲ್ ಯಂತ್ರಗಳ ಒಕ್ಕೂಟವನ್ನು ಸೂಚಿಸುತ್ತದೆ. ನಿದರ್ಶನ ಗುಂಪನ್ನು ರಚಿಸುವಾಗ, ಈ ಗುಂಪಿನಲ್ಲಿರುವ ಎಲ್ಲಾ ಯಂತ್ರಗಳ ಮೂಲಮಾದರಿಯನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಲಾಗಿದೆ, ಮತ್ತು ನಂತರ ಗುಂಪಿನ ಗುಣಲಕ್ಷಣಗಳು (ಉದಾಹರಣೆಗೆ, ಕನಿಷ್ಠ ಮತ್ತು ಗರಿಷ್ಠ ಸಂಖ್ಯೆಯ ಸಕ್ರಿಯ ಯಂತ್ರಗಳು). ಪ್ರಸ್ತುತ ಸಂಖ್ಯೆಯು ಈ ಮಾನದಂಡಗಳನ್ನು ಪೂರೈಸದಿದ್ದರೆ, ನಿದರ್ಶನ ಗುಂಪು ಸ್ವತಃ ಅನಗತ್ಯ ಯಂತ್ರಗಳನ್ನು ತೆಗೆದುಹಾಕುತ್ತದೆ ಅಥವಾ ತನ್ನದೇ ಆದ ಚಿತ್ರದಲ್ಲಿ ಹೊಸದನ್ನು ರಚಿಸುತ್ತದೆ.

ನಮ್ಮ ಕಾರ್ಯದ ಭಾಗವಾಗಿ, ನಾವು ಹಿಂದೆ ರಚಿಸಿದ ಡಿಸ್ಕ್ ಇಮೇಜ್‌ನಿಂದ ರಚಿಸಲಾದ ವೆಬ್ ಸರ್ವರ್‌ಗಳ ಉದಾಹರಣೆ ಗುಂಪನ್ನು ರಚಿಸುತ್ತೇವೆ.

ಗ್ರಾಫನಾವನ್ನು ಉದಾಹರಣೆಯಾಗಿ ಬಳಸಿಕೊಂಡು Yandex.Cloud ನಲ್ಲಿ ವಿತರಿಸಿದ ಸೇವೆಗಳ ನಿಯೋಜನೆ

ಗ್ರಾಫನಾವನ್ನು ಉದಾಹರಣೆಯಾಗಿ ಬಳಸಿಕೊಂಡು Yandex.Cloud ನಲ್ಲಿ ವಿತರಿಸಿದ ಸೇವೆಗಳ ನಿಯೋಜನೆ

ಕೊನೆಯ ನಿದರ್ಶನ ಗುಂಪಿನ ಸೆಟಪ್ ನಿಜವಾಗಿಯೂ ಗಮನಾರ್ಹವಾಗಿದೆ. ಲೋಡ್ ಬ್ಯಾಲೆನ್ಸರ್‌ನೊಂದಿಗೆ ಏಕೀಕರಣದಲ್ಲಿರುವ ಗುರಿ ಗುಂಪು ಈ ಗುಂಪಿನ ವರ್ಚುವಲ್ ಯಂತ್ರಗಳ ಮೇಲೆ ಒಂದೆರಡು ಬಟನ್‌ಗಳನ್ನು ಕ್ಲಿಕ್ ಮಾಡುವ ಮೂಲಕ L3 ಬ್ಯಾಲೆನ್ಸರ್ ಅನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಲು ನಿಮಗೆ ಸಹಾಯ ಮಾಡುತ್ತದೆ.

ಗ್ರಾಫನಾವನ್ನು ಉದಾಹರಣೆಯಾಗಿ ಬಳಸಿಕೊಂಡು Yandex.Cloud ನಲ್ಲಿ ವಿತರಿಸಿದ ಸೇವೆಗಳ ನಿಯೋಜನೆ

ಬ್ಯಾಲೆನ್ಸರ್ ಅನ್ನು ಹೊಂದಿಸುವಾಗ, ನಾನು ಎರಡು ಪ್ರಮುಖ ಅಂಶಗಳನ್ನು ಅಳವಡಿಸಿದ್ದೇನೆ:

  1. ನಾನು ಬ್ಯಾಲೆನ್ಸರ್ ಅನ್ನು ಪೋರ್ಟ್ 80 ನಲ್ಲಿ ಬಳಕೆದಾರರ ದಟ್ಟಣೆಯನ್ನು ಸ್ವೀಕರಿಸುವಂತೆ ಮಾಡಿದೆ ಮತ್ತು ಅದನ್ನು ಗ್ರಾಫಾನಾ ವಾಸಿಸುವ ನಿಖರವಾಗಿ ವರ್ಚುವಲ್ ಯಂತ್ರಗಳ ಪೋರ್ಟ್ 3000 ಗೆ ಮರುನಿರ್ದೇಶಿಸಿದೆ.
  2. ನಾನು ಪೋರ್ಟ್ 3000 ಗೆ ಪಿಂಗ್ ಮಾಡುವ ಮೂಲಕ ಯಂತ್ರಗಳ ಕಾರ್ಯಸಾಧ್ಯತೆಯನ್ನು ಪರಿಶೀಲಿಸಲು ಹೊಂದಿಸಿದ್ದೇನೆ.

ಗ್ರಾಫನಾವನ್ನು ಉದಾಹರಣೆಯಾಗಿ ಬಳಸಿಕೊಂಡು Yandex.Cloud ನಲ್ಲಿ ವಿತರಿಸಿದ ಸೇವೆಗಳ ನಿಯೋಜನೆ

ಮಿನಿ ಸಾರಾಂಶ

ಅಂತಿಮವಾಗಿ, ನಾವು ಬಯಸಿದ ಅಪ್ಲಿಕೇಶನ್ ಮೂಲಸೌಕರ್ಯವನ್ನು ಹಸ್ತಚಾಲಿತವಾಗಿ ನಿಯೋಜಿಸಲು ಸಾಧ್ಯವಾಯಿತು ಮತ್ತು ಈಗ ನಾವು ಹೆಚ್ಚು ಸ್ಥಿತಿಸ್ಥಾಪಕ ಗ್ರಾಫನಾ ಸೇವೆಯನ್ನು ಹೊಂದಿದ್ದೇವೆ. ಡೇಟಾಸೆಟ್ ಅನ್ನು ಲೋಡ್ ಮಾಡಲು ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಪ್ರವೇಶ ಬಿಂದು ಮತ್ತು ಕ್ಲಿಕ್‌ಹೌಸ್ ಕ್ಲಸ್ಟರ್‌ನ ಹೋಸ್ಟ್‌ನಂತೆ ಬ್ಯಾಲೆನ್ಸರ್‌ನ IP ವಿಳಾಸವನ್ನು ಮಾತ್ರ ನೀವು ತಿಳಿದುಕೊಳ್ಳಬೇಕು.

ಇದು ವಿಜಯದಂತೆ ತೋರುತ್ತದೆಯೇ? ಹೌದು, ಗೆಲುವು. ಆದರೆ ಏನೋ ಇನ್ನೂ ನನ್ನನ್ನು ಗೊಂದಲಗೊಳಿಸುತ್ತದೆ. ಮೇಲಿನ ಸಂಪೂರ್ಣ ಪ್ರಕ್ರಿಯೆಗೆ ಬಹಳಷ್ಟು ಹಸ್ತಚಾಲಿತ ಹಂತಗಳ ಅಗತ್ಯವಿದೆ ಮತ್ತು ಸ್ಕೇಲೆಬಲ್ ಅಲ್ಲ; ಸಾಧ್ಯವಾದರೆ ನಾನು ಅದನ್ನು ಸ್ವಯಂಚಾಲಿತಗೊಳಿಸಲು ಬಯಸುತ್ತೇನೆ. ಇದಕ್ಕಾಗಿಯೇ ಮುಂದಿನ ವಿಭಾಗವನ್ನು ಮೀಸಲಿಡಲಾಗುವುದು.

ಟೆರಾಫಾರ್ಮ್ ಏಕೀಕರಣ

ನಾವು ಮತ್ತೆ HashiCorp ಎಂಬ ಉಪಕರಣವನ್ನು ಬಳಸುತ್ತೇವೆ ಟೆರಾಫಾರ್ಮ್. ಬಳಕೆದಾರರು ರವಾನಿಸಿದ ಹಲವಾರು ವೇರಿಯೇಬಲ್‌ಗಳ ಆಧಾರದ ಮೇಲೆ ಬಟನ್‌ನ ಕ್ಲಿಕ್‌ನೊಂದಿಗೆ ಸಂಪೂರ್ಣ ಅಪ್ಲಿಕೇಶನ್ ಮೂಲಸೌಕರ್ಯವನ್ನು ನಿಯೋಜಿಸಲು ಇದು ನಿಮಗೆ ಸಹಾಯ ಮಾಡುತ್ತದೆ. ವಿಭಿನ್ನ ಬಳಕೆದಾರರ ವಿವಿಧ ವಿಭಾಗಗಳಲ್ಲಿ ಅನೇಕ ಬಾರಿ ರನ್ ಮಾಡಬಹುದಾದ ಪಾಕವಿಧಾನವನ್ನು ಬರೆಯೋಣ.

ಟೆರಾಫಾರ್ಮ್‌ನೊಂದಿಗಿನ ಎಲ್ಲಾ ಕೆಲಸಗಳು ಕಾನ್ಫಿಗರೇಶನ್ ಫೈಲ್ ಅನ್ನು ಬರೆಯಲು ಬರುತ್ತದೆ (*.tf) ಮತ್ತು ಅದರ ಆಧಾರದ ಮೇಲೆ ಮೂಲಸೌಕರ್ಯಗಳ ಸೃಷ್ಟಿ.

ಅಸ್ಥಿರ

ಫೈಲ್‌ನ ಪ್ರಾರಂಭದಲ್ಲಿ, ಭವಿಷ್ಯದ ಮೂಲಸೌಕರ್ಯವನ್ನು ಎಲ್ಲಿ ಮತ್ತು ಹೇಗೆ ನಿಯೋಜಿಸಲಾಗುವುದು ಎಂಬುದನ್ನು ನಿರ್ಧರಿಸುವ ಅಸ್ಥಿರಗಳನ್ನು ನಾವು ಸೇರಿಸುತ್ತೇವೆ.

variable "oauth_token" {
    type = string
    default = "<oauth-token>"
}
variable "cloud_id" {
    type = string
    default = "<cloud-id>"
}
variable "folder_id" {
    type = string
    default = "<folder_id>"
}
variable "service_account_id" {
    type = string
    default = "<service_account_id>"
}
variable "image_id" {
    type = string
    default = "<image_id>"
}
variable "username" {
    type = string
    default = "<username>"
}
variable "password" {
    type = string
    default = "<password>"
}
variable "dbname" {
    type = string
    default = "<dbname>"
}
variable "public_key_path" {
    type = string
    default = "<path to ssh public key>"
}

ಸಂಪೂರ್ಣ ಅಪ್ಲಿಕೇಶನ್ ನಿಯೋಜನೆ ಪ್ರಕ್ರಿಯೆಯು ಡಿಸ್ಕ್ ಇಮೇಜ್ ಅನ್ನು ನಿರ್ಮಿಸಲು ಮತ್ತು ಈ ಅಸ್ಥಿರಗಳನ್ನು ಹೊಂದಿಸಲು ಬರುತ್ತದೆ. ಅವರು ಏನು ಜವಾಬ್ದಾರರು ಎಂಬುದನ್ನು ನಾನು ವಿವರಿಸುತ್ತೇನೆ:

ಪ್ರಮಾಣ_ಟೋಕನ್ - ಮೋಡವನ್ನು ಪ್ರವೇಶಿಸಲು ಒಂದು ಟೋಕನ್. ಮೂಲಕ ಪಡೆಯಬಹುದು ಲಿಂಕ್.
ಕ್ಲೌಡ್_ಐಡಿ — ಕ್ಲೌಡ್ ಐಡೆಂಟಿಫೈಯರ್ ಅಲ್ಲಿ ನಾವು ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ನಿಯೋಜಿಸುತ್ತೇವೆ
ಫೋಲ್ಡರ್_ಐಡಿ - ನಾವು ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ನಿಯೋಜಿಸುವ ವಿಭಾಗ ಗುರುತಿಸುವಿಕೆ
ಸೇವೆ_ಖಾತೆ_ಐಡಿ — ಕ್ಲೌಡ್‌ನ ಅನುಗುಣವಾದ ವಿಭಾಗದಲ್ಲಿ ಸೇವಾ ಖಾತೆ ಗುರುತಿಸುವಿಕೆ.
image_id — ಪ್ಯಾಕರ್ ಬಳಸಿ ಪಡೆದ ಡಿಸ್ಕ್ ಚಿತ್ರದ ಗುರುತಿಸುವಿಕೆ
ಬಳಕೆದಾರ ಹೆಸರು и ಪಾಸ್ವರ್ಡ್ — ಡೇಟಾಬೇಸ್ ಮತ್ತು ಗ್ರಾಫನಾ ವೆಬ್ ಸರ್ವರ್ ಎರಡನ್ನೂ ಪ್ರವೇಶಿಸಲು ಬಳಕೆದಾರಹೆಸರು ಮತ್ತು ಪಾಸ್‌ವರ್ಡ್
dbname — CH ಮತ್ತು MySQL ಕ್ಲಸ್ಟರ್‌ಗಳ ಒಳಗೆ ಡೇಟಾಬೇಸ್ ಹೆಸರು
ಸಾರ್ವಜನಿಕ_ಕೀ_ಮಾರ್ಗ — ನಿಮ್ಮ ಸಾರ್ವಜನಿಕ ssh ಕೀಲಿಯೊಂದಿಗೆ ಫೈಲ್‌ಗೆ ಮಾರ್ಗ, ನೀವು ಹೆಸರಿನಲ್ಲಿ ಸಂಪರ್ಕಿಸಲು ಬಳಸಬಹುದು ubuntu ವೆಬ್ ಸರ್ವರ್‌ಗಳೊಂದಿಗೆ ವರ್ಚುವಲ್ ಯಂತ್ರಗಳಿಗೆ

ಪೂರೈಕೆದಾರರ ಸೆಟಪ್

ಈಗ ನೀವು ಟೆರ್ರಾಫಾರ್ಮ್ ಪೂರೈಕೆದಾರರನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಬೇಕಾಗಿದೆ - ನಮ್ಮ ಸಂದರ್ಭದಲ್ಲಿ, ಯಾಂಡೆಕ್ಸ್:

provider "yandex" {
  token     = var.oauth_token
  cloud_id  = var.cloud_id
  folder_id = var.folder_id
  zone      = "ru-central1-a"
}

ಇಲ್ಲಿ ನಾವು ಮೇಲೆ ವಿವರಿಸಿದ ಅಸ್ಥಿರಗಳನ್ನು ಬಳಸುತ್ತಿರುವುದನ್ನು ನೀವು ಗಮನಿಸಬಹುದು.

ನೆಟ್‌ವರ್ಕ್ ಮತ್ತು ಕ್ಲಸ್ಟರ್‌ಗಳು

ಈಗ ನಾವು ನೆಟ್‌ವರ್ಕ್ ಅನ್ನು ರಚಿಸುತ್ತೇವೆ, ಇದರಲ್ಲಿ ನಮ್ಮ ಮೂಲಸೌಕರ್ಯದ ಅಂಶಗಳು ಮೂರು ಸಬ್‌ನೆಟ್‌ಗಳು (ಪ್ರತಿ ಪ್ರದೇಶದಲ್ಲಿ ಒಂದು) ಮತ್ತು CH ಮತ್ತು MySQL ಕ್ಲಸ್ಟರ್‌ಗಳನ್ನು ಹೆಚ್ಚಿಸುತ್ತವೆ.


resource "yandex_vpc_network" "grafana_network" {}

resource "yandex_vpc_subnet" "subnet_a" {
  zone           = "ru-central1-a"
  network_id     = yandex_vpc_network.grafana_network.id
  v4_cidr_blocks = ["10.1.0.0/24"]
}

resource "yandex_vpc_subnet" "subnet_b" {
  zone           = "ru-central1-b"
  network_id     = yandex_vpc_network.grafana_network.id
  v4_cidr_blocks = ["10.2.0.0/24"]
}

resource "yandex_vpc_subnet" "subnet_c" {
  zone           = "ru-central1-c"
  network_id     = yandex_vpc_network.grafana_network.id
  v4_cidr_blocks = ["10.3.0.0/24"]
}

resource "yandex_mdb_clickhouse_cluster" "ch_cluster" {
  name        = "grafana-clickhouse"
  environment = "PRODUCTION"
  network_id  = yandex_vpc_network.grafana_network.id

  clickhouse {
    resources {
      resource_preset_id = "s2.micro"
      disk_type_id       = "network-ssd"
      disk_size          = 16
    }
  }

  zookeeper {
    resources {
      resource_preset_id = "s2.micro"
      disk_type_id       = "network-ssd"
      disk_size          = 10
    }
  }

  database {
    name = var.dbname
  }

  user {
    name     = var.username
    password = var.password
    permission {
      database_name = var.dbname
    }
  }

  host {
    type      = "CLICKHOUSE"
    zone      = "ru-central1-a"
    subnet_id = yandex_vpc_subnet.subnet_a.id
  }

  host {
    type      = "CLICKHOUSE"
    zone      = "ru-central1-b"
    subnet_id = yandex_vpc_subnet.subnet_b.id
  }

  host {
    type      = "CLICKHOUSE"
    zone      = "ru-central1-c"
    subnet_id = yandex_vpc_subnet.subnet_c.id
  }

  host {
    type      = "ZOOKEEPER"
    zone      = "ru-central1-a"
    subnet_id = yandex_vpc_subnet.subnet_a.id
  }

  host {
    type      = "ZOOKEEPER"
    zone      = "ru-central1-b"
    subnet_id = yandex_vpc_subnet.subnet_b.id
  }

  host {
    type      = "ZOOKEEPER"
    zone      = "ru-central1-c"
    subnet_id = yandex_vpc_subnet.subnet_c.id
  }
}

resource "yandex_mdb_mysql_cluster" "mysql_cluster" {
  name        = "grafana_mysql"
  environment = "PRODUCTION"
  network_id  = yandex_vpc_network.grafana_network.id
  version     = "8.0"

  resources {
    resource_preset_id = "s2.micro"
    disk_type_id       = "network-ssd"
    disk_size          = 16
  }

  database {
    name = var.dbname
  }

  user {
    name     = var.username
    password = var.password
    permission {
      database_name = var.dbname
      roles         = ["ALL"]
    }
  }

  host {
    zone      = "ru-central1-a"
    subnet_id = yandex_vpc_subnet.subnet_a.id
  }
  host {
    zone      = "ru-central1-b"
    subnet_id = yandex_vpc_subnet.subnet_b.id
  }
  host {
    zone      = "ru-central1-c"
    subnet_id = yandex_vpc_subnet.subnet_c.id
  }
}

ನೀವು ನೋಡುವಂತೆ, ಮೂರು ಲಭ್ಯತೆಯ ವಲಯಗಳಲ್ಲಿ ಇರಿಸುವ ಮೂಲಕ ಪ್ರತಿಯೊಂದು ಎರಡು ಕ್ಲಸ್ಟರ್‌ಗಳನ್ನು ಸಾಕಷ್ಟು ದೋಷ-ಸಹಿಷ್ಣುತೆಯನ್ನು ರಚಿಸಲಾಗಿದೆ.

ವೆಬ್ ಸರ್ವರ್ಗಳು

ನಾವು ಅದೇ ಉತ್ಸಾಹದಲ್ಲಿ ಮುಂದುವರಿಯಬಹುದು ಎಂದು ತೋರುತ್ತದೆ, ಆದರೆ ನಾನು ಕಷ್ಟಕ್ಕೆ ಸಿಲುಕಿದೆ. ಇದಕ್ಕೂ ಮೊದಲು, ನಾನು ಮೊದಲು MySQL ಕ್ಲಸ್ಟರ್ ಅನ್ನು ಬೆಳೆಸಿದೆ ಮತ್ತು ಅದರ ನಂತರ ಮಾತ್ರ, ಅದರ ID ಅನ್ನು ತಿಳಿದುಕೊಂಡು, ಅಗತ್ಯವಿರುವ ಕಾನ್ಫಿಗರೇಶನ್‌ನೊಂದಿಗೆ ನಾನು ಡಿಸ್ಕ್ ಇಮೇಜ್ ಅನ್ನು ಸಂಗ್ರಹಿಸಿದೆ, ಅಲ್ಲಿ ನಾನು ಕ್ಲಸ್ಟರ್‌ಗೆ ಹೋಸ್ಟ್ ಅನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸಿದೆ. ಆದರೆ ಈಗ ನಮಗೆ ಟೆರ್ರಾಫಾರ್ಮ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸುವ ಮೊದಲು ಕ್ಲಸ್ಟರ್ ಐಡಿ ತಿಳಿದಿಲ್ಲ, ಚಿತ್ರವನ್ನು ನಿರ್ಮಿಸುವ ಸಮಯದಲ್ಲಿ ಸೇರಿದಂತೆ. ಆದ್ದರಿಂದ, ನಾನು ಈ ಕೆಳಗಿನವುಗಳನ್ನು ಆಶ್ರಯಿಸಬೇಕಾಯಿತು ಟ್ರಿಕ್.

Amazon ನ ಮೆಟಾಡೇಟಾ ಸೇವೆಯನ್ನು ಬಳಸಿಕೊಂಡು, ನಾವು ಕೆಲವು ನಿಯತಾಂಕಗಳನ್ನು ವರ್ಚುವಲ್ ಯಂತ್ರಕ್ಕೆ ರವಾನಿಸುತ್ತೇವೆ, ಅದು ಸ್ವೀಕರಿಸುತ್ತದೆ ಮತ್ತು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುತ್ತದೆ. MySQL ಕ್ಲಸ್ಟರ್ ಹೋಸ್ಟ್ ಮತ್ತು ಬಳಕೆದಾರಹೆಸರು-ಪಾಸ್‌ವರ್ಡ್‌ನ ಹಿಂದಿನ ಮೆಟಾಡೇಟಾಕ್ಕೆ ಹೋಗಲು ನಮಗೆ ಯಂತ್ರದ ಅಗತ್ಯವಿದೆ, ಇದನ್ನು ಬಳಕೆದಾರರು ಪ್ರಾರಂಭಿಸಿದ ನಂತರ Terraform ಫೈಲ್‌ನಲ್ಲಿ ನಿರ್ದಿಷ್ಟಪಡಿಸಲಾಗಿದೆ. ಫೈಲ್‌ನ ವಿಷಯಗಳನ್ನು ಸ್ವಲ್ಪ ಬದಲಾಯಿಸೋಣ setup.sh, ಇದು ವರ್ಚುವಲ್ ಯಂತ್ರವನ್ನು ಆನ್ ಮಾಡಿದಾಗ ಚಲಿಸುತ್ತದೆ.

setup.sh:

#!/bin/bash
CLUSTER_URI="$(curl -H 'Metadata-Flavor:Google' http://169.254.169.254/computeMetadata/v1/instance/attributes/mysql_cluster_uri)"
USERNAME="$(curl -H 'Metadata-Flavor:Google' http://169.254.169.254/computeMetadata/v1/instance/attributes/username)"
PASSWORD="$(curl -H 'Metadata-Flavor:Google' http://169.254.169.254/computeMetadata/v1/instance/attributes/password)"
sudo sed -i "s#.*;url =.*#url = mysql://${USERNAME}:${PASSWORD}@${CLUSTER_URI}#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_user =.*#admin_user = ${USERNAME}#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_password =.*#admin_password = ${PASSWORD}#" /etc/grafana/grafana.ini
sudo service grafana-server restart

ಇಂಟೆನ್ಸ್ ಗ್ರೂಪ್ ಮತ್ತು ಬ್ಯಾಲೆನ್ಸರ್

ಹೊಸ ಡಿಸ್ಕ್ ಇಮೇಜ್ ಅನ್ನು ಮರುನಿರ್ಮಾಣ ಮಾಡಿದ ನಂತರ, ನಾವು ಅಂತಿಮವಾಗಿ ನಮ್ಮ ಫೈಲ್ ಅನ್ನು Terraform ಗಾಗಿ ಸೇರಿಸಬಹುದು.

ನಾವು ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಡಿಸ್ಕ್ ಇಮೇಜ್ ಅನ್ನು ಬಳಸಲು ಬಯಸುತ್ತೇವೆ ಎಂದು ಸೂಚಿಸೋಣ:

data "yandex_compute_image" "grafana_image" {
  image_id = var.image_id
}

ಈಗ ನಿದರ್ಶನ ಗುಂಪನ್ನು ರಚಿಸೋಣ:

resource "yandex_compute_instance_group" "grafana_group" {
  name               = "grafana-group"
  folder_id          = var.folder_id
  service_account_id = var.service_account_id
  instance_template {
    platform_id = "standard-v1"
    resources {
      memory = 1
      cores  = 1
    }
    boot_disk {
      mode = "READ_WRITE"
      initialize_params {
        image_id = data.yandex_compute_image.grafana_image.id
        size     = 4
      }
    }
    network_interface {
      network_id = yandex_vpc_network.grafana_network.id
      subnet_ids = [yandex_vpc_subnet.subnet_a.id, yandex_vpc_subnet.subnet_b.id, yandex_vpc_subnet.subnet_c.id]
      nat = "true"
    }
    metadata = {
      mysql_cluster_uri = "c-${yandex_mdb_mysql_cluster.mysql_cluster.id}.rw.mdb.yandexcloud.net:3306/${var.dbname}"
      username = var.username
      password = var.password
      ssh-keys = "ubuntu:${file("${var.public_key_path}")}"
    }
    network_settings {
      type = "STANDARD"
    }
  }

  scale_policy {
    fixed_scale {
      size = 6
    }
  }

  allocation_policy {
    zones = ["ru-central1-a", "ru-central1-b", "ru-central1-c"]
  }

  deploy_policy {
    max_unavailable = 2
    max_creating    = 2
    max_expansion   = 2
    max_deleting    = 2
  }

  load_balancer {
    target_group_name = "grafana-target-group"
  }
}

ನಾವು ಅದನ್ನು ಮೆಟಾಡೇಟಾಕ್ಕೆ ಹೇಗೆ ರವಾನಿಸಿದ್ದೇವೆ ಎಂಬುದರ ಬಗ್ಗೆ ಗಮನ ಹರಿಸುವುದು ಯೋಗ್ಯವಾಗಿದೆ cluster_uri, username и password. ಇವುಗಳನ್ನು ವರ್ಚುವಲ್ ಯಂತ್ರವು ಪ್ರಾರಂಭದಲ್ಲಿ ತೆಗೆದುಹಾಕುತ್ತದೆ ಮತ್ತು ಗ್ರಾಫನಾ ಸಂರಚನೆಯಲ್ಲಿ ಇರಿಸುತ್ತದೆ.

ಇದು ಬ್ಯಾಲೆನ್ಸರ್ಗೆ ಬಿಟ್ಟದ್ದು.

resource "yandex_lb_network_load_balancer" "grafana_balancer" {
  name = "grafana-balancer"

  listener {
    name = "grafana-listener"
    port = 80
    target_port = 3000
    external_address_spec {
      ip_version = "ipv4"
    }
  }

  attached_target_group {
    target_group_id = yandex_compute_instance_group.grafana_group.load_balancer.0.target_group_id

    healthcheck {
      name = "healthcheck"
      tcp_options {
        port = 3000
      }
    }
  }
}

ಸ್ವಲ್ಪ ಸಕ್ಕರೆ

ಸ್ವಲ್ಪ ಮಾತ್ರ ಉಳಿದಿದೆ. ಮೂಲಸೌಕರ್ಯವನ್ನು ನಿಯೋಜಿಸಿದ ನಂತರ, ನೀವು ಗ್ರಾಫನಾ UI ಗೆ ಹೋಗಬೇಕು ಮತ್ತು ಡೇಟಾ ಮೂಲವಾಗಿ CH ಕ್ಲಸ್ಟರ್ ಅನ್ನು ಹಸ್ತಚಾಲಿತವಾಗಿ ಸೇರಿಸಬೇಕು (ಅದರ ID ಅನ್ನು ಇನ್ನೂ ಪಡೆಯಬೇಕಾಗಿದೆ). ಆದರೆ ಟೆರಾಫಾರ್ಮ್‌ಗೆ ಕ್ಲಸ್ಟರ್ ಐಡಿ ತಿಳಿದಿದೆ. ವಿಷಯವನ್ನು ಕಾರ್ಯರೂಪಕ್ಕೆ ತರಲು ಅವನಿಗೆ ಒಪ್ಪಿಸೋಣ.

ನಾವು ಹೊಸ ಪೂರೈಕೆದಾರರನ್ನು ಸೇರಿಸೋಣ - ಗ್ರಾಫಾನಾ, ಮತ್ತು ಆಕೆಗೆ ಹೋಸ್ಟ್ ಆಗಿ ಬ್ಯಾಲೆನ್ಸರ್‌ನ IP ವಿಳಾಸವನ್ನು ನೀಡೋಣ. ಟೆರ್ರಾಫಾರ್ಮ್ ಗಣಕದಲ್ಲಿ ಮಾಡುವ ಎಲ್ಲಾ ಬದಲಾವಣೆಗಳನ್ನು ಅದರ ಬ್ಯಾಲೆನ್ಸರ್ ನಿರ್ಧರಿಸುವ MySQL ನಲ್ಲಿ ಬೆಳೆಯುತ್ತದೆ ಮತ್ತು ಆದ್ದರಿಂದ ಎಲ್ಲಾ ಇತರ ಯಂತ್ರಗಳಲ್ಲಿ.

provider "grafana" {
  url  = "http://${[for s in yandex_lb_network_load_balancer.grafana_balancer.listener: s.external_address_spec.0.address].0}"
  auth = "${var.username}:${var.password}"
}

resource "grafana_data_source" "ch_data_source" {
  type          = "vertamedia-clickhouse-datasource"
  name          = "grafana"
  url           = "https://c-${yandex_mdb_clickhouse_cluster.ch_cluster.id}.rw.mdb.yandexcloud.net:8443"
  basic_auth_enabled = "true"
  basic_auth_username = var.username
  basic_auth_password = var.password
  is_default = "true"
  access_mode = "proxy"
}

ನಮ್ಮ ಕೂದಲನ್ನು ಬಾಚಿಕೊಳ್ಳೋಣ

ಬ್ಯಾಲೆನ್ಸರ್ ಐಪಿ ವಿಳಾಸ ಮತ್ತು ಕ್ಲಿಕ್‌ಹೌಸ್ ಕ್ಲಸ್ಟರ್‌ನ ಹೋಸ್ಟ್ ಅನ್ನು ಪ್ರದರ್ಶಿಸೋಣ

output "grafana_balancer_ip_address" {
  value = [for s in yandex_lb_network_load_balancer.grafana_balancer.listener: s.external_address_spec.0.address].0
}

output "clickhouse_cluster_host" {
  value = "https://c-${yandex_mdb_clickhouse_cluster.ch_cluster.id}.rw.mdb.yandexcloud.net:8443"
}

ಓಡಬಹುದು

ಎಲ್ಲಾ! ನಮ್ಮ ಕಾನ್ಫಿಗರೇಶನ್ ಫೈಲ್ ಸಿದ್ಧವಾಗಿದೆ ಮತ್ತು ವೇರಿಯೇಬಲ್‌ಗಳನ್ನು ಹೊಂದಿಸುವ ಮೂಲಕ, ನಾವು ಮೇಲೆ ವಿವರಿಸಿದ ಎಲ್ಲವನ್ನೂ ಹೆಚ್ಚಿಸಲು ಟೆರಾಫಾರ್ಮ್‌ಗೆ ಹೇಳಬಹುದು. ಇಡೀ ಪ್ರಕ್ರಿಯೆಯು ನನಗೆ ಸುಮಾರು 15 ನಿಮಿಷಗಳನ್ನು ತೆಗೆದುಕೊಂಡಿತು.
ಕೊನೆಯಲ್ಲಿ ನೀವು ಸುಂದರವಾದ ಸಂದೇಶವನ್ನು ನೋಡಬಹುದು:

Apply complete! Resources: 9 added, 0 changed, 0 destroyed.
Outputs:

clickhouse_cluster_host = https://c-c9q14ipa2ngadqsbp2iq.rw.mdb.yandexcloud.net:8443
grafana_balancer_ip_address = 130.193.50.25

ಮತ್ತು ಮೋಡದಲ್ಲಿ, ಬೆಳೆದ ಮೂಲಸೌಕರ್ಯದ ಅಂಶಗಳು ಗೋಚರಿಸುತ್ತವೆ:

ಗ್ರಾಫನಾವನ್ನು ಉದಾಹರಣೆಯಾಗಿ ಬಳಸಿಕೊಂಡು Yandex.Cloud ನಲ್ಲಿ ವಿತರಿಸಿದ ಸೇವೆಗಳ ನಿಯೋಜನೆ

ಫಲಿತಾಂಶಗಳನ್ನು ಒಟ್ಟಾರೆಯಾಗಿ ನೋಡೋಣ

ಈಗ, ಗ್ರಾಫನಾವನ್ನು ಉದಾಹರಣೆಯಾಗಿ ಬಳಸಿ, ನೀವು ಪ್ರತಿಯೊಬ್ಬರೂ Yandex.Cloud ಪ್ಲಾಟ್‌ಫಾರ್ಮ್‌ನಲ್ಲಿ ವಿಸ್ತಾರವಾದ ಕ್ಲೌಡ್ ಆರ್ಕಿಟೆಕ್ಚರ್‌ನೊಂದಿಗೆ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ನಿಯೋಜಿಸಬಹುದು. ಪ್ಯಾಕರ್ ಮತ್ತು ಟೆರಾಫಾರ್ಮ್‌ನಂತಹ HashiCorp ನಿಂದ ಸಹಾಯಕವಾದ ಪರಿಕರಗಳು ನಿಮಗೆ ಇದಕ್ಕೆ ಸಹಾಯ ಮಾಡಬಹುದು. ಯಾರಾದರೂ ಈ ಲೇಖನವನ್ನು ಉಪಯುಕ್ತವೆಂದು ನಾನು ಭಾವಿಸುತ್ತೇನೆ :)

PS ಕೆಳಗೆ ನಾನು ರೆಪೊಸಿಟರಿಗೆ ಲಿಂಕ್ ಅನ್ನು ಲಗತ್ತಿಸುತ್ತೇನೆ, ಅಲ್ಲಿ ನೀವು ಪ್ಯಾಕರ್ ಮತ್ತು ಟೆರ್ರಾಫಾರ್ಮ್ಗಾಗಿ ರೆಡಿಮೇಡ್ ಪಾಕವಿಧಾನಗಳನ್ನು ಕಾಣಬಹುದು, ಈ ಲೇಖನದಲ್ಲಿ ನಾನು ಒದಗಿಸಿದ ತುಣುಕುಗಳು.

ಭಂಡಾರ

ಮೂಲ: www.habr.com

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ