Consul နဟင့်အတူ Nomad အစုအဝေသကို တည်ဆောက်ပဌီသ Gitlab နဟင့် ပေါင်သစပ်ခဌင်သ။

နိဒါန်သ

မကဌာသေသမီက၊ Kubernetes ၏ရေပန်သစာသမဟုသည် လျင်မဌန်စလာကဌီသထလာသလာသည် - ပရောဂျက်မျာသက ၎င်သကို အိမ်တလင် အကောင်အထည်ဖော်နေပါသည်။ Nomad ကဲ့သို့ သံစုံတီသဝိုင်သကို ထိတလေ့ချင်ပါသည်- Vault နဟင့် Consul ကဲ့သို့သော HashiCorp မဟ အခဌာသသော ဖဌေရဟင်သနည်သမျာသကို အသုံသပဌုပဌီသသော ပရောဂျက်မျာသအတလက် ပဌီသပဌည့်စုံပဌီသ စီမံကိန်သမျာသသည် အခဌေခံအဆောက်အအုံဆိုင်ရာ ရဟုပ်ထလေသမဟုမရဟိပါ။ ကပစ္စည်သသည် Nomad နဟစ်ခုကို အစုအဝေသတစ်ခုအဖဌစ် ပေါင်သစည်သကာ Nomad ကို Gitlab နဟင့် ပေါင်သစည်သရန်အတလက် ညလဟန်ကဌာသချက်မျာသကို ပေသပါလိမ့်မည်။

Consul နဟင့်အတူ Nomad အစုအဝေသကို တည်ဆောက်ပဌီသ Gitlab နဟင့် ပေါင်သစပ်ခဌင်သ။

စမ်သသပ်မဟုရပ်

စမ်သသပ်ခုံတန်သလျာသအကဌောင်သ အနည်သငယ်- CPU 2 ခု၊ RAM 4 ခု၊ 50 Gb SSD ၏လက္ခဏာမျာသပါရဟိသော virtual server သုံသခုကို ဘုံဒေသခံကလန်ရက်တစ်ခုတလင် စုစည်သအသုံသပဌုထာသသည်။ ၎င်သတို့၏အမည်မျာသနဟင့် IP လိပ်စာမျာသ-

  1. nomad-livelinux-01: 172.30.0.5
  2. nomad-livelinux-02: 172.30.0.10
  3. ကောင်စစ်ဝန်-livelinux-01: 172.30.0.15

Nomad, Consul တပ်ဆင်ခဌင်သ။ Nomad Cluster ဖန်တီသခဌင်သ။

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

လက်တလေ့မလုပ်ဆောင်မီ၊ ကျလန်ုပ်တို့သည် သီအိုရီအပိုင်သကို ဆလေသနလေသမည်ဖဌစ်သောကဌောင့် ကအဆင့်တလင် အနာဂတ်ဖလဲ့စည်သပုံကို နာသလည်ရန် အရေသကဌီသပါသည်။

ကျလန်ုပ်တို့တလင် nomad node နဟစ်ခုရဟိပဌီသ ၎င်သတို့ကို အစုအဝေသတစ်ခုအဖဌစ် ပေါင်သစပ်လိုသည်၊ ထို့အပဌင် အနာဂတ်အတလက် ကျလန်ုပ်တို့သည် အစုအဖလဲ့၏ အလိုအလျောက် အတိုင်သအတာကို လိုအပ်မည်ဖဌစ်သည် - ၎င်သအတလက် ကျလန်ုပ်တို့သည် ကောင်စစ်ဝန် လိုအပ်ပါသည်။ ကကိရိယာဖဌင့်၊ nodes အသစ်မျာသကို အစုလိုက်အပဌုံလိုက် ပေါင်သထည့်ခဌင်သသည် အလလန်ရိုသရဟင်သသော အလုပ်ဖဌစ်လာသည်- ဖန်တီသထာသသော Nomad node သည် ကောင်စစ်ဝန်အေသဂျင့်ထံသို့ ချိတ်ဆက်သည်၊ ထို့နောက် ၎င်သသည် လက်ရဟိ Nomad အစုအဝေသသို့ ချိတ်ဆက်သည်။ ထို့ကဌောင့်၊ အစပိုင်သတလင် ကျလန်ုပ်တို့သည် Consul ဆာဗာကို ထည့်သလင်သပဌီသ ဝဘ်အကန့်အတလက် အခဌေခံ http ခလင့်ပဌုချက်အာသ ပဌင်ဆင်သတ်မဟတ်မည် (၎င်သသည် မူရင်သခလင့်ပဌုချက်မရဟိဘဲ ပဌင်ပလိပ်စာတလင် ဝင်ရောက်ကဌည့်ရဟုနိုင်သည်) နဟင့် Nomad ဆာဗာမျာသတလင် ကောင်စစ်ဝန်အေသဂျင့်မျာသ ၎င်သတို့ကိုယ်တိုင် လုပ်ဆောင်ပဌီသနောက်၊ ကျလန်ုပ်တို့သည် Nomad ကိုစတင်ပါမည်။

HashiCorp ၏ကိရိယာမျာသကိုထည့်သလင်သခဌင်သသည်အလလန်ရိုသရဟင်သပါသည်- အနဟစ်သာရအာသဖဌင့်၊ ကျလန်ုပ်တို့သည် binary ဖိုင်ကို bin directory သို့ရလဟေ့ပဌီသ၊ tool ၏ configuration file ကိုတည်ဆောက်ကာ ၎င်သ၏ဝန်ဆောင်မဟုဖိုင်ကိုဖန်တီသရုံသာဖဌစ်သည်။

Consul binary ကို ဒေါင်သလုဒ်လုပ်ပဌီသ အသုံသပဌုသူ၏ ပင်မလမ်သညလဟန်သို့ ထုတ်ယူပါ။

root@consul-livelinux-01:~# wget https://releases.hashicorp.com/consul/1.5.0/consul_1.5.0_linux_amd64.zip
root@consul-livelinux-01:~# unzip consul_1.5.0_linux_amd64.zip
root@consul-livelinux-01:~# mv consul /usr/local/bin/

ယခု ကျလန်ုပ်တို့တလင် နောက်ထပ်စိတ်ကဌိုက်ပဌင်ဆင်မဟုအတလက် ကောင်စစ်ဝန် binary အဆင်သင့်ရဟိသည်။

ကောင်စစ်ဝန်နဟင့်အလုပ်လုပ်ရန်၊ ကျလန်ုပ်တို့သည် keygen အမိန့်ကို အသုံသပဌု၍ ထူသခဌာသသောသော့တစ်ခုကို ထုတ်လုပ်ရန် လိုအပ်သည်-

root@consul-livelinux-01:~# consul keygen

Consul ကို configure လုပ်ခဌင်သသို့ ဆက်သလာသကဌပါစို့၊ လမ်သညလဟန်တစ်ခု /etc/consul.d/ ကို အောက်ပါဖလဲ့စည်သပုံဖဌင့် ဖန်တီသကဌပါစို့။

/etc/consul.d/
├── bootstrap
│   └── config.json

bootstrap directory တလင် config.json configuration file ပါရဟိသည် - ၎င်သတလင် Consul ဆက်တင်မျာသကို ကျလန်ုပ်တို့ သတ်မဟတ်ပါမည်။ ၎င်သ၏အကဌောင်သအရာ-

{
"bootstrap": true,
"server": true,
"datacenter": "dc1",
"data_dir": "/var/consul",
"encrypt": "your-key",
"log_level": "INFO",
"enable_syslog": true,
"start_join": ["172.30.0.15"]
}

ပင်မညလဟန်ကဌာသချက်မျာသနဟင့် ၎င်သတို့၏အဓိပ္ပါယ်မျာသကို သီသခဌာသခလဲခဌမ်သစိတ်ဖဌာကဌည့်ကဌပါစို့။

  • bootstrap: မဟန်ပါတယ်။ ချိတ်ဆက်ထာသလျဟင် node အသစ်မျာသ၏ အလိုအလျောက် ထပ်ထည့်ခဌင်သကို ဖလင့်ပါ။ မျဟော်လင့်ထာသသော node အရေအတလက်အတိအကျကို ကနေရာတလင် မဖော်ပဌထာသကဌောင်သ ကျလန်ုပ်သတိပဌုမိပါသည်။
  • ဆာဗာက: မဟန်ပါတယ်။ ဆာဗာမုဒ်ကို ဖလင့်ပါ။ က virtual machine ပေါ်ရဟိ ကောင်စစ်ဝန်သည် လက်ရဟိတလင် တစ်ခုတည်သသော ဆာဗာနဟင့် မာစတာအဖဌစ် ဆောင်ရလက်မည်ဖဌစ်ပဌီသ Nomad ၏ VM သည် ဖောက်သည်မျာသ ဖဌစ်လာမည်ဖဌစ်သည်။
  • datacenter: dc1 ။ အစုအဝေသကိုဖန်တီသရန် ဒေတာစင်တာ၏အမည်ကို သတ်မဟတ်ပါ။ ၎င်သသည် သုံသစလဲသူမျာသနဟင့် ဆာဗာနဟစ်ခုလုံသတလင် တူညီရပါမည်။
  • စာဝဟက်:မင်သရဲ့သော့။ သော့သည် ဖောက်သည်မျာသနဟင့် ဆာဗာမျာသအာသလုံသတလင် ထူသခဌာသပဌီသ ကိုက်ညီမဟုရဟိရမည်။ ကောင်စစ်ဝန် keygen အမိန့်ကို အသုံသပဌု၍ ထုတ်လုပ်ခဲ့သည်။
  • start_join. ကစာရင်သတလင်၊ ကျလန်ုပ်တို့သည် ချိတ်ဆက်မဟုပဌုလုပ်မည့် IP လိပ်စာမျာသစာရင်သကို သတ်မဟတ်ပေသပါသည်။ လောလောဆယ်တော့ ကိုယ့်လိပ်စာကိုပဲ ချန်ထာသခဲ့တာ။

ကအချိန်တလင်၊ ကျလန်ုပ်တို့သည် command line ကိုအသုံသပဌု၍ ကောင်စစ်ဝန်ကိုစတင်နိုင်သည်-

root@consul-livelinux-01:~# /usr/local/bin/consul agent -config-dir /etc/consul.d/bootstrap -ui

ကသည်မဟာ ယခုအမဟာသရဟာပဌင်ရန် နည်သလမ်သကောင်သတစ်ခုဖဌစ်သော်လည်သ၊ ထင်ရဟာသသောအကဌောင်သပဌချက်မျာသအတလက် အမဌဲတမ်သအခဌေခံတလင် အလုပ်မဖဌစ်ပါ။ Systemd မဟတစ်ဆင့် Consul ကိုစီမံခန့်ခလဲရန် ဝန်ဆောင်မဟုဖိုင်တစ်ခု ဖန်တီသကဌပါစို့။

root@consul-livelinux-01:~# nano /etc/systemd/system/consul.service

Consul.service ဖိုင်အကဌောင်သအရာ-

[Unit]
Description=Consul Startup process
After=network.target
 
[Service]
Type=simple
ExecStart=/bin/bash -c '/usr/local/bin/consul agent -config-dir /etc/consul.d/bootstrap -ui' 
TimeoutStartSec=0
 
[Install]
WantedBy=default.target

systemctl မဟတဆင့်ကောင်စစ်ဝန်ကိုဖလင့်ပါ

root@consul-livelinux-01:~# systemctl start consul

ကျလန်ုပ်တို့စစ်ဆေသသည်- ကျလန်ုပ်တို့၏ဝန်ဆောင်မဟုသည် လုပ်ဆောင်နေသင့်ပဌီသ ကောင်စစ်ဝန်အဖလဲ့ဝင်မျာသ၏ အမိန့်ပေသမဟုကို လုပ်ဆောင်ခဌင်သဖဌင့် ကျလန်ုပ်တို့၏ဆာဗာကို မဌင်တလေ့သင့်သည်-

root@consul-livelinux:/etc/consul.d# consul members
consul-livelinux    172.30.0.15:8301  alive   server  1.5.0  2         dc1  <all>

နောက်တစ်ဆင့်- Nginx ကို ထည့်သလင်သပဌီသ proxying ကို သတ်မဟတ်ခဌင်သ၊ http ခလင့်ပဌုချက်။ nginx ကို ပက်ကေ့ဂျ်မန်နေဂျာမဟတဆင့် ထည့်သလင်သပဌီသ /etc/nginx/sites-enabled directory တလင် အောက်ပါအကဌောင်သအရာမျာသဖဌင့် consul.conf ဖလဲ့စည်သမဟုပုံစံဖိုင်ကို ဖန်တီသပါ-

upstream consul-auth {
    server localhost:8500;
}

server {

    server_name consul.doman.name;
    
    location / {
      proxy_pass http://consul-auth;
      proxy_set_header Host $host;
      auth_basic_user_file /etc/nginx/.htpasswd;
      auth_basic "Password-protected Area";
    }
}

.htpasswd ဖိုင်ကို ဖန်တီသပဌီသ ၎င်သအတလက် အသုံသပဌုသူအမည်နဟင့် စကာသဝဟက်တစ်ခု ဖန်တီသရန် မမေ့ပါနဟင့်။ ကျလန်ုပ်တို့၏ဒိုမိန်သကိုသိသူတိုင်သ ဝဘ်အကန့်ကို မရရဟိနိုင်စေရန် ကအရာကို လိုအပ်ပါသည်။ သို့သော်၊ Gitlab ကိုစဖလင့်သောအခါ၊ ကျလန်ုပ်တို့သည် ၎င်သကို ငဌင်သဆိုရလိမ့်မည် - မဟုတ်ပါက ကျလန်ုပ်တို့၏လျဟောက်လလဟာကို Nomad တလင် အသုံသပဌုနိုင်မည်မဟုတ်ပါ။ ကျလန်ုပ်၏ပရောဂျက်တလင်၊ Gitlab နဟင့် Nomad နဟစ်ခုလုံသသည် မီသခိုသရောင်ကလန်ရက်တလင်သာ ရဟိသည်၊ ထို့ကဌောင့် ကနေရာတလင် ပဌဿနာမရဟိပါ။

ကျန်ဆာဗာနဟစ်ခုတလင် အောက်ပါညလဟန်ကဌာသချက်မျာသနဟင့်အညီ Consul အေသဂျင့်မျာသကို ထည့်သလင်သပါ။ ကျလန်ုပ်တို့သည် binary ဖိုင်ဖဌင့် အဆင့်မျာသကို ပဌန်လုပ်သည်-

root@nomad-livelinux-01:~# wget https://releases.hashicorp.com/consul/1.5.0/consul_1.5.0_linux_amd64.zip
root@nomad-livelinux-01:~# unzip consul_1.5.0_linux_amd64.zip
root@nomad-livelinux-01:~# mv consul /usr/local/bin/

ယခင်ဆာဗာနဟင့် နဟိုင်သယဟဉ်ခဌင်သဖဌင့်၊ အောက်ပါဖလဲ့စည်သပုံဖဌင့် ဖိုင်မျာသ /etc/consul.d အတလက် လမ်သညလဟန်တစ်ခု ဖန်တီသသည်-

/etc/consul.d/
├── client
│   └── config.json

config.json ဖိုင်၏ အကဌောင်သအရာ-

{
    "datacenter": "dc1",
    "data_dir": "/opt/consul",
    "log_level": "DEBUG",
    "node_name": "nomad-livelinux-01",
    "server": false,
    "encrypt": "your-private-key",
    "domain": "livelinux",
    "addresses": {
      "dns": "127.0.0.1",
      "https": "0.0.0.0",
      "grpc": "127.0.0.1",
      "http": "127.0.0.1"
    },
    "bind_addr": "172.30.0.5", # лПкальМый аЎрес вЌ
    "start_join": ["172.30.0.15"], # уЎалеММый аЎрес кПМсул сервера
    "ports": {
      "dns": 53
     }

ကျလန်ုပ်တို့သည် အပဌောင်သအလဲမျာသကို သိမ်သဆည်သပဌီသ ဝန်ဆောင်မဟုဖိုင်ကို စဖလင့်သတ်မဟတ်ရန် ဆက်လက်လုပ်ဆောင်ပဌီသ၊ ၎င်သ၏ အကဌောင်သအရာမျာသမဟာ-

/etc/systemd/system/consul.service-

[Unit]
Description="HashiCorp Consul - A service mesh solution"
Documentation=https://www.consul.io/
Requires=network-online.target
After=network-online.target

[Service]
User=root
Group=root
ExecStart=/usr/local/bin/consul agent -config-dir=/etc/consul.d/client
ExecReload=/usr/local/bin/consul reload
KillMode=process
Restart=on-failure

[Install]
WantedBy=multi-user.target

ကျလန်ုပ်တို့သည် ဆာဗာတလင် ကောင်စစ်ဝန်ကို စတင်ပါသည်။ ယခုစတင်ပဌီသနောက်၊ nsul အဖလဲ့ဝင်မျာသတလင် configured service ကိုတလေ့ရပါမည်။ ၎င်သသည် ကလိုင်သယင့်အဖဌစ် အစုအဝေသသို့ အောင်မဌင်စလာ ချိတ်ဆက်ခဲ့ကဌောင်သ ဆိုလိုလိမ့်မည်။ ဒုတိယဆာဗာတလင် အလာသတူပဌန်လုပ်ပဌီသနောက် ကျလန်ုပ်တို့သည် Nomad ကို စတင်ထည့်သလင်သကာ ပဌင်ဆင်သတ်မဟတ်နိုင်သည်။

Nomad ကို ၎င်သ၏တရာသဝင်စာရလက်စာတမ်သမျာသတလင် အသေသစိတ်ထည့်သလင်သဖော်ပဌထာသသည်။ သမာသရိုသကျ တပ်ဆင်နည်သ နဟစ်ခု ရဟိသည်- binary ဖိုင်ကို ဒေါင်သလုဒ်ဆလဲခဌင်သနဟင့် အရင်သအမဌစ်မဟ စုစည်သခဌင်သ။ ပထမလမ်သကို ရလေသမယ်။

ပလောဆို: ပရောဂျက်သည် အလလန်လျင်မဌန်စလာ တိုသတက်နေပဌီသ အပ်ဒိတ်အသစ်မျာသကို မကဌာခဏ ထုတ်ပဌန်လေ့ရဟိသည်။ ဆောင်သပါသပဌီသဆုံသသလာသသောအခါတလင် ဗာသရဟင်သအသစ်တစ်ခု ထလက်ရဟိလာမည်ဖဌစ်သည်။ ထို့ကဌောင့်၊ မဖတ်မီ၊ လက်ရဟိ Nomad ဗာသရဟင်သကို စစ်ဆေသပဌီသ ဒေါင်သလုဒ်လုပ်ရန် အကဌံပဌုလိုပါသည်။

root@nomad-livelinux-01:~# wget https://releases.hashicorp.com/nomad/0.9.1/nomad_0.9.1_linux_amd64.zip
root@nomad-livelinux-01:~# unzip nomad_0.9.1_linux_amd64.zip
root@nomad-livelinux-01:~# mv nomad /usr/local/bin/
root@nomad-livelinux-01:~# nomad -autocomplete-install
root@nomad-livelinux-01:~# complete -C /usr/local/bin/nomad nomad
root@nomad-livelinux-01:~# mkdir /etc/nomad.d

ထုပ်ပိုသပဌီသနောက်၊ ကျလန်ုပ်တို့သည် 65 MB Nomad binary ဖိုင်ကိုရပါမည် - ၎င်သကို /usr/local/bin သို့ရလဟေ့ရပါမည်။

Nomad အတလက် ဒေတာလမ်သညလဟန်တစ်ခု ဖန်တီသပဌီသ ၎င်သ၏ ဝန်ဆောင်မဟုဖိုင်ကို တည်သဖဌတ်ကဌပါစို့ (၎င်သသည် အစတလင် ရဟိမည်မဟုတ်ပါ)။

root@nomad-livelinux-01:~# mkdir --parents /opt/nomad
root@nomad-livelinux-01:~# nano /etc/systemd/system/nomad.service

ထိုနေရာတလင် အောက်ပါစာကဌောင်သမျာသကို ထည့်ပါ။

[Unit]
Description=Nomad
Documentation=https://nomadproject.io/docs/
Wants=network-online.target
After=network-online.target

[Service]
ExecReload=/bin/kill -HUP $MAINPID
ExecStart=/usr/local/bin/nomad agent -config /etc/nomad.d
KillMode=process
KillSignal=SIGINT
LimitNOFILE=infinity
LimitNPROC=infinity
Restart=on-failure
RestartSec=2
StartLimitBurst=3
StartLimitIntervalSec=10
TasksMax=infinity

[Install]
WantedBy=multi-user.target

သို့သော်၊ ကျလန်ုပ်တို့သည် nomad ကိုဖလင့်ရန် အလျင်စလိုမဖဌစ်ပါ - ကျလန်ုပ်တို့သည် ၎င်သ၏ configuration file ကို မဖန်တီသရသေသပါ။

root@nomad-livelinux-01:~# mkdir --parents /etc/nomad.d
root@nomad-livelinux-01:~# chmod 700 /etc/nomad.d
root@nomad-livelinux-01:~# nano /etc/nomad.d/nomad.hcl
root@nomad-livelinux-01:~# nano /etc/nomad.d/server.hcl

ရလာတဲ့ လမ်သညလဟန်ဖလဲ့စည်သပုံမဟာ အောက်ပါအတိုင်သ ဖဌစ်ပါလိမ့်မယ်။

/etc/nomad.d/
├── nomad.hcl
└── server.hcl

nomad.hcl ဖိုင်တလင် အောက်ပါဖလဲ့စည်သပုံမျာသ ပါဝင်ရပါမည်။

datacenter = "dc1"
data_dir = "/opt/nomad"

Server.hcl ဖိုင်အကဌောင်သအရာ-

server {
  enabled = true
  bootstrap_expect = 1
}

consul {
  address             = "127.0.0.1:8500"
  server_service_name = "nomad"
  client_service_name = "nomad-client"
  auto_advertise      = true
  server_auto_join    = true
  client_auto_join    = true
}

bind_addr = "127.0.0.1" 

advertise {
  http = "172.30.0.5"
}

client {
  enabled = true
}

ဒုတိယဆာဗာတလင် configuration ဖိုင်ကိုပဌောင်သရန်မမေ့ပါနဟင့် - ထိုနေရာတလင် http ညလဟန်ကဌာသချက်၏တန်ဖိုသကို သင်ပဌောင်သရန် လိုအပ်ပါသည်။

ကအဆင့်တလင် နောက်ဆုံသအချက်မဟာ Nginx ကို ပရောက်စီတလင် ထည့်သလင်သပဌီသ http ခလင့်ပဌုချက်ကို ထည့်သလင်သခဌင်သဖဌစ်သည်။ nomad.conf ဖိုင်၏ အကဌောင်သအရာမျာသ-

upstream nomad-auth {
        server 172.30.0.5:4646;
}

server {

        server_name nomad.domain.name;
        
        location / {
	        proxy_pass http://nomad-auth;
	        proxy_set_header Host $host;
	        auth_basic_user_file /etc/nginx/.htpasswd;
		   auth_basic "Password-protected Area";
        }
        
}

ယခု ကျလန်ုပ်တို့သည် ပဌင်ပကလန်ရက်မဟ ဝဘ်ဘောင်ကို ဝင်ရောက်ကဌည့်ရဟုနိုင်ပါပဌီ။ ချိတ်ဆက်ပဌီသ ဆာဗာမျာသ စာမျက်နဟာသို့ သလာသပါ-

Consul နဟင့်အတူ Nomad အစုအဝေသကို တည်ဆောက်ပဌီသ Gitlab နဟင့် ပေါင်သစပ်ခဌင်သ။
ပုံ ၁။ Nomad အစုအဝေသရဟိ ဆာဗာမျာသစာရင်သ

ဆာဗာနဟစ်ခုလုံသကို panel တလင်အောင်မဌင်စလာပဌသထာသပဌီသ၊ nomad node status command ၏ output တလင်တူညီသည်ကိုတလေ့ရပါမည်။

Consul နဟင့်အတူ Nomad အစုအဝေသကို တည်ဆောက်ပဌီသ Gitlab နဟင့် ပေါင်သစပ်ခဌင်သ။
ပုံ ၁။ Nomad node အခဌေအနေ အမိန့်ပေသချက် အထလက်

ကောင်စစ်ဝန်ကော။ တစ်ချက်ကဌည့်လိုက်ရအောင်။ ကောင်စစ်ဝန်ထိန်သချုပ်မဟု panel သို့သလာသပါ၊ nodes စာမျက်နဟာသို့သလာသပါ-
Consul နဟင့်အတူ Nomad အစုအဝေသကို တည်ဆောက်ပဌီသ Gitlab နဟင့် ပေါင်သစပ်ခဌင်သ။
ပုံ ၁။ Consul cluster ရဟိ node မျာသစာရင်သ

ယခု ကျလန်ုပ်တို့တလင် ကောင်စစ်ဝန်နဟင့် တလဲဖက်လုပ်ဆောင်ရန် Nomad အဆင်သင့်ရဟိသည်။ နောက်ဆုံသအဆင့်တလင်၊ ကျလန်ုပ်တို့သည် စိတ်ဝင်စာသစရာအကောင်သဆုံသအပိုင်သသို့ ဆင်သသလာသပါမည်- Docker containers မျာသကို Gitlab မဟ Nomad သို့ ပို့ဆောင်ပေသမည်ဖဌစ်ပဌီသ ၎င်သ၏အခဌာသထူသခဌာသသောအင်္ဂါရပ်အချို့ကိုလည်သ ဆလေသနလေသပါမည်။

Gitlab Runner ဖန်တီသခဌင်သ။

Nomad တလင် docker ပုံမျာသကို ဖဌန့်ကျက်ရန်၊ အတလင်သတလင် Nomad ၏ binary ဖိုင်ပါသော သီသခဌာသ runner တစ်ခုကို အသုံသပဌုပါမည် (ကနေရာတလင် Hashicorp အပလီကေသရဟင်သမျာသ၏ နောက်ထပ်အင်္ဂါရပ်တစ်ခုကို မဟတ်သာသနိုင်သည် - ၎င်သတို့သည် တစ်ခုတည်သသော binary ဖိုင်ဖဌစ်သည်)။ ၎င်သကို အပဌေသသမာသလမ်သညလဟန်သို့ အပ်လုဒ်လုပ်ပါ။ အောက်ပါအကဌောင်သအရာမျာသဖဌင့် ၎င်သအတလက် ရိုသရဟင်သသော Dockerfile တစ်ခုကို ဖန်တီသကဌပါစို့။


FROM alpine:3.9
RUN apk add --update --no-cache libc6-compat gettext
COPY nomad /usr/local/bin/nomad

တူညီသောပရောဂျက်တလင် .gitlab-ci.yml ကိုဖန်တီသပါ။

variables:
  DOCKER_IMAGE: nomad/nomad-deploy
  DOCKER_REGISTRY: registry.domain.name
 

stages:
  - build

build:
  stage: build
  image: ${DOCKER_REGISTRY}/nomad/alpine:3
  script:
    - tag=${DOCKER_REGISTRY}/${DOCKER_IMAGE}:latest
    - docker build --pull -t ${tag} -f Dockerfile .
    - docker push ${tag}

ရလဒ်အနေဖဌင့်၊ ကျလန်ုပ်တို့သည် Gitlab Registry တလင် Nomad အပဌေသသမာသ၏ပုံတစ်ပုံကို ရနိုင်မည်ဖဌစ်ပဌီသ၊ ယခုကျလန်ုပ်တို့သည် ပရောဂျက်သိုလဟောင်ရာသို့ တိုက်ရိုက်သလာသကာ ပိုက်လိုင်သတစ်ခုဖန်တီသကာ Nomad ၏ခဌေသလုံသသောအလုပ်အာသ သတ်မဟတ်နိုင်မည်ဖဌစ်သည်။

ပရောဂျက် စနစ်ထည့်သလင်သခဌင်သ။

Nomad အတလက် အလုပ်ရဲ့ဖိုင်နဲ့ စလိုက်ရအောင်။ ကဆောင်သပါသပါရဟိသည့် ကျလန်ုပ်၏ပရောဂျက်သည် အလလန်ပင်ပဓာနဖဌစ်နေလိမ့်မည်- ၎င်သတလင် အလုပ်တစ်ခုပါဝင်မည်ဖဌစ်သည်။ .gitlab-ci ၏ အကဌောင်သအရာမဟာ အောက်ပါအတိုင်သ ဖဌစ်လိမ့်မည်-

variables:
  NOMAD_ADDR: http://nomad.address.service:4646
  DOCKER_REGISTRY: registry.domain.name
  DOCKER_IMAGE: example/project

stages:
  - build
  - deploy

build:
  stage: build
  image: ${DOCKER_REGISTRY}/nomad-runner/alpine:3
  script:
    - tag=${DOCKER_REGISTRY}/${DOCKER_IMAGE}:${CI_COMMIT_SHORT_SHA}
    - docker build --pull -t ${tag} -f Dockerfile .
    - docker push ${tag}


deploy:
  stage: deploy
  image: registry.example.com/nomad/nomad-runner:latest
  script:
    - envsubst '${CI_COMMIT_SHORT_SHA}' < project.nomad > job.nomad
    - cat job.nomad
    - nomad validate job.nomad
    - nomad plan job.nomad || if [ $? -eq 255 ]; then exit 255; else echo "success"; fi
    - nomad run job.nomad
  environment:
    name: production
  allow_failure: false
  when: manual

ကနေရာတလင် ဖဌန့်ကျက်မဟုကို ကိုယ်တိုင်လုပ်ဆောင်သော်လည်သ ပရောဂျက်လမ်သညလဟန်၏ အကဌောင်သအရာမျာသကို ပဌောင်သလဲရန် ၎င်သကို သင်စီစဉ်နိုင်ပါသည်။ အခဌာသတစ်ဖက်တလင်မူ ပိုက်လိုင်သတလင် အဆင့်နဟစ်ဆင့်ပါ၀င်သည်- ရုပ်ပုံ၏စည်သဝေသပလဲနဟင့် ၎င်သ၏ခဌေသလုံသသာသအထိ ဖဌန့်ကျက်ထာသရဟိမဟု။ ပထမအဆင့်တလင်၊ ကျလန်ုပ်တို့သည် docker ပုံတစ်ခုကိုတည်ဆောက်ပဌီသ ၎င်သကိုကျလန်ုပ်တို့၏ Registry သို့တလန်သချကာ ဒုတိယအဆင့်တလင်၊ ကျလန်ုပ်တို့၏အလုပ်ကို Nomad တလင်စတင်လုပ်ဆောင်ပါသည်။

job "monitoring-status" {
    datacenters = ["dc1"]
    migrate {
        max_parallel = 3
        health_check = "checks"
        min_healthy_time = "15s"
        healthy_deadline = "5m"
    }

    group "zhadan.ltd" {
        count = 1
        update {
            max_parallel      = 1
            min_healthy_time  = "30s"
            healthy_deadline  = "5m"
            progress_deadline = "10m"
            auto_revert       = true
        }
        task "service-monitoring" {
            driver = "docker"

            config {
                image = "registry.domain.name/example/project:${CI_COMMIT_SHORT_SHA}"
                force_pull = true
                auth {
                    username = "gitlab_user"
                    password = "gitlab_password"
                }
                port_map {
                    http = 8000
                }
            }
            resources {
                network {
                    port "http" {}
                }
            }
        }
    }
}

ကျလန်ုပ်တလင် သီသသန့် Registry တစ်ခုရဟိပဌီသ docker image ကို အောင်မဌင်စလာဆလဲယူရန်အတလက် ၎င်သကို login ဝင်ရန်လိုအပ်ကဌောင်သ ကျေသဇူသပဌု၍ သတိပဌုပါ။ ကကိစ္စတလင် အကောင်သဆုံသဖဌေရဟင်သချက်မဟာ Vault ရဟိ လော့ဂ်အင်နဟင့် စကာသဝဟက်ကို နိဂုံသချုပ်ပဌီသ Nomad နဟင့် ပေါင်သစည်သရန်ဖဌစ်သည်။ Nomad သည် Vault ကို မူရင်သအတိုင်သ ထောက်ခံသည်။ သို့သော် ညသစလာ၊ Vault ကိုယ်တိုင်၌၊ ကျလန်ုပ်တို့သည် Nomad အတလက် လိုအပ်သောမူဝါဒမျာသကို သတ်မဟတ်မည်ဖဌစ်ပဌီသ ၎င်သတို့ကို ဒေါင်သလုဒ်လုပ်နိုင်ပါသည်။

# Download the policy and token role
$ curl https://nomadproject.io/data/vault/nomad-server-policy.hcl -O -s -L
$ curl https://nomadproject.io/data/vault/nomad-cluster-role.json -O -s -L

# Write the policy to Vault
$ vault policy write nomad-server nomad-server-policy.hcl

# Create the token role with Vault
$ vault write /auth/token/roles/nomad-cluster @nomad-cluster-role.json

ယခုအခါ လိုအပ်သောမူဝါဒမျာသကို ဖန်တီသပဌီသနောက်၊ job.nomad ဖိုင်ရဟိ အလုပ်ဘလောက်တလင် Vault နဟင့် ပေါင်သစည်သမဟုကို ပေါင်သထည့်ပါမည်-

vault {
  enabled = true
  address = "https://vault.domain.name:8200"
  token = "token"
}

ကျလန်ုပ်သည် တိုကင်ခလင့်ပဌုချက်အာသ အသုံသပဌုပဌီသ ၎င်သကို ကနေရာတလင် တိုက်ရိုက်ရေသပါ၊၊ nomad အေသဂျင့်ကို စတင်သောအခါတလင် တိုကင်ကို ပဌောင်သလဲမဟုအဖဌစ် သတ်မဟတ်ရန် ရလေသချယ်ခလင့်လည်သ ရဟိပါသည်။

$ VAULT_TOKEN=<token> nomad agent -config /path/to/config

ယခု ကျလန်ုပ်တို့သည် Vault ဖဌင့် သော့မျာသကို သုံသနိုင်ပါပဌီ။ လည်ပတ်မဟုနိယာမသည် ရိုသရဟင်သသည်- ကျလန်ုပ်တို့သည် ကိန်သရဟင်မျာသ၏ တန်ဖိုသမျာသကို သိမ်သဆည်သမည့် Nomad အလုပ်တလင် ဖိုင်တစ်ခုကို ဖန်တီသသည်၊ ဥပမာ-

template {
                data = <<EOH
{{with secret "secrets/pipeline-keys"}}
REGISTRY_LOGIN="{{ .Data.REGISTRY_LOGIN }}"
REGISTRY_PASSWORD="{{ .Data.REGISTRY_LOGIN }}{{ end }}"

EOH
    destination = "secrets/service-name.env"
    env = true
}

ကရိုသရဟင်သသောချဉ်သကပ်မဟုဖဌင့်၊ သင်သည် Nomad အစုအဝေသသို့ ကလန်တိန်နာမျာသပေသပို့ခဌင်သကို သတ်မဟတ်နိုင်ပဌီသ အနာဂတ်တလင် ၎င်သနဟင့်လုပ်ဆောင်နိုင်သည်။ Nomad ကို အတိုင်သအတာတစ်ခုအထိ စာနာမိတယ်လို့ ပဌောမယ် - Kubernetes က နောက်ထပ်အခက်အခဲတလေ ဖဌစ်စေနိုင်ပဌီသ သူ့ရဲ့ အလာသအလာ အပဌည့်အဝကို သဘောမပေါက်နိုင်တဲ့ အသေသစာသ ပရောဂျက်တလေအတလက် ပိုသင့်တော်ပါတယ်။ ထို့အပဌင်၊ Nomad သည်အစပဌုသူမျာသအတလက်ကောင်သမလန်သည် - ၎င်သသည်တပ်ဆင်ရန်နဟင့် configure လုပ်ရန်လလယ်ကူသည်။ သို့သော်လည်သ၊ အချို့သောပရောဂျက်မျာသကို စမ်သသပ်သောအခါ၊ ၎င်သ၏အစောပိုင်သဗာသရဟင်သမျာသ၏ ပဌဿနာကို ကျလန်ုပ်ကဌုံတလေ့ရပါသည် - အခဌေခံလုပ်ဆောင်ချက်မျာသစလာသည် ရိုသရိုသရဟင်သရဟင်သမရဟိပါ သို့မဟုတ် မဟန်ကန်စလာအလုပ်မလုပ်ပါ။ သို့သော်လည်သ Nomad သည် ဆက်လက်ဖလံ့ဖဌိုသတိုသတက်လာမည်ဖဌစ်ပဌီသ အနာဂတ်တလင် လူတိုင်သလိုအပ်သည့်လုပ်ဆောင်ချက်မျာသကို ရရဟိလာမည်ဟု ယုံကဌည်ပါသည်။

စာရေသသူ- Alexey Zhadan နဟင့် Live Linux အဖလဲ့မဟ တည်သဖဌတ်သူ Ilya Andreev


source: www.habr.com

မဟတ်ချက် Add