استقرار اولین سرویس در Kubernetes
در این پست توضیح ساده و ابتدایی در مورد استقرار یک پروژه اولیه در کلاستر Kubernetes داده شده که اگر در حال یادگیری چنین مباحثی هستید ، میتونه برای شما نقطه شروع خوبی باشه.
مانند خیلی دیگه از پروژه های نمونه ای که برای آموزش های Docker و مشابه اون استفاده میشه ، اینجا هم از سرویس whoami برای این کار استفاده می کنم. درگیر مباحث اضافی نمیشید و همچنین با توجه به اطلاعاتی که به شما میده می تونید مطمئن بشید که استقرار به درستی انجام شده.
در صورت نیاز ، پست قبلی رو برای راه اندازی کلاستر مطالعه کنید :
ساختار پروژه
در اینجا با توجه به سادگی پروژه اصلا ساختار پیچیده ای هم نداریم.
- چند Pod با استفاده از Deployment ایجاد میکنیم
- یک Service برای پروژه ایجاد می کنیم
- جهت دسترسی به پروژه از یک Ingress استفاده می کنیم
در این آموزش از Traefik به عنوان Ingress Controller استفاده شده. جهت اطلاعات بیشتر به این آموزش مراجعه کنید :
نصب و استفاده از Traefik در Kubernetes
Deployment
در اینجا ما قصد ساخت 3 Pod داریم که در کنار هم تشکیل مجموعه ای ساده به صورت HA بدن. برای این کار فایلی به نام deployment.yml
با محتوای زیر بسازید :
apiVersion: apps/v1
kind: Deployment
metadata:
name: whoami-deployment
spec:
replicas: 3
selector:
matchLabels:
app: whoami
template:
metadata:
labels:
app: whoami
spec:
containers:
- name: whoami-container
image: containous/whoami
همانطور که مشاهده کردید مقدار replicas
رو برابر با 3 قرار میدیم تا به همین تعداد برای ما Pod ساخته بشه. پس از آماده شدن container ها هر کدام hostname
مربوط به خودشون رو دارن و بنابراین موقع مشاهده خروجی whoami راحت میشه از هم تشخیصشون داد.
همچنین از Label های مناسب برای برقراری ارتباط با Pod ها استفاده می کنیم.
با استفاده از دستور زیر Deployment خودمون رو میسازیم تا Pod ها به تدریج ایجاد بشن :
kubectl create -f deployment.yml
Service
پس از اینکه Pod های ما ساخته شد ، با ایجاد یک Service قابلیت ارتباط برقرار کردن با مجموعه Replica خودمون رو فراهم می کنیم. فایلی با نام service.yml
با محتوای زیر آماده کنید :
apiVersion: v1
kind: Service
metadata:
name: whoami-service
spec:
ports:
- name: http
targetPort: 80
port: 80
selector:
app: whoami
با استفاده از selector
از Label هایی که در مرحله قبل تعریف کردیم استفاده می کنیم تا سرویس خودمون رو به Pod ها متصل کنیم. همچنین از پورت 80 که مربوط به سرویس whoami هست برای دسترسی استفاده کرده و اونو هم تعریف میکنیم. سرویس خودمون هم با دستور زیر ایجاد می کنیم :
kubectl create -f service.yml
Ingress
به صورت پیش فرض K8S بین مجموعه داخلی و دنیای خارج از کلاستر یک جداسازی انجام میده. اگر بخوایم با سرویسی که ایجاد کردیم ارتباط برقرار کنیم باید یک پل ارتباطی مناسب وجود داشته باشه. راه های زیادی برای این کار وجود داره ، یکی از ساده ترین راه ها استفاده از یک Ingress Controller مناسبه که در اینجا از Traefik استفاده می کنم.
برای Ingress Object خودمون یک فایل با نام ingress.yml
با محتوای زیر بسازید :
kind: Ingress
apiVersion: networking.k8s.io/v1beta1
metadata:
name: whoami-ingress
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: web, websecure
spec:
rules:
- host: whoami.k8s
http:
paths:
- path: /
backend:
serviceName: whoami-service
servicePort: 80
اگر پست مربوط به آموزش استفاده از Traefik به عنوان Ingress Controller رو مطالعه کرده باشید ، برای پیاده سازی از نسخه 2.2 کتابخانه Traefik استفاده می کنیم. از این نسخه به بعد قابلیت استفاده از annotation ها برای تعریف سرویس وجود داره و دیگه نیاز به روش سنتی ساخت IngressRoute وجود نداره. گرچه هنوز هم قابلیت های قبلی وجود داره و الزامی به استفاده از روش جدید نیست.
در قسمت annotations
نقطه ورودی مربوطه به traefik رو تعریف می کنیم.
برای قسمت ارتباط ، دو بخش داریم :
- تعریف ارتباط خارج از K8S : این قسمت به صورت ساده شامل معرفی یک domain برای دسترسی به سرویس مربوطه است که در اینجا از آدرس
whoami.k8s
استفاده میکنیم. - تعریف ارتباط داخل K8S : این قسمت شامل معرفی سرویس و پورت مربوطه است . از نام سرویسی که در مرحله قبل ساختیم استفاده می کنیم. همچنین پورت سرویس که 80 هست نیز تعریف میشه.
حالا با ساخت Ingress خودمون روند استقرار پروژه رو به اتمام میرسونیم :
kubectl create -f ingress.yml
بررسی عملکرد
با مراجعه به Kubernetes Dashboard یا اجرای دستورات زیر از استقرار صحیح Deployment / Service / Ingress مطلع بشید :
kubectl get po,svc,deployment
یا با استفاده از Kubernetes Dashboard :
برای آموزش نصب و تنظیم Kubernetes Dashboard به این پست مراجعه کنید :
نصب و استفاده از Kubernetes Dashboard
حالا همه چیز آماده است و با مراجعه به آدرس http://whoami.k8s
در مرورگر یا استفاده از CURL می تونید پس از هربار Refresh کردن مشاهده کنید که درخواست شما به یک Pod مجزا ارسال میشه. به hostname نمایش داده شده دقت کنید