یک AWS EKS Fargate v1.30 بسازید و Prince Of Persia را بازی کنید!

Summarize this content to 400 words in Persian Lang
در این مقاله، راهنمای گام به گام نحوه ایجاد یک خوشه EKS با استفاده از eksctl (v1.30) را ارائه خواهم کرد. همچنین نحوه استقرار یک بازی بر اساس نسخه MS-DOS Prince of Persia را نشان خواهم داد.
الزامات
حساب AWS / AWS CLI
حساب Github یا هر مخزن git
داکر
exctl
سکان هدایت
قدم زدن
سرویس Cloud Shell را در AWS باز کنید.اگر قبلاً نه، eksctl را با دستور زیر نصب کنید:
curl –silent –location “https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz” | tar xz -C /tmp
sudo mv /tmp/eksctl /usr/local/bin
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
حالا بیایید با استفاده از fargate به ساخت کلاستر خود با نسخه 1.30 ادامه دهیم. دستور زیر را اجرا کنید. (حتما خوشه خود را در همان منطقه ای که VPC خود ایجاد می کنید)
eksctl create cluster –name gaming-cluster –version 1.30 –region us-east-1 –fargate
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
اگر می خواهید خوشه خود را در یک VPC خاص ایجاد کنید، حتماً زیرشبکه های مربوطه را مشخص کنید (در غیر این صورت این دستور یک vpc اختصاص داده شده به eks ایجاد می کند)
eksctl create cluster –name gaming-cluster –version 1.30 –region us-east-1 –fargate –vpc-private-subnets subnet-private-1, subnet-private-2
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
این فرآیند ممکن است حدود 20 تا 25 دقیقه طول بکشد.
اکنون بیایید یک ارائه دهنده oidc را در خوشه خود مرتبط کنیم.
eksctl utils associate-iam-oidc-provider –region us-east-1 –cluster gaming-cluster –approve
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
خوشه ما اکنون با یک نمایه fargate پیشفرض آماده است که شامل فضای نام پیشفرض و سیستم kube است
بیایید یک نمایه fargate برای برنامه بازی خود ایجاد کنیم. (حتما ns را در داخل خوشه k8s خود نیز ایجاد کنید)
eksctl create fargateprofile \
–cluster gaming-cluster \
–name fp-gaming \
–namespace gaming \
–region us-east-1
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
اکنون، بیایید کنترلر AWS Load Balancer را اضافه کنیم تا برنامه ما با استفاده از متعادل کننده بار AWS نمایش داده شود.
برای انجام این کار باید یک خط مشی iam، یک سرویس حساب ایجاد کنیم و افزونه را با helm نصب کنیم.
این مثال سیاست IAM را در نظر بگیرید:
curl -o iam-policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/install/iam_policy.json
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
خط مشی IAM را ایجاد کنید
aws iam create-policy \
–policy-name AWSLoadBalancerControllerIAMPolicy-EKS \
–policy-document file://iam-policy.json
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
حالا بیایید یک حساب کاربری برای این کنترلر ایجاد کنیم
eksctl create iamserviceaccount –cluster=gaming-cluster –namespace=kube-system –name=aws-load-balancer-controller –attach-policy-arn=arn:aws:iam:::policy/AWSLoadBalancerControllerIAMPolicy-EKS –approve
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
عالیه اکنون نوبت فرمان است، برای نصب چند نمودار مفید، در این مورد کنترلر تعادل بار aws.
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
دستورات زیر را اجرا کنید:
helm repo add eks https://aws.github.io/eks-charts
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
kubectl apply -k “github.com/aws/eks-charts/stable/aws-load-balancer-controller/crds?ref=master”
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
helm upgrade -i aws-load-balancer-controller eks/aws-load-balancer-controller -n kube-system –set clusterName=gaming-cluster –set serviceAccount.create=false –set serviceAccount.name=aws-load-balancer-controller –set vpcId=
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
بسیار عالی اکنون می توانیم به خوشه خود دسترسی پیدا کنیم
aws eks update-kubeconfig –name gaming-cluster –region us-east-1
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
قبل از ادامه، اجازه دهید فضای نام بازی خود را ایجاد کنیم
kubectl create ns gaming
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
تقریباً رسیدیم، حالا نوبت بازی است.
برای این کار به لطف oklemenz، ultrabolido و jmechner از این چنگال استفاده خواهم کرد.
git clone https://github.com/bdllerena/PrinceJS
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
پس از شبیهسازی تصویر ما، مطمئن شوید که یک مخزن ECR ایجاد کردهاید (یا از هر کدام به انتخاب خود برای میزبانی تصویر Prince of Persia ما استفاده کنید)
حالا دستور push را کپی کنید، باید شبیه به این باشد
aws ecr get-login-password –region us-east-1 | docker login –username AWS –password-stdin .dkr.ecr.us-east-1.amazonaws.com
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
در داخل مخزن ما باید یک Dockerfile وجود داشته باشد که شبیه این باشد.
توجه: ما از پرچم –platform=linux/amd64 استفاده می کنیم زیرا خوشه Kubernetes ما از این پلتفرم پشتیبانی می کند. در غیر این صورت، اگر تصویر Docker را با ابزارهایی مانند Docker Desktop بسازیم، در عوض تصویر را با سیستم عامل محلی سازگار می کند.
FROM –platform=linux/amd64 node:18
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 8080
CMD [“npm”, “start”]
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
در داخل مخزن ما دستورات زیر را اجرا کنید
docker build -t prince-of-persia .
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
پس از اینکه تصویر خود را ساختیم، بیایید آن را تگ کرده و به ECR فشار دهیم
docker tag prince-of-persia:latest .dkr.ecr.us-east-1.amazonaws.com/prince-of-persia:latest
docker push .dkr.ecr.us-east-1.amazonaws.com/prince-of-persia:latest
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
apiVersion: apps/v1
kind: Deployment
metadata:
name: prince-of-persia
namespace: gaming
spec:
replicas: 1
selector:
matchLabels:
app: prince-of-persia
template:
metadata:
labels:
app: prince-of-persia
spec:
containers:
– name: prince-of-persia
image: .dkr.ecr.us-east-1.amazonaws.com/prince-of-persia:latest
ports:
– containerPort: 8080
—
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: ip
service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing
service.beta.kubernetes.io/aws-load-balancer-type: external
name: prince-of-persia
namespace: gaming
spec:
ports:
– port: 80
protocol: TCP
targetPort: 8080
selector:
app: prince-of-persia
type: LoadBalancer
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
پس از بررسی اینکه تصویر ما همان است که به ECR فشار دادیم، مانیفست ما را اجرا کنید!
kubectl apply -f manifest.yaml
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
این مانیفست قرار است یک استقرار با 1 ماکت (1 غلاف) و سرویسی ایجاد کند که یک متعادل کننده بار شبکه به عنوان رو به مشتری (عمومی) ایجاد کند.
بعد از چند دقیقه بررسی کنید که آیا سرویس با این دستور ایجاد شده است یا خیر
kubectl get svc -n gaming
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
عالیه! اگر می خواهید می توانید سیاهه های مربوط به غلاف را بررسی کنید و ببینید آیا همه چیز آماده است یا خیر
kubectl get pods -n gaming
kubectl logs -f prince-of-persia-…. -n gaming
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
در نهایت بیایید با رفتن به svc که قبلا ایجاد کردیم از بازی خود لذت ببریم، باید کمی شبیه به این باشد
k8s-gaming-princeof-15fa57ff31-6933c5aaecd54910.elb.us-east-1.amazonaws.com
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
اختیاری
اگر می خواهید ثبت غلاف خود را فعال کنید این مراحل را دنبال کنید
یک فضای نام برای aws-observability و یک نمایه fargate ایجاد کنید
kubectl create ns aws-observability
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
eksctl create fargateprofile \
–cluster gaming-cluster \
–name fp-observability \
–namespace aws-observability \
–region us-east-1
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
بررسی کنید که نقش اجرایی این نمایه fargate دارای مجوزهای لازم برای اجرای رویداد logs در cloudwatch باشد، در غیر این صورت یک خط مشی درون خطی در داخل آن نقش با مجوزهای زیر ایجاد کنید.
توجه: حتماً نام خاص گروه گزارشی را که قرار است استفاده کنید اضافه کنید
{
“Version”: “2012-10-17”,
“Statement”: [
{
“Effect”: “Allow”,
“Action”: [
“logs:CreateLogStream”,
“logs:CreateLogGroup”,
“logs:DescribeLogStreams”,
“logs:PutLogEvents”
],
“Resource”: “*”
}
]
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
اکنون یک configmap مانند این ایجاد کنید و آن را اعمال کنید، مطمئن شوید که طبق نیاز خود تغییر دهید، این configmap شروع به ورود به یک گروه گزارش در cloudwatch به نام gaming-cluster می کند.
apiVersion: v1
kind: ConfigMap
metadata:
name: aws-logging
namespace: aws-observability
data:
flb_log_cw: “false” # set to true to ship Fluent Bit process logs to CloudWatch.
filters.conf: |
[FILTER]
Name parser
Match *
Key_name log
Parser crio
[FILTER]
Name kubernetes
Match kube.*
Merge_Log On
Keep_Log Off
Buffer_Size 0
Kube_Meta_Cache_TTL 300s
output.conf: |
[OUTPUT]
Name cloudwatch_logs
Match kube.*
region us-east-1
log_group_name gaming-cluster
log_stream_prefix from-fluent-bit-
log_retention_days 60
auto_create_group true
parsers.conf: |
[PARSER]
Name crio
Format Regex
Regex ^(?[^ ]+) (?stdout|stderr) (?P|F) (?.*)$
Time_Key time
Time_Format %Y-%m-%dT%H:%M:%S.%L%z
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
kubectl apply -f observability.yaml
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
حتماً استقرارهای خود را مجدداً راه اندازی کنید!
kubectl rollout restart deployment prince-of-persia -n gaming
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
توجه: آیا توصیه می شود فقط موارد حیاتی را فیلتر کنید، حفظ گروه سیاهه را تغییر دهید زیرا ممکن است برای دریافت هزاران سیاهههای مربوط هزینه بر باشد.
امیدوارم این راهنما بتواند مفید باشد! بازی مبارک!
در این مقاله، راهنمای گام به گام نحوه ایجاد یک خوشه EKS با استفاده از eksctl (v1.30) را ارائه خواهم کرد. همچنین نحوه استقرار یک بازی بر اساس نسخه MS-DOS Prince of Persia را نشان خواهم داد.
الزامات
- حساب AWS / AWS CLI
- حساب Github یا هر مخزن git
- داکر
- exctl
- سکان هدایت
قدم زدن
سرویس Cloud Shell را در AWS باز کنید.
اگر قبلاً نه، eksctl را با دستور زیر نصب کنید:
curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
sudo mv /tmp/eksctl /usr/local/bin
حالا بیایید با استفاده از fargate به ساخت کلاستر خود با نسخه 1.30 ادامه دهیم. دستور زیر را اجرا کنید. (حتما خوشه خود را در همان منطقه ای که VPC خود ایجاد می کنید)
eksctl create cluster --name gaming-cluster --version 1.30 --region us-east-1 --fargate
اگر می خواهید خوشه خود را در یک VPC خاص ایجاد کنید، حتماً زیرشبکه های مربوطه را مشخص کنید (در غیر این صورت این دستور یک vpc اختصاص داده شده به eks ایجاد می کند)
eksctl create cluster --name gaming-cluster --version 1.30 --region us-east-1 --fargate --vpc-private-subnets subnet-private-1, subnet-private-2
این فرآیند ممکن است حدود 20 تا 25 دقیقه طول بکشد.
اکنون بیایید یک ارائه دهنده oidc را در خوشه خود مرتبط کنیم.
eksctl utils associate-iam-oidc-provider --region us-east-1 --cluster gaming-cluster --approve
خوشه ما اکنون با یک نمایه fargate پیشفرض آماده است که شامل فضای نام پیشفرض و سیستم kube است
بیایید یک نمایه fargate برای برنامه بازی خود ایجاد کنیم. (حتما ns را در داخل خوشه k8s خود نیز ایجاد کنید)
eksctl create fargateprofile \
--cluster gaming-cluster \
--name fp-gaming \
--namespace gaming \
--region us-east-1
اکنون، بیایید کنترلر AWS Load Balancer را اضافه کنیم تا برنامه ما با استفاده از متعادل کننده بار AWS نمایش داده شود.
برای انجام این کار باید یک خط مشی iam، یک سرویس حساب ایجاد کنیم و افزونه را با helm نصب کنیم.
این مثال سیاست IAM را در نظر بگیرید:
curl -o iam-policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/install/iam_policy.json
خط مشی IAM را ایجاد کنید
aws iam create-policy \
--policy-name AWSLoadBalancerControllerIAMPolicy-EKS \
--policy-document file://iam-policy.json
حالا بیایید یک حساب کاربری برای این کنترلر ایجاد کنیم
eksctl create iamserviceaccount --cluster=gaming-cluster --namespace=kube-system --name=aws-load-balancer-controller --attach-policy-arn=arn:aws:iam:::policy/AWSLoadBalancerControllerIAMPolicy-EKS --approve
عالیه اکنون نوبت فرمان است، برای نصب چند نمودار مفید، در این مورد کنترلر تعادل بار aws.
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
دستورات زیر را اجرا کنید:
helm repo add eks https://aws.github.io/eks-charts
kubectl apply -k "github.com/aws/eks-charts/stable/aws-load-balancer-controller/crds?ref=master"
helm upgrade -i aws-load-balancer-controller eks/aws-load-balancer-controller -n kube-system --set clusterName=gaming-cluster --set serviceAccount.create=false --set serviceAccount.name=aws-load-balancer-controller --set vpcId=
بسیار عالی اکنون می توانیم به خوشه خود دسترسی پیدا کنیم
aws eks update-kubeconfig --name gaming-cluster --region us-east-1
قبل از ادامه، اجازه دهید فضای نام بازی خود را ایجاد کنیم
kubectl create ns gaming
تقریباً رسیدیم، حالا نوبت بازی است.
برای این کار به لطف oklemenz، ultrabolido و jmechner از این چنگال استفاده خواهم کرد.
git clone https://github.com/bdllerena/PrinceJS
پس از شبیهسازی تصویر ما، مطمئن شوید که یک مخزن ECR ایجاد کردهاید (یا از هر کدام به انتخاب خود برای میزبانی تصویر Prince of Persia ما استفاده کنید)
حالا دستور push را کپی کنید، باید شبیه به این باشد
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin .dkr.ecr.us-east-1.amazonaws.com
در داخل مخزن ما باید یک Dockerfile وجود داشته باشد که شبیه این باشد.
توجه: ما از پرچم –platform=linux/amd64 استفاده می کنیم زیرا خوشه Kubernetes ما از این پلتفرم پشتیبانی می کند. در غیر این صورت، اگر تصویر Docker را با ابزارهایی مانند Docker Desktop بسازیم، در عوض تصویر را با سیستم عامل محلی سازگار می کند.
FROM --platform=linux/amd64 node:18
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 8080
CMD ["npm", "start"]
در داخل مخزن ما دستورات زیر را اجرا کنید
docker build -t prince-of-persia .
پس از اینکه تصویر خود را ساختیم، بیایید آن را تگ کرده و به ECR فشار دهیم
docker tag prince-of-persia:latest .dkr.ecr.us-east-1.amazonaws.com/prince-of-persia:latest
docker push .dkr.ecr.us-east-1.amazonaws.com/prince-of-persia:latest
apiVersion: apps/v1
kind: Deployment
metadata:
name: prince-of-persia
namespace: gaming
spec:
replicas: 1
selector:
matchLabels:
app: prince-of-persia
template:
metadata:
labels:
app: prince-of-persia
spec:
containers:
- name: prince-of-persia
image: .dkr.ecr.us-east-1.amazonaws.com/prince-of-persia:latest
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: ip
service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing
service.beta.kubernetes.io/aws-load-balancer-type: external
name: prince-of-persia
namespace: gaming
spec:
ports:
- port: 80
protocol: TCP
targetPort: 8080
selector:
app: prince-of-persia
type: LoadBalancer
پس از بررسی اینکه تصویر ما همان است که به ECR فشار دادیم، مانیفست ما را اجرا کنید!
kubectl apply -f manifest.yaml
این مانیفست قرار است یک استقرار با 1 ماکت (1 غلاف) و سرویسی ایجاد کند که یک متعادل کننده بار شبکه به عنوان رو به مشتری (عمومی) ایجاد کند.
بعد از چند دقیقه بررسی کنید که آیا سرویس با این دستور ایجاد شده است یا خیر
kubectl get svc -n gaming
عالیه! اگر می خواهید می توانید سیاهه های مربوط به غلاف را بررسی کنید و ببینید آیا همه چیز آماده است یا خیر
kubectl get pods -n gaming
kubectl logs -f prince-of-persia-.... -n gaming
در نهایت بیایید با رفتن به svc که قبلا ایجاد کردیم از بازی خود لذت ببریم، باید کمی شبیه به این باشد
k8s-gaming-princeof-15fa57ff31-6933c5aaecd54910.elb.us-east-1.amazonaws.com
اختیاری
اگر می خواهید ثبت غلاف خود را فعال کنید این مراحل را دنبال کنید
یک فضای نام برای aws-observability و یک نمایه fargate ایجاد کنید
kubectl create ns aws-observability
eksctl create fargateprofile \
--cluster gaming-cluster \
--name fp-observability \
--namespace aws-observability \
--region us-east-1
بررسی کنید که نقش اجرایی این نمایه fargate دارای مجوزهای لازم برای اجرای رویداد logs در cloudwatch باشد، در غیر این صورت یک خط مشی درون خطی در داخل آن نقش با مجوزهای زیر ایجاد کنید.
توجه: حتماً نام خاص گروه گزارشی را که قرار است استفاده کنید اضافه کنید
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogStream",
"logs:CreateLogGroup",
"logs:DescribeLogStreams",
"logs:PutLogEvents"
],
"Resource": "*"
}
]
}
اکنون یک configmap مانند این ایجاد کنید و آن را اعمال کنید، مطمئن شوید که طبق نیاز خود تغییر دهید، این configmap شروع به ورود به یک گروه گزارش در cloudwatch به نام gaming-cluster می کند.
apiVersion: v1
kind: ConfigMap
metadata:
name: aws-logging
namespace: aws-observability
data:
flb_log_cw: "false" # set to true to ship Fluent Bit process logs to CloudWatch.
filters.conf: |
[FILTER]
Name parser
Match *
Key_name log
Parser crio
[FILTER]
Name kubernetes
Match kube.*
Merge_Log On
Keep_Log Off
Buffer_Size 0
Kube_Meta_Cache_TTL 300s
output.conf: |
[OUTPUT]
Name cloudwatch_logs
Match kube.*
region us-east-1
log_group_name gaming-cluster
log_stream_prefix from-fluent-bit-
log_retention_days 60
auto_create_group true
parsers.conf: |
[PARSER]
Name crio
Format Regex
Regex ^(?
Time_Key time
Time_Format %Y-%m-%dT%H:%M:%S.%L%z
kubectl apply -f observability.yaml
حتماً استقرارهای خود را مجدداً راه اندازی کنید!
kubectl rollout restart deployment prince-of-persia -n gaming
توجه: آیا توصیه می شود فقط موارد حیاتی را فیلتر کنید، حفظ گروه سیاهه را تغییر دهید زیرا ممکن است برای دریافت هزاران سیاهههای مربوط هزینه بر باشد.
امیدوارم این راهنما بتواند مفید باشد! بازی مبارک!