يک پروژه منبع باز است که تجربه توسعه محلي را براي برنامه هاي در حال اجرا در Kubernetes فراهم مي کند. با استفاده از آن مي توانيد کد خود را بر روي IDE محلي خود بنويسيد و به محض ذخيره يک فايل ، تغييرات را مي توان به خوشه Kubernetes خود وارد کرد و برنامه شما فوراً بروزرساني خواهد شد. کل اين فرآيند بدون نياز به ساخت تصاوير Docker يا اعمال مانيفست هاي Kubernetes اتفاق مي افتد ، که مي تواند زمان قابل توجهي طول بکشد.
در اين آموزش ، شما از Okteto براي بهبود بهره وري در هنگام تهيه يک برنامه بومي Kubernetes استفاده خواهيد کرد. ابتدا ، يک خوشه Kubernetes ايجاد مي کنيد و از آن براي اجراي يک برنامه استاندارد “Hello World” استفاده مي کنيد. سپس از Okteto براي توسعه و به روز کردن خودکار برنامه خود بدون نياز به نصب محلي استفاده خواهيد کرد.
پيش نيازها
قبل از شروع اين آموزش ، موارد زير را نياز خواهيد داشت:
? خوشه Kubernetes 1.12+ . در اين آموزش ، از يک خوشه vpsgol Kubernetes با سه گره استفاده مي شود ، اما شما مي توانيد با استفاده از يک روش ديگر ، خوشه ايجاد کنيد.
? kubectl و doctl براي برقراري ارتباط با خوشه شما نصب و تنظيم شده باشند.
? يک حساب کاربري Docker Hub
? Docker در حال اجرا بر روي دستگاه محلي شما.
مرحله 1 – ايجاد برنامه Hello World
برنامه “hello world” يک سنت قديمي در توسعه وب است. در اين حالت ، يک سرويس وب ساده است که به هر درخواست با ” hello world” پاسخ مي دهد. اکنون که خوشه Kubernetes خود را ايجاد کرده ايد ، اجازه دهيد يک برنامه “Hello World” را در Golang و مانيفيستي که براي استقرار آن در Kubernetes استفاده خواهيد کرد ، ايجاد کنيم.
اولين به دايرکتوري هوم خود سوييچ کنيد:
? $ cd ~
?
اکنون يک دايرکتوري جديد به نام hello_world تهيه کرده و به داخل آن برويد:
? $ mkdir hello_world
?
? $ cd hello_world


با IDE يا ويرايشگر متن مورد علاقه خود ، فايل جديدي را با نام main.go ايجاد و باز کنيد:
? $ nano main.go
?
main.go يک وب سرور مجازي Golang خواهد بود که پيام hello world را به شما باز مي گرداند !. بنابراين ، اجازه دهيد از کد زير استفاده کنيم:
main.go
package main


import (
“fmt”
“net/http”
)


func main() {
fmt.Println(“Starting hello-world server…”)
http.HandleFunc(“/”, helloServer)
if err := http.ListenAndServe(“:8080”, nil); err != nil {
panic(err)
}
}


func helloServer(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, “Hello world!”)
}


کد main.go موارد زير را انجام مي دهد:
? اولين عبارت در يک فايل منبع Go بايد نام بسته باشد. دستورات اجرايي هميشه بايد از package main استفاده کنند.
? بخش ورودي نشان مي دهد کد بسته به چه مواردي بستگي دارد. در اين حالت از fmt براي دستکاري رشته و net / http براي سرور مجازي HTTP استفاده مي کند.
? تابع main نقطه ورود به باينري شماست. از روش http.HandleFunc براي پيکربندي سرور مجازي جهت فراخواني helloServer در هنگام دريافت درخواست به مسير / استفاده مي شود. http.ListenAndServe يک سرور مجازي HTTP را شروع مي کند که در تمام رابط هاي شبکه به پورت 8080 گوش مي دهد.
? عملکرد helloServer شامل منطق کنترل کننده درخواست شما است. در اين حالت ، hello world! را به عنوان پاسخ به درخواست خواهد نوشت.
شما بايد يک تصوير Docker ايجاد کرده و آن را به سمت رجيستري Docker خود هدايت کنيد تا Kubernetes بتواند آن را دريافت و سپس برنامه را اجرا کند.
يک فايل جديد با نام Dockerfile را با IDE يا ويرايشگر متن مورد علاقه خود باز کنيد:
? $ nano Dockerfile
?


Dockerfile شامل دستورات لازم براي ساخت کانتينر Docker برنامه شما مي باشد. اجازه دهيد از کد زير استفاده کنيم:
Dockerfile
FROM golang:alpine as builder
RUN apk –update –no-cache add bash
WORKDIR /app
ADD . .
RUN go build -o app


FROM alpine as prod
WORKDIR /app
COPY –from=builder /app/app /app/app
EXPOSE 8080
CMD [“./app”]
Copy


Dockerfile شامل دو مرحله است builder و  prod:
• مرحله builder  شامل ابزارهاي ساخت Go است. که مسئول کپي کردن فايل ها و ساخت باينري Go است.
• مرحله prod تصوير نهايي است. فقط شامل يک سيستم تهي و باينري برنامه خواهد بود.
اين يک تمرين خوب ميباشد. کانتينر توليد شما را کوچکتر و ايمن تر مي کند زيرا تنها شامل برنامه شما و دقيقاً آنچه براي اجراي آن لازم است مي باشد.
تصوير کانتينر را بسازيد (نام_DockerHub_usus را با نام کاربري داکر هاب خود جايگزين کنيد):
? $ docker build -t your_DockerHub_username/hello-world:latest
?
اکنون آن را به Docker Hub وارد کنيد:
? $ docker push your_DockerHub_username/hello-world:latest
?
سپس ، يک پوشه جديد براي مانيفست Kubernetes ايجاد کنيد:
? $ mkdir k8s
?
وقتي از مانيفست Kubernetes استفاده مي کنيد ، به Kubernetes مي گوييد که چگونه برنامه شما اجرا مي شود. اين بار ، يک شيء استقرار ايجاد مي کنيد. بنابراين ، يک فايل جديد deployment.yaml را با IDE يا ويرايشگر متن مورد علاقه خود ايجاد کنيد:
? $ nano k8s/deployment.yaml
?
مطالب زير يک شيء استقرار Kubernetes را شرح مي دهد که تصوير داکر okteto/hello-world:latest را اجرا ميکند. اين محتوا را به فايل جديد خود اضافه کنيد ، اما در مورد شما okteto ذکر شده بعد از برچسب image را با your_DockerHub_username جايگزين کنيد:
~/hello_world/k8s/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-world
spec:
selector:
matchLabels:
app: hello-world
replicas: 1
template:
metadata:
labels:
app: hello-world
spec:
containers:
– name: hello-world
image: your_DockerHub_username/hello-world:latest
ports:
– containerPort: 8080


مانيفست استقرار داراي سه بخش اصلي است:
? metadata  نام استقرار شما را مشخص مي کند.
? replicas  مشخص مي کند که چند نسخه از آن را مي خواهيد اجرا کنيد.
? template  به Kubernetes مي گويد که چه چيزي را مستقر کند و چه برچسب هايي را اضافه نمايد. در اين حالت ، يک کانتينر واحد ، با تصوير okteto/hello-world:latest ، که به پورت 8080 گوش ميدهد، و با برچسب app: hello-world همراه است. توجه داشته باشيد که اين برچسب همان مورد استفاده در بخش selector  است.
اکنون به راهي براي دسترسي به برنامه خود نياز داريد. مي توانيد با ايجاد يک شيء سرويس ، برنامه اي را در Kubernetes قرار دهيد. بياييد با استفاده از مانيفست اين کار را انجام دهيم. با IDE يا ويرايشگر متن مورد علاقه خود فايل جديدي به نام service.yaml ايجاد کنيد:
? nano k8s/service.yaml
?
محتواي زير سرويس هايي را نشان مي دهد که شيء استقرار hello world را در معرض ديد شما قرار مي دهد:
k8s/service.yaml
apiVersion: v1
kind: Service
metadata:
name: hello-world
spec:
type: LoadBalancer
ports:
– protocol: TCP
port: 80
targetPort: 8080
name: http
selector:
app: hello-world


مانيفست سرويس چهار بخش اصلي دارد:
? metadata  به Kubernetes مي گويد كه چگونه سرويس خود را نامگذاري كنند.
? type  به Kubernetes مي گويد چگونه مي خواهيد سرويس خود را در معرض ديد قرار دهيد.
? برچسب ports  به Kubernetes مي گويد كه كدام پورت را مي خواهيد در معرض ديد قرار دهيد ، و چگونه مي توانيد آنها را براي استقرار خود نگاشت كنيد. در اين حالت ، پورت 80 را به صورت خارجي در معرض ديد قرار مي دهيد و آن را به پورت 8080 در محل استقرار خود هدايت مي کنيد.
? selector  به Kubernetes مي گويد که چگونه ترافيک را هدايت کند. در اين حالت ، هر پوسته با برچسب app: hello-world ترافيک دريافت مي کند.
اکنون شما همه چيز را براي استقرار برنامه “hello world” خود در Kubernetes داريد. در ادامه کار استقرار را انجام خواهيم داد.
مرحله 2 – استفاده از برنامه Hello World شما
در اين مرحله برنامه “Hello World” خود را در Kubernetes مستقر مي کنيد ، سپس تأييد مي کنيد که درست کار مي کند.
با استقرار برنامه خود در Kubernetes کار را شروع کنيد:
? $ kubectl apply -f k8s
?
خروجي زير را مشاهده خواهيد کرد:
Output
deployment.apps “hello-world” created
service “hello-world” created


بعد از گذشت حدود يک دقيقه يا بيشتر ، مي توانيد IP برنامه خود را بازيابي کنيد. براي بررسي سرويس خود از اين دستور kubectl استفاده کنيد:
? $ kubectl get service hello-world
?
خروجي مانند اين را مشاهده خواهيد کرد که اشياء سرويس Kubernetes را ليست ميکند. به IP برنامه خود در ستون EXTERNAL-IP توجه کنيد:
Output
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-world ClusterIP your_cluster_ip your_external_ip 8080/TCP 37s


مرورگر خود را باز کنيد و به برنامه your_external_ip که براي برنامه “Hello World” ذکر شده است برويد. قبل از ادامه مرحله بعدي تأييد کنيد که برنامه شما در حال اجرا است.


تا اين لحظه ، شما يک مسير نسبتاً سنتي را براي توسعه برنامه ها با Kubernetes دنبال کرده ايد. در ادامه ، هر زمان که مي خواهيد کد را در برنامه خود تغيير دهيد ، بايد يک تصوير جديد Docker بسازيد و وارد کنيد و سپس آن تصوير را از Kubernetes بيرون بکشيد. اين روند مي تواند مدتي طول بکشد. Okteto براي ساده تر ساختن اين حلقه دروني طراحي شده است. بياييد به Okteto CLI نگاهي بيندازيم و ببينيم چگونه مي تواند کمک کند.
مرحله 3 – نصب Okteto CLI
اکنون با نصب Okteto CLI ، بهره وري توسعه Kubernetes را بهبود مي بخشيد. رابط خط فرمان Okteto يک پروژه منبع باز است که به شما امکان مي دهد تغييرات کد برنامه را با برنامه هاي Kubernetes همزمان کنيد. شما مي توانيد با استفاده از IDE ، اشکال زداگر يا کامپايلرهاي مورد علاقه خود استفاده کنيد بدون اينکه براي تست برنامه خود مجبور به تعهد ، ساخت ، ارائه يا استقرار مجدد کانتينرها باشيد – همانطور که در مراحل قبلي انجام داديد.
براي نصب Okteto CLI در دستگاه macOS يا Linux ، دستور زير را اجرا کنيد:
? $ curl https://get.okteto.com -sSfL | sh
?
بياييد نگاهي دقيق تر به اين دستور بياندازيم:
? از دستور curl براي انتقال داده به سرور مجازي استفاده مي شود.
? پرچم -s هر خروجي را سرکوب مي کند.
? پرچم -S خطاها را نشان مي دهد.
? پرچم -f باعث عدم موفقيت درخواست در HTTP مي شود.
? پرچم -L باعث مي شود درخواست از تغيير مسير پيروي کند.
? عملگر | اين خروجي را به دستور sh پايپ مي کند ، که آخرين باينري okteto را در دستگاه محلي شما دانلود و نصب مي کند.
اگر ويندوز را اجرا مي کنيد ، مي توانيد فايل را بطور متناوب از طريق مرورگر وب خود دانلود کرده و به صورت دستي آن را به PATH $ خود اضافه کنيد.
پس از نصب Okteto CLI ، آماده هستيد تا برنامه “hello world” را در حالت توسعه قرار دهيد.
مرحله 4 – قرار دادن برنامه Hello world در حالت توسعه
Okteto CLI به منظور جابجايي برنامه در حال اجرا بر روي خوشه Kubernetes با کد موجود در دستگاه شما طراحي شده است. براي اين کار ، Okteto از اطلاعات ارائه شده از يک فايل مانيفست Okteto استفاده مي کند. اين فايل شيء استقرار Kubernetes را که با کد محلي شما تعويض مي شود ، اعلام مي کند.
با IDE يا ويرايشگر متن مورد علاقه خود فايل جديدي به نام okteto.yaml ايجاد کنيد:
? $ nano okteto.yaml
?
بياييد يک مانيفست پايه بنويسيم که در آن مي توانيد نام شيء استقرار ، تصوير پايه Docker براي استفاده و يک پوسته را تعريف کنيد. بعداً به اين اطلاعات برمي گرديم. از فايل محتواي نمونه زير استفاده کنيد:
okteto.yaml
name: hello-world
image: okteto/golang:1
workdir: /app
command: [“bash”]


با اجراي دستور زير آماده شويد تا برنامه خود را در حالت توسعه قرار دهيد:
? $ okteto up
?
Output
? Development environment activated
? Files synchronized
Namespace: default
Name: hello-world


Welcome to your development environment. Happy coding!
default:hello-world /app>


دستور okteto up برنامه “hello world” را در يک محيط توسعه عوض مي کند ، اين بدان معني است که:
? کانتينر برنامه Hello World با تصويرداکر okteto/golang:1 به روز مي شود. اين تصوير شامل ابزارهاي لازم براي ساخت ، آزمايش ، اشکال زدايي و اجراي برنامه “Hello World” است.
? يک سرويس همگام سازي فايل ايجاد شده است تا تغييرات شما بين سيستم فايل محلي و غلاف برنامه تان را به روز نگه دارد.
? يک پوسته از راه دور در محيط توسعه شما شروع مي شود. اکنون مي توانيد برنامه خود را بگونه اي که در دستگاه محلي خود هستيد ، بسازيد ، آزمايش و اجرا کنيد.
? هر پردازشي که در پوسته از راه دور اجرا مي کنيد ، همان ترافيک ورودي ، همان متغيرهاي محيط ، واليوم يا رمزها را به عنوان غلافهاي اصلي برنامه “Hello World” دريافت خواهد کرد. اين به نوبه خود ، يک محيط توسعه کاملاً واقع بينانه و شبيه توليد را به شما مي دهد.
در همان کنسول ، اکنون برنامه را طبق معمول اجرا کنيد (بدون ساختن و ارائه تصوير Docker) ، مانند اين:
? Okteto> go run main.go
?
Output
Starting hello-world server…


اولين باري که برنامه را اجرا مي کنيد ، Go متعلقات شما را دانلود و برنامه را کامپايل مي کند. صبر کنيد تا اين فرآيند کامل شود و با باز کردن مرورگر و ريفرش صفحه برنامه خود ، دقيقاً مانند گذشته ، برنامه خود را تست کنيد.
اکنون آماده هستيد تا توسعه را مستقيماً روي Kubernetes شروع کنيد.
مرحله 5 – توسعه مستقيم روي Kubernetes
بياييد شروع به ايجاد تغييراتي در برنامه “hello world” کنيم و سپس ببينيم که چگونه در Kubernetes بازتاب مي يابند.
فايل main.go را با IDE يا ويرايشگر متن مورد علاقه خود باز کنيد. به عنوان مثال ، يک کنسول جداگانه باز کنيد و دستور زير را اجرا کنيد:
? $ nano main.go
?
سپس ، پيام پاسخ خود را به Hello world from vpsgol! تغيير دهيد!:
main.go
package main


import (
“fmt”
“net/http”
)


func main() {
fmt.Println(“Starting hello-world server…”)
http.HandleFunc(“/”, helloServer)
if err := http.ListenAndServe(“:8080”, nil); err != nil {
panic(err)
}
}


func helloServer(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, “Hello world from vpsgol!”)
}


اينجاست که گردش کار شما تغيير مي کند. Okteto به جاي ساختن تصاوير و استفاده مجدد از کانتينر براي به روزرساني برنامه “hello world” ، تغييرات شما را در محيط توسعه خود در Kubernetes همگام سازي مي کند.
از کنسولي که فرمان okteto up را اجرا کرديد ، با فشار دادن CTRL + C، اجراي go run main.go را لغو کنيد. اکنون برنامه را دوباره اجرا کنيد:
? Okteto> default:hello-world /app> go run main.go
?
Output
Starting hello-world server…


به مرورگر برگرديد و صفحه برنامه “Hello World” خود را مجدد لود کنيد.


تغييرات کد شما بلافاصله و همه بدون نياز به تعهد ، ايجاد يا ارائه در Kubernetes اعمال شد .
نتيجه
Okteto با کليک روي يک دکمه ، خوشه Kubernetes را به يک پلت فرم توسعه کاملاً برجسته تبديل مي کند. در اين آموزش شما Okteto CLI را نصب و پيکربندي کرده ايد تا کدهاي خود را مستقيماً بر روي Kubernetes تغيير دهيد تا بتوانيد کد را سريعاً تايپ کنيد. اکنون مي توانيد به مخزن نمونه Okteto برويد تا نحوه استفاده از Okteto با زبان هاي مختلف برنامه نويسي و اشکال زدايي را ببينيد.
همچنين ، اگر يک خوشه Kubernetes را با تيم خود به اشتراک مي گذاريد ، ميتوانيد به هر يک از اعضا يک فضاي نام Kubernetes ارائه دهيد که به گونه اي پيکربندي شده که از ساير توسعه دهندگان که بر روي همان خوشه کار ميکنند، جدا باشد. اين قابليت عالي توسط اپليکيشن Okteto در بازار Kubernetes vpsgol نيز ارائه شده است.


کلمات کليدي خريد سرور


خريد vps – خريد سرور مجازي – خريد سرور – سرور هلند – فروش vps – سرور مجازي آمريکا – خريدvps – سرور مجازي هلند – فروش سرور مجازي – سرور آمريکا – vps – سرور مجازي انگليس – سرور مجازي آلمان – سرور مجازي کانادا – خريد vps آمريکا – خريد وي پي اس – سرور – خريد سرور مجازي هلند – vps خريد – سرور مجازي فرانسه – سرور مجازي هلند – خريد vps آمريکا – خريد سرور مجازي ارزان هلند – vps – خريد vps هلند – خريد سرور مجازي آمريکا – خريد vps فرانسه – تست vps – سرور مجازي تست – سرور مجازي ويندوز – ارزانترين vps – خريد وي پي اس – vps ارزان –