CentOS 7 पर कुबेरनेट्स के साथ शुरुआत करना

Kubernetes सर्वरों के एक समूह में कंटेनरीकृत अनुप्रयोगों के प्रबंधन के लिए Google द्वारा विकसित एक खुला स्रोत मंच है। यह एक-डेढ़ दशक के अनुभव पर बनाता है जो Google के पास बड़े पैमाने पर कंटेनरों के क्लस्टर चलाने के साथ है , और डेवलपर्स को Google शैली के बुनियादी ढांचे के साथ प्रदान करता है, जैसे कि सबसे अच्छी नस्ल के ओपन-सोर्स प्रोजेक्ट्स का लाभ उठाना, जैसे:

  • डॉकर : एक एप्लीकेशन कंटेनर तकनीक।
  • Etcd : एक वितरित कुंजी-मूल्य डेटास्टोर जो क्लस्टर-वाइड जानकारी का प्रबंधन करता है और सेवा खोज प्रदान करता है।
  • फलालैन : एक ओवरले नेटवर्क फैब्रिक जो कई सर्वरों में कंटेनर कनेक्टिविटी को सक्षम करता है।

कुबेरनेट्स डेवलपर्स को अपने एप्लिकेशन इन्फ्रास्ट्रक्चर को यम एलएलएल फाइलों और सार जैसे पॉड्स, आरसी और सर्विसेज (अधिक बाद में) के माध्यम से परिभाषित करने देता है और यह सुनिश्चित करता है कि अंतर्निहित क्लस्टर हर समय उपयोगकर्ता द्वारा परिभाषित स्थिति से मेल खाता है।

इसकी कुछ विशेषताओं में शामिल हैं:

  • सिस्टम संसाधनों का स्वत: निर्धारण और एक क्लस्टर में एप्लिकेशन कंटेनरों का ऑटो प्लेसमेंट।
  • एक ही आदेश के साथ मक्खी पर अनुप्रयोगों स्केलिंग।
  • शून्य डाउनटाइम के साथ रोलिंग अपडेट।
  • सेल्फ हीलिंग: यदि सर्वर फेल हो जाता है, तो ऑटो रीसेलिंग का काम, कंटेनरों का ऑटो रिस्टार्ट, हेल्थ चेकअप।

यदि आप पहले से ही कुबेरनेट से परिचित हैं, तो संस्थापन के लिए आगे बढ़ें।

मूल अवधारणा

Kubernetes डेवलपर्स को निम्नलिखित सार (तार्किक इकाइयाँ) प्रदान करता है:

  • फली।
  • प्रतिकृति नियंत्रक।
  • लेबल।
  • सेवाएं।

फली

यह कुबेरनेट्स वर्कलोड की मूल इकाई है। एक फली एक कंटेनरीकृत वातावरण में एक अनुप्रयोग-विशिष्ट "लॉजिकल होस्ट" मॉडल करती है। आम शब्दों में, यह उन अनुप्रयोगों या सेवाओं के समूह को मॉडल करता है जो पूर्व-कंटेनर दुनिया में एक ही सर्वर पर चलते थे। एक पॉड के अंदर कंटेनर समान नेटवर्क नामस्थान साझा करते हैं और साथ ही डेटा वॉल्यूम साझा कर सकते हैं।

प्रतिकृति नियंत्रक

पॉड्स कई कंटेनरों को तार्किक अनुप्रयोग इकाइयों में समूहित करने के लिए महान हैं, लेकिन वे सर्वर की विफलता के मामले में प्रतिकृति या पुनर्निर्धारण की पेशकश नहीं करते हैं।

यह वह जगह है जहां एक प्रतिकृति नियंत्रक या आरसी काम आता है। एक RC यह सुनिश्चित करती है कि दिए गए सेवा के कई पॉड हमेशा क्लस्टर के पार चल रहे हैं।

लेबल

वे कुंजी-मूल्य मेटाडेटा हैं जो किसी भी कुबेरनेट संसाधन (पॉड्स, आरसी, सेवाओं, नोड्स, ...) से जुड़ा हो सकता है।

सेवाएं

फली और प्रतिकृति नियंत्रक एक क्लस्टर में अनुप्रयोगों को तैनात करने और वितरित करने के लिए बहुत अच्छे हैं, लेकिन फली में अल्पकालिक आईपी होते हैं जो पुनर्निर्धारण या कंटेनर पुनरारंभ पर बदलते हैं।

एक कुबेरनेट्स सेवा एक प्रतिकृति नियंत्रक द्वारा प्रबंधित पॉड्स के समूह के लिए एक स्थिर समापन बिंदु (मेजबान सर्वरों के लिए निश्चित वर्चुअल आईपी + पोर्ट बाइंडिंग) प्रदान करती है।

कुबेरनेट्स क्लस्टर

अपने सरलतम रूप में, एक कुबेरनेट्स क्लस्टर दो प्रकार के नोड्स से बना है:

  • 1 कुबेरनेट्स मास्टर।
  • एन कुबेरनेट्स नोड्स।

कुबेरनेट्स मास्टर

कुबेरनेट्स मास्टर पूरे समूह की नियंत्रण इकाई है।

गुरु के मुख्य घटक हैं:

  • Etcd: एक विश्व स्तर पर उपलब्ध डेटास्टोर जो क्लस्टर और सेवाओं और क्लस्टर पर चल रहे अनुप्रयोगों के बारे में जानकारी संग्रहीत करता है।
  • क्यूब एपीआई सर्वर: यह कुबेरनेट क्लस्टर का मुख्य प्रबंधन केंद्र है और यह एक रैस्टफुल इंटरफ़ेस को उजागर करता है।
  • नियंत्रक प्रबंधक: प्रतिकृति नियंत्रकों द्वारा प्रबंधित अनुप्रयोगों की प्रतिकृति को संभालता है।
  • समयबद्धक: क्लस्टर के पार संसाधन उपयोग को ट्रैक करता है और तदनुसार कार्यभार सौंपता है।

कुबेरनेट्स नोड

कुबेरनेट्स नोड वर्कर सर्वर हैं जो पॉड्स चलाने के लिए जिम्मेदार हैं।

एक नोड के मुख्य घटक हैं:

  • डॉकर: एक डेमन जो फली में परिभाषित अनुप्रयोग कंटेनर चलाता है।
  • क्यूबलेट: एक स्थानीय प्रणाली में फली के लिए एक नियंत्रण इकाई।
  • क्यूब-प्रॉक्सी: एक नेटवर्क प्रॉक्सी जो कुबेरनेट सेवाओं के लिए सही मार्ग सुनिश्चित करता है।

स्थापना

इस गाइड में, हम CentOS 7 सर्वरों का उपयोग करके एक 3 नोड क्लस्टर बनाएंगे:

  • 1 कुबेरनेट्स मास्टर (कुबे-मास्टर)
  • 2 कुबेरनेट्स नोड्स (क्यूब-नोड 1, क्यूब-नोड 2)

कुबेरनेट्स नोड्स के लिए एक ही इंस्टॉलेशन प्रक्रिया का पालन करने के बाद आप जितने चाहें उतने अतिरिक्त नोड जोड़ सकते हैं।

सभी नोड्स

होस्टनाम कॉन्फ़िगर करें और /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

कुबेरनेट्स मास्टर

कुबेरनेट मास्टर पैकेज स्थापित करें:

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"

प्रारंभ करें LCD:

systemctl start etcd

फलालैन ओवरले नेटवर्क फैब्रिक को स्थापित और कॉन्फ़िगर करें (यह आवश्यक है ताकि विभिन्न सर्वरों पर चलने वाले कंटेनर एक दूसरे को देख सकें):

yum install flannel

एक फ़लालीन कॉन्फ़िगरेशन फ़ाइल बनाएं ( flannel-config.json):

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

Etcd सर्वर में फलालैन कॉन्फ़िगरेशन सेट करें:

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

बिंदु Flannel 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 नोड पैकेज स्थापित करें:

yum install docker kubernetes-node

अगले दो चरण बेहतर प्रदर्शन के लिए ओवरले का उपयोग करने के लिए डॉकर को कॉन्फ़िगर करेंगे। अधिक जानकारी के लिए इस ब्लॉग पोस्ट पर जाएँ :

वर्तमान 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"

फ़्लेनेल ओवरले नेटवर्क फैब्रिक को स्थापित और कॉन्फ़िगर करें (फिर - यह आवश्यक है ताकि विभिन्न सर्वरों पर चलने वाले कंटेनर एक दूसरे को देख सकें):

yum install flannel

बिंदु Flannel Etcd सर्वर के लिए:

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

सेवाएं सक्षम करें:

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

सर्वर को रिबूट करें।

अपने कुबेरनेट सर्वर का परीक्षण करें

सर्वर के सभी रिबूट होने के बाद, जांचें कि क्या आपका कुबेरनेट क्लस्टर चालू है:

[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

उदाहरण: कुबेरनेट्स का उपयोग करके एक सेलेनियम ग्रिड की तैनाती

सेलेनियम परीक्षण उद्देश्यों के लिए ब्राउज़रों को स्वचालित करने के लिए एक रूपरेखा है। यह किसी भी वेब डेवलपर के शस्त्रागार का एक शक्तिशाली उपकरण है।

सेलेनियम ग्रिड सेलेनियम नोड्स के एक समूह में परीक्षण के स्केलेबल और समानांतर दूरस्थ निष्पादन को सक्षम करता है जो एक केंद्रीय सेलेनियम हब से जुड़ा होता है।

चूँकि सेलेनियम नोड्स स्वयं निष्क्रिय हैं और हमारे द्वारा चलाए जाने वाले नोड्स की मात्रा हमारे परीक्षण कार्यभार के आधार पर लचीली है, यह कुबेरनेट क्लस्टर पर तैनात होने के लिए एक आदर्श उम्मीदवार है।

अगले भाग में, हम 5 एप्लिकेशन कंटेनरों से मिलकर एक ग्रिड तैनात करेंगे:

  • 1 केंद्रीय सेलेनियम हब जो दूरस्थ परीक्षण होगा, जिससे हमारे परीक्षण जुड़ेंगे।
  • 2 सेलेनियम नोड्स फ़ायरफ़ॉक्स चल रहा है।
  • क्रोम चलने वाले 2 सेलेनियम नोड्स।

परिनियोजन रणनीति

स्वचालित रूप से प्रतिकृति और स्व-चिकित्सा का प्रबंधन करने के लिए, हम ऊपर सूचीबद्ध प्रत्येक प्रकार के एप्लिकेशन कंटेनर के लिए कुबेरनेट्स प्रतिकृति नियंत्रक बनाएंगे।

डेवलपर्स जो एक स्थिर सेलेनियम हब एंडपॉइंट के साथ परीक्षण चला रहे हैं, उन्हें प्रदान करने के लिए, हम हब प्रतिकृति नियंत्रक से जुड़ी एक कुबेरनेट्स सेवा बनाएंगे।

सेलेनियम हब

प्रतिकृति नियंत्रक
# 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

यहां हम देख सकते हैं कि कुबेरनेट्स ने मेरे सेलेनियम-हब कंटेनर को क्यूब-नोड 2 पर रखा है।

सेवा
# 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

सेवा को तैनात करने के बाद, यह निम्नलिखित से उपलब्ध होगा:

  • वर्चुअल आईपी 10.254.124.73 और पोर्ट 4444 के माध्यम से कोई भी कुबेरनेट्स नोड।
  • पोर्ट 30000 पर किसी भी कुबेरनेट्स के सार्वजनिक आईपी के माध्यम से बाहरी नेटवर्क।

CentOS 7 पर कुबेरनेट्स के साथ शुरुआत करनाCentOS 7 पर कुबेरनेट्स के साथ शुरुआत करना (दूसरे कुबेरनेट्स नोड के सार्वजनिक आईपी का उपयोग करके)

सेलेनियम नोड्स

फ़ायरफ़ॉक्स नोड प्रतिकृति नियंत्रक:

# 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वास्तविक सेलेनियम हब सेवा आईपी के साथ, इस मामले 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

जैसा कि हम देख सकते हैं, कुबेरनेट्स ने 2 प्रतिकृतियां बनाई हैं selenium-firefox-nodeऔर इसने उन्हें क्लस्टर में वितरित किया है। पॉड selenium-node-firefox-lc6qt, क्यूब-नोड 2 पर है, जबकि पॉड selenium-node-firefox-y9qjpक्यूब-नोड 1 पर है।

हम अपने सेलेनियम क्रोम नोड्स के लिए उसी प्रक्रिया को दोहराते हैं।

क्रोम नोड प्रतिकृति नियंत्रक:

# 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

समेट रहा हु

इस मार्गदर्शिका में, हमने 3 सर्वर (1 मास्टर कंट्रोलर + 2 वर्कर) का एक छोटा कुबेरनेट समूह बनाया है।

पॉड्स, आरसी और एक सेवा का उपयोग करते हुए, हमने सफलतापूर्वक एक केंद्रीय हब और 4 नोड्स वाले सेलेनियम ग्रिड को तैनात किया है, जिससे डेवलपर्स क्लस्टर पर एक बार में 4 समवर्ती सेलेनियम परीक्षण चलाने में सक्षम होते हैं।

कुबेरनेट्स ने स्वचालित रूप से पूरे क्लस्टर में कंटेनरों को निर्धारित किया।

CentOS 7 पर कुबेरनेट्स के साथ शुरुआत करना

आत्म चिकित्सा

यदि हमारे सर्वर में से एक या अधिक नीचे जाते हैं तो कुबेरनेट्स स्वचालित रूप से स्वस्थ सर्वरों में पॉड्स को फिर से आकार देते हैं। मेरे उदाहरण में, kube-node2 वर्तमान में सेलेनियम हब पॉड और 1 सेलेनियम फ़ायरफ़ॉक्स नोड पॉड चला रहा है।

[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  

हम क्यूब-नोड 2 को बंद करके सर्वर की विफलता का अनुकरण करेंगे। कुछ मिनटों के बाद, आपको देखना चाहिए कि क्यूब-नोड 2 पर जो कंटेनर चल रहे थे, उन्हें क्यूब-नोड 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

CentOS 7 पर कुबेरनेट्स के साथ शुरुआत करना



कैसे स्थापित करें और अपने CentOS 7 सर्वर पर CyberPanel कॉन्फ़िगर करें

कैसे स्थापित करें और अपने CentOS 7 सर्वर पर CyberPanel कॉन्फ़िगर करें

एक अलग प्रणाली का उपयोग? परिचय CyberPanel बाजार पर पहला नियंत्रण पैनल है जो दोनों खुला स्रोत है और OpenLiteSpeed ​​का उपयोग करता है। क्या थी?

CentOS पर FFmpeg कैसे स्थापित करें

CentOS पर FFmpeg कैसे स्थापित करें

FFmpeg ऑडियो और वीडियो रिकॉर्ड करने, कन्वर्ट करने और स्ट्रीम करने के लिए एक लोकप्रिय ओपन सोर्स समाधान है, जो सभी प्रकार की ऑनलाइन स्ट्रीमिंग सेवाओं में व्यापक रूप से उपयोग किया जाता है। मैं

SSH का उपयोग करके LUKS डिस्क एन्क्रिप्शन पर LVM को दूरस्थ रूप से अनलॉक करने के लिए CentOS 7 स्थापित और सेटअप करें

SSH का उपयोग करके LUKS डिस्क एन्क्रिप्शन पर LVM को दूरस्थ रूप से अनलॉक करने के लिए CentOS 7 स्थापित और सेटअप करें

एलयूकेएस (लिनक्स यूनिफाइड की सेटअप) लिनक्स के लिए उपलब्ध विभिन्न डिस्क एन्क्रिप्शन प्रारूपों में से एक है जो प्लेटफॉर्म एग्नॉस्टिक है। यह ट्यूटोरियल आपको बुद्धि प्रदान करेगा

CentOS 7 पर अक्टूबर CMS को कैसे स्थापित करें

CentOS 7 पर अक्टूबर CMS को कैसे स्थापित करें

अक्टूबर एक खुला स्रोत सामग्री प्रबंधन प्रणाली है जो लारवेल PHP फ्रेमवर्क पर आधारित है। एक सुरुचिपूर्ण इंटरफ़ेस और एक संक्षिप्त मॉड्यूलर वास्तुकला के साथ

CentOS 7 पर RockMongo स्थापित करें

CentOS 7 पर RockMongo स्थापित करें

RockMongo एक वेब-आधारित MongoDB प्रबंधन उपकरण है जो MySQL प्रबंधन उपकरण के समान है: phpMyAdmin। यह ट्यूटोरियल इंस्टॉलिन की प्रक्रिया को कवर करेगा

CentOS 7 पर बुक किए गए समयबद्धक को कैसे स्थापित करें

CentOS 7 पर बुक किए गए समयबद्धक को कैसे स्थापित करें

एक अलग प्रणाली का उपयोग? आवश्यकताएँ एक Vultr CentOS 7 सर्वर उदाहरण। एक sudo यूजर। चरण 1: सिस्टम को पहले अपडेट करें, अपने सिस्टम सर्वर को वें में अपडेट करें

CentOS 7 पर नेटडाटा स्थापित करना

CentOS 7 पर नेटडाटा स्थापित करना

एक अलग प्रणाली का उपयोग? नेटडाटा रियल-टाइम सिस्टम मेट्रिक्स मॉनिटरिंग के क्षेत्र में एक उभरता हुआ सितारा है। एक ही तरह के अन्य उपकरणों की तुलना में, नेटडाटा:

CentOS 7 पर स्टारबाउंड सर्वर कैसे स्थापित करें

CentOS 7 पर स्टारबाउंड सर्वर कैसे स्थापित करें

एक अलग प्रणाली का उपयोग? इस ट्यूटोरियल में, बीमार समझा जा रहा है कि CentOS 7 पर एक स्टारबाउंड सर्वर को कैसे सेटअप किया जाए। आवश्यक शर्तें आपको इस गेम को खुद पर बनाना होगा।

CentOS 7 पर Django कैसे स्थापित करें

CentOS 7 पर Django कैसे स्थापित करें

वेब एप्लिकेशन लिखने के लिए Django एक लोकप्रिय पायथन फ्रेमवर्क है। Django के साथ, आप तेजी से अनुप्रयोगों का निर्माण कर सकते हैं, पहिया को फिर से बनाए बिना। अगर आप चाहते हैं

CentOS 6 पर SA-MP सैन एंड्रियास मल्टीप्लेयर सर्वर सेटअप करें

CentOS 6 पर SA-MP सैन एंड्रियास मल्टीप्लेयर सर्वर सेटअप करें

एक अन्य Vultr ट्यूटोरियल में आपका स्वागत है। यहां, आप सीखेंगे कि एसएएमपी सर्वर कैसे स्थापित करें और चलाएं। यह गाइड CentOS 6 के लिए लिखा गया था

CentOS 7 पर Revive Adserver इनस्टॉल करना

CentOS 7 पर Revive Adserver इनस्टॉल करना

Revive Adserver एक स्वतंत्र और खुला स्रोत विज्ञापन सेवारत प्रणाली है जिसका उपयोग वेबसाइटों पर, ऐप्स में और / या वीडियो खिलाड़ियों में विज्ञापनों को प्रबंधित करने के लिए किया जा सकता है। इस लेख में,

CentOS 7 पर पार्स सर्वर कैसे स्थापित करें

CentOS 7 पर पार्स सर्वर कैसे स्थापित करें

पार्स सर्वर पार्स बैकेंड सेवा के लिए खुला स्रोत विकल्प है जिसे बंद किया जा रहा है। यदि आप इस सेवा के प्रशंसक हैं, तो आप अभी भी वें का आनंद ले सकते हैं

CentOS 7 पर एल्ग स्थापित करें

CentOS 7 पर एल्ग स्थापित करें

एक अलग प्रणाली का उपयोग? एल्ग एक खुला स्रोत सोशल नेटवर्किंग इंजन है जो परिसर के सामाजिक नेटवर्क जैसे सामाजिक वातावरण के निर्माण की अनुमति देता है

CentOS 7 पर डायस्पोरा के साथ अपने सामाजिक नेटवर्क का निर्माण करें

CentOS 7 पर डायस्पोरा के साथ अपने सामाजिक नेटवर्क का निर्माण करें

एक अलग प्रणाली का उपयोग? डायस्पोरा एक गोपनीयता-जागरूक, ओपन सोर्स सोशल नेटवर्क है। इस ट्यूटोरियल में, आप सीखेंगे कि डायस्पोरा पो को कैसे सेट और कॉन्फ़िगर करें

CentOS 7 पर कुबेदम के साथ कुबेरनेट्स तैनात करें

CentOS 7 पर कुबेदम के साथ कुबेरनेट्स तैनात करें

अवलोकन यह लेख आपको कुबेरनेट क्लस्टर प्राप्त करने और कुछ ही समय में कुबेदम के साथ चलने में मदद करने के लिए है। यह गाइड दो सर्वरों को तैनात करेगा

CentOS पर Z और Zsh के साथ उत्पादकता बढ़ाएँ

CentOS पर Z और Zsh के साथ उत्पादकता बढ़ाएँ

परिचय लिनक्स सिस्टम पर काम करने का मतलब है कि कोई कमांड लाइन का उपयोग अधिक बार नहीं कर रहा है। स्वागत के रूप में बार-बार लंबी निर्देशिका के नाम टाइप करना

कैसे एक Vultr LEMP सर्वर पर OpenCart स्थापित करें

कैसे एक Vultr LEMP सर्वर पर OpenCart स्थापित करें

ओपनकार्ट एक लोकप्रिय ओपन सोर्स शॉपिंग कार्ट सॉल्यूशन है जिसे उत्कृष्ट कार्यक्षमता, उपयोग में आसानी और उपस्थिति प्रदान करने के लिए डिज़ाइन किया गया है। OpenCart के साथ, आप सीए

CentOS 7 पर विकास के लिए Sails.js सेटअप करें

CentOS 7 पर विकास के लिए Sails.js सेटअप करें

एक अलग प्रणाली का उपयोग? परिचय Sails.js Node.js के लिए MVC फ्रेमवर्क है, जो रूबी ऑन रेल्स के समान है। यह आधुनिक अनुप्रयोगों को विकसित करने के लिए बनाता है

कैसे CentOS 7 पर स्रोत से Nginx संकलन करने के लिए

कैसे CentOS 7 पर स्रोत से Nginx संकलन करने के लिए

एक अलग प्रणाली का उपयोग? NGINX को HTTP / HTTPS सर्वर, रिवर्स प्रॉक्सी सर्वर, मेल प्रॉक्सी सर्वर, लोड बैलेंसर, TLS टर्मिनेटर, या कैचिन के रूप में उपयोग किया जा सकता है

CentOS 7 पर dotCMS कैसे स्थापित करें

CentOS 7 पर dotCMS कैसे स्थापित करें

एक अलग प्रणाली का उपयोग? dotCMS जावा में लिखा एक ओपन सोर्स एंटरप्राइज ग्रेड कंटेंट मैनेजमेंट सिस्टम है। इसमें लगभग हर सुविधा आवश्यक टी होती है

Ubuntu 16.04 पर लाइटकार्ट शॉपिंग कार्ट प्लेटफ़ॉर्म कैसे स्थापित करें

Ubuntu 16.04 पर लाइटकार्ट शॉपिंग कार्ट प्लेटफ़ॉर्म कैसे स्थापित करें

LiteCart PHP, jQuery और HTML में लिखा गया एक स्वतंत्र और ओपन सोर्स शॉपिंग कार्ट प्लेटफॉर्म है। यह ई-कॉमर्स सॉफ्टवेअर का उपयोग करने के लिए एक सरल, हल���का और आसान है

डेबियन पर सेटअप NFS शेयर

डेबियन पर सेटअप NFS शेयर

एनएफएस एक नेटवर्क-आधारित फाइल सिस्टम है जो कंप्यूटरों को कंप्यूटर नेटवर्क पर फाइलों तक पहुंचने की अनुमति देता है। यह मार्गदर्शिका बताती है कि आप एनएफ पर फ़ोल्डर्स को कैसे उजागर कर सकते हैं

मोटोमो एनालिटिक्स को फेडोरा 28 पर कैसे स्थापित करें

मोटोमो एनालिटिक्स को फेडोरा 28 पर कैसे स्थापित करें

एक अलग प्रणाली का उपयोग? माटोमो (पूर्व में पिविक) एक ओपन सोर्स एनालिटिक्स प्लेटफॉर्म है, जो गूगल एनालिटिक्स का एक खुला विकल्प है। Matomo स्रोत को होस्ट किया गया है

Linux पर एक TeamTalk Server सेटअप करें

Linux पर एक TeamTalk Server सेटअप करें

टीमटॉक एक कॉन्फ्रेंसिंग प्रणाली है जो उपयोगकर्ताओं को उच्च-गुणवत्ता वाले ऑडियो / वीडियो वार्तालाप, टेक्स्ट चैट, स्थानांतरण फ़ाइलें और स्क्रीन साझा करने की अनुमति देती है। यह मैं

विंडोज सर्वर पर Garrys मॉड कैसे स्थापित करें

विंडोज सर्वर पर Garrys मॉड कैसे स्थापित करें

परिचय यह आलेख बताएगा कि विंडोज सर्वर 2012 पर गारस मोड सर्वर को कैसे डाउनलोड और इंस्टॉल किया जाए। यह गाइड गहराई में होने के लिए बनाया गया है।

कैसे स्थापित करें और अपने CentOS 7 सर्वर पर CyberPanel कॉन्फ़िगर करें

कैसे स्थापित करें और अपने CentOS 7 सर्वर पर CyberPanel कॉन्फ़िगर करें

एक अलग प्रणाली का उपयोग? परिचय CyberPanel बाजार पर पहला नियंत्रण पैनल है जो दोनों खुला स्रोत है और OpenLiteSpeed ​​का उपयोग करता है। क्या थी?

CentOS पर FFmpeg कैसे स्थापित करें

CentOS पर FFmpeg कैसे स्थापित करें

FFmpeg ऑडियो और वीडियो रिकॉर्ड करने, कन्वर्ट करने और स्ट्रीम करने के लिए एक लोकप्रिय ओपन सोर्स समाधान है, जो सभी प्रकार की ऑनलाइन स्ट्रीमिंग सेवाओं में व्यापक रूप से उपयोग किया जाता है। मैं

SSH का उपयोग करके LUKS डिस्क एन्क्रिप्शन पर LVM को दूरस्थ रूप से अनलॉक करने के लिए CentOS 7 स्थापित और सेटअप करें

SSH का उपयोग करके LUKS डिस्क एन्क्रिप्शन पर LVM को दूरस्थ रूप से अनलॉक करने के लिए CentOS 7 स्थापित और सेटअप करें

एलयूकेएस (लिनक्स यूनिफाइड की सेटअप) लिनक्स के लिए उपलब्ध विभिन्न डिस्क एन्क्रिप्शन प्रारूपों में से एक है जो प्लेटफॉर्म एग्नॉस्टिक है। यह ट्यूटोरियल आपको बुद्धि प्रदान करेगा

अपने Vultr VPS को कैसे एक्सेस करें

अपने Vultr VPS को कैसे एक्सेस करें

Vultr अपने VPS को कॉन्फ़िगर करने, स्थापित करने और उपयोग करने के लिए कई अलग-अलग तरीके प्रदान करता है। क्रेडेंशियल एक्सेस करें आपके VPS के लिए डिफ़ॉल्ट एक्सेस क्रेडेंशियल ar

CentOS 7 पर अक्टूबर CMS को कैसे स्थापित करें

CentOS 7 पर अक्टूबर CMS को कैसे स्थापित करें

अक्टूबर एक खुला स्रोत सामग्री प्रबंधन प्रणाली है जो लारवेल PHP फ्रेमवर्क पर आधारित है। एक सुरुचिपूर्ण इंटरफ़ेस और एक संक्षिप्त मॉड्यूलर वास्तुकला के साथ