Istio کے لیے درخواست کی تیاری

Istio کے لیے درخواست کی تیاری

Istio تقسیم شدہ ایپلی کیشنز کو جوڑنے، محفوظ کرنے اور ان کی نگرانی کے لیے ایک آسان ٹول ہے۔ Istio پیمانے پر سافٹ ویئر کو چلانے اور ان کا نظم کرنے کے لیے مختلف قسم کی ٹیکنالوجیز کا استعمال کرتا ہے، بشمول ایپلیکیشن کوڈ کو پیک کرنے کے لیے کنٹینرز اور تعیناتی کے لیے انحصار، اور ان کنٹینرز کو منظم کرنے کے لیے Kubernetes۔ لہذا، Istio کے ساتھ کام کرنے کے لیے آپ کو معلوم ہونا چاہیے کہ ان ٹیکنالوجیز پر مبنی متعدد خدمات کے ساتھ ایک ایپلیکیشن کیسے کام کرتی ہے۔ بغیر اسٹیو اگر یہ ٹولز اور تصورات آپ کو پہلے سے ہی معلوم ہیں تو بلا جھجک اس ٹیوٹوریل کو چھوڑیں اور سیدھا سیکشن پر جائیں۔ Google Kubernetes Engine (GKE) پر Istio انسٹال کرنا یا ایکسٹینشن انسٹال کرنا GKE پر اسٹیو.

یہ ایک مرحلہ وار گائیڈ ہے جہاں ہم ماخذ کوڈ سے لے کر GKE کنٹینر تک پورے عمل کو دیکھیں گے تاکہ آپ کو ایک مثال کے ذریعے ان ٹیکنالوجیز کی بنیادی تفہیم فراہم کی جا سکے۔ آپ یہ بھی دیکھیں گے کہ کس طرح Istio ان ٹیکنالوجیز کی طاقت کا فائدہ اٹھاتا ہے۔ یہ فرض کرتا ہے کہ آپ کنٹینرز، کبرنیٹس، سروس میشز، یا اسٹیو کے بارے میں کچھ نہیں جانتے ہیں۔

ٹاسکس

اس ٹیوٹوریل میں، آپ درج ذیل کام مکمل کریں گے:

  1. متعدد خدمات کے ساتھ ایک سادہ ہیلو ورلڈ ایپلی کیشن سیکھنا۔
  2. سورس کوڈ سے ایپلیکیشن چلائیں۔
  3. درخواست کو کنٹینرز میں پیک کرنا۔
  4. Kubernetes کلسٹر بنانا۔
  5. کنٹینرز کو ایک کلسٹر میں تعینات کرنا۔

شروع کرنے سے پہلے

Kubernetes Engine API کو فعال کرنے کے لیے ہدایات پر عمل کریں:

  1. جائیں۔ Kubernetes انجن کا صفحہ گوگل کلاؤڈ پلیٹ فارم کنسول میں۔
  2. ایک پروجیکٹ بنائیں یا منتخب کریں۔
  3. API اور متعلقہ خدمات کے فعال ہونے تک انتظار کریں۔ اس میں کچھ منٹ لگ سکتے ہیں۔
  4. یقینی بنائیں کہ آپ کے Google Cloud Platform پروجیکٹ کے لیے بلنگ ترتیب دی گئی ہے۔ بلنگ کو فعال کرنے کا طریقہ سیکھیں۔.

اس ٹیوٹوریل میں، آپ کلاؤڈ شیل استعمال کر سکتے ہیں، جو ورچوئل مشین تیار کرتا ہے۔ Google Compute Engine میں g1-small Debian پر مبنی Linux، یا Linux یا macOS کمپیوٹر کے ساتھ۔

آپشن A: کلاؤڈ شیل کا استعمال

کلاؤڈ شیل استعمال کرنے کے فوائد:

  • ازگر 2 اور ازگر 3 ترقیاتی ماحول (بشمول مجازی) مکمل طور پر تشکیل شدہ ہیں۔
  • کمانڈ لائن ٹولز gcloud, ڈاکر, گٹ и کیوبیکٹل، جسے ہم استعمال کریں گے پہلے ہی انسٹال ہیں۔
  • آپ کے پاس انتخاب کرنے کے لیے کئی ہیں۔ ٹیکسٹ ایڈیٹرز:
    1. کوڈ ایڈیٹر۔، جو کلاؤڈ شیل ونڈو کے اوپری حصے میں ترمیم کے آئیکن کے ساتھ کھلتا ہے۔
    2. ایماکس، ویم یا نینو، جو کلاؤڈ شیل میں کمانڈ لائن سے کھلتے ہیں۔

استمال کے لیے کلاؤڈ شیل:

  1. GCP کنسول پر جائیں۔
  2. پریس کلاؤڈ شیل کو چالو کریں۔ (کلاؤڈ شیل کو چالو کریں) جی سی پی کنسول ونڈو کے اوپری حصے میں۔

Istio کے لیے درخواست کی تیاری

نچلے حصے میں GCP کنسول کمانڈ لائن کے ساتھ کلاؤڈ شیل سیشن ایک نئی ونڈو میں کھلے گا۔

Istio کے لیے درخواست کی تیاری

اختیار B: مقامی طور پر کمانڈ لائن ٹولز کا استعمال

اگر آپ لینکس یا میک او ایس چلانے والے کمپیوٹر پر کام کر رہے ہیں، تو آپ کو درج ذیل اجزاء کو ترتیب دینے اور انسٹال کرنے کی ضرورت ہوگی۔

  1. حسب ضرورت بنائیں Python 3 اور Python 2 ترقیاتی ماحول.

  2. Cloud SDK انسٹال کریں۔ کمانڈ لائن ٹول کے ساتھ gcloud.

  3. سیٹ کریں کیوبیکٹل - کام کرنے کے لیے کمانڈ لائن ٹول Kubernetes.

    gcloud components install kubectl

  4. سیٹ کریں ڈاکر کمیونٹی ایڈیشن (CE). آپ کمانڈ لائن ٹول استعمال کریں گے۔ ڈاکرنمونے کی درخواست کے لیے کنٹینر کی تصاویر بنانے کے لیے۔

  5. ٹول انسٹال کریں۔ گٹ ورژن کنٹرولGitHub سے نمونہ کی درخواست حاصل کرنے کے لیے۔

نمونہ کوڈ ڈاؤن لوڈ کریں۔

  1. سورس کوڈ ڈاؤن لوڈ کریں۔ ہیلو سرور:

    git clone https://github.com/GoogleCloudPlatform/istio-samples

  2. مثال کوڈ ڈائرکٹری پر جائیں:

    cd istio-samples/sample-apps/helloserver

متعدد خدمات کے ساتھ ایک ایپلیکیشن کی تلاش

نمونہ ایپلی کیشن Python میں لکھا گیا ہے اور دو اجزاء پر مشتمل ہے جو استعمال کرتے ہوئے بات چیت کرتے ہیں۔ باقی:

  • سرور: ایک اختتامی نقطہ کے ساتھ سادہ سرور حاصل کریں، /، جو کنسول پر "ہیلو ورلڈ" پرنٹ کرتا ہے۔
  • لوڈجن: اسکرپٹ جو ٹریفک بھیجتا ہے۔ سرور، فی سیکنڈ درخواستوں کی ایک قابل ترتیب تعداد کے ساتھ۔

Istio کے لیے درخواست کی تیاری

سورس کوڈ سے ایپلیکیشن چلانا

نمونہ ایپلیکیشن کو دریافت کرنے کے لیے، اسے کلاؤڈ شیل میں یا اپنے کمپیوٹر پر چلائیں۔
1) کیٹلاگ میں istio-samples/sample-apps/helloserver رن سرور:

python3 server/server.py

شروعات میں سرور مندرجہ ذیل ظاہر ہوتا ہے:

INFO:root:Starting server...

2) درخواستیں بھیجنے کے لیے ایک اور ٹرمینل ونڈو کھولیں۔ سرور. اگر آپ کلاؤڈ شیل استعمال کر رہے ہیں، تو دوسرا سیشن کھولنے کے لیے ایڈ آئیکن پر کلک کریں۔
3) کو ایک درخواست بھیجیں۔ سرور:

curl http://localhost:8080

سرور کے جوابات:

Hello World!

4) اس ڈائرکٹری سے جہاں آپ نے نمونہ کوڈ ڈاؤن لوڈ کیا ہے، اس ڈائرکٹری پر جائیں جس میں موجود ہے۔ لوڈجن:

cd YOUR_WORKING_DIRECTORY/istio-samples/sample-apps/helloserver/loadgen

5) درج ذیل ماحولیاتی متغیرات بنائیں:

export SERVER_ADDR=http://localhost:8080
export REQUESTS_PER_SECOND=5

6) تلاش کریں۔ مجازی:

virtualenv --python python3 env

7) ورچوئل ماحول کو چالو کریں:

source env/bin/activate

8) کے لیے ضروریات مقرر کریں۔ لوڈجن:

pip3 install -r requirements.txt

9) تلاش کریں۔ لوڈجن:

python3 loadgen.py

شروعات میں لوڈجن مندرجہ ذیل پیغام کی طرح کچھ دکھاتا ہے:

Starting loadgen: 2019-05-20 10:44:12.448415
5 request(s) complete to http://localhost:8080

ایک اور ٹرمینل ونڈو میں سرور کنسول میں درج ذیل پیغامات کو آؤٹ پٹ کرتا ہے:

127.0.0.1 - - [21/Jun/2019 14:22:01] "GET / HTTP/1.1" 200 -
INFO:root:GET request,
Path: /
Headers:
Host: localhost:8080
User-Agent: python-requests/2.22.0
Accept-Encoding: gzip, deflate
Accept: */*

نیٹ ورکنگ کے نقطہ نظر سے، پوری ایپلیکیشن ایک ہی میزبان (مقامی کمپیوٹر یا کلاؤڈ شیل ورچوئل مشین) پر چلتی ہے۔ اس لیے آپ استعمال کر سکتے ہیں۔ localhostکو درخواستیں بھیجنے کے لیے سرور.
10) روکنا لوڈجن и سرور، درج کریں۔ Ctrl-c ہر ٹرمینل ونڈو میں۔
11) ٹرمینل ونڈو میں لوڈجن ورچوئل ماحول کو غیر فعال کریں:

deactivate

کنٹینرز میں درخواست کی پیکنگ

GKE پر ایپلیکیشن چلانے کے لیے، آپ کو سیمپل ایپلیکیشن - پیک کرنا ہوگا۔ سرور и لوڈجن - کنٹینرز. کنٹینر کسی ایپلیکیشن کو اس کے ماحول سے الگ کرنے کے لیے پیک کرنے کا ایک طریقہ ہے۔

کسی درخواست کو کنٹینر میں پیک کرنے کے لیے، آپ کو ضرورت ہے۔ ڈاکر فائل. ڈاکر فائل ایک ٹیکسٹ فائل ہے جو ایپلیکیشن کے سورس کوڈ اور اس پر انحصار کرنے کے لیے کمانڈز کی وضاحت کرتی ہے۔ ڈاکر کی تصویر۔ ایک بار تعمیر ہونے کے بعد، آپ تصویر کو کنٹینر رجسٹری میں اپ لوڈ کرتے ہیں جیسے کہ Docker Hub یا کنٹینر رجسٹری.

مثال پہلے ہی موجود ہے۔ ڈاکر فائل لیے سرور и لوڈجن تصاویر جمع کرنے کے لیے تمام ضروری احکامات کے ساتھ۔ ذیل میں - ڈاکر فائل لیے سرور:

FROM python:3-slim as base
FROM base as builder
RUN apt-get -qq update 
    && apt-get install -y --no-install-recommends 
        g++ 
    && rm -rf /var/lib/apt/lists/*

# Enable unbuffered logging
FROM base as final
ENV PYTHONUNBUFFERED=1

RUN apt-get -qq update 
    && apt-get install -y --no-install-recommends 
        wget

WORKDIR /helloserver

# Grab packages from builder
COPY --from=builder /usr/local/lib/python3.7/ /usr/local/lib/python3.7/

# Add the application
COPY . .

EXPOSE 8080
ENTRYPOINT [ "python", "server.py" ]

  • ٹیم ازگر سے: 3-بیس کے طور پر پتلا ڈوکر کو تازہ ترین استعمال کرنے کو کہتا ہے۔ Python 3 تصویر ایک بنیاد کے طور پر.
  • ٹیم کاپی کریں۔ . سورس فائلوں کو موجودہ ورکنگ ڈائرکٹری میں کاپی کرتا ہے (صرف ہمارے معاملے میں server.py) کنٹینر کے فائل سسٹم میں۔
  • ENTRYPOINT اس کمانڈ کی وضاحت کرتا ہے جو کنٹینر کو شروع کرنے کے لیے استعمال ہوتا ہے۔ ہمارے معاملے میں، یہ کمانڈ تقریباً وہی ہے جو آپ چلاتے تھے۔ server.py سورس کوڈ سے۔
  • ٹیم ایکسپوز اشارہ کرتا ہے کہ سرور پورٹ کے ذریعے ڈیٹا کا انتظار کر رہا ہے۔ 8080. یہ ٹیم نہیں ہے۔ بندرگاہیں فراہم کرتا ہے۔. یہ کچھ قسم کی دستاویزات ہیں جو بندرگاہ کو کھولنے کے لیے درکار ہیں۔ 8080 کنٹینر شروع کرتے وقت.

آپ کی درخواست کو کنٹینرائز کرنے کی تیاری

1) درج ذیل ماحولیاتی متغیرات مرتب کریں۔ بدل دیں۔ PROJECT_ID آپ کے GCP پروجیکٹ ID پر۔

export PROJECT_ID="PROJECT_ID"

export GCR_REPO="preparing-istio"

اقدار کا استعمال کرتے ہوئے PROJECT_ID и GCR_REPO جب آپ اسے بناتے ہیں تو آپ ڈوکر امیج کو ٹیگ کرتے ہیں اور اسے نجی کنٹینر رجسٹری میں دھکیل دیتے ہیں۔

2) کمانڈ لائن ٹول کے لیے ڈیفالٹ GCP پروجیکٹ سیٹ کریں۔ gcloud.

gcloud config set project $PROJECT_ID

3) کمانڈ لائن ٹول کے لیے ڈیفالٹ زون سیٹ کریں۔ gcloud.

gcloud config set compute/zone us-central1-b

4) یقینی بنائیں کہ کنٹینر رجسٹری سروس GCP پروجیکٹ میں فعال ہے۔

gcloud services enable containerregistry.googleapis.com

کنٹینرائزیشن سرور

  1. ڈائرکٹری پر جائیں جہاں مثال واقع ہے۔ سرور:

    cd YOUR_WORKING_DIRECTORY/istio-samples/sample-apps/helloserver/server/

  2. استعمال کرتے ہوئے تصویر کو جمع کریں۔ ڈاکر فائل اور ماحولیاتی متغیرات جو آپ نے پہلے بیان کیے ہیں:

    docker build -t gcr.io/$PROJECT_ID/$GCR_REPO/helloserver:v0.0.1 .

پیرامیٹر -t Docker ٹیگ کی نمائندگی کرتا ہے۔ یہ اس تصویر کا نام ہے جسے آپ کنٹینر کو تعینات کرتے وقت استعمال کرتے ہیں۔

  1. تصویر کو کنٹینر رجسٹری میں اپ لوڈ کریں:
    docker push gcr.io/$PROJECT_ID/$GCR_REPO/helloserver:v0.0.1

لوڈجن کا کنٹینرائزیشن

1) ڈائرکٹری پر جائیں جہاں مثال واقع ہے۔ لوڈجن:

cd ../loadgen

2) تصویر جمع کریں:

docker build -t gcr.io/$PROJECT_ID/$GCR_REPO/loadgen:v0.0.1 .

3) تصویر کو کنٹینر رجسٹری میں اپ لوڈ کریں:

docker push gcr.io/$PROJECT_ID/$GCR_REPO/loadgen:v0.0.1

تصاویر کی فہرست دیکھیں

مخزن میں تصاویر کی فہرست کا جائزہ لیں اور تصدیق کریں کہ تصاویر اپ لوڈ ہو چکی ہیں:

gcloud container images list --repository gcr.io/$PROJECT_ID/preparing-istio

کمانڈ نئی اپ لوڈ کردہ تصاویر کے نام دکھاتی ہے:

NAME
gcr.io/PROJECT_ID/preparing-istio/helloserver
gcr.io/PROJECT_ID/preparing-istio/loadgen

ایک GKE کلسٹر بنانا۔

یہ کنٹینرز کلاؤڈ شیل ورچوئل مشین یا کمانڈ کے ساتھ کمپیوٹر پر چلائے جا سکتے ہیں۔ ڈاکر رن. لیکن پیداواری ماحول میں، آپ کو کنٹینرز کو مرکزی طور پر آرکیسٹریٹ کرنے کا ایک طریقہ درکار ہوتا ہے۔ مثال کے طور پر، آپ کو ایک ایسے سسٹم کی ضرورت ہے جو اس بات کو یقینی بنائے کہ کنٹینرز ہمیشہ چل رہے ہیں، اور اگر ٹریفک میں اضافہ ہوتا ہے تو آپ کو اضافی کنٹینر کی مثالوں کو بڑھانے اور اسپن کرنے کے طریقے کی ضرورت ہے۔

کنٹینرائزڈ ایپلیکیشنز کو چلانے کے لیے آپ استعمال کر سکتے ہیں۔ جی کے ای۔. GKE ایک کنٹینر آرکیسٹریشن پلیٹ فارم ہے جو ورچوئل مشینوں کو کلسٹر میں اکٹھا کرتا ہے۔ ہر ورچوئل مشین کو نوڈ کہا جاتا ہے۔ GKE کلسٹرز اوپن سورس Kubernetes کلسٹر مینجمنٹ سسٹم پر مبنی ہیں۔ Kubernetes کلسٹر کے ساتھ تعامل کے لیے میکانزم فراہم کرتا ہے۔

GKE کلسٹر بنانا:

1) ایک کلسٹر بنائیں:

gcloud container clusters create istioready 
  --cluster-version latest 
  --machine-type=n1-standard-2 
  --num-nodes 4

ٹیم gcloud GCP پروجیکٹ اور آپ کے بتائے ہوئے ڈیفالٹ زون میں ایک istioready کلسٹر بناتا ہے۔ Istio چلانے کے لیے، ہم کم از کم 4 نوڈس اور ایک ورچوئل مشین رکھنے کی تجویز کرتے ہیں۔ n1-معیاری-2.

ٹیم چند منٹوں میں کلسٹر بناتی ہے۔ جب کلسٹر تیار ہوتا ہے، تو کمانڈ کچھ اس طرح آؤٹ پٹ کرتی ہے۔ сообщение.

2) کمانڈ لائن ٹول میں اسناد فراہم کریں۔ کیوبیکٹلکلسٹر کا انتظام کرنے کے لیے اسے استعمال کرنا:

gcloud container clusters get-credentials istioready

3) اب آپ Kubernetes کے ساتھ بات چیت کر سکتے ہیں۔ کیوبیکٹل. مثال کے طور پر، درج ذیل کمانڈ سے نوڈس کی حیثیت معلوم کی جا سکتی ہے۔

kubectl get nodes

کمانڈ نوڈس کی فہرست تیار کرتی ہے:

NAME                                       STATUS   ROLES    AGE    VERSION
gke-istoready-default-pool-dbeb23dc-1vg0   Ready    <none>   99s    v1.13.6-gke.13
gke-istoready-default-pool-dbeb23dc-36z5   Ready    <none>   100s   v1.13.6-gke.13
gke-istoready-default-pool-dbeb23dc-fj7s   Ready    <none>   99s    v1.13.6-gke.13
gke-istoready-default-pool-dbeb23dc-wbjw   Ready    <none>   99s    v1.13.6-gke.13

Kubernetes کلیدی تصورات

خاکہ GKE پر ایک درخواست دکھاتا ہے:

Istio کے لیے درخواست کی تیاری

GKE میں کنٹینرز لگانے سے پہلے، Kubernetes کے کلیدی تصورات جانیں۔ اگر آپ مزید جاننا چاہتے ہیں تو بالکل آخر میں لنکس موجود ہیں۔

  • نوڈس اور کلسٹرز. GKE میں، نوڈ ایک ورچوئل مشین ہے۔ دوسرے Kubernetes پلیٹ فارمز پر، ایک نوڈ کمپیوٹر یا ورچوئل مشین ہو سکتا ہے۔ کلسٹر نوڈس کا ایک مجموعہ ہے جسے ایک اکائی سمجھا جا سکتا ہے جہاں آپ کنٹینرائزڈ ایپلیکیشن لگاتے ہیں۔
  • پھلیاں. Kubernetes میں، کنٹینرز پھلیوں میں چلتے ہیں. Kubernetes میں Pod ایک ناقابل تقسیم اکائی ہے۔ ایک پوڈ میں ایک یا زیادہ کنٹینرز ہوتے ہیں۔ آپ سرور کنٹینرز تعینات کرتے ہیں اور لوڈجن علیحدہ پھلیوں میں. جب ایک پوڈ میں کئی کنٹینرز ہوتے ہیں (مثال کے طور پر، ایک ایپلیکیشن سرور اور پراکسی سرور)، کنٹینرز کو ایک واحد ادارے کے طور پر منظم کیا جاتا ہے اور پوڈ کے وسائل کا اشتراک کیا جاتا ہے۔
  • تعیناتیاں. Kubernetes میں، ایک تعیناتی ایک ایسی چیز ہے جو ایک جیسی پھلیوں کا مجموعہ ہے۔ تعیناتی کلسٹر نوڈس میں تقسیم شدہ پوڈز کی متعدد نقلیں شروع کرتی ہے۔ تعیناتی خود بخود ان پوڈز کی جگہ لے لیتی ہے جو ناکام ہو چکے ہیں یا غیر جوابدہ ہیں۔
  • Kubernetes سروس. GKE میں ایپلیکیشن کوڈ چلاتے وقت، کے درمیان کنکشن لوڈجن и سرور. جب آپ نے کلاؤڈ شیل ورچوئل مشین یا ڈیسک ٹاپ پر خدمات شروع کیں تو آپ نے درخواستیں بھیجیں۔ سرور اس کے بعد مقامی ہسٹسٹ: 8080. جی کے ای میں تعینات ہونے کے بعد، پوڈز کو دستیاب نوڈس پر عمل میں لایا جاتا ہے۔ پہلے سے طے شدہ طور پر، آپ کو اس پر کوئی کنٹرول نہیں ہے کہ پوڈ کس نوڈ پر چل رہا ہے، لہذا آپ پھلیاں کوئی مستقل IP پتے نہیں۔
    کے لیے ایک IP ایڈریس حاصل کرنے کے لیے سرور، آپ کو پوڈ کے اوپر ایک نیٹ ورک تجرید کی وضاحت کرنے کی ضرورت ہے۔ یہی بات ہے۔ Kubernetes سروس. Kubernetes سروس پوڈز کے سیٹ کے لیے ایک مستقل اختتامی نقطہ فراہم کرتی ہے۔ ایسے چند ہی ہیں خدمات کی اقسام. سرور استعمال کرتا ہے لوڈ بیلنسرجو رابطہ کرنے کے لیے ایک بیرونی IP پتہ فراہم کرتا ہے۔ سرور کلسٹر کے باہر سے۔
    Kubernetes میں ایک بلٹ ان DNS سسٹم بھی ہے جو DNS ناموں کو تفویض کرتا ہے (مثال کے طور پر، helloserver.default.cluster.local) خدمات۔ اس کی بدولت، کلسٹر کے اندر موجود پوڈز ایک مستقل پتے پر کلسٹر میں موجود دیگر پھلیوں کے ساتھ بات چیت کرتے ہیں۔ DNS کا نام کلسٹر سے باہر استعمال نہیں کیا جا سکتا، جیسے کلاؤڈ شیل میں یا کمپیوٹر پر۔

Kubernetes ظاہر ہوتا ہے۔

جب آپ نے سورس سے ایپلیکیشن چلائی تو آپ نے لازمی کمانڈ کا استعمال کیا۔ پادری 3

server.py

لازمی ایک فعل کا مطلب ہے: "یہ کرو۔"

Kubernetes استعمال کرتا ہے۔ اعلانیہ ماڈل. اس کا مطلب یہ ہے کہ ہم Kubernetes کو یہ نہیں بتا رہے ہیں کہ کیا کرنا ہے، بلکہ مطلوبہ حالت کو بیان کر رہے ہیں۔ مثال کے طور پر، Kubernetes ضرورت کے مطابق پوڈ کو شروع اور روکتا ہے تاکہ یہ یقینی بنایا جا سکے کہ سسٹم کی اصل حالت مطلوبہ حالت سے ملتی ہے۔

آپ مینی فیسٹ یا فائلوں میں مطلوبہ حالت کی نشاندہی کرتے ہیں۔ یامل. YAML فائل میں ایک یا زیادہ Kubernetes اشیاء کے لیے وضاحتیں ہوتی ہیں۔

مثال کے لیے YAML فائل ہے۔ سرور и لوڈجن. ہر YAML فائل تعیناتی آبجیکٹ اور Kubernetes سروس کی مطلوبہ حالت کی وضاحت کرتی ہے۔

server.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: helloserver
spec:
  selector:
    matchLabels:
      app: helloserver
  replicas: 1
  template:
    metadata:
      labels:
        app: helloserver
    spec:
      terminationGracePeriodSeconds: 5
      restartPolicy: Always
      containers:
      - name: main
        image: gcr.io/google-samples/istio/helloserver:v0.0.1
        imagePullPolicy: Always

  • قسم اعتراض کی قسم کی نشاندہی کرتا ہے۔
  • metadata.name تعیناتی کا نام بتاتا ہے۔
  • پہلا میدان نمونہ مطلوبہ حالت کی وضاحت پر مشتمل ہے۔
  • spec.replicas پھلیوں کی مطلوبہ تعداد کی نشاندہی کرتا ہے۔
  • سیکشن spec.template پوڈ ٹیمپلیٹ کی وضاحت کرتا ہے۔ پوڈ کی تفصیلات میں ایک فیلڈ ہے۔ تصویر، جو اس تصویر کا نام بتاتا ہے جسے کنٹینر رجسٹری سے نکالنے کی ضرورت ہے۔

سروس کی تعریف اس طرح کی گئی ہے:

apiVersion: v1
kind: Service
metadata:
  name: hellosvc
spec:
  type: LoadBalancer
  selector:
    app: helloserver
  ports:
  - name: http
    port: 80
    targetPort: 8080

  • لوڈ بیلنسر: کلائنٹس لوڈ بیلنسر کے آئی پی ایڈریس پر درخواستیں بھیجتے ہیں، جس کا آئی پی ایڈریس مستقل ہے اور کلسٹر کے باہر سے قابل رسائی ہے۔
  • ٹارگٹ پورٹ: جیسا کہ آپ کو یاد ہے، ٹیم ایکسپوز 8080 в ڈاکر فائل بندرگاہیں فراہم نہیں کیں۔ آپ بندرگاہ فراہم کرتے ہیں۔ 8080تاکہ آپ کنٹینر سے رابطہ کر سکیں سرور کلسٹر کے باہر. ہمارے معاملے میں hellosvc.default.cluster.local:80 (مختصر نام: ہیلوس وی سی) بندرگاہ کے مساوی ہے۔ 8080 Pod IP پتے ہیلو سرور.
  • پورٹ: یہ وہ پورٹ نمبر ہے جہاں کلسٹر میں دیگر سروسز درخواستیں بھیجیں گی۔

loadgen.yaml

پر تعیناتی اعتراض loadgen.yaml کی طرح نظر آنا server.yaml. فرق یہ ہے کہ تعیناتی آبجیکٹ میں ایک سیکشن ہوتا ہے۔ env. یہ ماحولیاتی متغیرات کی وضاحت کرتا ہے جن کی ضرورت ہے۔ لوڈجن اور جسے آپ نے منبع سے ایپلیکیشن چلاتے وقت انسٹال کیا تھا۔

apiVersion: apps/v1
kind: Deployment
metadata:
  name: loadgenerator
spec:
  selector:
    matchLabels:
      app: loadgenerator
  replicas: 1
  template:
    metadata:
      labels:
        app: loadgenerator
    spec:
      terminationGracePeriodSeconds: 5
      restartPolicy: Always
      containers:
      - name: main
        image: gcr.io/google-samples/istio/loadgen:v0.0.1
        imagePullPolicy: Always
        env:
        - name: SERVER_ADDR
          value: "http://hellosvc:80/"
        - name: REQUESTS_PER_SECOND
          value: "10"
        resources:
          requests:
            cpu: 300m
            memory: 256Mi
          limits:
            cpu: 500m
            memory: 512Mi

وقت لوڈجن فیلڈ کے لیے آنے والی درخواستوں کو قبول نہیں کرتا ہے۔ قسم اشارہ کیا کلسٹر آئی پی. یہ قسم ایک مستقل IP پتہ فراہم کرتی ہے جسے کلسٹر میں خدمات استعمال کر سکتی ہیں، لیکن یہ IP پتہ بیرونی کلائنٹس کے سامنے نہیں آتا ہے۔

apiVersion: v1
kind: Service
metadata:
  name: loadgensvc
spec:
  type: ClusterIP
  selector:
    app: loadgenerator
  ports:
  - name: http
    port: 80
    targetPort: 8080

GKE میں کنٹینرز کی تعیناتی

1) ڈائرکٹری پر جائیں جہاں مثال واقع ہے۔ سرور:

cd YOUR_WORKING_DIRECTORY/istio-samples/sample-apps/helloserver/server/

2) کھلا server.yaml ٹیکسٹ ایڈیٹر میں۔
3) فیلڈ میں نام بدل دیں۔ تصویر آپ کی ڈاکر امیج کے نام پر۔

image: gcr.io/PROJECT_ID/preparing-istio/helloserver:v0.0.1

بدل دیں۔ PROJECT_ID آپ کے GCP پروجیکٹ ID پر۔
4) محفوظ کریں اور بند کریں۔ server.yaml.
5) YAML فائل کوبرنیٹس پر تعینات کریں:

kubectl apply -f server.yaml

کامیاب تکمیل پر، کمانڈ مندرجہ ذیل کوڈ تیار کرتا ہے:

deployment.apps/helloserver created
service/hellosvc created

6) ڈائریکٹری پر جائیں جہاں لوڈجن:

cd ../loadgen

7) کھلا loadgen.yaml ٹیکسٹ ایڈیٹر میں۔
8) فیلڈ میں نام بدل دیں۔ تصویر آپ کی ڈاکر امیج کے نام پر۔

image: gcr.io/PROJECT_ID/preparing-istio/loadgenv0.0.1

بدل دیں۔ PROJECT_ID آپ کے GCP پروجیکٹ ID پر۔
9) محفوظ کریں اور بند کریں۔ loadgen.yaml، ٹیکسٹ ایڈیٹر بند کریں۔
10) YAML فائل کوبرنیٹس پر تعینات کریں:

kubectl apply -f loadgen.yaml

کامیاب تکمیل پر، کمانڈ مندرجہ ذیل کوڈ تیار کرتا ہے:

deployment.apps/loadgenerator created
service/loadgensvc created

11) پھلیوں کی حالت چیک کریں:

kubectl get pods

کمانڈ حیثیت کو ظاہر کرتا ہے:

NAME                             READY   STATUS    RESTARTS   AGE
helloserver-69b9576d96-mwtcj     1/1     Running   0          58s
loadgenerator-774dbc46fb-gpbrz   1/1     Running   0          57s

12) پوڈ سے ایپلیکیشن لاگز نکالیں۔ لوڈجن. بدل دیں۔ POD_ID پچھلے جواب سے شناخت کنندہ کو۔

kubectl logs loadgenerator-POD_ID

13) بیرونی IP پتے حاصل کریں۔ ہیلوس وی سی:

kubectl get service

کمانڈ کا جواب کچھ اس طرح لگتا ہے:

NAME         TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)        AGE
hellosvc     LoadBalancer   10.81.15.158   192.0.2.1       80:31127/TCP   33m
kubernetes   ClusterIP      10.81.0.1      <none>          443/TCP        93m
loadgensvc   ClusterIP      10.81.15.155   <none>          80/TCP         4m52s

14) کو ایک درخواست بھیجیں۔ ہیلوس وی سی: بدلنا EXTERNAL_IP بیرونی IP پتے پر ہیلوس وی سی.

curl http://EXTERNAL_IP

آئیے اسٹیو پر چلتے ہیں۔

آپ کے پاس پہلے سے ہی ایک درخواست GKE پر تعینات ہے۔ لوڈجن Kubernetes DNS استعمال کر سکتے ہیں (hellosvc:80) کو درخواستیں بھیجنے کے لیے سروراور آپ کو درخواستیں بھیج سکتے ہیں۔ سرور بیرونی IP ایڈریس کے ذریعے۔ اگرچہ Kubernetes میں بہت سی خصوصیات ہیں، لیکن خدمات کے بارے میں کچھ معلومات غائب ہیں:

  • خدمات کیسے تعامل کرتی ہیں؟ خدمات کے درمیان کیا تعلقات ہیں؟ خدمات کے درمیان ٹریفک کیسے چلتا ہے؟ کیا آپ اس سے واقف ہیں؟ لوڈجن کو درخواستیں بھیجتا ہے۔ سرور، لیکن تصور کریں کہ آپ درخواست کے بارے میں کچھ نہیں جانتے ہیں۔ ان سوالات کا جواب دینے کے لیے، آئیے GKE میں چلنے والے پوڈز کی فہرست دیکھیں۔
  • میٹرکس. کتنی دیر تک سرور آنے والی درخواست کا جواب دیتا ہے؟ سرور کو فی سیکنڈ کتنی درخواستیں موصول ہوتی ہیں؟ کیا یہ غلطی کے پیغامات دیتا ہے؟
  • سیکیورٹی کی معلومات. کے درمیان ٹریفک لوڈجن и سرور صرف گزرتا ہے HTTP یا کی طرف سے mTLS?

Istio ان تمام سوالات کے جوابات دیتا ہے۔ ایسا کرنے کے لیے، اسٹیو ایک سائڈ کار پراکسی رکھتا ہے۔ ایلچی ہر پھلی میں. ایلچی پراکسی تمام آنے والے اور جانے والے ٹریفک کو ایپلیکیشن کنٹینرز تک روکتی ہے۔ اس کا مطلب ہے کہ سرور и لوڈجن سائڈکار پراکسی ایلچی، اور تمام ٹریفک کے ذریعے وصول کریں۔ لوڈجن к سرور ایلچی پراکسی کے ذریعے جاتا ہے۔

ایلچی پراکسیوں کے درمیان رابطے ایک سروس میش بناتے ہیں۔ سروس میش فن تعمیر Kubernetes کے اوپر کنٹرول کی ایک تہہ فراہم کرتا ہے۔

Istio کے لیے درخواست کی تیاری

چونکہ ایلچی پراکسی ان کے اپنے کنٹینرز میں چلتی ہیں، اس لیے Istio کو GKE کلسٹر کے اوپر انسٹال کیا جا سکتا ہے جس میں ایپلیکیشن کوڈ میں تقریباً کوئی تبدیلی نہیں کی جا سکتی۔ لیکن آپ نے اپنی درخواست کو Istio کے زیر انتظام کرنے کے لیے کچھ کام کیا ہے:

  • تمام کنٹینرز کے لیے خدمات۔ تعیناتیوں کو سرور и لوڈجن Kubernetes سروس سے منسلک۔ یہاں تک کہ لوڈجن, جو آنے والی درخواستیں وصول نہیں کرتی ہیں، وہاں ایک سروس موجود ہے۔
  • خدمات میں بندرگاہوں کے نام ہونے چاہئیں۔ اگرچہ GKE میں سروس پورٹس کو بے نام چھوڑا جا سکتا ہے، لیکن Istio آپ کو بتانے کا تقاضا کرتا ہے۔ بندرگاہ کا نام اس کے پروٹوکول کے مطابق۔ YAML فائل میں پورٹ کے لیے سرور کہا جاتا ہے۔ HTTPکیونکہ سرور پروٹوکول استعمال کرتا ہے۔ HTTP... اگر سروس استعمال کیا جاتا ہے جی آر پی سی، آپ بندرگاہ کا نام دیں گے۔ grpc.
  • تعیناتیوں کو جھنڈا لگایا گیا ہے۔ لہذا، آپ Istio کی ٹریفک مینجمنٹ کی خصوصیات استعمال کر سکتے ہیں، جیسے کہ ٹریفک کو ایک ہی سروس کے ورژن کے درمیان تقسیم کرنا۔

Istio انسٹال کرنا

Istio کو انسٹال کرنے کے دو طریقے ہیں۔ کر سکتے ہیں۔ GKE ایکسٹینشن پر Istio کو فعال کریں۔ یا Istio کا اوپن سورس ورژن انسٹال کریں۔ کلسٹر پر. GKE پر Istio کے ساتھ، آپ GKE کلسٹر لائف سائیکل میں Istio تنصیبات اور اپ گریڈ کو آسانی سے منظم کر سکتے ہیں۔ اگر آپ Istio کا تازہ ترین ورژن یا اپنے Istio کنٹرول پینل کی ترتیب پر زیادہ کنٹرول چاہتے ہیں تو GKE ایکسٹینشن پر Istio کے بجائے اوپن سورس ورژن انسٹال کریں۔ نقطہ نظر پر فیصلہ کرنے کے لئے، مضمون پڑھیں کیا مجھے GKE پر Istio کی ضرورت ہے؟.

ایک آپشن منتخب کریں، مناسب گائیڈ کا جائزہ لیں، اور اپنے کلسٹر پر Istio انسٹال کرنے کے لیے ہدایات پر عمل کریں۔ اگر آپ اپنی نئی تعینات کردہ ایپلیکیشن کے ساتھ Istio استعمال کرنا چاہتے ہیں، سائڈکار کے نفاذ کو فعال کریں۔ نام کی جگہ کے لیے پہلے سے طے شدہ.

صفائی

اس ٹیوٹوریل میں استعمال کیے گئے وسائل کے لیے آپ کے Google Cloud Platform اکاؤنٹ سے چارج ہونے سے بچنے کے لیے، Istio انسٹال کرنے اور سیمپل ایپلیکیشن کے ساتھ کھیلنے کے بعد کنٹینر کلسٹر کو حذف کر دیں۔ یہ کلسٹر کے تمام وسائل کو ہٹا دے گا، جیسے کمپیوٹ انسٹینس، ڈسک، اور نیٹ ورک کے وسائل۔

اس کے بعد کیا ہے؟

ماخذ: www.habr.com

نیا تبصرہ شامل کریں