شروع کار با Kubernetes در CentOS 7

Kubernetes یک سیستم عامل منبع باز است که توسط Google برای مدیریت برنامه های کانتینر شده در سرتاسر گروههای سرور ساخته شده است. این برنامه بر روی یک دهه و نیمی از تجربیات ایجاد شده توسط Google با داشتن خوشه های کانتینر در مقیاس ، ایجاد می کند و زیرساخت های سبک Google را در اختیار توسعه دهندگان قرار می دهد و از پروژه های منبع باز بهترین تولیدات ، مانند:

  • داکر : یک فناوری ظروف کاربردی.
  • Etcd : یک پایگاه داده توزیع شده با ارزش کلیدی که اطلاعات گسترده ای از خوشه ها را مدیریت می کند و کشف سرویس را ارائه می دهد.
  • Flannel : پارچه شبکه ای روی هم قرار دادن اتصال کانتینر به چندین سرور.

Kubernetes به توسعه دهندگان این امکان را می دهد تا زیرساخت های برنامه خود را بطور انحصاری از طریق فایل های YAML و انتزاعاتی مانند Pods ، RC و خدمات (بیشتر در مورد این مورد بعدی) تعریف کنند و تضمین کنند که خوشه اصلی در همه زمانها با حالت تعریف شده کاربر مطابقت دارد.

برخی از ویژگی های آن عبارتند از:

  • برنامه ریزی خودکار منابع سیستم و قرار دادن خودکار ظروف برنامه در یک خوشه.
  • مقیاس های برنامه ریزی در پرواز با یک دستور واحد.
  • به روزرسانی های با خرابی صفر
  • خوددرمانی: در صورت عدم موفقیت سرور ، تنظیم مجدد خودکار برنامه ها ، بررسی مجدد خودکار از برنامه.

اگر از قبل با Kubernetes آشنا هستید ، به سمت نصب بروید.

مفاهیم اساسی

Kubernetes انتزاعات زیر (واحدهای منطقی) را به توسعه دهندگان ارائه می دهد:

  • غلاف
  • کنترل کننده های تکرار.
  • برچسب ها.
  • خدمات.

غلاف

این واحد اصلی حجم کار Kubernetes است. غلاف یک "میزبان منطقی" مخصوص برنامه را در یک محیط محتوا مدل می کند. به عبارتی غیر عادی ، گروهی از برنامه ها یا سرویس هایی را که قبلاً برای اجرا در همان سرور در دنیای پیش از ظروف استفاده می کردند ، مدل می کند. ظروف داخل غلاف ، همان فضای نام شبکه را به اشتراک می گذارند و می توانند حجم داده را نیز به اشتراک بگذارند.

کنترل کننده های تکرار

غلاف ها برای گروه بندی چندین کانتینر به واحدهای کاربردی منطقی عالی هستند ، اما در صورت خرابی سرور ، تکثیر یا تغییر مجدد ارائه نمی دهند.

در اینجاست که یک کنترلر تکرار یا RC مفید است. RC تضمین می کند که تعدادی غلاف از یک سرویس معین همیشه در خوشه در حال اجرا است.

برچسب ها

آنها ابرداده هایی با ارزش کلیدی هستند که می توانند به هر منبع Kubernetes متصل شوند (غلاف ، RC ، خدمات ، گره ها ، ...).

خدمات

غلاف ها و کنترل کننده های تکثیر برای استقرار و توزیع برنامه ها در یک خوشه بسیار عالی هستند ، اما غلاف ها IP های موقت دارند که به محض تنظیم مجدد یا راه اندازی مجدد کانتینر تغییر می کنند.

یک سرویس Kubernetes یک نقطه پایانی ثابت (اتصال پورت مجازی IP + که به سرورهای میزبان وصل می شود) برای گروهی از غلاف ها که توسط یک کنترل کننده تکرار کنترل می شوند فراهم می کند.

خوشه Kubernetes

در ساده ترین شکل ، یک خوشه Kubernetes توسط دو نوع گره تشکیل شده است:

  • 1 استاد Kubernetes.
  • گره های N Kubernetes.

استاد Kubernetes

استاد Kubernetes واحد کنترل کل خوشه است.

اجزای اصلی استاد عبارتند از:

  • Etcd: یک پایگاه داده در سطح جهانی که اطلاعات مربوط به خوشه و سرویس ها و برنامه های در حال اجرا روی این خوشه را ذخیره می کند.
  • سرور Kube API: این مرکز اصلی مدیریت خوشه Kubernetes است و یک رابط RESTful را در معرض دید شما قرار می دهد.
  • مدیر کنترل: همانندسازی برنامه هایی است که توسط کنترل کننده های همانندسازی مدیریت می شوند.
  • برنامه زمانبندی: استفاده از منابع را در کل خوشه دنبال کرده و بر این اساس بارهای کاری را اختصاص می دهد.

گره Kubernetes

گره Kubernetes سرورهای کارگر هستند که وظیفه اجرای غلاف را بر عهده دارند.

اجزای اصلی یک گره عبارتند از:

  • Docker: یک Daemon که یک ظروف کاربردی تعریف شده در غلاف ها را اجرا می کند.
  • Kubelet: یک واحد کنترل غلاف در یک سیستم محلی.
  • Kube-proxy: پروکسی شبکه ای که مسیریابی صحیح را برای خدمات Kubernetes تضمین می کند.

نصب و راه اندازی

در این راهنما با استفاده از سرورهای CentOS 7 یک خوشه 3 گره ایجاد خواهیم کرد:

  • 1 استاد کوبورنتس (کوب مستر)
  • 2 گره Kubernetes (kube-node1 ، kube-node2)

بعد از همان مراحل نصب گره های Kubernetes می توانید به همان تعداد گره اضافی اضافه کنید.

همه گره ها

پیکربندی نام های میزبان و /etc/hosts:

# /etc/hostname
kube-master
# or kube-node1, kube-node2

# append to /etc/hosts
replace-with-master-server-ip kube-master
replace-with-node1-ip kube-node1
replace-with-node2-ip kube-node2

غیرفعال کردن دیوار آتش:

systemctl disable firewalld
systemctl stop firewalld

استاد Kubernetes

بسته های اصلی Kubernetes را نصب کنید:

yum install etcd kubernetes-master

پیکربندی:

# /etc/etcd/etcd.conf
# leave rest of the lines unchanged
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_LISTEN_PEER_URLS="http://localhost:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://0.0.0.0:2379"

# /etc/kubernetes/config
# leave rest of the lines unchanged
KUBE_MASTER="--master=http://kube-master:8080"

# /etc/kubernetes/apiserver
# leave rest of the lines unchanged
KUBE_API_ADDRESS="--address=0.0.0.0"
KUBE_ETCD_SERVERS="--etcd_servers=http://kube-master:2379"

شروع Etcd:

systemctl start etcd

پارچه شبکه روکش فلانل را نصب و پیکربندی کنید (این مورد نیاز است تا ظروف در حال اجرا روی سرورهای مختلف بتوانند یکدیگر را مشاهده کنند):

yum install flannel

یک پرونده پیکربندی Flannel ایجاد کنید ( flannel-config.json):

{
  "Network": "10.20.0.0/16",
  "SubnetLen": 24,
  "Backend": {
    "Type": "vxlan",
    "VNI": 1
  }  
}

پیکربندی Flannel را در سرور Etcd تنظیم کنید:

etcdctl set coreos.com/network/config < flannel-config.json

اشاره فلانل به سرور Etcd:

# /etc/sysconfig/flanneld
FLANNEL_ETCD="http://kube-master:2379"

خدمات را فعال کنید تا شروع به کار کنند:

systemctl enable etcd
systemctl enable kube-apiserver
systemctl enable kube-controller-manager
systemctl enable kube-scheduler
systemctl enable flanneld

راه اندازی مجدد سرور.

گره Kubernetes

بسته های گره Kubernetes را نصب کنید:

yum install docker kubernetes-node

دو مرحله بعدی Docker را برای استفاده بهتر از روکش ها برای عملکرد بهتر پیکربندی می کند. برای اطلاعات بیشتر به این پست وبلاگ مراجعه کنید :

پوشه فعلی ذخیره سازی docker را حذف کنید:

systemctl stop docker
rm -rf /var/lib/docker

تغییر پرونده های پیکربندی:

# /etc/sysconfig/docker
# leave rest of lines unchanged
OPTIONS='--selinux-enabled=false'

# /etc/sysconfig/docker
# leave rest of lines unchanged
DOCKER_STORAGE_OPTIONS=-s overlay

kube-node1 را برای استفاده از استاد قبلاً پیکربندی شده ما پیکربندی کنید:

# /etc/kubernetes/config
# leave rest of lines unchanged
KUBE_MASTER="--master=http://kube-master:8080"

# /etc/kubernetes/kubelet
# leave rest of the lines unchanged
KUBELET_ADDRESS="--address=0.0.0.0"
# comment this line, so that the actual hostname is used to register the node
# KUBELET_HOSTNAME="--hostname_override=127.0.0.1"
KUBELET_API_SERVER="--api_servers=http://kube-master:8080"

پارچه شبکه پوشش Flannel را نصب و پیکربندی کنید (دوباره - این مورد نیاز است تا ظروف در حال اجرا روی سرورهای مختلف بتوانند یکدیگر را مشاهده کنند):

yum install flannel

اشاره فلانل به سرور Etcd:

# /etc/sysconfig/flanneld
FLANNEL_ETCD="http://kube-master:2379"

فعال کردن خدمات:

systemctl enable docker
systemctl enable flanneld
systemctl enable kubelet
systemctl enable kube-proxy

راه اندازی مجدد سرور.

سرور Kubernetes خود را تست کنید

پس از راه اندازی مجدد همه سرورها ، بررسی کنید که آیا خوشه Kubernetes شما عملیاتی است:

[root@kube-master ~]# kubectl get nodes
NAME         LABELS                              STATUS
kube-node1   kubernetes.io/hostname=kube-node1   Ready
kube-node2   kubernetes.io/hostname=kube-node2   Ready

مثال: استقرار شبکه سلنیوم با استفاده از Kubernetes

سلنیوم چارچوبی برای خودکار سازی مرورگرها برای اهداف آزمایش است. این یک ابزار قدرتمند از زرادخانه هر توسعه دهنده وب است.

شبکه سلنیوم انجام تست از راه دور مقیاس پذیر و موازی تست ها را در یک خوشه گره سلنیوم که به یک مرکز مرکزی سلنیوم متصل هستند ، امکان پذیر می کند.

از آنجا که گره های سلنیوم خود بی تاب هستند و میزان گره هایی که ما اجرا می کنیم انعطاف پذیر است ، بسته به حجم کار تست ما ، این یک برنامه کاندیدای مناسب برای استقرار در یک خوشه Kubernetes است.

در بخش بعدی شبکه ای متشکل از 5 ظروف برنامه کاربردی را مستقر می کنیم:

  • 1 قطب مرکزی سلنیوم که نقطه انتهایی از راه دور است که آزمایشهای ما به آن متصل می شوند.
  • 2 گره سلنیوم که دارای Firefox هستند.
  • 2 گره سلنیوم که Chrome را اجرا می کنند.

استراتژی استقرار

برای مدیریت خودکار تکثیر و بهبودی خود ، یک کنترل کننده تکثیر Kubernetes برای هر نوع از ظروف کاربردی که در بالا ذکر شد ایجاد خواهیم کرد.

برای تهیه کننده هایی که تست های دارای نقطه پایانی توپی سلنیوم را انجام می دهند ، یک سرویس Kubernetes متصل به کنترل کننده تکثیر هاب ایجاد خواهیم کرد.

توپی سلنیوم

کنترل کننده تکرار
# selenium-hub-rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
  name: selenium-hub
spec:
  replicas: 1
  selector:
    name: selenium-hub
  template:
    metadata:
      labels:
        name: selenium-hub
    spec:
      containers:
        - name: selenium-hub
          image: selenium/hub
          ports:
            - containerPort: 4444

گسترش:

[root@kube-master ~]# kubectl create -f selenium-hub-rc.yaml
replicationcontrollers/selenium-hub
[root@kube-master ~]# kubectl get rc
CONTROLLER     CONTAINER(S)   IMAGE(S)       SELECTOR            REPLICAS
selenium-hub   selenium-hub   selenium/hub   name=selenium-hub   1
[root@kube-master ~]# kubectl get pods
NAME                 READY     STATUS    RESTARTS   AGE
selenium-hub-pilc8   1/1       Running   0          50s
[root@kube-master ~]# kubectl describe pod selenium-hub-pilc8
Name:               selenium-hub-pilc8
Namespace:          default
Image(s):           selenium/hub
Node:               kube-node2/45.63.16.92
Labels:             name=selenium-hub
Status:             Running
Reason:             
Message:            
IP:             10.20.101.2
Replication Controllers:    selenium-hub (1/1 replicas created)
Containers:
  selenium-hub:
    Image:      selenium/hub
    State:      Running
      Started:      Sat, 24 Oct 2015 16:01:39 +0000
    Ready:      True
    Restart Count:  0
Conditions:
  Type      Status
  Ready     True
Events:
  FirstSeen             LastSeen            Count   From            SubobjectPath               Reason      Message
  Sat, 24 Oct 2015 16:01:02 +0000   Sat, 24 Oct 2015 16:01:02 +0000 1   {scheduler }                            scheduled   Successfully assigned selenium-hub-pilc8 to kube-node2
  Sat, 24 Oct 2015 16:01:05 +0000   Sat, 24 Oct 2015 16:01:05 +0000 1   {kubelet kube-node2}    implicitly required container POD   pulled      Successfully pulled Pod container image "gcr.io/google_containers/pause:0.8.0"
  Sat, 24 Oct 2015 16:01:05 +0000   Sat, 24 Oct 2015 16:01:05 +0000 1   {kubelet kube-node2}    implicitly required container POD   created     Created with docker id 6de00106b19c
  Sat, 24 Oct 2015 16:01:05 +0000   Sat, 24 Oct 2015 16:01:05 +0000 1   {kubelet kube-node2}    implicitly required container POD   started     Started with docker id 6de00106b19c
  Sat, 24 Oct 2015 16:01:39 +0000   Sat, 24 Oct 2015 16:01:39 +0000 1   {kubelet kube-node2}    spec.containers     pulled      Successfully pulled image "selenium/hub"
  Sat, 24 Oct 2015 16:01:39 +0000   Sat, 24 Oct 2015 16:01:39 +0000 1   {kubelet kube-node2}    spec.containers     created     Created with docker id 7583cc09268c
  Sat, 24 Oct 2015 16:01:39 +0000   Sat, 24 Oct 2015 16:01:39 +0000 1   {kubelet kube-node2}    spec.containers     started     Started with docker id 7583cc09268c

در اینجا می توانیم ببینیم که Kubernetes ظرف توپی سلنیوم من را روی kube-node2 قرار داده است.

سرویس
# selenium-hub-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: selenium-hub
spec:
  type: NodePort
  ports:
  - port: 4444
    protocol: TCP
    nodePort: 30000
  selector:
    name: selenium-hub

گسترش:

[root@kube-master ~]# kubectl create -f selenium-hub-service.yaml
You have exposed your service on an external port on all nodes in your
cluster.  If you want to expose this service to the external internet, you may
need to set up firewall rules for the service port(s) (tcp:30000) to serve traffic.

See http://releases.k8s.io/HEAD/docs/user-guide/services-firewalls.md for more details.
services/selenium-hub
[root@kube-master ~]# kubectl get services
NAME           LABELS                                    SELECTOR            IP(S)           PORT(S)
kubernetes     component=apiserver,provider=kubernetes   <none>              10.254.0.1      443/TCP
selenium-hub   <none>                                    name=selenium-hub   10.254.124.73   4444/TCP

پس از استقرار این سرویس ، از موارد زیر قابل دسترسی خواهد بود:

  • هر گره Kubernetes ، از طریق IP مجازی 10.254.124.73 و پورت 4444.
  • شبکه های خارجی ، از طریق IP های عمومی هر گره Kubernetes ، در درگاه 30000.

شروع کار با Kubernetes در CentOS 7شروع کار با Kubernetes در CentOS 7 (با استفاده از IP عمومی گره Kubernetes)

گره های سلنیوم

کنترل کننده تکرار گره فایرفاکس:

# selenium-node-firefox-rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
  name: selenium-node-firefox
spec:
  replicas: 2
  selector:
    name: selenium-node-firefox
  template:
    metadata:
      labels:
        name: selenium-node-firefox
    spec:
      containers:
        - name: selenium-node-firefox
          image: selenium/node-firefox
          ports:
            - containerPort: 5900
          env:
            - name: HUB_PORT_4444_TCP_ADDR
              value: "replace_with_service_ip"
            - name: HUB_PORT_4444_TCP_PORT
              value: "4444"

گسترش:

جایگزین replace_with_service_ipدر selenium-node-firefox-rc.yamlبا واقعی هاب سلنیوم IP خدمات، در این مورد 10.254.124.73.

[root@kube-master ~]# kubectl create -f selenium-node-firefox-rc.yaml
replicationcontrollers/selenium-node-firefox

[root@kube-master ~]# kubectl get rc
CONTROLLER              CONTAINER(S)            IMAGE(S)                SELECTOR                     REPLICAS
selenium-hub            selenium-hub            selenium/hub            name=selenium-hub            1
selenium-node-firefox   selenium-node-firefox   selenium/node-firefox   name=selenium-node-firefox   2

[root@kube-master ~]# kubectl get pods
NAME                          READY     STATUS    RESTARTS   AGE
selenium-hub-pilc8            1/1       Running   1          1h
selenium-node-firefox-lc6qt   1/1       Running   0          2m
selenium-node-firefox-y9qjp   1/1       Running   0          2m

[root@kube-master ~]# kubectl describe pod selenium-node-firefox-lc6qt
Name:               selenium-node-firefox-lc6qt
Namespace:          default
Image(s):           selenium/node-firefox
Node:               kube-node2/45.63.16.92
Labels:             name=selenium-node-firefox
Status:             Running
Reason:             
Message:            
IP:             10.20.101.3
Replication Controllers:    selenium-node-firefox (2/2 replicas created)
Containers:
  selenium-node-firefox:
    Image:      selenium/node-firefox
    State:      Running
      Started:      Sat, 24 Oct 2015 17:08:37 +0000
    Ready:      True
    Restart Count:  0
Conditions:
  Type      Status
  Ready     True
Events:
  FirstSeen             LastSeen            Count   From            SubobjectPath               Reason      Message
  Sat, 24 Oct 2015 17:08:13 +0000   Sat, 24 Oct 2015 17:08:13 +0000 1   {scheduler }                            scheduled   Successfully assigned selenium-node-firefox-lc6qt to kube-node2
  Sat, 24 Oct 2015 17:08:13 +0000   Sat, 24 Oct 2015 17:08:13 +0000 1   {kubelet kube-node2}    implicitly required container POD   pulled      Pod container image "gcr.io/google_containers/pause:0.8.0" already present on machine
  Sat, 24 Oct 2015 17:08:13 +0000   Sat, 24 Oct 2015 17:08:13 +0000 1   {kubelet kube-node2}    implicitly required container POD   created     Created with docker id cdcb027c6548
  Sat, 24 Oct 2015 17:08:13 +0000   Sat, 24 Oct 2015 17:08:13 +0000 1   {kubelet kube-node2}    implicitly required container POD   started     Started with docker id cdcb027c6548
  Sat, 24 Oct 2015 17:08:36 +0000   Sat, 24 Oct 2015 17:08:36 +0000 1   {kubelet kube-node2}    spec.containers pulled      Successfully pulled image "selenium/node-firefox"
  Sat, 24 Oct 2015 17:08:36 +0000   Sat, 24 Oct 2015 17:08:36 +0000 1   {kubelet kube-node2}    spec.containers created     Created with docker id 8931b7f7a818
  Sat, 24 Oct 2015 17:08:37 +0000   Sat, 24 Oct 2015 17:08:37 +0000 1   {kubelet kube-node2}    spec.containers started     Started with docker id 8931b7f7a818

[root@kube-master ~]# kubectl describe pod selenium-node-firefox-y9qjp
Name:               selenium-node-firefox-y9qjp
Namespace:          default
Image(s):           selenium/node-firefox
Node:               kube-node1/185.92.221.67
Labels:             name=selenium-node-firefox
Status:             Running
Reason:             
Message:            
IP:             10.20.92.3
Replication Controllers:    selenium-node-firefox (2/2 replicas created)
Containers:
  selenium-node-firefox:
    Image:      selenium/node-firefox
    State:      Running
      Started:      Sat, 24 Oct 2015 17:08:13 +0000
    Ready:      True
    Restart Count:  0
Conditions:
  Type      Status
  Ready     True
Events:
  FirstSeen             LastSeen            Count   From            SubobjectPath               Reason      Message
  Sat, 24 Oct 2015 17:08:13 +0000   Sat, 24 Oct 2015 17:08:13 +0000 1   {scheduler }                            scheduled   Successfully assigned selenium-node-firefox-y9qjp to kube-node1
  Sat, 24 Oct 2015 17:08:13 +0000   Sat, 24 Oct 2015 17:08:13 +0000 1   {kubelet kube-node1}    implicitly required container POD   pulled      Pod container image "gcr.io/google_containers/pause:0.8.0" already present on machine
  Sat, 24 Oct 2015 17:08:13 +0000   Sat, 24 Oct 2015 17:08:13 +0000 1   {kubelet kube-node1}    implicitly required container POD   created     Created with docker id ea272dd36bd5
  Sat, 24 Oct 2015 17:08:13 +0000   Sat, 24 Oct 2015 17:08:13 +0000 1   {kubelet kube-node1}    implicitly required container POD   started     Started with docker id ea272dd36bd5
  Sat, 24 Oct 2015 17:08:13 +0000   Sat, 24 Oct 2015 17:08:13 +0000 1   {kubelet kube-node1}    spec.containers created     Created with docker id 6edbd6b9861d
  Sat, 24 Oct 2015 17:08:13 +0000   Sat, 24 Oct 2015 17:08:13 +0000 1   {kubelet kube-node1}    spec.containers started     Started with docker id 6edbd6b9861d

همانطور که می بینیم ، Kubernetes 2 تکرار از selenium-firefox-nodeآنها ایجاد کرده است و آنها را در کل خوشه توزیع کرده است. Pod selenium-node-firefox-lc6qtدر kube-node2 است ، در حالی که غلاف selenium-node-firefox-y9qjpروی kube-node1 است.

ما همین روند را برای گره های سلنیوم کروم تکرار می کنیم.

کنترل کننده تکرار گره Chrome:

# selenium-node-chrome-rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
  name: selenium-node-chrome
  labels:
    app: selenium-node-chrome
spec:
  replicas: 2
  selector:
    app: selenium-node-chrome
  template:
    metadata:
      labels:
        app: selenium-node-chrome
    spec:
      containers:
      - name: selenium-node-chrome
        image: selenium/node-chrome
        ports:
          - containerPort: 5900
        env:
          - name: HUB_PORT_4444_TCP_ADDR
            value: "replace_with_service_ip"
          - name: HUB_PORT_4444_TCP_PORT
            value: "4444"

گسترش:

[root@kube-master ~]# kubectl create -f selenium-node-chrome-rc.yaml
replicationcontrollers/selenium-node-chrome
[root@kube-master ~]# kubectl get rc
CONTROLLER              CONTAINER(S)            IMAGE(S)                SELECTOR                     REPLICAS
selenium-hub            selenium-hub            selenium/hub            name=selenium-hub            1
selenium-node-chrome    selenium-node-chrome    selenium/node-chrome    app=selenium-node-chrome     2
selenium-node-firefox   selenium-node-firefox   selenium/node-firefox   name=selenium-node-firefox   2
[root@kube-master ~]# kubectl get pods
NAME                          READY     STATUS    RESTARTS   AGE
selenium-hub-pilc8            1/1       Running   1          1h
selenium-node-chrome-9u1ld    1/1       Running   0          1m
selenium-node-chrome-mgi52    1/1       Running   0          1m
selenium-node-firefox-lc6qt   1/1       Running   0          11m
selenium-node-firefox-y9qjp   1/1       Running   0          11m

بسته بندی کردن

در این راهنما ، یک خوشه کوچک Kubernetes از 3 سرور (1 کنترلر اصلی + 2 کارگر) تنظیم کرده ایم.

با استفاده از غلاف ، RC ها و خدمات ، ما با موفقیت یک شبکه سلنیوم را متشکل از یک مرکز مرکزی و 4 گره مستقر کرده ایم و به توسعه دهندگان این امکان را می دهیم که 4 تست همزمان سلنیوم را همزمان با هم انجام دهند.

Kubernetes به طور خودکار ظروف را در کل خوشه برنامه ریزی می کرد.

شروع کار با Kubernetes در CentOS 7

خوددرمانی

اگر یک یا تعداد بیشتری از سرورهای ما پایین بیایند ، Kubernetes به صورت خودکار غلاف ها را به سرورهای سالم تغییر می دهد. در مثال من ، kube-node2 در حال حاضر غلاف هل سلنیوم و 1 غلاف گره Selenum Firefox را اجرا می کند.

[root@kube-node2 ~]# docker ps
CONTAINER ID        IMAGE                                  COMMAND                CREATED             STATUS              PORTS               NAMES
5617399f146c        selenium/node-firefox                  "/opt/bin/entry_poin   5 minutes ago       Up 5 minutes                            k8s_selenium-node-firefox.46e635d8_selenium-node-firefox-zmj1r_default_31c89517-7a75-11e5-8648-5600001611e0_baae8e00   
185230a3b431        gcr.io/google_containers/pause:0.8.0   "/pause"               5 minutes ago       Up 5 minutes                            k8s_POD.3805e8b7_selenium-node-firefox-zmj1r_default_31c89517-7a75-11e5-8648-5600001611e0_40f809df                     
fdd5834c249d        selenium/hub                           "/opt/bin/entry_poin   About an hour ago   Up About an hour                        k8s_selenium-hub.cb8bf0ed_selenium-hub-pilc8_default_6c98c1ff-7a68-11e5-8648-5600001611e0_5765e2c9                     
00e4ccb0bda8        gcr.io/google_containers/pause:0.8.0   "/pause"               About an hour ago   Up About an hour                        k8s_POD.3b3ee8b9_selenium-hub-pilc8_default_6c98c1ff-7a68-11e5-8648-5600001611e0_8398ac33  

با خاموش کردن kube-node2 ، شکست سرور را شبیه سازی خواهیم کرد. بعد از چند دقیقه ، باید دید که ظروف قابل اجرا بر روی kube-node2 به kube-node 1 مجددا تنظیم شده اند و از حداقل اختلال در سرویس اطمینان حاصل می کنند.

[root@kube-node1 ~]# docker ps
CONTAINER ID        IMAGE                                  COMMAND                CREATED             STATUS              PORTS               NAMES
5bad5f582698        selenium/hub                           "/opt/bin/entry_poin   19 minutes ago      Up 19 minutes                           k8s_selenium-hub.cb8bf0ed_selenium-hub-hycf2_default_fe9057cf-7a76-11e5-8648-5600001611e0_ccaad50a                     
dd1565a94919        selenium/node-firefox                  "/opt/bin/entry_poin   20 minutes ago      Up 20 minutes                           k8s_selenium-node-firefox.46e635d8_selenium-node-firefox-g28z5_default_fe932673-7a76-11e5-8648-5600001611e0_fc79f977   
2be1a316aa47        gcr.io/google_containers/pause:0.8.0   "/pause"               20 minutes ago      Up 20 minutes                           k8s_POD.3805e8b7_selenium-node-firefox-g28z5_default_fe932673-7a76-11e5-8648-5600001611e0_dc204ad2                     
da75a0242a9e        gcr.io/google_containers/pause:0.8.0   "/pause"               20 minutes ago      Up 20 minutes                           k8s_POD.3b3ee8b9_selenium-hub-hycf2_default_fe9057cf-7a76-11e5-8648-5600001611e0_1b10c0e7                              
c611b68330de        selenium/node-firefox                  "/opt/bin/entry_poin   33 minutes ago      Up 33 minutes                           k8s_selenium-node-firefox.46e635d8_selenium-node-firefox-8ylo2_default_31c8a8f3-7a75-11e5-8648-5600001611e0_922af821   
828031da6b3c        gcr.io/google_containers/pause:0.8.0   "/pause"               33 minutes ago      Up 33 minutes                           k8s_POD.3805e8b7_selenium-node-firefox-8ylo2_default_31c8a8f3-7a75-11e5-8648-5600001611e0_289cd555                     
caf4e725512e        selenium/node-chrome                   "/opt/bin/entry_poin   46 minutes ago      Up 46 minutes                           k8s_selenium-node-chrome.362a34ee_selenium-node-chrome-mgi52_default_392a2647-7a73-11e5-8648-5600001611e0_3c6e855a     
409a20770787        selenium/node-chrome                   "/opt/bin/entry_poin   46 minutes ago      Up 46 minutes                           k8s_selenium-node-chrome.362a34ee_selenium-node-chrome-9u1ld_default_392a15a4-7a73-11e5-8648-5600001611e0_ac3f0191     
7e2d942422a5        gcr.io/google_containers/pause:0.8.0   "/pause"               47 minutes ago      Up 47 minutes                           k8s_POD.3805e8b7_selenium-node-chrome-9u1ld_default_392a15a4-7a73-11e5-8648-5600001611e0_f5858b73                      
a3a65ea99a99        gcr.io/google_containers/pause:0.8.0   "/pause"               47 minutes ago      Up 47 minutes                           k8s_POD.3805e8b7_selenium-node-chrome-mgi52_default_392a2647-7a73-11e5-8648-5600001611e0_20a70ab6

شبکه سلنیوم خود را ترازو کنید

مقیاس بندی سلنیوم شبکه با کوبنتز بسیار آسان است. تصور کنید که به جای 2 گره فایرفاکس ، من می خواهم 4 اجرا کنم. افزایش مجدد با یک دستور واحد قابل انجام است:

[root@kube-master ~]# kubectl scale rc selenium-node-firefox --replicas=4
scaled

[root@kube-master ~]# kubectl get rc
CONTROLLER              CONTAINER(S)            IMAGE(S)                SELECTOR                     REPLICAS
selenium-hub            selenium-hub            selenium/hub            name=selenium-hub            1
selenium-node-chrome    selenium-node-chrome    selenium/node-chrome    app=selenium-node-chrome     2
selenium-node-firefox   selenium-node-firefox   selenium/node-firefox   name=selenium-node-firefox   4

[root@kube-master ~]# kubectl get pods
NAME                          READY     STATUS    RESTARTS   AGE
selenium-hub-pilc8            1/1       Running   1          1h
selenium-node-chrome-9u1ld    1/1       Running   0          14m
selenium-node-chrome-mgi52    1/1       Running   0          14m
selenium-node-firefox-8ylo2   1/1       Running   0          40s
selenium-node-firefox-lc6qt   1/1       Running   0          24m
selenium-node-firefox-y9qjp   1/1       Running   0          24m
selenium-node-firefox-zmj1r   1/1       Running   0          40s

شروع کار با Kubernetes در CentOS 7



Leave a Comment

نحوه بروزرسانی CentOS 7 ، Ubuntu 16.04 و Debian 8

نحوه بروزرسانی CentOS 7 ، Ubuntu 16.04 و Debian 8

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

تنظیم RethinkDB Cluster On CentOS 7

تنظیم RethinkDB Cluster On CentOS 7

مقدمه RethinkDB یک پایگاه داده NoSQL است که داده ها را به عنوان اسناد JSON ذخیره می کند. این یک زبان پرس و جو بسیار بصری است و از ویژگی های آن معمولا در دسترس است

نحوه نصب نسخه باز Vtiger CRM در CentOS 7

نحوه نصب نسخه باز Vtiger CRM در CentOS 7

Vtiger CRM یک نرم افزار محبوب مدیریت ارتباط با مشتری است که می تواند به بنگاهها در رشد فروش ، ارائه خدمات به مشتری و افزایش سود کمک کند. من

نحوه نصب کاناپه CMS 2.0 بر روی یک VPS CentOS 7 LAMP

نحوه نصب کاناپه CMS 2.0 بر روی یک VPS CentOS 7 LAMP

با استفاده از یک سیستم متفاوت؟ Couch CMS یک سیستم مدیریت محتوای منبع ساده و انعطاف پذیر ، آزاد و منبع باز (CMS) است که به طراحان وب اجازه می دهد تا طراحی کنند.

نحوه نصب SonarQube در CentOS 7

نحوه نصب SonarQube در CentOS 7

با استفاده از یک سیستم متفاوت؟ SonarQube یک ابزار منبع باز برای توسعه سیستم با کیفیت است. در جاوا نوشته شده است و چندین پایگاه داده را پشتیبانی می کند. فراهم می کند

نصب Netdata در CentOS 7

نصب Netdata در CentOS 7

با استفاده از یک سیستم متفاوت؟ Netdata یک ستاره در حال افزایش در زمینه نظارت بر معیارهای سیستم در زمان واقعی است. در مقایسه با سایر ابزارهای مشابه ، Netdata:

نحوه فعال سازی پشتیبانی HTTP / 2 در DirectAdmin (CentOS)

نحوه فعال سازی پشتیبانی HTTP / 2 در DirectAdmin (CentOS)

HTTP / 2 جدیدترین نسخه پروتکل HTTP است که از SPDY مستقر است. توسعه آن توسط Google آغاز شده است و HTTP / 2 تا حد زیادی بر اساس پایگاه کد است

نحوه نصب سرور Starbound در CentOS 7

نحوه نصب سرور Starbound در CentOS 7

با استفاده از یک سیستم متفاوت؟ در این آموزش ، Ill در مورد نحوه راه اندازی یک سرور Starbound در CentOS 7 توضیح می دهد. پیش نیازها: شما باید این بازی را روی خود داشته باشید

یک سرور چند نفره SA-MP San Andreas را در CentOS 6 تنظیم کنید

یک سرور چند نفره SA-MP San Andreas را در CentOS 6 تنظیم کنید

به یکی دیگر از آموزش های Vultr خوش آمدید. در اینجا ، نحوه نصب و اجرای سرور SAMP را یاد خواهید گرفت. این راهنما برای CentOS 6 نوشته شده است. پیش نیازهای مورد نیاز شما

Elgg را روی CentOS 7 نصب کنید

Elgg را روی CentOS 7 نصب کنید

با استفاده از یک سیستم متفاوت؟ Elgg یک موتور شبکه ای منبع باز است که امکان ایجاد محیط های اجتماعی از جمله شبکه های اجتماعی دانشگاه را فراهم می کند

نحوه نصب سرور RStudio در CentOS 7

نحوه نصب سرور RStudio در CentOS 7

RStudio Server نسخه وب RStudio است که مجموعه ای از ابزارهایی است که برای تسهیل کار برنامه نویسی با استفاده از زبان برنامه نویسی R طراحی شده است. در سه

نصب Bolt CMS در CentOS 7

نصب Bolt CMS در CentOS 7

Bolt یک CMS منبع باز است که به زبان PHP نوشته شده است. کد منبع Bolts در GitHub میزبانی شده است. این راهنما نحوه نصب Bolt CMS را در CentOS 7 Vult تازه نشان می دهد

نحوه نصب Elasticsearch در سرور Vultr CentOS 7

نحوه نصب Elasticsearch در سرور Vultr CentOS 7

Elasticsearch یک موتور جستجوی کامل و متن تحلیلی متن کامل است. به لطف تطبیق پذیری ، مقیاس پذیری و سهولت استفاده ، Elasticsearch گسترده تر است

Kubernetes With Kubeadm را در CentOS 7 مستقر کنید

Kubernetes With Kubeadm را در CentOS 7 مستقر کنید

بررسی اجمالی این مقاله به شما کمک می کند تا در هر زمان خوشه ای از Kubernetes را جمع کنید و با kubeadm در حال اجرا باشید. در این راهنما از دو سرور استفاده می شود

راه اندازی Sails.js برای توسعه در CentOS 7

راه اندازی Sails.js برای توسعه در CentOS 7

با استفاده از یک سیستم متفاوت؟ مقدمه Sails.js یک چارچوب MVC ��رای Node.js است ، شبیه به Ruby on Rails. این امر برای ایجاد برنامه های مدرن ver

پیکربندی BGP با استفاده از Quagga در Vultr (CentOS 7)

پیکربندی BGP با استفاده از Quagga در Vultr (CentOS 7)

Vultrs عملکرد IP فضای شما را امکان پذیر می سازد تا آزادی بی سابقه ای در اختصاص منابع IP شخصی شما به سرورهای cloud Vultr داشته باشید. ما کلی

نحوه نصب PufferPanel (کنترل پنل کنکوری رایگان) در CentOS 7

نحوه نصب PufferPanel (کنترل پنل کنکوری رایگان) در CentOS 7

مقدمه در این آموزش ، PufferPanel را در Vultr VPS ما نصب کنید. PufferPanel یک پانل کنترل با منبع آزاد و بصورت رایگان برای مدیریت شما است

ابزارهای نظارت بهتر برای اوبونتو و CentOS

ابزارهای نظارت بهتر برای اوبونتو و CentOS

معرفی سیستم های لینوکس به طور پیش فرض مانند top ، df و du با ابزارهای نظارتی ارسال می شوند که به نظارت بر فرایندها و فضای دیسک کمک می کنند. با این حال ، اغلب اوقات ، آنها به صورت طاقت فرسا هستند

دستگاه های خود را با استفاده از LibreNMS در CentOS 7 نظارت کنید

دستگاه های خود را با استفاده از LibreNMS در CentOS 7 نظارت کنید

با استفاده از یک سیستم متفاوت؟ LibreNMS یک سیستم نظارت بر شبکه منبع باز کاملاً برجسته است. از SNMP برای به دست آوردن داده ها از دستگاه های مختلف استفاده می کند. یک نوع

نحوه نصب Gitea در CentOS 7

نحوه نصب Gitea در CentOS 7

با استفاده از یک سیستم متفاوت؟ Gitea یک منبع کنترل جایگزین متن باز و خود میزبان است که توسط Git ساخته شده است. Gitea در Golang نوشته شده و هست

نحوه نصب بستر سبد خرید LiteCart در اوبونتو 16.04

نحوه نصب بستر سبد خرید LiteCart در اوبونتو 16.04

LiteCart یک بستر سبد خرید آزاد و منبع باز است که به زبان های PHP ، jQuery و HTML 5 نوشته شده است. این نرم افزار ساده ، سبک و با کاربرد آسان است.

نحوه نصب Anchor CMS بر روی یک VPS Fedora 26 LAMP

نحوه نصب Anchor CMS بر روی یک VPS Fedora 26 LAMP

با استفاده از یک سیستم متفاوت؟ Anchor CMS یک سیستم مدیریت محتوا (CMS) بسیار ساده و بسیار سبک ، بسیار آزاد و آزاد است.

اشتراک NFS را در Debian تنظیم کنید

اشتراک NFS را در Debian تنظیم کنید

NFS یک سیستم فایل مبتنی بر شبکه است که به رایانه ها اجازه می دهد تا از طریق شبکه رایانه ای به فایلها دسترسی پیدا کنند. این راهنما توضیح می دهد که چگونه می توانید پوشه ها را روی NF قرار دهید

نحوه بروزرسانی CentOS 7 ، Ubuntu 16.04 و Debian 8

نحوه بروزرسانی CentOS 7 ، Ubuntu 16.04 و Debian 8

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

نحوه نصب Matomo Analytics در Fedora 28

نحوه نصب Matomo Analytics در Fedora 28

با استفاده از یک سیستم متفاوت؟ Matomo (سابقا پیویک) یک بستر تحلیلی منبع باز است ، یک جایگزین باز برای Google Analytics. منبع Matomo میزبان o

یک سرور TeamTalk را در لینوکس تنظیم کنید

یک سرور TeamTalk را در لینوکس تنظیم کنید

TeamTalk یک سیستم کنفرانس است که به کاربران امکان می دهد مکالمات صوتی / تصویری با کیفیت بالا ، چت متنی ، انتقال فایل ها و صفحه های به اشتراک بگذارند. من

با استفاده از کلید SSH خود برای ورود به کاربران غیر ریشه استفاده کنید

با استفاده از کلید SSH خود برای ورود به کاربران غیر ریشه استفاده کنید

Vultr یک ویژگی را فراهم می کند که به شما امکان می دهد با ایجاد یک نمونه جدید ، کلیدهای SSH را از قبل نصب کنید. این اجازه می دهد تا به کاربر root دسترسی داشته باشید ، با این حال ، th

نحوه نصب انجمن NodeBB در FreeBSD 12

نحوه نصب انجمن NodeBB در FreeBSD 12

با استفاده از یک سیستم متفاوت؟ NodeBB یک نرم افزار انجمن مبتنی بر Node.js است. از سوکت های وب برای تعامل فوری و اعلامیه های زمان واقعی استفاده می کند. NodeB

نصب و راه اندازی ZNC در اوبونتو

نصب و راه اندازی ZNC در اوبونتو

ZNC یک پیشرانه پیشرفته شبکه IRC است که تمام وقت بهم متصل می شود تا مشتری IRC بتواند بدون از دست دادن جلسه گپ قطع یا وصل شود.

نحوه نصب Ranger Terminal File Manager در لینوکس

نحوه نصب Ranger Terminal File Manager در لینوکس

رنجر یک مدیر فایل مبتنی بر خط فرمان است که دارای کلیدهای اتصال VI است. این برنامه یک رابط لعنتی مینیمالیستی و زیبا با نمای سلسله مراتب فهرست ارائه می دهد