ကျွန်ုပ်တို့သည် Yandex.Cloud တွင် ပွဲပေါင်း 10 လက်ခံပါသည်။ အပိုင်း 000

အားလုံးပဲ မင်္ဂလာပါ သူငယ်ချင်းတို့။

* ဤဆောင်းပါးသည် REBRAIN & Yandex.Cloud အဖွင့်အလုပ်ရုံဆွေးနွေးပွဲကို အခြေခံထားခြင်းဖြစ်ပြီး ဗီဒီယိုကိုကြည့်ရှုလိုပါက ဤလင့်ခ်တွင် ကြည့်ရှုနိုင်သည် - https://youtu.be/cZLezUm0ekE

ကျွန်ုပ်တို့သည် မကြာသေးမီက Yandex.Cloud ကို တိုက်ရိုက်စမ်းသုံးရန် အခွင့်အရေးရခဲ့သည်။ ကျွန်ုပ်တို့သည် ရှည်လျားပြီး ခက်ခက်ခဲခဲ စုံစမ်းစစ်ဆေးလိုသောကြောင့်၊ ရိုးရှင်းသော Wordpress ဘလော့ဂ်ကို cloud အခြေခံဖြင့် စတင်ရန် စိတ်ကူးကို ချက်ချင်း စွန့်လွှတ်လိုက်သည် - ပျင်းစရာကောင်းလွန်းပါသည်။ အချို့သောစဉ်းစားပြီးနောက်၊ ကျွန်ုပ်တို့သည် အချိန်နှင့်တပြေးညီမုဒ်တွင် ဖြစ်ရပ်များကိုလက်ခံခြင်းနှင့် ခွဲခြမ်းစိတ်ဖြာခြင်းအတွက် ထုတ်လုပ်ရေးဝန်ဆောင်မှုဗိသုကာနှင့်ဆင်တူသည့်အရာတစ်ခုကို အသုံးပြုရန် ဆုံးဖြတ်ခဲ့သည်။

အွန်လိုင်း (သာမက) စီးပွားရေးလုပ်ငန်း အများစုသည် ၎င်းတို့၏ သုံးစွဲသူများနှင့် ၎င်းတို့၏ လုပ်ဆောင်ချက်များနှင့် ပတ်သက်သည့် အချက်အလက်များ တောင်တန်းတစ်ခုကို တစ်နည်းနည်းဖြင့် စုဆောင်းကြသည်ကို ကျွန်ုပ် လုံးဝသေချာပါသည်။ အနည်းဆုံးအားဖြင့်၊ အချို့သော ဆုံးဖြတ်ချက်များချရန်အတွက် ဤအရာသည် လိုအပ်သည် - ဥပမာအားဖြင့်၊ သင်သည် အွန်လိုင်းဂိမ်းတစ်ခုကို စီမံခန့်ခွဲပါက၊ အသုံးပြုသူများ မကြာခဏ ပိတ်မိနေပြီး သင့်အရုပ်ကို ဖျက်ပစ်သည့် အဆင့်ရှိ စာရင်းအင်းများကို ကြည့်ရှုနိုင်ပါသည်။ သို့မဟုတ် အသုံးပြုသူများသည် မည်သည့်အရာကိုမျှ မဝယ်ယူဘဲ သင့်ဆိုဒ်မှ ထွက်ခွာသွားခြင်း (မင်္ဂလာပါ Yandex.Metrica)။

ထို့ကြောင့်၊ ကျွန်ုပ်တို့၏ဇာတ်လမ်း- golang တွင် အက်ပလီကေးရှင်းတစ်ခု မည်သို့ရေးခဲ့ပုံ၊ kafka vs rabbitmq vs yqs ကို စမ်းသပ်ပြီး Clickhouse အစုအဝေးတစ်ခုတွင် ဒေတာစီးကြောင်းကို ရေးသားပြီး yandex datalens များကို အသုံးပြု၍ ဒေတာကို မြင်ယောင်ကြည့်ပါ။ ပုံမှန်အားဖြင့်၊ ဤအရာအားလုံးကို docker၊ terraform၊ gitlab ci နှင့် prometheus ပုံစံဖြင့် အခြေခံအဆောက်အအုံဆိုင်ရာ နှစ်သက်ဖွယ်များဖြင့် ပေါင်းစပ်ထားသည်။ သွားကြရအောင်!

ကျွန်ုပ်သည် တစ်ထိုင်တည်းတွင် အရာအားလုံးကို စီစဉ်ပေးနိုင်မည် မဟုတ်သည့်အတွက် ချက်ချင်း ကြိုတင်မှာကြားလိုပါသည် - ဤအတွက် ကျွန်ုပ်တို့သည် စီးရီးတွင် ဆောင်းပါးများစွာ လိုအပ်ပါမည်။ ဖွဲ့စည်းပုံအကြောင်း အနည်းငယ်

အပိုင်း 1 (သင်ဖတ်နေပါသည်)။ ဖြေရှင်းချက်၏ သတ်မှတ်ချက်များနှင့် ဗိသုကာလက်ရာများအပေါ် ကျွန်ုပ်တို့ ဆုံးဖြတ်မည်ဖြစ်ပြီး golang ဖြင့် အက်ပလီကေးရှင်းတစ်ခုကိုလည်း ရေးသားပါမည်။
အပိုင်း 2။ ကျွန်ုပ်တို့၏အက်ပလီကေးရှင်းကို ထုတ်လုပ်ရန်၊ ၎င်းကို အတိုင်းအတာအထိ လုပ်နိုင်စေရန်နှင့် ဝန်ကို စမ်းသပ်ပါသည်။
အပိုင်း ၃။ ကျွန်ုပ်တို့သည် ဖိုင်များတွင်မဟုတ်ဘဲ ကြားခံတစ်ခုတွင် မက်ဆေ့ချ်များကို အဘယ်ကြောင့်သိမ်းဆည်းရသနည်း၊ kafka၊ rabbitmq နှင့် yandex တန်းစီခြင်းဝန်ဆောင်မှုတို့ကိုလည်း နှိုင်းယှဉ်ကြည့်ကြပါစို့။
အပိုင်း ၄ ကျွန်ုပ်တို့သည် Clickhouse အစုအဝေးတစ်ခုအား ဖြန့်ကျက်အသုံးပြုမည်ဖြစ်ပြီး ထိုနေရာတွင် ကြားခံမှဒေတာများကိုလွှဲပြောင်းရန် streaming ဝန်ဆောင်မှုကိုရေးသားကာ datalens တွင် ပုံရိပ်ယောင်ပုံဖော်ခြင်းကို စနစ်ထည့်သွင်းပါမည်။
အပိုင်း ၅ အခြေခံအဆောက်အဦတစ်ခုလုံးကို သင့်လျော်သောပုံသဏ္ဍာန်အဖြစ် ယူဆောင်ကြပါစို့ - gitlab ci ကို အသုံးပြု၍ ci/cd ကိုတည်ဆောက်ပါ၊ prometheus နှင့်ကောင်စစ်ဝန်ကိုအသုံးပြု၍ စောင့်ကြည့်ခြင်းနှင့် ဝန်ဆောင်မှုရှာဖွေတွေ့ရှိမှုကို ချိတ်ဆက်ပါ။

ТЗ

ပထမဦးစွာ၊ ရလဒ်အဖြစ် ကျွန်ုပ်တို့ရရှိလိုသော အတိအကျ ရည်ညွှန်းသတ်မှတ်ချက်များကို ပုံဖော်ကြပါစို့။

  1. ကျွန်ုပ်တို့သည် events.kis.im (kis.im သည် ဆောင်းပါးအားလုံးတွင် ကျွန်ုပ်တို့အသုံးပြုမည့် စမ်းသပ်ဒိုမိန်းဖြစ်သည်)၊ HTTPS ကို အသုံးပြု၍ ဖြစ်ရပ်များကို လက်ခံသင့်သည့် အဆုံးမှတ်တစ်ခု ရှိလိုပါသည်။
  2. အစီအစဉ်များသည် ရိုးရှင်းသော json တစ်ခုဖြစ်သည်- {“event”: “view”, “os”: “linux”, “browser”: “chrome”}။ နောက်ဆုံးအဆင့်တွင် ကျွန်ုပ်တို့သည် နယ်ပယ်အနည်းငယ်ကို ထပ်ထည့်မည်ဖြစ်သော်လည်း ၎င်းသည် ကြီးမားသောအခန်းကဏ္ဍမှ ပါဝင်မည်မဟုတ်ပါ။ ဆန္ဒရှိပါက protobuf သို့ ပြောင်းနိုင်သည်။
  3. ဝန်ဆောင်မှုသည် တစ်စက္ကန့်လျှင် ဖြစ်ရပ်ပေါင်း 10 ကို လုပ်ဆောင်နိုင်ရပါမည်။
  4. ကျွန်ုပ်တို့၏ဖြေရှင်းချက်တွင် သာဓကအသစ်များကို ပေါင်းထည့်ရုံဖြင့် အလျားလိုက်အတိုင်းအတာကို တိုင်းတာရန်ဖြစ်သင့်သည်။ client တောင်းဆိုမှုများအတွက် latency လျှော့ချရန် ရှေ့အပိုင်းကို မတူညီသော geolocation များသို့ ရွှေ့နိုင်လျှင် ကောင်းပါသည်။
  5. အမှားခံနိုင်ရည်ရှိသည်။ ဖြေရှင်းချက်သည် လုံလောက်သောတည်ငြိမ်မှုရှိရမည်ဖြစ်ပြီး မည်သည့်အစိတ်အပိုင်း၏ပြိုလဲမှုကို ရှင်သန်နိုင်ရမည် (အချို့သောအရေအတွက်အထိ၊ ဟုတ်ပါတယ်)။

ဗိသုကာအတတ်ပညာ

ယေဘူယျအားဖြင့်၊ ဤလုပ်ငန်းအမျိုးအစားအတွက်၊ ထိရောက်သော အတိုင်းအတာကို ခွင့်ပြုရန် ရှေးရိုးဗိသုကာလက်ရာများကို တီထွင်ခဲ့သည်မှာ ကြာပါပြီ။ ပုံသည် ကျွန်ုပ်တို့၏ ဖြေရှင်းချက်၏ ဥပမာကို ပြသည်။

ကျွန်ုပ်တို့သည် Yandex.Cloud တွင် ပွဲပေါင်း 10 လက်ခံပါသည်။ အပိုင်း 000

ဒါဆို ငါတို့မှာ ဘာတွေရှိလဲ။

1. ဘယ်ဘက်တွင် အမျိုးမျိုးသော ပွဲများကို ဖန်တီးပေးသည့် ကျွန်ုပ်တို့၏စက်ပစ္စည်းများသည် စမတ်ဖုန်းပေါ်တွင် ကစားစရာအဆင့်တစ်ခုကို ပြီးမြောက်သည့် ကစားသမားများဖြစ်စေ သို့မဟုတ် ပုံမှန်ဘရောက်ဆာမှတစ်ဆင့် အွန်လိုင်းစတိုးတွင် မှာယူမှုဖန်တီးသည့် ကစားသမားများဖြစ်သည်။ သတ်မှတ်ချက်တွင်ဖော်ပြထားသည့်အတိုင်း ဖြစ်ရပ်တစ်ခုသည် ကျွန်ုပ်တို့၏အဆုံးမှတ် - events.kis.im သို့ ပေးပို့သည့် ရိုးရှင်းသော json တစ်ခုဖြစ်သည်။

2. ပထမဆာဗာနှစ်ခုသည် ရိုးရှင်းသောဟန်ချက်ညီသူများဖြစ်ပြီး ၎င်းတို့၏အဓိကတာဝန်များမှာ-

  • အဆက်မပြတ်ရရှိနိုင်ပါစေ။ ၎င်းကိုလုပ်ဆောင်ရန်၊ ပြဿနာများရှိသောအခါတွင် node များအကြား virtual IP ကိုပြောင်းပေးမည့်ဥပမာ- Keepalived ကိုသင်အသုံးပြုနိုင်သည်။
  • TLS ကို အဆုံးသတ်ပါ။ ဟုတ်ကဲ့၊ ၎င်းတို့အပေါ် TLS ကို ကျွန်ုပ်တို့ ရပ်စဲပါမည်။ ပထမဦးစွာ၊ ကျွန်ုပ်တို့၏ဖြေရှင်းချက်သည် နည်းပညာဆိုင်ရာ သတ်မှတ်ချက်များနှင့် ကိုက်ညီစေရန်၊ ဒုတိယအချက်မှာ ကျွန်ုပ်တို့၏ နောက်ခံဆာဗာများမှ ကုဒ်ဝှက်ထားသော ချိတ်ဆက်မှုတစ်ခုကို ထူထောင်ခြင်း၏ ဝန်ထုပ်ဝန်ပိုးကို သက်သာစေရန်။
  • ရရှိနိုင်သော နောက်ခံဆာဗာများအတွက် အဝင်တောင်းဆိုမှုများကို ချိန်ခွင်လျှာညှိပါ။ ဤနေရာတွင် အဓိကစကားလုံးကို သုံးနိုင်သည်။ ယင်းကိုအခြေခံ၍ load balancers သည် ကျွန်ုပ်တို့၏ဆာဗာများကို အပလီကေးရှင်းများဖြင့် စောင့်ကြည့်နိုင်ပြီး မအောင်မြင်သော node များသို့ လမ်းကြောင်းကို ဟန်ချက်ညီအောင် ရပ်တန့်နိုင်ရမည်ကို နားလည်လာပါသည်။

3. Balancers များပြီးနောက်၊ ကျွန်ုပ်တို့တွင် အတော်လေးရိုးရှင်းသော အပလီကေးရှင်းတစ်ခုကို လုပ်ဆောင်နေသည့် အပလီကေးရှင်းဆာဗာများရှိသည်။ HTTP မှတစ်ဆင့် ဝင်လာသော တောင်းဆိုမှုများကို လက်ခံနိုင်သည်၊ ပေးပို့ထားသော json ကို တရားဝင်အောင်ပြုလုပ်ပြီး ဒေတာကို ကြားခံအဖြစ် ထည့်သွင်းနိုင်မည်ဖြစ်သည်။

4. ပုံကြမ်းသည် kafka အား ကြားခံတစ်ခုအဖြစ် ပြသသော်လည်း၊ ဤအဆင့်တွင် အခြားသော အလားတူဝန်ဆောင်မှုများကို အသုံးပြုနိုင်သည်။ တတိယဆောင်းပါးတွင် Kafka၊ rabbitmq နှင့် yqs တို့ကို နှိုင်းယှဉ်ပါမည်။

5. ကျွန်ုပ်တို့၏ဗိသုကာလက်ရာ၏အဆုံးစွန်သောအချက်မှာ Clickhouse - ဒေတာပမာဏများစွာကို သိမ်းဆည်းပြီး စီမံဆောင်ရွက်နိုင်သည့် ကော်လံဘားဒေတာဘေ့စ်ဖြစ်သည်။ ဤအဆင့်တွင်၊ ကျွန်ုပ်တို့သည် ကြားခံစနစ်မှ ဒေတာကို သိုလှောင်မှုစနစ်သို့ လွှဲပြောင်းရန် လိုအပ်သည် (အပိုဒ် 4 တွင် ပိုမိုသိရှိနိုင်သည်)။

ဤဒီဇိုင်းသည် ကျွန်ုပ်တို့အား အလွှာတစ်ခုစီကို အလျားလိုက် အမှီအခိုကင်းစွာ အတိုင်းအတာဖြင့် တိုင်းတာနိုင်စေပါသည်။ Backend ဆာဗာများသည် ထိန်းကျောင်း၍မရပါ - နောက်ထပ်တစ်ခု ထပ်ထည့်ကြည့်ရအောင် - ၎င်းတို့သည် နိုင်ငံမဲ့အက်ပ်လီကေးရှင်းများဖြစ်သောကြောင့် ၎င်းကို အလိုအလျောက်ပင် လုပ်ဆောင်နိုင်ပါသည်။ Kafka စတိုင်ကြားခံသည် အလုပ်မလုပ်ပါ—ဆာဗာများထပ်ထည့်ကာ ကျွန်ုပ်တို့၏အကြောင်းအရာ၏ အပိုင်းအချို့ကို ၎င်းတို့ထံ လွှဲပြောင်းကြပါစို့။ Clickhouse က အဲဒါကို မကိုင်တွယ်နိုင်ဘူး - မဖြစ်နိုင်ဘူး :) တကယ်တော့၊ ငါတို့က ဆာဗာတွေကို ချိတ်ဆက်ပြီး ဒေတာတွေကို ခွဲထုတ်မယ်။

စကားမစပ်၊ သင်သည် မတူညီသော ပထဝီဝင်တည်နေရာများတွင် ကျွန်ုပ်တို့၏ နည်းပညာဆိုင်ရာ သတ်မှတ်ချက်များနှင့် အတိုင်းအတာ၏ ရွေးချယ်နိုင်သောအစိတ်အပိုင်းကို အကောင်အထည်ဖော်လိုပါက၊ ထို့ထက်ပို၍ ရိုးရှင်းသောအရာမရှိပါ။

ကျွန်ုပ်တို့သည် Yandex.Cloud တွင် ပွဲပေါင်း 10 လက်ခံပါသည်။ အပိုင်း 000

geolocation တစ်ခုစီတွင် application နှင့် kafka ဖြင့် load balancer ကိုကျွန်ုပ်တို့ချထားပါသည်။ ယေဘုယျအားဖြင့်၊ အပလီကေးရှင်းဆာဗာ 2 ခု၊ kafka node 3 ခုနှင့် cloud balancer ဥပမာ၊ cloudflare သည် လုံလောက်သည်၊ ၎င်းသည် client ၏အရင်းအမြစ် IP address ကိုအခြေခံ၍ ပထဝီဝင်တည်နေရာအလိုက် application nodes များရရှိနိုင်မှုနှင့် balance တောင်းဆိုမှုများကိုစစ်ဆေးပေးမည်ဖြစ်ပါသည်။ ထို့ကြောင့်၊ အမေရိကန်ဖောက်သည်တစ်ဦးမှပေးပို့သောဒေတာသည် အမေရိကန်ဆာဗာများပေါ်တွင် ရောက်ရှိမည်ဖြစ်သည်။ အာဖရိကမှဒေတာသည် အာဖရိကန်ဖြစ်သည်။

ထို့နောက်အရာအားလုံးသည်အတော်လေးရိုးရှင်းပါသည် - ကျွန်ုပ်တို့သည် Kafka set မှ mirror tool ကိုအသုံးပြုပြီးနေရာအားလုံးမှဒေတာအားလုံးကိုရုရှားရှိကျွန်ုပ်တို့၏ဗဟိုဒေတာစင်တာသို့ကူးယူပါ။ အတွင်းပိုင်း၊ ကျွန်ုပ်တို့သည် ဒေတာကို ခွဲခြမ်းစိပ်ဖြာပြီး နောက်ဆက်တွဲမြင်ယောင်မှုများအတွက် Clickhouse တွင် မှတ်တမ်းတင်ပါသည်။

ထို့ကြောင့် ကျွန်ုပ်တို့သည် ဗိသုကာပညာကို ခွဲထုတ်လိုက်သည်- Yandex.Cloud ကို စတင်လှုပ်ယမ်းလိုက်ကြပါစို့။

ကျွန်ုပ်တို့သည် အက်ပလီကေးရှင်းတစ်ခုရေးနေပါသည်။

Cloud မပေါ်မီ၊ သင်သည် အနည်းငယ် စိတ်ရှည်ရန် လိုအပ်ပြီး ဝင်လာသည့် အဖြစ်အပျက်များကို လုပ်ဆောင်ရန် ရိုးရှင်းသော ဝန်ဆောင်မှုတစ်ခုကို ရေးပါ။ ကွန်ရက်အက်ပလီကေးရှင်းများရေးသားခြင်းအတွက် ဘာသာစကားတစ်ခုအဖြစ် ကောင်းစွာသက်သေပြထားသောကြောင့် ဂိုလန်ကို ကျွန်ုပ်တို့အသုံးပြုပါမည်။

တစ်နာရီကြာအောင် (နာရီအနည်းငယ်ကြာသည်ဖြစ်စေ) ကျွန်ုပ်တို့ ဤကဲ့သို့သော အရာတစ်ခုကို ရရှိသည်- https://github.com/RebrainMe/yandex-cloud-events/blob/master/app/main.go.

ဤနေရာတွင် ကျွန်ုပ်မှတ်သားလိုသည့် အဓိကအချက်များမှာ အဘယ်နည်း။

1. အပလီကေးရှင်းကို စတင်သောအခါ၊ သင်သည် အလံနှစ်ခုကို သတ်မှတ်နိုင်သည်။ အဝင် http တောင်းဆိုချက်များ (-addr) ကို နားထောင်မည့် port တစ်ခုတွင် တာဝန်ရှိပါသည်။ ဒုတိယမှာ ကျွန်ုပ်တို့၏အဖြစ်အပျက်များကို မှတ်တမ်းတင်မည့် kafka ဆာဗာလိပ်စာအတွက်ဖြစ်သည် (-kafka)။

addr     = flag.String("addr", ":8080", "TCP address to listen to")
kafka    = flag.String("kafka", "127.0.0.1:9092", "Kafka endpoints”)

2. အပလီကေးရှင်းသည် sarama စာကြည့်တိုက်ကိုအသုံးပြုသည် ([]github.com/Shopify/sarama) kafka အစုအဝေးသို့ မက်ဆေ့ချ်များ ပေးပို့ရန်။ ကျွန်ုပ်တို့သည် အမြင့်ဆုံးလုပ်ဆောင်မှုအမြန်နှုန်းအတွက် ရည်ရွယ်သည့် ဆက်တင်များကို ချက်ချင်းသတ်မှတ်ထားသည်-

config := sarama.NewConfig()
config.Producer.RequiredAcks = sarama.WaitForLocal
config.Producer.Compression = sarama.CompressionSnappy
config.Producer.Return.Successes = true

3. ကျွန်ုပ်တို့၏အပလီကေးရှင်းတွင် အမျိုးမျိုးသော မက်ထရစ်များကို စုဆောင်းပေးသည့် built-in prometheus client လည်းပါရှိပါသည်။

  • ကျွန်ုပ်တို့၏လျှောက်လွှာတွင် တောင်းဆိုချက်အရေအတွက်၊
  • တောင်းဆိုချက်ကိုလုပ်ဆောင်သောအခါ အမှားအယွင်းအရေအတွက် (ပို့စ်တောင်းဆိုချက်ကို ဖတ်ရန်မဖြစ်နိုင်၊ ကျိုးပဲ့နေသော json၊ Kafka သို့ စာရေးရန်မဖြစ်နိုင်);
  • Kafka သို့ မက်ဆေ့ချ်ရေးသည့်အချိန်အပါအဝင် သုံးစွဲသူထံမှ တောင်းဆိုချက်တစ်ခုအတွက် လုပ်ဆောင်ချိန်။

4. ကျွန်ုပ်တို့၏လျှောက်လွှာတင်ခြင်းလုပ်ငန်းစဉ်တွင် အဆုံးအချက်သုံးချက်-

  • /status - ကျွန်ုပ်တို့ အသက်ရှင်နေကြောင်းပြသရန် ရိုးရှင်းစွာ ok ပြန်သွားပါ။ Kafka အစုအဝေး၏ရရှိနိုင်မှုကဲ့သို့သောစစ်ဆေးမှုအချို့ကိုသင်ထည့်သွင်းနိုင်သည်။
  • /metrics - ဤ url အရ၊ prometheus client သည် စုဆောင်းထားသော မက်ထရစ်များကို ပြန်ပေးပါမည်။
  • /post သည် အတွင်းမှ json ဖြင့် POST တောင်းဆိုမှုများကို ပေးပို့မည့် အဓိကအဆုံးမှတ်ဖြစ်သည်။ ကျွန်ုပ်တို့၏အက်ပ်လီကေးရှင်းသည် json ကိုတရားဝင်မှုရှိမရှိစစ်ဆေးပြီးအရာအားလုံးအဆင်ပြေပါက၎င်းသည်ဒေတာကို Kafka အစုအဝေးသို့ရေးပေးသည်။

ကုဒ်မပြည့်စုံပါက ကြိုတင်စာရင်းသွင်းပါ - ၎င်းသည် (ပြီးသင့်သည်!) ပြီးမြောက်နိုင်ပါသည်။ ဥပမာအားဖြင့်၊ သင်သည် built-in net/http ကိုအသုံးပြုခြင်းကိုရပ်ပြီး ပိုမိုမြန်ဆန်သော http သို့ပြောင်းနိုင်သည်။ သို့မဟုတ် ဒေတာများကို ကြားခံမှ clickhouse အစုအဝေးသို့ လွှဲပြောင်းသည့်အခါ json တရားဝင်မှုစစ်ဆေးချက်ကို နောက်အဆင့်သို့ ရွှေ့ခြင်းဖြင့် လုပ်ဆောင်ချိန်နှင့် cpu ရင်းမြစ်များကို ရရှိနိုင်သည်။

ပြဿနာ၏ဖွံ့ဖြိုးတိုးတက်မှုဘက်ခြမ်းအပြင်၊ ကျွန်ုပ်တို့သည် ကျွန်ုပ်တို့၏အနာဂတ်အခြေခံအဆောက်အအုံကို ချက်ချင်းစဉ်းစားပြီး docker မှတစ်ဆင့် ကျွန်ုပ်တို့၏လျှောက်လွှာကို အသုံးပြုရန် ဆုံးဖြတ်ခဲ့သည်။ အပလီကေးရှင်းကိုတည်ဆောက်ရန်အတွက် နောက်ဆုံး Dockerfile ဖြစ်သည်။ https://github.com/RebrainMe/yandex-cloud-events/blob/master/app/Dockerfile. ယေဘူယျအားဖြင့်၊ ၎င်းသည် အလွန်ရိုးရှင်းသည်၊ ကျွန်ုပ်အာရုံစိုက်လိုသည့် တစ်ခုတည်းသောအချက်မှာ ကျွန်ုပ်တို့၏ကွန်တိန်နာ၏နောက်ဆုံးပုံကို လျှော့ချနိုင်စေသည့် multistage assembly ဖြစ်သည်၊

Cloud တွင် ပထမဆုံးခြေလှမ်းများ

ပထမဆုံးအနေနဲ့ စာရင်းသွင်းလိုက်ပါ။ cloud.yandex.ru. လိုအပ်သော ကွက်လပ်များအားလုံးကို ဖြည့်ပြီးနောက်၊ ကျွန်ုပ်တို့သည် အကောင့်တစ်ခုဖန်တီးပြီး cloud ဝန်ဆောင်မှုများကို စမ်းသပ်ရန်အတွက် အသုံးပြုနိုင်သည့် ငွေပမာဏအချို့အတွက် ထောက်ပံ့ကြေးပေးပါမည်။ ကျွန်ုပ်တို့၏ ဆောင်းပါးမှ အဆင့်အားလုံးကို ပြန်လုပ်လိုပါက၊ ဤထောက်ပံ့ငွေသည် သင့်အတွက် လုံလောက်ပါသည်။

မှတ်ပုံတင်ပြီးနောက်၊ cloud အရင်းအမြစ်များကို သင်စတင်ဖန်တီးနိုင်စေမည့် သီးခြား cloud နှင့် မူရင်းလမ်းညွှန်တစ်ခုကို သင့်အတွက် ဖန်တီးပေးမည်ဖြစ်သည်။ ယေဘူယျအားဖြင့်၊ Yandex.Cloud တွင် အရင်းအမြစ်များ၏ ဆက်နွယ်မှုသည် ဤကဲ့သို့ ဖြစ်ပုံရသည်။

ကျွန်ုပ်တို့သည် Yandex.Cloud တွင် ပွဲပေါင်း 10 လက်ခံပါသည်။ အပိုင်း 000

အကောင့်တစ်ခုအတွက် cloud များစွာကို သင်ဖန်တီးနိုင်သည်။ Cloud အတွင်းတွင် မတူညီသော ကုမ္ပဏီပရောဂျက်များအတွက် မတူညီသော လမ်းညွှန်များ ပြုလုပ်ပါ။ ဤအကြောင်းကို စာတမ်းပြုစုခြင်းတွင် ပိုမိုဖတ်ရှုနိုင်ပါသည်- https://cloud.yandex.ru/docs/resource-manager/concepts/resources-hierarchy. စကားမစပ်၊ ကျွန်ုပ်သည် ၎င်းကို အောက်ဖော်ပြပါ စာသားတွင် မကြာခဏ ကိုးကားပါမည်။ အခြေခံအဆောက်အအုံတစ်ခုလုံးကို အစကနေစတည်ဆောက်တဲ့အခါ၊ စာရွက်စာတမ်းက တစ်ကြိမ်ထက်ပိုပြီး ကူညီပေးတဲ့အတွက် အဲဒါကို လေ့လာဖို့ အကြံပြုထားပါတယ်။

cloud ကို စီမံခန့်ခွဲရန်၊ သင်သည် ဝဘ်အင်တာဖေ့စ်နှင့် ကွန်ဆိုးလ် အသုံးဝင်မှု - yc နှစ်ခုလုံးကို အသုံးပြုနိုင်သည်။ ထည့်သွင်းခြင်းကို command တစ်ခုတည်းဖြင့် လုပ်ဆောင်သည် (Linux နှင့် Mac Os အတွက်)

curl https://storage.yandexcloud.net/yandexcloud-yc/install.sh | bash

သင့်အတွင်းပိုင်းလုံခြုံရေးကျွမ်းကျင်သူသည် အင်တာနက်မှ scripts များကို run ခြင်းနှင့်ပတ်သက်၍ အပြင်းအထန်လုပ်နေပါက၊ ပထမဦးစွာ သင်သည် script ကိုဖွင့်ပြီး ၎င်းကိုဖတ်နိုင်ပြီး ဒုတိယအနေဖြင့်၊ root လုပ်ပိုင်ခွင့်မရှိဘဲ ကျွန်ုပ်တို့၏အသုံးပြုသူအောက်တွင် ၎င်းကို run နိုင်ပါသည်။

Windows အတွက် client တစ်ခုကို install လုပ်လိုပါက၊ ညွှန်ကြားချက်များကို အသုံးပြုနိုင်ပါသည်။ ဒီမှာ ပြီးမှ execute yc init၎င်းကို အပြည့်အဝ စိတ်ကြိုက်ပြင်ဆင်ရန်-

vozerov@mba:~ $ yc init
Welcome! This command will take you through the configuration process.
Please go to https://oauth.yandex.ru/authorize?response_type=token&client_id= in order to obtain OAuth token.

Please enter OAuth token:
Please select cloud to use:
 [1] cloud-b1gv67ihgfu3bp (id = b1gv67ihgfu3bpt24o0q)
 [2] fevlake-cloud (id = b1g6bvup3toribomnh30)
Please enter your numeric choice: 2
Your current cloud has been set to 'fevlake-cloud' (id = b1g6bvup3toribomnh30).
Please choose folder to use:
 [1] default (id = b1g5r6h11knotfr8vjp7)
 [2] Create a new folder
Please enter your numeric choice: 1
Your current folder has been set to 'default' (id = b1g5r6h11knotfr8vjp7).
Do you want to configure a default Compute zone? [Y/n]
Which zone do you want to use as a profile default?
 [1] ru-central1-a
 [2] ru-central1-b
 [3] ru-central1-c
 [4] Don't set default zone
Please enter your numeric choice: 1
Your profile default Compute zone has been set to 'ru-central1-a'.
vozerov@mba:~ $

နိယာမအားဖြင့်၊ လုပ်ငန်းစဉ်သည် ရိုးရှင်းသည် - ဦးစွာ သင်သည် cloud ကိုစီမံခန့်ခွဲရန် oauth တိုကင်တစ်ခုရရန်၊ cloud ကိုရွေးချယ်ပြီး သင်အသုံးပြုမည့် folder ကိုရွေးချယ်ပါ။

သင့်တွင် တစ်ခုတည်းသော cloud တွင် အကောင့်များစွာ သို့မဟုတ် ဖိုင်တွဲများရှိပါက၊ သင်သည် yc config ပရိုဖိုင်ဖန်တီးပြီး ၎င်းတို့ကြားတွင် ပြောင်းခြင်းမှတစ်ဆင့် သီးခြားဆက်တင်များဖြင့် နောက်ထပ်ပရိုဖိုင်များကို ဖန်တီးနိုင်သည်။

အထက်ပါနည်းလမ်းများအပြင် Yandex.Cloud အဖွဲ့သည် အလွန်ကောင်းမွန်ကြောင်း ရေးသားခဲ့သည်။ terraform အတွက် plugin cloud အရင်းအမြစ်များကို စီမံခန့်ခွဲရန်အတွက်။ ကျွန်ုပ်အနေဖြင့်၊ ကျွန်ုပ်သည် ဆောင်းပါး၏တစ်စိတ်တစ်ပိုင်းအဖြစ် ဖန်တီးမည့် အရင်းအမြစ်အားလုံးကို ဖော်ပြသည့် git repository ကို ပြင်ဆင်ခဲ့သည်။ https://github.com/rebrainme/yandex-cloud-events/. ကျွန်ုပ်တို့သည် မာစတာဌာနခွဲကို စိတ်ဝင်စားပါသည်၊ ၎င်းကို ပြည်တွင်းတွင် ပုံတူပွားလိုက်ကြပါစို့။


vozerov@mba:~ $ git clone https://github.com/rebrainme/yandex-cloud-events/ events
Cloning into 'events'...
remote: Enumerating objects: 100, done.
remote: Counting objects: 100% (100/100), done.
remote: Compressing objects: 100% (68/68), done.
remote: Total 100 (delta 37), reused 89 (delta 26), pack-reused 0
Receiving objects: 100% (100/100), 25.65 KiB | 168.00 KiB/s, done.
Resolving deltas: 100% (37/37), done.
vozerov@mba:~ $ cd events/terraform/

terraform တွင်အသုံးပြုသည့် အဓိက variable အားလုံးကို main.tf ဖိုင်တွင် ရေးသားထားသည်။ စတင်ရန်၊ အောက်ပါအကြောင်းအရာဖြင့် terraform ဖိုင်တွဲတွင် private.auto.tfvars ဖိုင်ကို ဖန်တီးပါ။

# Yandex Cloud Oauth token
yc_token = ""
# Yandex Cloud ID
yc_cloud_id = ""
# Yandex Cloud folder ID
yc_folder_id = ""
# Default Yandex Cloud Region
yc_region = "ru-central1-a"
# Cloudflare email
cf_email = ""
# Cloudflare token
cf_token = ""
# Cloudflare zone id
cf_zone_id = ""

ကျွန်ုပ်တို့သည် console utility ကို configure လုပ်ထားပြီးဖြစ်သောကြောင့် variable အားလုံးကို yc config list မှယူနိုင်သည်။ ကိုယ်ရေးကိုယ်တာဒေတာကို မတော်တဆ မထုတ်ဝေမိစေရန်အတွက် private.auto.tfvars ကို .gitignore တွင် ချက်ချင်းထည့်ရန် သင့်အား ကျွန်ုပ်အကြံပြုလိုပါသည်။

private.auto.tfvars တွင် ကျွန်ုပ်တို့သည် ကျွန်ုပ်တို့၏ဆာဗာများသို့ DNS မှတ်တမ်းများဖန်တီးရန်နှင့် ပင်မဒိုမိန်း events.kis.im ကို proxy ပြုလုပ်ရန် Cloudflare မှဒေတာကိုလည်း သတ်မှတ်ပေးပါသည်။ cloudflare ကို အသုံးမပြုလိုပါက main.tf နှင့် dns.tf ဖိုင်တွင် လိုအပ်သော dns မှတ်တမ်းများကို ဖန်တီးရန် တာဝန်ရှိသော cloudflare ဝန်ဆောင်မှုပေးသူ၏ ကနဦးအစကို ဖယ်ရှားလိုက်ပါ။

ကျွန်ုပ်တို့၏လုပ်ငန်းတွင် ကျွန်ုပ်တို့သည် ဝဘ်အင်တာဖေ့စ်၊ ကွန်ဆိုးလ်အသုံးပြုမှု နှင့် terraform နည်းလမ်းသုံးခုလုံးကို ပေါင်းစပ်မည်ဖြစ်သည်။

Virtual ကွန်ရက်များ

ရိုးရိုးသားသားပြောရလျှင် သင်သည် cloud အသစ်တစ်ခုဖန်တီးသောအခါတွင် သင်သည် သီးခြားကွန်ရက်တစ်ခုနှင့် ရရှိနိုင်မှုဇုန်တစ်ခုစီအတွက် တစ်ခုစီအတွက် ကွန်ရက်ခွဲ 3 ခု အလိုအလျောက်ဖန်တီးပေးမည်ဖြစ်သောကြောင့် ဤအဆင့်ကို ကျော်သွားနိုင်သည်။ သို့သော် ကျွန်ုပ်တို့သည် ၎င်း၏ကိုယ်ပိုင်လိပ်စာဖြင့် ကျွန်ုပ်တို့၏ပရောဂျက်အတွက် သီးခြားကွန်ရက်တစ်ခု ပြုလုပ်လိုသေးသည်။ Yandex.Cloud တွင် ကွန်ရက်အလုပ်လုပ်ပုံ၏ ယေဘူယျ ပုံကြမ်းကို အောက်ဖော်ပြပါပုံတွင် ပြထားပါသည် (ရိုးသားစွာ ကူးယူဖော်ပြပါသည်။ https://cloud.yandex.ru/docs/vpc/concepts/)

ကျွန်ုပ်တို့သည် Yandex.Cloud တွင် ပွဲပေါင်း 10 လက်ခံပါသည်။ အပိုင်း 000

ထို့ကြောင့် သင်သည် အရင်းအမြစ်များအချင်းချင်း ဆက်သွယ်နိုင်သည့် ဘုံကွန်ရက်တစ်ခုကို ဖန်တီးပါ။ ရရှိနိုင်မှုဇုန်တစ်ခုစီအတွက်၊ subnet တစ်ခုကို ၎င်း၏ကိုယ်ပိုင်လိပ်စာဖြင့် ဖန်တီးထားပြီး ယေဘုယျကွန်ရက်သို့ ချိတ်ဆက်ထားသည်။ ရလဒ်အနေဖြင့်၊ ၎င်းရှိ cloud အရင်းအမြစ်များအားလုံးသည် မတူညီသောရရှိနိုင်မှုဇုန်များတွင်ရှိနေသော်လည်း ဆက်သွယ်နိုင်သည်။ မတူညီသော cloud ကွန်ရက်များသို့ ချိတ်ဆက်ထားသော အရင်းအမြစ်များကို ပြင်ပလိပ်စာများမှတစ်ဆင့်သာ မြင်နိုင်ပါသည်။ စကားမစပ် ဒီမှော်အထဲမှာ ဘယ်လိုအလုပ်လုပ်လဲ၊ Habre တွင် ကောင်းစွာဖော်ပြခဲ့သည်။.

ကွန်ရက်ဖန်တီးမှုကို သိုလှောင်မှုမှ network.tf ဖိုင်တွင် ဖော်ပြထားပါသည်။ အဲဒီမှာ ဘုံပုဂ္ဂလိကကွန်ရက်အတွင်းပိုင်းတစ်ခုကို ဖန်တီးပြီး မတူညီတဲ့ရရှိနိုင်မှုဇုန်တွေမှာ ၎င်းကိုချိတ်ဆက်ပါ - internal-a (172.16.1.0/24), internal-b (172.16.2.0/24), internal-c (172.16.3.0/24)၊ )

Terraform ကို စတင်ပြီး ကွန်ရက်များ ဖန်တီးပါ-

vozerov@mba:~/events/terraform (master) $ terraform init
... skipped ..

vozerov@mba:~/events/terraform (master) $ terraform apply -target yandex_vpc_subnet.internal-a -target yandex_vpc_subnet.internal-b -target yandex_vpc_subnet.internal-c

... skipped ...

Plan: 4 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

yandex_vpc_network.internal: Creating...
yandex_vpc_network.internal: Creation complete after 3s [id=enp2g2rhile7gbqlbrkr]
yandex_vpc_subnet.internal-a: Creating...
yandex_vpc_subnet.internal-b: Creating...
yandex_vpc_subnet.internal-c: Creating...
yandex_vpc_subnet.internal-a: Creation complete after 6s [id=e9b1dad6mgoj2v4funog]
yandex_vpc_subnet.internal-b: Creation complete after 7s [id=e2liv5i4amu52p64ac9p]
yandex_vpc_subnet.internal-c: Still creating... [10s elapsed]
yandex_vpc_subnet.internal-c: Creation complete after 10s [id=b0c2qhsj2vranoc9vhcq]

Apply complete! Resources: 4 added, 0 changed, 0 destroyed.

မိုက်တယ်! ကျွန်ုပ်တို့သည် ကျွန်ုပ်တို့၏ကွန်ရက်ကို ဖန်တီးခဲ့ပြီး ယခုအခါ ကျွန်ုပ်တို့၏အတွင်းပိုင်းဝန်ဆောင်မှုများကို ဖန်တီးရန် အသင့်ဖြစ်နေပါပြီ။

virtual စက်များဖန်တီးခြင်း။

အပလီကေးရှင်းကို စမ်းသပ်ရန်၊ ကျွန်ုပ်တို့သည် virtual machine နှစ်ခုကို ဖန်တီးရန်သာ လိုအပ်မည်ဖြစ်သည် - ကျွန်ုပ်တို့သည် အပလီကေးရှင်းကို တည်ဆောက်ပြီး လုပ်ဆောင်ရန် ပထမ၊ အဝင်မက်ဆေ့ချ်များကို သိမ်းဆည်းရန် ဒုတိယမှာ Kafka ကို အသုံးပြုရန် လိုအပ်မည်ဖြစ်သည်။ ကျွန်ုပ်တို့သည် အပလီကေးရှင်းကို စောင့်ကြည့်ရန် prometheus ကို configure လုပ်မည့် အခြားစက်ကို ဖန်တီးပါမည်။

virtual machines များကို ansible ကို အသုံးပြု၍ configure လုပ်မည်၊ ထို့ကြောင့် terraform ကိုမစတင်မီ၊ သင့်တွင် ansible ၏နောက်ဆုံးထွက်ဗားရှင်းတစ်ခုရှိသည်ကို သေချာပါစေ။ ansible galaxy ဖြင့် လိုအပ်သော အခန်းကဏ္ဍများကို ထည့်သွင်းပါ-

vozerov@mba:~/events/terraform (master) $ cd ../ansible/
vozerov@mba:~/events/ansible (master) $ ansible-galaxy install -r requirements.yml
- cloudalchemy-prometheus (master) is already installed, skipping.
- cloudalchemy-grafana (master) is already installed, skipping.
- sansible.kafka (master) is already installed, skipping.
- sansible.zookeeper (master) is already installed, skipping.
- geerlingguy.docker (master) is already installed, skipping.
vozerov@mba:~/events/ansible (master) $

ansible ဖိုဒါအတွင်းတွင် ကျွန်ုပ်အသုံးပြုသော ဥပမာ .ansible.cfg ဖွဲ့စည်းမှုဖိုင်တစ်ခုရှိသည်။ အဆင်ပြေလာနိုင်ပါတယ်။

virtual machines မဖန်တီးမီ၊ သင့်တွင် ssh-agent လည်ပတ်နေပြီး ssh သော့တစ်ခုထည့်သွင်းထားကြောင်း သေချာစေပါ၊ သို့မဟုတ်ပါက terraform သည် ဖန်တီးထားသောစက်များသို့ ချိတ်ဆက်နိုင်မည်မဟုတ်ပါ။ ငါ os x မှာ bug တစ်ခုတွေ့ခဲ့တယ်၊ https://github.com/ansible/ansible/issues/32499#issuecomment-341578864. ထပ်မံမဖြစ်ပွားစေရန်အတွက် Terraform ကိုမစတင်မီ env အတွက် variable သေးသေးလေးထည့်ပါ။

vozerov@mba:~/events/terraform (master) $ export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES

terraform ပါသော folder တွင် ကျွန်ုပ်တို့သည် လိုအပ်သောအရင်းအမြစ်များကို ဖန်တီးသည်-

vozerov@mba:~/events/terraform (master) $ terraform apply -target yandex_compute_instance.build -target yandex_compute_instance.monitoring -target yandex_compute_instance.kafka
yandex_vpc_network.internal: Refreshing state... [id=enp2g2rhile7gbqlbrkr]
data.yandex_compute_image.ubuntu_image: Refreshing state...
yandex_vpc_subnet.internal-a: Refreshing state... [id=e9b1dad6mgoj2v4funog]

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  + create

... skipped ...

Plan: 3 to add, 0 to change, 0 to destroy.

... skipped ...

အားလုံးအောင်မြင်စွာပြီးဆုံးသွားပါက (ဒါဖြစ်သင့်သည်)၊ ကျွန်ုပ်တို့တွင် virtual machine သုံးခုရှိသည်-

  1. build - စမ်းသပ်ခြင်းနှင့် အက်ပလီကေးရှင်းတစ်ခုကို တည်ဆောက်ရန်အတွက် စက်တစ်ခု။ Docker ကို Ansible မှ အလိုအလျောက် ထည့်သွင်းခဲ့သည်။
  2. စောင့်ကြည့်စစ်ဆေးခြင်း - စောင့်ကြည့်ရေးစက် - prometheus & grafana ၎င်းတွင်တပ်ဆင်ထားသည်။ အကောင့်ဝင် / စကားဝှက်စံ: admin / admin
  3. kafka သည် port 9092 တွင် kafka ထည့်သွင်းထားသော အသေးစားစက်တစ်ခုဖြစ်သည်။

၎င်းတို့အားလုံး နေရာတွင် ရှိနေကြောင်း သေချာစေကြပါစို့။

vozerov@mba:~/events (master) $ yc compute instance list
+----------------------+------------+---------------+---------+---------------+-------------+
|          ID          |    NAME    |    ZONE ID    | STATUS  |  EXTERNAL IP  | INTERNAL IP |
+----------------------+------------+---------------+---------+---------------+-------------+
| fhm081u8bkbqf1pa5kgj | monitoring | ru-central1-a | RUNNING | 84.201.159.71 | 172.16.1.35 |
| fhmf37k03oobgu9jmd7p | kafka      | ru-central1-a | RUNNING | 84.201.173.41 | 172.16.1.31 |
| fhmt9pl1i8sf7ga6flgp | build      | ru-central1-a | RUNNING | 84.201.132.3  | 172.16.1.26 |
+----------------------+------------+---------------+---------+---------------+-------------+

အရင်းအမြစ်များ ရှိနေပြီး၊ ဤနေရာမှ ကျွန်ုပ်တို့သည် ၎င်းတို့၏ IP လိပ်စာများကို ရယူနိုင်ပါသည်။ အောက်တွင်ဖော်ပြထားသောအကြောင်းအရာတစ်လျှောက်လုံး ssh မှတဆင့်ချိတ်ဆက်ရန်နှင့်လျှောက်လွှာကိုစမ်းသပ်ရန် IP လိပ်စာများကိုအသုံးပြုပါမည်။ သင့်တွင် terraform နှင့် ချိတ်ဆက်ထားသော cloudflare အကောင့်တစ်ခုရှိပါက၊ အသစ်ဖန်တီးထားသော DNS အမည်များကို လွတ်လပ်စွာ အသုံးပြုပါ။
စကားမစပ်၊ virtual machine တစ်ခုဖန်တီးသောအခါ၊ internal IP နှင့် internal DNS name ကိုပေးသည်၊ ထို့ကြောင့် network အတွင်းရှိဆာဗာများကိုအမည်ဖြင့်ဝင်ရောက်ကြည့်ရှုနိုင်သည်-

ubuntu@build:~$ ping kafka.ru-central1.internal
PING kafka.ru-central1.internal (172.16.1.31) 56(84) bytes of data.
64 bytes from kafka.ru-central1.internal (172.16.1.31): icmp_seq=1 ttl=63 time=1.23 ms
64 bytes from kafka.ru-central1.internal (172.16.1.31): icmp_seq=2 ttl=63 time=0.625 ms
^C
--- kafka.ru-central1.internal ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.625/0.931/1.238/0.308 ms

kafk ဖြင့် အဆုံးမှတ်ကို အပလီကေးရှင်းသို့ညွှန်ပြရန် ၎င်းသည် ကျွန်ုပ်တို့အတွက် အသုံးဝင်ပါလိမ့်မည်။

လျှောက်လွှာကိုစုစည်းခြင်း။

ကောင်းတယ်၊ ဆာဗာတွေရှိတယ်၊ အက်ပလီကေးရှင်းတစ်ခုရှိတယ် - ကျန်တာအားလုံးက၎င်းကိုစုဝေးပြီးထုတ်ဝေရန်ဖြစ်သည်။ တည်ဆောက်မှုအတွက် ကျွန်ုပ်တို့သည် ပုံမှန် docker တည်ဆောက်မှုကို အသုံးပြုမည်ဖြစ်သော်လည်း ရုပ်ပုံသိုလှောင်မှုအဖြစ် Yandex - container registry မှ ဝန်ဆောင်မှုကို အသုံးပြုပါမည်။ ဒါပေမယ့် အရင်အရာတွေကို အရင်လုပ်ပါ။

ကျွန်ုပ်တို့သည် အပလီကေးရှင်းကို တည်ဆောက်စက်သို့ ကူးယူကာ ssh မှတစ်ဆင့် ဝင်ရောက်ပြီး ပုံကို စုစည်းပါ။

vozerov@mba:~/events/terraform (master) $ cd ..
vozerov@mba:~/events (master) $ rsync -av app/ [email protected]:app/

... skipped ...

sent 3849 bytes  received 70 bytes  7838.00 bytes/sec
total size is 3644  speedup is 0.93

vozerov@mba:~/events (master) $ ssh 84.201.132.3 -l ubuntu
ubuntu@build:~$ cd app
ubuntu@build:~/app$ sudo docker build -t app .
Sending build context to Docker daemon  6.144kB
Step 1/9 : FROM golang:latest AS build
... skipped ...

Successfully built 9760afd8ef65
Successfully tagged app:latest

တိုက်ပွဲတစ်ဝက်ပြီးသွားပါပြီ - ယခုကျွန်ုပ်တို့၏အက်ပလီကေးရှင်း၏လုပ်ဆောင်နိုင်စွမ်းကိုစတင်ကာ kafka သို့ပေးပို့ခြင်းဖြင့်ကျွန်ုပ်တို့စစ်ဆေးနိုင်သည်-

ubuntu@build:~/app$ sudo docker run --name app -d -p 8080:8080 app /app/app -kafka=kafka.ru-central1.internal:9092</code>

С локальной машинки можно отправить тестовый event и посмотреть на ответ:

<code>vozerov@mba:~/events (master) $ curl -D - -s -X POST -d '{"key1":"data1"}' http://84.201.132.3:8080/post
HTTP/1.1 200 OK
Content-Type: application/json
Date: Mon, 13 Apr 2020 13:53:54 GMT
Content-Length: 41

{"status":"ok","partition":0,"Offset":0}
vozerov@mba:~/events (master) $

အပလီကေးရှင်းသည် အသံသွင်းခြင်းအောင်မြင်စွာ တုံ့ပြန်ခဲ့ပြီး မက်ဆေ့ချ်တွင် ပါဝင်သည့် partition နှင့် offset ၏ ID ကို ညွှန်ပြသည်။ လုပ်ရန်ကျန်သည်မှာ Yandex.Cloud တွင် registry တစ်ခုဖန်တီးပြီး ကျွန်ုပ်တို့၏ပုံကို ထိုနေရာတွင် အပ်လုဒ်လုပ်ရန်ဖြစ်သည် (စာကြောင်းသုံးကြောင်းကို အသုံးပြု၍ ၎င်းကို registry.tf ဖိုင်တွင်ဖော်ပြထားသည်)။ သိုလှောင်ခန်းတစ်ခု ဖန်တီးပါ-

vozerov@mba:~/events/terraform (master) $ terraform apply -target yandex_container_registry.events

... skipped ...

Plan: 1 to add, 0 to change, 0 to destroy.

... skipped ...

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

oauth တိုကင်၊ iam တိုကင် သို့မဟုတ် ဝန်ဆောင်မှုအကောင့်သော့ကို အသုံးပြု၍ ကွန်တိန်နာမှတ်ပုံတင်ခြင်းတွင် စစ်မှန်ကြောင်းအထောက်အထားပြရန် နည်းလမ်းများစွာရှိပါသည်။ ဤနည်းလမ်းများအကြောင်း အသေးစိတ်အချက်အလက်များကို စာရွက်စာတမ်းများတွင် ကြည့်ရှုနိုင်ပါသည်။ https://cloud.yandex.ru/docs/container-registry/operations/authentication. ကျွန်ုပ်တို့သည် ဝန်ဆောင်မှုအကောင့်သော့ကို အသုံးပြုပါမည်၊ ထို့ကြောင့် အကောင့်တစ်ခုဖန်တီးပါ-

vozerov@mba:~/events/terraform (master) $ terraform apply -target yandex_iam_service_account.docker -target yandex_resourcemanager_folder_iam_binding.puller -target yandex_resourcemanager_folder_iam_binding.pusher

... skipped ...

Apply complete! Resources: 3 added, 0 changed, 0 destroyed.

အခု ကျန်တာအားလုံးက အဲဒါအတွက် သော့တစ်ခုလုပ်ရမှာ။

vozerov@mba:~/events/terraform (master) $ yc iam key create --service-account-name docker -o key.json
id: ajej8a06kdfbehbrh91p
service_account_id: ajep6d38k895srp9osij
created_at: "2020-04-13T14:00:30Z"
key_algorithm: RSA_2048

ကျွန်ုပ်တို့သည် ကျွန်ုပ်တို့၏ သိုလှောင်မှု ID နှင့်ပတ်သက်သော အချက်အလက်များကို လက်ခံရရှိသည်၊ သော့ကို လွှဲပြောင်းပြီး အကောင့်ဝင်ပါ-

vozerov@mba:~/events/terraform (master) $ scp key.json [email protected]:
key.json                                                                                                                    100% 2392   215.1KB/s   00:00

vozerov@mba:~/events/terraform (master) $ ssh 84.201.132.3 -l ubuntu

ubuntu@build:~$ cat key.json | sudo docker login --username json_key --password-stdin cr.yandex
WARNING! Your password will be stored unencrypted in /home/ubuntu/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
ubuntu@build:~$

ဓါတ်ပုံကို registry သို့ အပ်လုဒ်တင်ရန်၊ ကျွန်ုပ်တို့သည် ကွန်တိန်နာ မှတ်ပုံတင် ID လိုအပ်သည်၊ ၎င်းကို yc utility မှ ယူပါသည်-

vozerov@mba:~ $ yc container registry get events
id: crpdgj6c9umdhgaqjfmm
folder_id:
name: events
status: ACTIVE
created_at: "2020-04-13T13:56:41.914Z"

ထို့နောက် ကျွန်ုပ်တို့၏ပုံကို နာမည်အသစ်ဖြင့် tag လုပ်ပြီး အပ်လုဒ်လုပ်ပါ။

ubuntu@build:~$ sudo docker tag app cr.yandex/crpdgj6c9umdhgaqjfmm/events:v1
ubuntu@build:~$ sudo docker push cr.yandex/crpdgj6c9umdhgaqjfmm/events:v1
The push refers to repository [cr.yandex/crpdgj6c9umdhgaqjfmm/events]
8c286e154c6e: Pushed
477c318b05cb: Pushed
beee9f30bc1f: Pushed
v1: digest: sha256:1dd5aaa9dbdde2f60d833be0bed1c352724be3ea3158bcac3cdee41d47c5e380 size: 946

ပုံကို အောင်မြင်စွာ တင်ပေးနိုင်သည်ကို ကျွန်ုပ်တို့ အတည်ပြုနိုင်သည်-

vozerov@mba:~/events/terraform (master) $ yc container repository list
+----------------------+-----------------------------+
|          ID          |            NAME             |
+----------------------+-----------------------------+
| crpe8mqtrgmuq07accvn | crpdgj6c9umdhgaqjfmm/events |
+----------------------+-----------------------------+

စကားမစပ်၊ သင်သည် Linux စက်တစ်ခုတွင် yc utility ကိုထည့်သွင်းပါက၊ သင်သည် command ကိုသုံးနိုင်သည်။

yc container registry configure-docker

docker ကို configure လုပ်ရန်။

ကောက်ချက်

ကျွန်ုပ်တို့သည် အလုပ်များစွာကို ကြိုးစားလုပ်ဆောင်ခဲ့ပြီး ရလဒ်အနေဖြင့်

  1. ကျွန်ုပ်တို့သည် ကျွန်ုပ်တို့၏အနာဂတ်ဝန်ဆောင်မှု၏ ဗိသုကာလက်ရာကို ဖန်တီးပေးပါသည်။
  2. ကျွန်ုပ်တို့သည် ကျွန်ုပ်တို့၏ စီးပွားရေးယုတ္တိကို အကောင်အထည်ဖော်သည့် golang တွင် အပလီကေးရှင်းတစ်ခု ရေးခဲ့သည်။
  3. အဲဒါကို စုဆောင်းပြီး သီးသန့် ကွန်တိန်နာ မှတ်ပုံတင်မှုမှာ လောင်းထည့်တယ်။

နောက်အပိုင်းတွင်၊ ကျွန်ုပ်တို့သည် စိတ်ဝင်စားစရာကောင်းသည့်အရာများဆီသို့ ဆက်သွားပါမည် - ကျွန်ုပ်တို့၏အက်ပလီကေးရှင်းကို ထုတ်လုပ်ရောင်းချပြီး နောက်ဆုံးတွင် ဝန်ထုပ်ဝန်ပိုးကို စတင်ပါမည်။ မပြောင်းပါနှင့်!

ဤပစ္စည်းသည် REBRAIN & Yandex.Cloud ဖွင့်ပွဲအလုပ်ရုံဆွေးနွေးပွဲ၏ ဗီဒီယိုရိုက်ကူးမှုတွင် ဖြစ်သည်- ကျွန်ုပ်တို့သည် Yandex Cloud တွင် တစ်စက္ကန့်လျှင် တောင်းဆိုချက် 10 ကို လက်ခံသည် - https://youtu.be/cZLezUm0ekE

အကယ်၍ သင်သည် ထိုကဲ့သို့သော ပွဲများကို အွန်လိုင်းတွင် တက်ရောက်ပြီး အချိန်နှင့်တပြေးညီ မေးခွန်းများမေးရန် စိတ်ဝင်စားပါက ဆက်သွယ်လိုက်ပါ။ REBRAIN မှ DevOps ချန်နယ်.

ဒီလိုပွဲမျိုးကျင်းပခွင့်ရတဲ့အတွက် Yandex.Cloud ကို အထူးကျေးဇူးတင်ရှိပါတယ်။ ၎င်းတို့ထံသို့ လင့်ခ်- https://cloud.yandex.ru/prices

Cloud သို့ ရွှေ့ရန် လိုအပ်ပါက သို့မဟုတ် သင်၏ အခြေခံ အဆောက်အအုံနှင့် ပတ်သက်သည့် မေးခွန်းများ ရှိပါက၊ တောင်းဆိုချက်တစ်ခုချန်ထားခဲ့ပါ။.

PS ကျွန်ုပ်တို့တွင် တစ်လလျှင် အခမဲ့စာရင်းစစ် ၂ ခုရှိသည်၊ သင်၏ပရောဂျက်သည် ၎င်းတို့ထဲမှတစ်ခုဖြစ်ကောင်းဖြစ်နိုင်သည်။

source: www.habr.com

မှတ်ချက် Add