آموزش راه اندازی K3S , GlusterFS , Load balancer - وان سرور آکـادمی
آموزش راه اندازی K3S , GlusterFS , Load balancer
آموزش راه اندازی K3S , GlusterFS , Load balancer

آموزش راه اندازی K3S , GlusterFS , Load balancer

زمان تقریبی مطالعه: 7 دقیقه

آموزش راه اندازی K3S , GlusterFS , Load balancer

در این آموزش ما نحوه ی کوبرنتیس کلاستر با استفاده از K3S می پردازیم. K3S یک توزیع کوبرنتیس سبک و کم حجم است که برای سرور های دیتاسنتری هتزنر نظیر CX11 که مجموعه ی وان سرور ارائه می دهد، است. علاوه بر این، ما در این آموزش ، راه اندازی لود بالانسر ابری که بارگیری SSL و ارسال ترافیک به سیستم کوبرنتیس ما را انجام می دهد، را فرا خواهیم گرفت. ما یاد خواهید گرفت که چگونه با استفاده از GlusterFS یک فایل سیستم توزیع شده و تکراری راه اندازی کنیم.

موارد مورد نیاز و پیش نیاز ها

ما در این آموزش فرض می کنیم، که شما از طریق شرکت وان سرور یک سرور دیتاسنتری هتزنر تهیه نمودید و از طریق سایت ما به این سرور مورد نظر دسترسی دارید.

در این آموزش از اصطلاحات و موارد پیشفرض زیر استفاده شده است:

  • دامنه : <example.com>
  • کلید SSH (یا همان SSH Key): <your_ssh_key>
  • توکن مخفی تصادفی(Random secret token): <your_secret_token>
  • توکن API سرور دیتاسنتری: <hetzner_api_token>
  • آدرس های IP (IPV4) :
    • K3S Master: 10.0.0.2
    • K3S Node 1: 10.0.0.3
    • K3S Node 2: 10.0.0.4
    • Hetzner Cloud Load Balancer: 10.0.0.254

قدم اول – ایجاد شبکه پرایوت

اول، ما یک شبکه پرایوت ایجاد می کنیم؛ همچنین که از نود های کوبرنتیس ما برای ارتباط با یکدیگر تشکیل شده اند استفاده می کنیم. ما از شبکه ی 10.0.0.0/16 برای سابنت استفاده می کنیم.

hcloud network create --name network-kubernetes --ip-range 10.0.0.0/16
hcloud network add-subnet network-kubernetes --network-zone eu-central --type server --ip-range 10.0.0.0/16

قدم دوم – ایجاد گروه تعیین سطح و سرورها

در ادامه، یک گروه قرارگیری “گسترش” یا “spread” برای سرورهای خود و سپس ماشین های مجازی ایجاد می کنیم.

قدم دوم بخش اول – ایجاد گروه قرار گیری spread (اختیاری)

گروه تعیین سطح برای تضمین این است که ماشین های مجازی ما (VMs) بر روی هاست های مختلف ایجاد شوند، پس در این مورد، اگر هاست خراب شود و یا از دسترس خارج شود، هیچ کدام از ماشین های مجازی دیگر را تحت تاثیر خود قرار نمی دهد.

hcloud placement-group create --name group-spread --type spread

قدم دوم بخش دوم – ایجاد ماشین های مجازی

در این جا ما از دبیان 10 استفاده می کنیم.

hcloud server create --datacenter nbg1-dc3 --type cx11 --name master-1 --image debian-10 --ssh-key <your_ssh_key> --network network-kubernetes --placement-group group-spread
hcloud server create --datacenter nbg1-dc3 --type cx11 --name node-1 --image debian-10 --ssh-key <your_ssh_key> --network network-kubernetes --placement-group group-spread
hcloud server create --datacenter nbg1-dc3 --type cx11 --name node-2 --image debian-10 --ssh-key <your_ssh_key> --network network-kubernetes --placement-group group-spread

قدم سوم – ایجاد و اعلام فایروال

خب، حالا که سرور های ما ایجاد شده اند و همچنین فعال هستند، با هم یک فایروال را ایجاد و آن را در ترافیک ورودی و خروجی محدود می کینم(به نوعی به تنظیم آن میپردازیم). ممکن ما فایروال را با توجه به نیاز های خودمان (نیاز باشد که) کمی کاستومایز کنیم.

ایجاد فایروال:

hcloud firewall create --name firewall-kubernetes

اجازه یا Allow دادن ورودی SSH و ICMP :

hcloud firewall add-rule firewall-kubernetes --description "Allow SSH In" --direction in --port 22 --protocol tcp --source-ips 0.0.0.0/0 --source-ips ::/0
hcloud firewall add-rule firewall-kubernetes --description "Allow ICMP In" --direction in --protocol icmp --source-ips 0.0.0.0/0 --source-ips ::/0

اجازه یا Allow دادن خروجی ICMP، DNS، HTTP، HTTPS و NTP:

hcloud firewall add-rule firewall-kubernetes --description "Allow ICMP Out" --direction out --protocol icmp --destination-ips 0.0.0.0/0 --destination-ips ::/0
hcloud firewall add-rule firewall-kubernetes --description "Allow DNS TCP Out" --direction out --port 53 --protocol tcp --destination-ips 0.0.0.0/0 --destination-ips ::/0
hcloud firewall add-rule firewall-kubernetes --description "Allow DNS UDP Out" --direction out --port 53 --protocol udp --destination-ips 0.0.0.0/0 --destination-ips ::/0
hcloud firewall add-rule firewall-kubernetes --description "Allow HTTP Out" --direction out --port 80 --protocol tcp --destination-ips 0.0.0.0/0 --destination-ips ::/0
hcloud firewall add-rule firewall-kubernetes --description "Allow HTTPS Out" --direction out --port 443 --protocol tcp --destination-ips 0.0.0.0/0 --destination-ips ::/0
hcloud firewall add-rule firewall-kubernetes --description "Allow NTP UDP Out" --direction out --port 123 --protocol udp --destination-ips 0.0.0.0/0 --destination-ips ::/0

اعمال رول های فایروال بر روی هر سه سرورها:

hcloud firewall apply-to-resource firewall-kubernetes --type server --server master-1
hcloud firewall apply-to-resource firewall-kubernetes --type server --server node-1
hcloud firewall apply-to-resource firewall-kubernetes --type server --server node-2

قدم چهارم – نصب K3S

خب خب! الان زمان K3S رسیده. قبل از این که نود اصلی و نود های عامل را آماده کنیم، اول سیستم را آپگرید کرده و AppArmor را نصب می کنیم. به سرور مجازی های ایجاد شده SSH کرده و سپس دستور های زیر را بر روی همه ی آن ها اجرا می کنیم:

apt update
apt upgrade -y
apt install apparmor apparmor-utils -y

قدم چهارم بخش اول – نصب K3S بر روی نود اصلی

به نود اصلی (یا مستر نود) SSH می کنیم، و دستورات زیر را برای نصب و اجرا K3S سرور اجرا می کنیم:

curl -sfL https://get.k3s.io | sh -s - server \
    --disable-cloud-controller \
    --disable metrics-server \
    --write-kubeconfig-mode=644 \
    --disable local-storage \
    --node-name="$(hostname -f)" \
    --cluster-cidr="10.244.0.0/16" \
    --kube-controller-manager-arg="address=0.0.0.0" \
    --kube-controller-manager-arg="bind-address=0.0.0.0" \
    --kube-proxy-arg="metrics-bind-address=0.0.0.0" \
    --kube-scheduler-arg="address=0.0.0.0" \
    --kube-scheduler-arg="bind-address=0.0.0.0" \
    --kubelet-arg="cloud-provider=external" \
    --token="<your_secret_token>" \
    --tls-san="$(hostname -I | awk '{print $2}')" \
    --flannel-iface=ens10

برای اطلاعات بیشتر در باره ی K3S می توانید، به اسناد ارائه شده یا همان داکیومنشن آن (در این لینک) مراجعه کنید. اما به طور خلاصه :

  • ما برای ذخیره ی بیشتر مقداری از حافظه؛ metrics server را غیر فعال می کنیم.
  • ما ذخیره سازی لوکال را غیر فعال می کنیم چون قرار است از GlusterFS استفاده کنیم.
  • ما CIDR کلاستر را بر روی 10.244.0.0/16 تنظیم می کنیم.
  • ما سه مورد یعنی : Kube Controller ، همچنین Kube Proxy ، و Kube Scheduler را بر روی هر آدرسی به حالت پذیرا قرار می دهیم(با توجه به فایروال)
  • ما رمز توکن شیر شده را به مورد فوق تنظیم کرده ایم، یعنی : <your_secret_token>

یک راز بزرگ درمورد 90 % هاستینگ های ایرانی، اورسل کردن بیش از حد است که باعث افت کیفیت سرورها میشود.

وان سرور با ارائه دسترسی های مختلف این امکان را به شما خواهد داد که تمامی منابع سرورتان را مدیریت و بررسی کنید و همچنین با ارائه گارانتی 100% برگشت وجه ریسک خرید شما را به %0 کاهش میدهد.

برای خرید سرور مجازی با گارانتی 100% بازگشت وجه کلیک کنید.

قدم چهارم بخش دوم – نصب Hetzner Cloud Controller Manager

هنوز بر روی نود اصلی قرار داریم، برای نصب این مورد از دستور زیر استفاده می کنیم:

kubectl -n kube-system create secret generic hcloud --from-literal=token=<hetzner_api_token> --from-literal=network=network-kubernetes
kubectl apply -f https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm-networks.yaml

قدم چهارم بخش سوم – نصب کنترل کننده ی ارتقا سیستم (اختیاری)

دستور زیر آپگرید کننده ی K3S را ارائه می دهد:

kubectl apply -f https://github.com/rancher/system-upgrade-controller/releases/latest/download/system-upgrade-controller.yaml

قدم چهارم بخش چهارم – نصب K3S بر روی نود عامل

اکنون که سرور K3S ما راه اندازی شده است، به دو نود عامل SSH کرده و دستورات زیر را برای نصب K3S و ارتباط آن با سرور اجرا می کنیم:

curl -sfL https://get.k3s.io | K3S_URL=https://10.0.0.2:6443 K3S_TOKEN=<your_secret_token> sh -s - agent \
    --node-name="$(hostname -f)" \
    --kubelet-arg="cloud-provider=external" \
    --flannel-iface=ens10

قدم پنجم – نصب GlusterFS (اختیاری)

GlusterFS یک نرم افزار رایگان و اوپن سورس (منبع باز) سیستم فایل شبکه به صورت مقیاس پذیر است. می‌توان از آن برای تکثیر فایل‌ها در تمام ماشین‌های مجازی خود استفاده کنیم تا pod های ما بدون توجه به اینکه در کدام نود در حال اجرا هستند، به ذخیره‌سازی دائمی خود دسترسی داشته باشند.

قدم پنجم بخش اول – آماده کردن تمام نود ها

به هر 3 سرور SSH کرده و دستورات زیر را برای نصب، فعال نمودن و اجرا کردن، سرور Gluster بر روی همه ی ماشین ها اجرا می کنیم:

wget -O - https://download.gluster.org/pub/gluster/glusterfs/9/rsa.pub | apt-key add -
echo deb [arch=amd64] https://download.gluster.org/pub/gluster/glusterfs/9/LATEST/Debian/buster/amd64/apt buster main > /etc/apt/sources.list.d/gluster.list
apt update && apt install -y glusterfs-server
systemctl enable glusterd && systemctl start glusterd

فایل سیستم کنترلی Gluster در پوشه ای به نام brick قرار دارد. همچنین توسط GlusterFS نصب شده است. با دستورات زیر دایرکتوری های لازم را ایجاد کنیم:

mkdir -p /data/glusterfs/k8s/brick1
mkdir -p /mnt/gluster-k8s

قدم پنجم بخش دوم – تنظیم کلاستر

فقط بر روی نود اصلی، 2 نود دیگر را به عنوان همتا اضافه می کنیم:

gluster peer probe 10.0.0.3
gluster peer probe 10.0.0.4

تایید کردن وضعیت بر روی نود اصلی و نود های فرعی:

gluster peer status

قدم پنجم بخش سوم – ایجاد volume

در نود اصلی خودمان، دستور زیر را برای ایجاد و شروع یک volume تکراری اجرا می کنیم:

gluster volume create k8s replica 3 \
    10.0.0.2:/data/glusterfs/k8s/brick1/brick \
    10.0.0.3:/data/glusterfs/k8s/brick1/brick \
    10.0.0.4:/data/glusterfs/k8s/brick1/brick \
    force
gluster volume start k8s
gluster volume info

قدم پنجم بخش چهارم – اجرا کردن GlusterFS volume

بر روی هر سه نود GlusterFS volume جدید اجرا شده را مونت می کنیم:

echo "127.0.0.1:/k8s /mnt/gluster-k8s glusterfs defaults,_netdev 0 0" >> /etc/fstab
mount /mnt/gluster-k8s

قدم ششم – تنظیم لود بالانس (load balancing)

در اینجا ما به طور مثال از لود بالانسر هتزنر SSL offloading و برای مسیریابی رکوئست های HTTP به راه اندازی K3S استفاده می کینم.

قدم ششم بخش اول – فعال کردن پروتکل پراکسی در Traefik

با استفاده از دستورات زیر این عمل را انجام می دهیم:

cat <<EOF > /var/lib/rancher/k3s/server/manifests/traefik-config.yaml
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
  name: traefik
  namespace: kube-system
spec:
  valuesContent: |-
    additionalArguments:
      - "--entryPoints.web.proxyProtocol.trustedIPs=10.0.0.254"
      - "--entryPoints.web.forwardedHeaders.trustedIPs=10.0.0.254"
EOF

قدم ششم بخش دوم – ایجاد load balancer (متعادل کننده بار)

متعادل کننده بار یا همان لود بالانسر را ایجاد کنیم و با استفاده از IP پرایوت ثابت 10.0.0.254 آن را به شبکه پرایوت یا خصوصی متصل می کنیم:

hcloud load-balancer create --type lb11 --location nbg1 --name lb-kubernetes
hcloud load-balancer attach-to-network --network network-kubernetes --ip 10.0.0.254 lb-kubernetes

سه ماشین مجازی خودمان را به عنوان تارگت ها اضافه می کنیم و مطمئن می شویم که ترافیک با استفاده از شبکه پرایوت هدایت می شود:

hcloud load-balancer add-target lb-kubernetes --server master-1 --use-private-ip
hcloud load-balancer add-target lb-kubernetes --server node-1 --use-private-ip
hcloud load-balancer add-target lb-kubernetes --server node-2 --use-private-ip

با استفاده از Let’s Encrypt یک گواهی یا همان سرتیفیکیت برای <example.com> ایجاد می کنیم و <certificate_id> را می گیریم:

hcloud certificate create --domain <example.com> --type managed --name cert-t1
hcloud certificate list

با استفاده از پروتکل پروکسی، سرویس HTTP را برای <example.com> اضافه می کنیم و بررسی سلامت را فعال می کنیم:

hcloud load-balancer add-service lb-kubernetes --protocol https --http-redirect-http --proxy-protocol --http-certificates <certificate_id>
hcloud load-balancer update-service lb-kubernetes --listen-port 443 --health-check-http-domain <example.com>

 

قدم هفتم – تست نمودن setup انجام شده

تنظیمات و برپایی و ست آپ ما که مربوط به K3S است به اتمام رسیده است. خب وقت این رسیده که از nginx و سرویس HTTP توسط K3S استفاده کنیم.

قدم هفتم بخش اول – نوشتن در GlusterFS volume

یک index.html ایجاد می کنیم:

mkdir /mnt/gluster-k8s/webtest1
echo "Hello World!" > /mnt/gluster-k8s/webtest1/index.html

قدم هفتم بخش دوم – اسقرار یک وب سرور

nginx را مستقر و ایجاد کنید، GlusterFS volume را برای محتوای ثابت نصب می کنیم، پورت HTTP 80 را با استفاده از یک سرویس در معرض دید (انتشار) قرار می دهیم و یک مسیر ورودی Traefik برای دامنه خود ایجاد می کینم :

cat <<"EOF" | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
  name: webtest1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: webtest1
  template:
    metadata:
      labels:
        app: webtest1
    spec:
      volumes:
        - name: volume-webtest1
          hostPath:
            path: "/mnt/gluster-k8s/webtest1"
      containers:
      - image: nginx
        name: nginx
        ports:
        - name: port-nginx
          containerPort: 80
        volumeMounts:
          - mountPath: "/usr/share/nginx/html"
            name: volume-webtest1
            readOnly: false
---
apiVersion: v1
kind: Service
metadata:
  name: webtest1
spec:
  ports:
    - port: 80
      protocol: TCP
      targetPort: 80
  selector:
    app: webtest1
  type: ClusterIP
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: webtest1
spec:
  entryPoints:
    - web
  routes:
  - match: Host(`<example.com>`)
    kind: Rule
    services:
    - name: webtest1
      port: 80
EOF

قدم هفتم بخش سوم – دسترسی به وب سایت

اتمام کار، همچنین ما باید به وب سایت مان https://<example.com> دسترسی داشته باشیم.

جمع بندی

ما با موفقیت یک کلاستر K3S Kubernetes را با یک نود سرور و دو نود عامل راه اندازی کردیم. متعادل کننده بار یا همان لود بالانسر ترافیک را به سیستم ما ارائه می دهد و بارگذاری HTTPS را نیز انجام داده و ما آماده هستیم تا مقداری حجم کار را روی K3S خود قرار دهیم.

خب، دوستان وان سروری اگر سوال ، پیشنهاد و انتقادی هست در خدمتیم. میتونید سوال ها تون رو در قسمت نظرات بپرسین تا خدمتتون پاسخ بدیم.

1.1/5 - (120 امتیاز)