نحوه تنظیم اولین خوشه Kubernetes و استقرار برنامه های کاربردی

مقدمه
ایجاد اولین خوشه Kubernetes شما نشانگر آغاز سفر ارکستراسیون کانتینر شما است. در حالی که خوشه های تولید به پیکربندی و ملاحظات امنیتی پیچیده نیاز دارند ، شروع به کار با یک خوشه توسعه محلی ساده و برای یادگیری مفاهیم Kubernetes ضروری است.
این مقاله شما را از طریق راه اندازی یک خوشه محلی Kubernetes با استفاده از Minikube و استفاده از اولین برنامه خود ، به شما می دهد و تجربه عملی را با اشیاء Kubernetes Core و گردش کار به شما ارائه می دهد.
پیش نیازهای
- Docker روی دستگاه محلی خود نصب و اجرا شده است
- آشنایی اساسی با عملیات خط فرمان
- ویرایشگر متن برای ایجاد پرونده های پیکربندی YAML
- حداقل 4 گیگابایت رم برای ماشین مجازی موجود است
Minikube و Kubectl را نصب کنید
Minikube یک خوشه تک گره Kubernetes را در یک ماشین مجازی ایجاد می کند ، مناسب برای توسعه و یادگیری. Kubectl ابزار خط فرمان برای تعامل با هر خوشه Kubernetes است.
Minikube را روی MACOS نصب کنید
$ brew install minikube
Minikube را در لینوکس نصب کنید
$ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
$ sudo install minikube-linux-amd64 /usr/local/bin/minikube
kubectl را نصب کنید
$ curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
$ sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
نصب را تأیید کنید
$ minikube version
$ kubectl version --client
اولین خوشه Kubernetes خود را شروع کنید
خوشه Minikube خود را با منابع کافی برای کار توسعه راه اندازی کنید:
$ minikube start --memory=4096 --cpus=2
Minikube اجزای Kubernetes را بارگیری می کند و خوشه شما را شروع می کند. این روند در اولین اجرا چند دقیقه طول می کشد.
وضعیت خوشه را تأیید کنید
$ kubectl cluster-info
$ kubectl get nodes
شما باید خروجی را تأیید کنید که خوشه شما در حال اجرا است و یک گره را در حالت آماده نشان می دهد.
اشیاء Kubernetes را از طریق استقرار عملی بیاموزید
به جای پوشش نظریه ، با استقرار یک برنامه وب کامل با یک باطن پایگاه داده ، اشیاء Kubernetes را یاد خواهید گرفت.
یک فضای نام برای سازمان ایجاد کنید
فضای نام جدایی منطقی را در خوشه شما فراهم می کند:
apiVersion: v1
kind: Namespace
metadata:
name: todo-app
این را ذخیره کنید namespace.yaml
و آن را اعمال کنید:
$ kubectl apply -f namespace.yaml
یک پایگاه داده را با ذخیره مداوم مستقر کنید
یک پایگاه داده MySQL با ذخیره مداوم ایجاد کنید:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
namespace: todo-app
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
namespace: todo-app
spec:
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:8.0
env:
- name: MYSQL_ROOT_PASSWORD
value: "password123"
- name: MYSQL_DATABASE
value: "todoapp"
ports:
- containerPort: 3306
volumeMounts:
- name: mysql-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-storage
persistentVolumeClaim:
claimName: mysql-pvc
---
apiVersion: v1
kind: Service
metadata:
name: mysql-service
namespace: todo-app
spec:
selector:
app: mysql
ports:
- port: 3306
targetPort: 3306
پس انداز کردن mysql.yaml
و استقرار:
$ kubectl apply -f mysql.yaml
برنامه وب را مستقر کنید
ایجاد یک برنامه برای یک برنامه وب node.js:
apiVersion: apps/v1
kind: Deployment
metadata:
name: todo-web
namespace: todo-app
spec:
replicas: 3
selector:
matchLabels:
app: todo-web
template:
metadata:
labels:
app: todo-web
spec:
containers:
- name: todo-web
image: node:16-alpine
command: ["sh", "-c"]
args:
- |
npm init -y
npm install express mysql2
cat > app.js << 'EOF'
const express = require('express');
const mysql = require('mysql2');
const app = express();
const db = mysql.createConnection({
host: 'mysql-service',
user: 'root',
password: 'password123',
database: 'todoapp'
});
app.get('/health', (req, res) => {
res.json({ status: 'healthy', timestamp: new Date() });
});
app.get("https://dev.to/", (req, res) => {
res.json({
message: 'Todo App API',
database: 'connected',
replicas: process.env.HOSTNAME
});
});
app.listen(3000, () => {
console.log('Server running on port 3000');
});
EOF
node app.js
ports:
- containerPort: 3000
env:
- name: NODE_ENV
value: "production"
livenessProbe:
httpGet:
path: /health
port: 3000
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /health
port: 3000
initialDelaySeconds: 5
periodSeconds: 5
---
apiVersion: v1
kind: Service
metadata:
name: todo-web-service
namespace: todo-app
spec:
selector:
app: todo-web
ports:
- port: 80
targetPort: 3000
type: ClusterIP
پس انداز کردن web-app.yaml
و استقرار:
$ kubectl apply -f web-app.yaml
درخواست خود را در معرض ترافیک خارجی قرار دهید
یک ورود ایجاد کنید تا برنامه خود را از خارج از خوشه در دسترس قرار دهید:
Ingress را در Minikube فعال کنید
$ minikube addons enable ingress
منبع Ingress ایجاد کنید
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: todo-ingress
namespace: todo-app
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: todo.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: todo-web-service
port:
number: 80
پس انداز کردن ingress.yaml
و درخواست کنید:
$ kubectl apply -f ingress.yaml
به برنامه خود دسترسی پیدا کنید
IP Minikube را به پرونده میزبان خود اضافه کنید:
$ echo "$(minikube ip) todo.local" | sudo tee -a /etc/hosts
باز http://todo.local
در مرورگر خود برای دیدن برنامه خود در حال اجرا است.
استقرار خود را نظارت و اشکال زدایی کنید
وضعیت POD را بررسی کنید
$ kubectl get pods -n todo-app
$ kubectl describe pod -n todo-app
مشاهده سیاهههای مربوط به برنامه
$ kubectl logs -f deployment/todo-web -n todo-app
$ kubectl logs -f deployment/mysql -n todo-app
دستورات را در ظروف اجرا کنید
$ kubectl exec -it deployment/todo-web -n todo-app -- sh
$ kubectl exec -it deployment/mysql -n todo-app -- mysql -u root -p
برنامه خود را مقیاس کنید
با تنظیم تعداد ماکت ، مقیاس افقی را نشان دهید:
$ kubectl scale deployment todo-web --replicas=5 -n todo-app
$ kubectl get pods -n todo-app -w
تماشا کنید زیرا Kubernetes غلافهای اضافی ایجاد می کند و ترافیک را در بین آنها توزیع می کند.
بفهمید چه چیزی ساخته اید
استقرار شما چندین مفهوم کلیدی Kubernetes را نشان می دهد:
غلاف و استقرار
هر مؤلفه برنامه در غلافهای مدیریت شده توسط استقرار اجرا می شود که تعداد ماکت مورد نظر را تضمین می کند و به روزرسانی ها را کنترل می کند.
خدمات و تعادل بار
خدمات نقاط پایدار شبکه را ارائه می دهند و ترافیک را در ماکت های غلاف سالم توزیع می کنند.
ذخیره مداوم
PersistentVolumeClaims تضمین می کند که داده های بانک اطلاعاتی از راه اندازی مجدد غلاف و تنظیم مجدد جان سالم به در می برند.
بررسی های سلامتی
کاوشگرهای سرزادی و آمادگی به Kubernetes کمک می کند تا تعیین کنند چه موقع غلاف ها سالم و آماده دریافت ترافیک هستند.
ورود و دسترسی خارجی
کنترل کننده های Ingress مسیریابی HTTP را ارائه می دهند و خدمات را از خارج از خوشه در دسترس قرار می دهند.
پایان
شما با موفقیت یک برنامه چند لایه در Kubernetes مستقر کرده اید ، و مفاهیم اساسی مانند استقرار ، خدمات ، ذخیره مداوم و ورود را نشان می دهید. این تجربه دستی پایه و اساس درک ویژگی ها و الگوهای پیشرفته Kubernetes را فراهم می کند.
در مقاله بعدی ، شبکه های Kubernetes به طور مفصل مورد بررسی قرار می گیرد و نحوه عملکرد خدمات ، کنترل کننده های Ingress و خط مشی های شبکه را برای ارائه اتصال به برنامه های ایمن و مقیاس پذیر با هم پوشش می دهد.