Istio لاء درخواست تيار ڪرڻ

Istio لاء درخواست تيار ڪرڻ

Istio ورهايل ايپليڪيشنن کي ڳنڍڻ، محفوظ ڪرڻ ۽ نگراني ڪرڻ لاء هڪ آسان اوزار آهي. Istio پيماني تي سافٽ ويئر کي هلائڻ ۽ منظم ڪرڻ لاءِ مختلف ٽيڪنالاجيون استعمال ڪري ٿو، جن ۾ ڪنٽينرز کي پيڪيج ڪرڻ لاءِ ايپليڪيشن ڪوڊ ۽ ڊبليشن لاءِ انحصار، ۽ ڪبرنيٽس انهن ڪنٽينرز کي منظم ڪرڻ لاءِ. تنهن ڪري، Istio سان ڪم ڪرڻ لاءِ توهان کي ڄاڻڻ گهرجي ته هڪ ايپليڪيشن ڪيترين ئي خدمتن سان گڏ انهن ٽيڪنالاجي جي بنياد تي ڪيئن ڪم ڪري ٿي بغير اسٽيو. جيڪڏهن اهي اوزار ۽ تصورات توهان کي اڳ ۾ ئي واقف آهن، آزاد محسوس ڪريو هن سبق کي ڇڏي ڏيو ۽ سڌو وڃو سيڪشن ڏانهن Google Kubernetes Engine (GKE) تي Istio انسٽال ڪرڻ يا ايڪسٽينشن کي انسٽال ڪرڻ GKE تي Istio.

ھيءُ ھڪ قدم بہ قدم ھدايت آھي جتي اسان سڄي عمل ۾ سورس ڪوڊ کان وٺي GKE ڪنٽينر تائين ھلنداسين توھان کي ھڪڙي مثال ذريعي انھن ٽيڪنالاجين جي بنيادي سمجھ ڏيڻ لاءِ. توهان پڻ ڏسندا سين ته ڪيئن Istio انهن ٽيڪنالاجي جي طاقت کي استعمال ڪري ٿو. اهو فرض ڪري ٿو ته توهان ڪنٽينرز، ڪبرنيٽس، سروس ميشز، يا اسٽيو بابت ڪجھ به نٿا ڄاڻو.

ڪمن

هن سبق ۾، توهان هيٺيان ڪم مڪمل ڪندا:

  1. سکيا هڪ سادي هيلو ورلڊ ايپليڪيشن ڪيترن ئي خدمتن سان.
  2. ماخذ ڪوڊ مان ايپليڪيشن کي هلايو.
  3. ايپليڪيشن کي پيڪنگنگ ڪنٽينرز ۾.
  4. ڪبرنيٽس ڪلستر ٺاهڻ.
  5. ڪنٽينرز کي ڪلستر ۾ ترتيب ڏيڻ.

توهان کان پهرين شروع ٿي

Kubernetes Engine API کي فعال ڪرڻ لاءِ هدايتن تي عمل ڪريو:

  1. ڏانھن وڃو ڪبرنيٽس انجڻ جو صفحو Google Cloud پليٽ فارم ڪنسول ۾.
  2. ھڪڙو منصوبو ٺاھيو يا چونڊيو.
  3. انتظار ڪريو جيستائين API ۽ لاڳاپيل خدمتون فعال ٿين. اهو ڪجهه منٽ وٺي سگھي ٿو.
  4. پڪ ڪريو ته توهان جي گوگل ڪلائوڊ پليٽ فارم پروجيڪٽ لاءِ بلنگ قائم ڪئي وئي آهي. سکو ته ڪيئن بلنگ کي فعال ڪجي.

ھن سبق ۾، توھان استعمال ڪري سگھو ٿا Cloud Shell، جيڪو تيار ڪري ٿو ورچوئل مشين g1-small Google Compute Engine ۾ ديبين جي بنياد تي لينڪس، يا لينڪس يا ميڪوس ڪمپيوٽر سان.

اختيار A: Cloud شيل استعمال ڪندي

Cloud Shell استعمال ڪرڻ جا فائدا:

  • پٿون 2 ۽ پٿون 3 ڊولپمينٽ ماحول (بشمول مجازي) مڪمل طور تي ترتيب ڏنل آهن.
  • ڪمانڊ لائين اوزار ڪلائوڊ, گھڻي, اٿي и ڪيوبڪبل، جيڪي اسان استعمال ڪنداسين اڳ ۾ ئي نصب ٿيل آهن.
  • توھان کي چونڊڻ لاء ڪيترائي آھن ٽيڪسٽ ايڊيٽر:
    1. ڪوڊ ايڊيٽر، جيڪو کلاؤڊ شيل ونڊو جي چوٽي تي ايڊٽ آئڪن سان کلي ٿو.
    2. Emacs، Vim يا نانو، جيڪي ڪلائوڊ شيل ۾ ڪمانڊ لائن مان کليل آهن.

استعمال ڪرڻ بادل شيل:

  1. GCP ڪنسول ڏانھن وڃو.
  2. پريس Cloud Shell کي چالو ڪريو (Activate Cloud Shell) GCP ڪنسول ونڊو جي چوٽي تي.

Istio لاء درخواست تيار ڪرڻ

هيٺئين حصي ۾ GCP ڪنسول هڪ ڪلائوڊ شيل سيشن هڪ ڪمانڊ لائن سان هڪ نئين ونڊو ۾ کلي ويندو.

Istio لاء درخواست تيار ڪرڻ

اختيار ب: استعمال ڪندي ڪمانڊ لائين اوزار مقامي طور تي

جيڪڏهن توهان لينڪس يا macOS تي هلندڙ ڪمپيوٽر تي ڪم ڪري رهيا آهيو، توهان کي هيٺين حصن کي ترتيب ڏيڻ ۽ انسٽال ڪرڻ جي ضرورت پوندي.

  1. حسب ضرورت پٿون 3 ۽ پٿون 2 ڊولپمينٽ ماحول.

  2. Cloud SDK انسٽال ڪريو ڪمانڊ لائن اوزار سان ڪلائوڊ.

  3. سيٽ ڪيوبڪبل - ڪمانڊ لائن اوزار سان ڪم ڪرڻ لاء ڪوبنيٿس.

    gcloud components install kubectl

  4. سيٽ Docker Community Edition (CE). توهان ڪمانڊ لائن ٽول استعمال ڪندا گھڻينموني ايپليڪيشن لاء ڪنٽينر تصويرون ٺاهڻ لاء.

  5. اوزار انسٽال ڪريو Git ورجن ڪنٽرولGitHub کان نموني ايپليڪيشن حاصل ڪرڻ لاء.

نموني ڪوڊ ڊائون لوڊ ڪريو

  1. ڊائون لوڊ ڪريو سورس ڪوڊ هيلو سرور:

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

  2. مثال ڪوڊ ڊاريڪٽري ڏانھن وڃو:

    cd istio-samples/sample-apps/helloserver

ڪيترن ئي خدمتن سان هڪ ايپليڪيشن جي ڳولا

نموني ايپليڪيشن Python ۾ لکيل آهي ۽ ٻن حصن تي مشتمل آهي جيڪي استعمال ڪندي ڪم ڪن ٿا REST:

  • سرور: هڪ آخري پوائنٽ سان سادي سرور حاصل ڪريو، /، جيڪو پرنٽ ڪري ٿو "هيلو ورلڊ" ڪنسول ڏانهن.
  • لوڊ ڪرڻ: اسڪرپٽ جيڪو ٽرئفڪ موڪلي ٿو سرور, في سيڪنڊ درخواستن جي ترتيب ڏيڻ واري تعداد سان.

Istio لاء درخواست تيار ڪرڻ

ماخذ ڪوڊ مان ايپليڪيشن هلائڻ

نموني ايپليڪيشن کي ڳولڻ لاء، ان کي Cloud Shell ۾ يا توهان جي ڪمپيوٽر تي هلائي.
1) فهرست ۾ istio-samples/sample-apps/helloserver ڊوڙڻ سرور:

python3 server/server.py

شروعات ۾ سرور هيٺ ڏنل ڏيکاريل آهي:

INFO:root:Starting server...

2) درخواست موڪلڻ لاءِ ٻي ٽرمينل ونڊو کوليو سرور. جيڪڏھن توھان Cloud Shell استعمال ڪري رھيا آھيو، ٻيو سيشن کولڻ لاءِ Add آئڪن تي ڪلڪ ڪريو.
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: */*

ھڪڙي نيٽ ورڪنگ جي نقطي نظر کان، سڄي ايپليڪيشن ھڪڙي ھوسٽ تي ھلندي آھي (مقامي ڪمپيوٽر يا ڪلائوڊ شيل ورچوئل مشين). تنهن ڪري توهان استعمال ڪري سگهو ٿا مقامي هلوڏانهن درخواستون موڪلڻ لاء سرور.
10) روڪڻ لوڊ ڪرڻ и سرورداخل ڪريو Ctrl-c هر ٽرمينل ونڊو ۾.
11) ٽرمينل ونڊو ۾ لوڊ ڪرڻ مجازي ماحول کي غير فعال ڪريو:

deactivate

ڪنٽينرز ۾ ايپليڪيشن پيڪنگ

GKE تي ايپليڪيشن کي هلائڻ لاءِ، توهان کي پيڪيج ڪرڻ جي ضرورت پوندي مثال ايپليڪيشن - سرور и لوڊ ڪرڻ - اندر آهن. هڪ ڪنٽينر هڪ ايپليڪيشن کي پيڪ ڪرڻ جو هڪ طريقو آهي ان کي ماحول کان الڳ ڪرڻ لاءِ.

ھڪڙي ايپليڪيشن کي ھڪڙي ڪنٽينر ۾ پيڪ ڪرڻ لاء، توھان کي ضرورت آھي Dockerfile. Dockerfile هڪ ٽيڪسٽ فائل آهي جيڪا ايپليڪيشن جي سورس ڪوڊ ۽ ان جي انحصار کي تعمير ڪرڻ لاءِ حڪمن جي وضاحت ڪري ٿي ڊاکر تصوير. هڪ دفعو ٺهيل، توهان تصوير کي ڪنٽينر رجسٽري تي اپلوڊ ڪريو جهڙوڪ ڊڪر هب يا ڪنٽينر رجسٽري.

مثال اڳ ۾ ئي آهي Dockerfile لاء سرور и لوڊ ڪرڻ تصويرون گڏ ڪرڻ لاء سڀني ضروري حڪمن سان. هيٺ - Dockerfile لاء سرور:

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 config set project $PROJECT_ID

3) ڪمانڊ لائن ٽول لاءِ ڊفالٽ زون سيٽ ڪريو ڪلائوڊ.

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. استعمال ڪندي تصوير کي گڏ ڪريو Dockerfile ۽ ماحولياتي متغير جيڪي توھان اڳ بيان ڪيا آھن:

    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 ڪلستر ٺاهڻ.

اهي ڪنٽينر هلائي سگھجن ٿا ڪلائوڊ شيل ورچوئل مشين تي يا ڪمپيوٽر تي ڪمانڊ سان ڊاکر هلائيندڙ. پر هڪ پيداوار واري ماحول ۾، توهان کي مرڪزي طور تي ڪنٽينرز کي ترتيب ڏيڻ جو هڪ طريقو آهي. مثال طور، توهان کي هڪ سسٽم جي ضرورت آهي جيڪا يقيني بڻائي ٿي ته ڪنٽينر هميشه هلندا رهيا آهن، ۽ توهان کي ضرورت آهي هڪ طريقي سان وڌائڻ ۽ اضافي ڪنٽينر مثالن کي اسپن اپ ڪرڻ جي صورت ۾ جيڪڏهن ٽرئفڪ وڌي ٿي.

ڪنٽينر ٿيل ايپليڪيشنن کي هلائڻ لاءِ توھان استعمال ڪري سگھو ٿا G.K.E.. GKE هڪ ڪنٽينر آرڪيسٽريشن پليٽ فارم آهي جيڪو ورچوئل مشينن کي ڪلستر ۾ گڏ ڪري ٿو. هر مجازي مشين کي نوڊ سڏيو ويندو آهي. GKE ڪلستر اوپن سورس ڪبرنيٽس ڪلستر مينيجمينٽ سسٽم تي ٻڌل آهن. ڪبرنيٽس ڪلستر سان رابطي لاءِ ميکانيزم مهيا ڪري ٿو.

GKE ڪلستر ٺاهڻ:

1) هڪ ڪلستر ٺاهيو:

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

ٽيم ڪلائوڊ GCP پروجيڪٽ ۽ ڊفالٽ زون ۾ هڪ istioready ڪلستر ٺاهي ٿو جيڪو توهان بيان ڪيو آهي. Istio هلائڻ لاءِ، اسان سفارش ڪريون ٿا گهٽ ۾ گهٽ 4 نوڊس ۽ هڪ ورچوئل مشين n1-معياري-2.

ٽيم چند منٽن ۾ ڪلستر ٺاهي ٿي. جڏهن ڪلستر تيار آهي، حڪم ڪجهه هن طرح ڪڍي ٿو پيغام.

2) ڪمانڊ لائن ٽول ۾ سندون مهيا ڪريو ڪيوبڪبلڪلستر کي منظم ڪرڻ لاء ان کي استعمال ڪرڻ لاء:

gcloud container clusters get-credentials istioready

3) ھاڻي توھان رابطو ڪري سگھوٿا ڪبرنيٽس ذريعي ڪيوبڪبل. مثال طور، ھيٺ ڏنل حڪم نوڊس جي حالت کي ڳولي سگھي ٿو:

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 ۾ ڪنٽينر لڳائڻ کان اڳ، ڪبرنيٽس جا اهم تصور سکو. هتي لنڪ آهن بلڪل آخر ۾ جيڪڏهن توهان وڌيڪ سکڻ چاهيو ٿا.

  • نوڊس ۽ ڪلستر. GKE ۾، هڪ نوڊ هڪ مجازي مشين آهي. ٻين Kubernetes پليٽ فارمن تي، هڪ نوڊ هڪ ڪمپيوٽر يا هڪ مجازي مشين ٿي سگهي ٿو. هڪ ڪلستر نوڊس جو هڪ مجموعو آهي جنهن کي هڪ واحد يونٽ سمجهي سگهجي ٿو جتي توهان ڪنٽينر ٿيل ايپليڪيشن کي ترتيب ڏيو ٿا.
  • ٻوٽا. ڪبرنيٽس ۾، ڪنٽينر پوڊ ۾ هلندا آهن. ڪبرنيٽس ۾ هڪ پوڊ هڪ ناقابل تقسيم يونٽ آهي. هڪ پوڊ هڪ يا وڌيڪ ڪنٽينر رکي ٿو. توهان سرور ڪنٽينرز کي ترتيب ڏيو ۽ لوڊ ڪرڻ جدا جدا حصن ۾. جڏهن پوڊ ۾ ڪيترائي ڪنٽينر هوندا آهن (مثال طور، هڪ ايپليڪيشن سرور ۽ پراکسي سرور)، ڪنٽينرز کي هڪ واحد اداري طور منظم ڪيو وڃي ٿو ۽ پوڊ وسيلن کي حصيداري ڪريو.
  • مقرريون. Kubernetes ۾، هڪ مقرري هڪ اعتراض آهي جيڪو هڪجهڙائي واري پوڊ جو مجموعو آهي. تعیناتي شروع ڪري ٿي پوڊ جي ڪيترن ئي نقلن کي ڪلستر نوڊس ۾ ورهايو ويو. تعیناتي خود بخود پوڊ کي تبديل ڪري ٿي جيڪي ناڪام ٿيا آهن يا غير جوابدار آهن.
  • ڪبرنيٽس سروس. جڏهن GKE ۾ ايپليڪيشن ڪوڊ هلائڻ، وچ ۾ ڪنيڪشن لوڊ ڪرڻ и سرور. جڏهن توهان Cloud Shell ورچوئل مشين يا ڊيسڪ ٽاپ تي خدمتون شروع ڪيون، توهان کي درخواستون موڪليون سرور تي مقامي هنڌ: 8080. هڪ دفعو GKE تي مقرر ڪيو ويو، پوڊ موجود نوڊس تي عمل ڪيو ويو آهي. ڊفالٽ طور، توهان وٽ ڪو به ڪنٽرول ناهي ته ڪهڙي نوڊ تي پوڊ هلندي آهي، تنهنڪري توهان ٻج مستقل IP پتي ناهي.
    هڪ IP پتو حاصل ڪرڻ لاء سرور، توهان کي پوڊ جي چوٽي تي نيٽ ورڪ خلاصو بيان ڪرڻ جي ضرورت آهي. اھو اھو آھي جيڪو اھو آھي ڪبرنيٽس سروس. ڪبرنيٽس سروس پوڊز جي هڪ سيٽ لاءِ مسلسل آخري پوائنٽ مهيا ڪري ٿي. ڪي ٿورا آهن خدمتن جي قسمن. سرور استعمال ڪري ٿو لوڊ بيلنسر، جيڪو رابطي لاءِ هڪ خارجي IP پتو مهيا ڪري ٿو سرور ڪلستر جي ٻاهران.
    Kubernetes وٽ ھڪڙو تعمير ٿيل DNS سسٽم آھي جيڪو DNS نالن کي تفويض ڪري ٿو (مثال طور، helloserver.default.cluster.local) خدمتون. انهي جي مهرباني، ڪلستر جي اندر پوڊ هڪ مستقل ايڊريس تي ڪلستر ۾ ٻين پوڊ سان رابطو ڪن ٿا. DNS نالو ڪلستر کان ٻاهر استعمال نه ٿو ڪري سگھجي، جهڙوڪ Cloud Shell ۾ يا ڪمپيوٽر تي.

Kubernetes ظاهر ڪري ٿو

جڏهن توهان ايپليڪيشن کي ماخذ کان وٺي، توهان استعمال ڪيو لازمي حڪم python3

server.py

Imperative هڪ فعل جو مطلب آهي: "هي ڪريو."

ڪبرنيٽس استعمال ڪري ٿو بيان ڪندڙ ماڊل. هن جو مطلب اهو آهي ته اسان ڪبرنيٽس کي اهو نه ٻڌائي رهيا آهيون ته ڇا ڪرڻ گهرجي، بلڪه گهربل رياست کي بيان ڪري رهيا آهيون. مثال طور، Kubernetes شروع ٿئي ٿو ۽ پوڊ کي روڪي ٿو ضرورت مطابق يقيني بڻائڻ لاءِ ته سسٽم جي اصل حالت مطلوب رياست سان ملي ٿي.

توھان ظاھر ڪريو مطلوب رياست منشور يا فائلن ۾ يام ايل. ھڪڙو YAML فائل ھڪڙي يا وڌيڪ ڪبرنيٽس شين جي وضاحتن تي مشتمل آھي.

مثال لاءِ YAML فائل شامل آهي سرور и لوڊ ڪرڻ. هر YAML فائل بيان ڪري ٿو گهربل رياست جي ترتيب واري اعتراض ۽ ڪبرنيٽس سروس.

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

  • لوڊ بيلنسر: ڪلائنٽ لوڊ بيلنس جي IP پتي تي درخواستون موڪليندا آهن، جنهن وٽ هڪ مستقل IP پتو آهي ۽ ڪلستر کان ٻاهر رسائي لائق آهي.
  • ٽارگيٽ پورٽ: جيئن توهان کي ياد آهي، ٽيم ايڪسپوز 8080 в Dockerfile بندرگاهن مهيا نه ڪيو. توهان بندرگاهه مهيا ڪريو 8080ته جيئن توهان ڪنٽينر سان رابطو ڪري سگهو ٿا سرور ڪلستر کان ٻاهر. اسان جي صورت ۾ hellosvc.default.cluster.local:80 (مختصر نالو: hellosvc) بندرگاهه سان ملندڙ جلندڙ آهي 8080 پوڊ IP پتي هيلو سرور.
  • پورٽ: هي پورٽ نمبر آهي جتي ڪلستر ۾ ٻيون خدمتون درخواستون موڪلينديون.

loadgen.yaml

مقرري تي اعتراض loadgen.yaml ڏيکارجي ٿو server.yaml. فرق اهو آهي ته ٺهڻ ​​واري اعتراض ۾ هڪ سيڪشن شامل آهي اين اي. اهو وضاحت ڪري ٿو ماحولياتي متغير جيڪي گهربل آهن لوڊ ڪرڻ ۽ جنھن کي توھان انسٽال ڪيو آھي جڏھن ائپليڪيشن کي ماخذ کان ھلايو.

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) فيلڊ ۾ نالو تبديل ڪريو تصوير توهان جي Docker تصوير جي نالي تي.

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) فيلڊ ۾ نالو تبديل ڪريو تصوير توهان جي Docker تصوير جي نالي تي.

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 پتي حاصل ڪريو hellosvc:

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) هڪ درخواست موڪليو hellosvc: بدلائڻ EXTERNAL_IP ٻاهرين IP پتي ڏانهن hellosvc.

curl http://EXTERNAL_IP

اچو ته Istio تي وڃو

توهان وٽ اڳ ۾ ئي هڪ درخواست آهي GKE ڏانهن. لوڊ ڪرڻ Kubernetes DNS استعمال ڪري سگھن ٿا (hellosvc:80) ڏانهن درخواستون موڪلڻ لاء سرور۽ توهان درخواست موڪلي سگهو ٿا سرور ٻاهرين IP پتي جي ذريعي. جيتوڻيڪ ڪبرنيٽس ۾ ڪيتريون ئي خاصيتون آهن، پر خدمتن بابت ڪجهه معلومات غائب آهي:

  • خدمتون ڪيئن لاڳاپو ڪن ٿيون؟ خدمتن جي وچ ۾ لاڳاپا ڇا آهن؟ خدمتن جي وچ ۾ ٽرئفڪ ڪيئن وهندي آهي؟ ڇا توهان کي خبر آهي ته لوڊ ڪرڻ ڏانهن درخواستون موڪلي ٿو سرور، پر تصور ڪريو ته توھان کي اپليڪيشن بابت ڪجھ به نه ڄاڻو. انهن سوالن جا جواب ڏيڻ لاء، اچو ته ڏسو GKE ۾ هلندڙ پوڊ جي فهرست.
  • ميٽرڪس. ڪيستائين سرور اچڻ واري درخواست جو جواب ڏئي ٿو؟ سرور پاران في سيڪنڊ ڪيتريون درخواستون مليون آهن؟ ڇا اهو غلطي پيغام ڏئي ٿو؟
  • سيڪيورٽي ڄاڻ. جي وچ ۾ ٽريفڪ لوڊ ڪرڻ и سرور صرف گذري ٿو HTTP يا طرفان mTLS?

Istio انهن سڀني سوالن جا جواب. هن کي ڪرڻ لاء، Istio هڪ sidecar proxy رکي ٿو دوها هر پوڊ ۾. نمائندو پراکسي ايپليڪيشن ڪنٽينرز ڏانهن ايندڙ ۽ ٻاهران ايندڙ ٽرئفڪ کي روڪي ٿو. ان جو مطلب آهي سرور и لوڊ ڪرڻ حاصل ڪريو sidecar proxy Envoy ذريعي، ۽ سڀني ٽرئفڪ کان لوڊ ڪرڻ к سرور سفير پراکسي ذريعي وڃي ٿو.

ايلچي پراکسيز جي وچ ۾ رابطا هڪ خدمت ميش ٺاهيندا آهن. سروس ميش فن تعمير مهيا ڪري ٿي ڪنٽرول جي هڪ پرت ڪبرنيٽس جي چوٽي تي.

Istio لاء درخواست تيار ڪرڻ

جيئن ته Envoy proxies پنهنجن ڪنٽينرز ۾ هلن ٿا، Istio انسٽال ڪري سگھجي ٿو GKE ڪلستر جي مٿان ايپليڪيشن ڪوڊ ۾ تقريبن ڪابه تبديلين سان. پر توھان ڪجھ ڪم ڪيو آھي توھان جي ايپليڪيشن کي Istio پاران منظم ٿيڻ لاءِ تيار ڪرڻ لاءِ:

  • سڀني ڪنٽينرز لاءِ خدمتون. تعينات ڪرڻ سرور и لوڊ ڪرڻ ڪبرنيٽس سروس سان ڳنڍيل آهي. پڻ لوڊ ڪرڻ, جيڪو ايندڙ درخواستون وصول نه ڪندو آهي, اتي هڪ خدمت آهي.
  • خدمتن ۾ بندرگاهن جا نالا هجڻ گهرجن. جيتوڻيڪ سروس بندرگاهن کي GKE ۾ اڻ ڄاتل ڇڏي سگهجي ٿو، Istio توهان کي وضاحت ڪرڻ جي ضرورت آهي بندرگاهه جو نالو هن جي پروٽوڪول جي مطابق. YAML فائل ۾ پورٽ لاء سرور سڏيو ويندو آهي httpڇاڪاڻ ته سرور پروٽوڪول استعمال ڪري ٿو HTTP. جيڪڏهن خدمت استعمال ٿيل جي آر پي سي، توهان بندرگاهه جو نالو ڏيندا جي پي سي.
  • نوڪريون نشان لڳل آهن. تنهن ڪري، توهان استعمال ڪري سگهو ٿا Istio جي ٽرئفڪ مئنيجمينٽ خاصيتون، جهڙوڪ ساڳئي خدمت جي نسخن جي وچ ۾ ٽرئفڪ کي ورهائڻ.

Istio انسٽال ڪرڻ

Istio انسٽال ڪرڻ جا ٻه طريقا آهن. ڪري GKE واڌ تي Istio کي فعال ڪريو يا Istio جو اوپن سورس ورزن انسٽال ڪريو ڪلستر تي. GKE تي Istio سان، توهان آساني سان منظم ڪري سگهو ٿا Istio تنصيب ۽ اپ گريڊ سڄي GKE ڪلستر لائف سائيڪل ۾. جيڪڏهن توهان Istio جو جديد ورزن چاهيو ٿا يا توهان جي Istio ڪنٽرول پينل جي ترتيب تي وڌيڪ ڪنٽرول، GKE ايڪسٽينشن تي Istio جي بدران اوپن سورس ورزن انسٽال ڪريو. طريقيڪار تي فيصلو ڪرڻ لاء، مضمون پڙهو ڇا مون کي GKE تي Istio جي ضرورت آهي؟.

ھڪڙو اختيار چونڊيو، مناسب ھدايت جو جائزو وٺو، ۽ پنھنجي ڪلستر تي Istio انسٽال ڪرڻ لاءِ ھدايتن تي عمل ڪريو. جيڪڏهن توهان Istio استعمال ڪرڻ چاهيو ٿا توهان جي نئين مقرر ٿيل ايپليڪيشن سان، سائڊ ڪار جي عمل کي فعال ڪريو نالي جي جڳهه لاءِ رٿيل.

صفائي

توهان جي گوگل ڪلائوڊ پليٽ فارم اڪائونٽ تي چارج ٿيڻ کان بچڻ لاءِ انهن وسيلن لاءِ جيڪي توهان هن سبق ۾ استعمال ڪيا آهن، هڪ ڀيرو توهان Istio انسٽال ڪيو ۽ نموني ايپليڪيشن سان کيڏيو، ڪنٽينر ڪلسٽر کي حذف ڪريو. اهو سڀ ڪلستر وسيلن کي ختم ڪري ڇڏيندو، جهڙوڪ ڪمپيوٽ مثال، ڊسڪ، ۽ نيٽ ورڪ وسيلن.

ايندڙ ڇا آهي؟

جو ذريعو: www.habr.com

تبصرو شامل ڪريو