برنامه نویسی

نحوه تنظیم اولین خوشه 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 و خط مشی های شبکه را برای ارائه اتصال به برنامه های ایمن و مقیاس پذیر با هم پوشش می دهد.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا