د قونسل په کارولو سره د کوډ کلستر تنظیم کول او د ګیتلاب سره یوځای کول

پېژندنه

په دې وروستیو کې، د Kubernetes شهرت په چټکۍ سره وده کوي - ډیرې پروژې پلي کوي. ما غوښتل د نوماد په څیر یو آرکیسټرټر سره اړیکه ونیسم: دا د هغو پروژو لپاره مناسب دی چې دمخه د HashiCorp څخه نور حلونه کاروي، د بیلګې په توګه، والټ او قونسل، او پروژې پخپله د زیربنا له پلوه پیچلې ندي. دا مواد به د Nomad نصبولو لپاره لارښوونې ولري، په کلستر کې د دوو نوډونو یوځای کول، او همدارنګه د ګیتلاب سره د Nomad ادغام.

د قونسل په کارولو سره د کوډ کلستر تنظیم کول او د ګیتلاب سره یوځای کول

د ازموینې موقف

د ټیسټ بنچ په اړه لږ څه: درې مجازی سرورونه د 2 CPU، 4 RAM، 50 Gb SSD ځانګړتیاو سره کارول کیږي، په یو عام محلي شبکه کې متحد شوي. د دوی نومونه او IP پتې:

  1. nomad-livelinux-01: 172.30.0.5
  2. nomad-livelinux-02: 172.30.0.10
  3. consul-livelinux-01: 172.30.0.15

د کوچیانو نصبول، قونسل. د کوچیانو د کلستر جوړول

راځئ چې د بنسټیز نصب سره پیل وکړو. که څه هم تنظیم ساده و ، زه به یې د مقالې بشپړتیا لپاره تشریح کړم: دا په لازمي ډول د اړتیا په وخت کې د ګړندي لاسرسي لپاره له مسودو او نوټونو څخه رامینځته شوی.

مخکې له دې چې موږ تمرین پیل کړو، موږ به د نظري برخې په اړه بحث وکړو، ځکه چې پدې مرحله کې دا مهمه ده چې د راتلونکي جوړښت په اړه پوه شي.

موږ دوه کوچیان نوډونه لرو او موږ غواړو چې دوی په کلستر کې سره یوځای کړو، او په راتلونکي کې به موږ د اتوماتیک کلستر اندازه کولو ته هم اړتیا ولرو - د دې لپاره به موږ قونسل ته اړتیا ولرو. د دې وسیلې سره، د نوي نوډونو کلستر کول او اضافه کول خورا ساده کار کیږي: جوړ شوی Nomad نوډ د قونسل اجنټ سره وصل کیږي، او بیا د اوسني نوماد کلستر سره وصل کیږي. له همدې امله، موږ به په پیل کې د قونسل سرور نصب کړو، د ویب پینل لپاره د بنسټیز http واک تنظیم کړو (دا د ډیفالټ له مخې له اجازې پرته دی او په بهرنۍ پته کې لاسرسی کیدی شي)، او همدارنګه د قونسل اجنټان پخپله په نومډ سرورونو کې، وروسته له دې موږ به یوازې کوچی ته لاړ شو.

د HashiCorp د وسیلو نصب کول خورا ساده دي: په اصل کې، موږ یوازې د بائنری فایل بن ډایرکټر ته لیږدوو، د وسیلې ترتیب کولو فایل تنظیم کوو، او د دې خدماتو فایل جوړوو.

د قونسل بائنری فایل ډاونلوډ کړئ او د کارونکي کور لارښود کې یې خلاص کړئ:

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/

اوس موږ د نورو تشکیلاتو لپاره چمتو شوی قونسل بائنری لرو.

د قونسل سره د کار کولو لپاره، موږ اړتیا لرو چې د keygen کمانډ په کارولو سره یو ځانګړی کیلي جوړه کړو:

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

راځئ چې د قونسل ترتیب تنظیم کولو ته لاړ شو، د لاندې جوړښت سره /etc/consul.d/ لارښود جوړ کړئ:

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

د بوټسټریپ لارښود به د ترتیب کولو فایل config.json ولري - پدې کې به موږ د قونسل ترتیبات تنظیم کړو. منځپانګه یې:

{
"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"]
}

راځئ چې اصلي لارښوونې او د هغوی معنی په جلا توګه وګورو:

  • بوټسټرېپ: رښتیا. موږ د نوي نوډونو اتومات اضافه کول فعال کوو که چیرې دوی وصل وي. زه یادونه کوم چې موږ دلته د متوقع نوډونو دقیق شمیر نه په ګوته کوو.
  • سرور: رښتیا. د سرور حالت فعال کړئ. په دې مجازی ماشین کې قونسل به دا مهال د یوازینی سرور او ماسټر په توګه عمل وکړي، د Nomad's VM به پیرودونکي وي.
  • د معلوماتو مرکز:dc1. د کلستر د جوړولو لپاره د معلوماتو مرکز نوم مشخص کړئ. دا باید په دواړو مشتریانو او سرورونو کې ورته وي.
  • کوډ: ستا کلی. کلیدي، کوم چې باید ځانګړی وي او په ټولو پیرودونکو او سرورونو کې سمون ولري. د consul keygen کمانډ په کارولو سره تولید شوی.
  • start_join. په دې لیست کې موږ د IP پتې لیست په ګوته کوو چې اړیکه به یې جوړه شي. دا مهال موږ یوازې خپل پته پریږدو.

پدې مرحله کې موږ کولی شو د کمانډ لاین په کارولو سره قونسل چلوو:

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

دا اوس د ډیبګ کولو لپاره یوه ښه لار ده ، په هرصورت ، تاسو به نشئ کولی دا میتود په دوامداره توګه د واضح دلیلونو لپاره وکاروئ. راځئ چې د سیسټم له لارې د قونسل اداره کولو لپاره د خدماتو فایل جوړ کړو:

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>

بله مرحله: د نګینکس نصب کول او د پراکسي کولو او http واک تنظیم کول. موږ د بسته بندۍ مدیر له لارې nginx نصب کوو او په /etc/nginx/sites-enabled ډایرکټر کې موږ د لاندې مینځپانګو سره 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 دواړه یوازې په خړ ویب کې دي، نو دلته داسې کومه ستونزه نشته.

په پاتې دوه سرورونو کې موږ د لاندې لارښوونو سره سم د قونسل اجنټان نصب کوو. موږ مرحلې د بائنری فایل سره تکرار کوو:

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 غړو کې ترتیب شوي خدمت وګورو. دا به پدې معنی وي چې دا په بریالیتوب سره د پیرودونکي په توګه کلستر سره وصل شوی. په دوهم سرور کې ورته تکرار کړئ او له هغې وروسته موږ کولی شو د Nomad نصب او تنظیم کول پیل کړو.

د Nomad نور تفصیلي نصب په رسمي اسنادو کې بیان شوی. د نصب کولو دوه دودیز میتودونه شتون لري: د بائنری فایل ډاونلوډ کول او له سرچینې څخه تالیف کول. زه به لومړی طریقه غوره کړم.

تبصره: پروژه په چټکۍ سره وده کوي، نوي تازه معلومات ډیری وختونه خپاره شوي. شاید د دې مقالې بشپړیدو پورې به نوې نسخه خپره شي. له همدې امله ، د لوستلو دمخه ، زه وړاندیز کوم چې دا مهال د 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 بائنری فایل ترلاسه کړو - دا باید /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

په هرصورت، موږ د کوچیانو په لاره اچولو کې بېړه نه یو - موږ تراوسه د دې ترتیب کولو فایل نه دی جوړ کړی:

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
}

په دوهم سرور کې د ترتیب کولو فایل بدلول مه هیروئ - هلته به تاسو د http لارښود ارزښت بدلولو ته اړتیا ولرئ.

پدې مرحله کې وروستی شی د پراکسي کولو او د http واک تنظیم کولو لپاره Nginx تنظیم کول دي. د 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";
        }
        
}

اوس موږ کولی شو د بهرنۍ شبکې له لارې ویب پینل ته لاسرسی ومومئ. وصل شئ او د سرور پاڼې ته لاړ شئ:

د قونسل په کارولو سره د کوډ کلستر تنظیم کول او د ګیتلاب سره یوځای کول
انځور 1. د کوماډ کلستر کې د سرورونو لیست

دواړه سرورونه په بریالیتوب سره په پینل کې ښودل شوي، موږ به ورته شی د کوډ نوډ حالت کمانډ په محصول کې وګورو:

د قونسل په کارولو سره د کوډ کلستر تنظیم کول او د ګیتلاب سره یوځای کول
انځور 2. د کوډ نوډ حالت کمانډ محصول

د قونسل په اړه څه؟ راځئ چې یو نظر ترلاسه کړو. د قونسل کنټرول پینل ته لاړ شئ، نوډ پاڼې ته:
د قونسل په کارولو سره د کوډ کلستر تنظیم کول او د ګیتلاب سره یوځای کول
انځور 3. د قونسل کلستر کې د نوډونو لیست

اوس موږ یو چمتو کوچی لرو چې د قونسل سره په ګډه کار کوي. په وروستي مرحله کې، موږ به د ساتیرۍ برخې ته ورسیږو: له ګیټلاب څخه کوماډ ته د ډاکر کانټینرونو رسولو تنظیم کول، او د دې د ځینو نورو ځانګړتیاوو په اړه هم خبرې کول.

د Gitlab رنر جوړول

Nomad ته د ډاکر عکسونو ځای په ځای کولو لپاره ، موږ به دننه د Nomad بائنری فایل سره یو جلا رنر وکاروو (دلته ، په لاره کې ، موږ کولی شو د هاشیکورپ غوښتنلیکونو بله ځانګړتیا یاد کړو - په انفرادي ډول دوی یو واحد بائنری فایل دی). دا د رنر لارښود ته پورته کړئ. راځئ چې د لاندې مینځپانګې سره د دې لپاره ساده ډاکر فایل جوړ کړو:


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}

د پایلې په توګه، موږ به د ګیتلاب په راجستر کې د کوډ رنر یو موجود انځور ولرو، اوس موږ کولی شو مستقیم د پروژې ذخیره ته لاړ شو، پایپ لاین جوړ کړو او د کوچی د کوچی دنده تنظیم کړو.

د پروژې ترتیب

راځئ چې د 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

دلته ګمارنه په لاسي ډول پیښیږي ، مګر تاسو کولی شئ دا د پروژې لارښود مینځپانګې بدلولو لپاره تنظیم کړئ. پایپ لاین دوه مرحلې لري: د عکس راټولول او کوچیانو ته د هغې ځای په ځای کول. په لومړي پړاو کې، موږ د ډاکر انځور راټولوو او زموږ په راجستر کې یې فشار راوړو، او په دویمه مرحله کې موږ خپل کار په نومډ کې پیل کوو.

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" {}
                }
            }
        }
    }
}

مهرباني وکړئ په یاد ولرئ چې زه شخصي راجسټری لرم او په بریالیتوب سره د ډاکر عکس راوباسئ زه اړتیا لرم چې لاګ ان شم. پدې حالت کې غوره حل دا دی چې په والټ کې د ننوتلو او پاسورډ داخل کړئ او بیا یې د 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 {
  enabled = true
  address = "https://vault.domain.name:8200"
  token = "token"
}

زه د ټکن په واسطه اختیار کاروم او دلته مستقیم راجستر کوم، دلته د کوچی اجنټ پیل کولو پر مهال د متغیر په توګه د نښه مشخص کولو اختیار هم شتون لري:

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

اوس موږ کولی شو کیلي د والټ سره وکاروو. د عملیاتو اصول ساده دي: موږ په 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 د پیل کونکو لپاره مناسب دی — دا نصب او تنظیم کول اسانه دي. په هرصورت، کله چې په ځینو پروژو کې ازموینه وکړم، زه د هغې په لومړیو نسخو کې د ستونزې سره مخ یم - ډیری اساسي دندې په ساده ډول شتون نلري یا دوی په سمه توګه کار نه کوي. په هرصورت، زه باور لرم چې کوچیان به پرمختګ ته دوام ورکړي او په راتلونکي کې به هغه دندې ترلاسه کړي چې هرڅوک ورته اړتیا لري.

لیکوال: الیا اندریو، د الیکسي زادان او د ژوند لینکس ټیم لخوا ایډیټ شوی


سرچینه: www.habr.com

Add a comment