Ξεκινώντας με το Kubernetes στο CentOS 7

Ξεκινώντας με το Kubernetes στο CentOS 7

Το Kubernetes είναι μια πλατφόρμα ανοιχτού κώδικα που αναπτύχθηκε από την Google για τη διαχείριση εφαρμογών με κοντέινερ σε ένα σύμπλεγμα διακομιστών. Βασίζεται σε μιάμιση δεκαετία εμπειρίας που έχει η Google με τη λειτουργία συμπλεγμάτων κοντέινερ σε κλίμακα , και παρέχει στους προγραμματιστές υποδομή στυλ Google, αξιοποιώντας έργα ανοιχτού κώδικα με τα καλύτερα έργα, όπως:

  • Docker : μια τεχνολογία κοντέινερ εφαρμογής.
  • Etcd : ένας κατανεμημένος χώρος αποθήκευσης κλειδιού-τιμής που διαχειρίζεται πληροφορίες σε όλο το σύμπλεγμα και παρέχει ανακάλυψη υπηρεσιών.
  • Flannel : ένα ύφασμα δικτύου επικάλυψης που επιτρέπει τη συνδεσιμότητα κοντέινερ σε πολλούς διακομιστές.

Το Kubernetes επιτρέπει στους προγραμματιστές να ορίζουν την υποδομή εφαρμογών τους δηλωτικά μέσω αρχείων YAML και αφαιρέσεων όπως Pods, RC και Services (περισσότερα γι' αυτό αργότερα) και διασφαλίζει ότι το υποκείμενο σύμπλεγμα ταιριάζει με την κατάσταση που ορίζεται από τον χρήστη ανά πάσα στιγμή.

Μερικά από τα χαρακτηριστικά του περιλαμβάνουν:

  • Αυτόματος προγραμματισμός πόρων συστήματος και αυτόματη τοποθέτηση κοντέινερ εφαρμογών σε ένα σύμπλεγμα.
  • Κλιμάκωση εφαρμογών εν κινήσει με μία μόνο εντολή.
  • Κυλιόμενες ενημερώσεις με μηδενικό χρόνο διακοπής λειτουργίας.
  • Self-healing: αυτόματος επαναπρογραμματισμός μιας εφαρμογής σε περίπτωση βλάβης ενός διακομιστή, αυτόματη επανεκκίνηση των κοντέινερ, έλεγχοι υγείας.

Μεταβείτε στην Εγκατάσταση εάν είστε ήδη εξοικειωμένοι με το Kubernetes.

ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ

Το Kubernetes προσφέρει τις ακόλουθες αφαιρέσεις (λογικές μονάδες) στους προγραμματιστές:

  • Pods.
  • Ελεγκτές αναπαραγωγής.
  • Ετικέτες.
  • Υπηρεσίες.

Pods

Είναι η βασική μονάδα φόρτου εργασίας Kubernetes. Ένα pod μοντελοποιεί έναν "λογικό κεντρικό υπολογιστή" για συγκεκριμένη εφαρμογή σε ένα κοντέινερ περιβάλλον. Με απλούς όρους, μοντελοποιεί μια ομάδα εφαρμογών ή υπηρεσιών που συνήθιζαν να λειτουργούν στον ίδιο διακομιστή στον κόσμο πριν από το κοντέινερ. Τα κοντέινερ μέσα σε ένα pod μοιράζονται τον ίδιο χώρο ονομάτων δικτύου και μπορούν επίσης να μοιράζονται όγκους δεδομένων.

Ελεγκτές αναπαραγωγής

Τα Pods είναι εξαιρετικά για την ομαδοποίηση πολλών κοντέινερ σε λογικές μονάδες εφαρμογής, αλλά δεν προσφέρουν αναπαραγωγή ή επαναπρογραμματισμό σε περίπτωση αποτυχίας διακομιστή.

Εδώ είναι χρήσιμος ένας ελεγκτής αναπαραγωγής ή RC. Ένα RC διασφαλίζει ότι ένας αριθμός ομάδων ομάδων μιας δεδομένης υπηρεσίας εκτελείται πάντα σε όλο το σύμπλεγμα.

Ετικέτες

Είναι μεταδεδομένα κλειδιού-τιμής που μπορούν να προσαρτηθούν σε οποιονδήποτε πόρο του Kubernetes (pods, RC, υπηρεσίες, κόμβοι, ...).

Υπηρεσίες

Τα pod και οι ελεγκτές αναπαραγωγής είναι ιδανικά για την ανάπτυξη και τη διανομή εφαρμογών σε ένα σύμπλεγμα, αλλά τα pods έχουν εφήμερες διευθύνσεις IP που αλλάζουν κατά τον επαναπρογραμματισμό ή την επανεκκίνηση του κοντέινερ.

Μια υπηρεσία Kubernetes παρέχει ένα σταθερό τελικό σημείο (σταθερή εικονική IP + θύρα σύνδεσης με τους κεντρικούς διακομιστές) για μια ομάδα ομάδων που διαχειρίζεται ένας ελεγκτής αναπαραγωγής.

Το σύμπλεγμα Kubernetes

Στην απλούστερη μορφή του, ένα σύμπλεγμα Kubernetes αποτελείται από δύο τύπους κόμβων:

  • 1 Master Kubernetes.
  • N Κόμβοι Kubernetes.

Δάσκαλος του Kubernetes

Το κύριο Kubernetes είναι η μονάδα ελέγχου ολόκληρου του συμπλέγματος.

Τα κύρια συστατικά του πλοιάρχου είναι:

  • Etcd: ένα παγκοσμίως διαθέσιμο χώρο αποθήκευσης δεδομένων που αποθηκεύει πληροφορίες σχετικά με το σύμπλεγμα και τις υπηρεσίες και τις εφαρμογές που εκτελούνται στο σύμπλεγμα.
  • Διακομιστής Kube API: αυτός είναι ο κύριος κόμβος διαχείρισης του συμπλέγματος Kubernetes και εκθέτει μια διεπαφή RESTful.
  • Διαχείριση ελεγκτών: χειρίζεται την αναπαραγωγή εφαρμογών που διαχειρίζονται οι ελεγκτές αναπαραγωγής.
  • Προγραμματιστής: παρακολουθεί τη χρήση πόρων σε όλο το σύμπλεγμα και εκχωρεί ανάλογα φόρτους εργασίας.

Κόμβος Kubernetes

Ο κόμβος Kubernetes είναι διακομιστές εργασίας που είναι υπεύθυνοι για την εκτέλεση των pods.

Τα κύρια συστατικά ενός κόμβου είναι:

  • Docker: ένας δαίμονας που εκτελεί κοντέινερ εφαρμογών που ορίζονται σε pods.
  • Kubelet: μονάδα ελέγχου για pods σε τοπικό σύστημα.
  • Kube-proxy: ένας διακομιστής μεσολάβησης δικτύου που διασφαλίζει τη σωστή δρομολόγηση για τις υπηρεσίες Kubernetes.

Εγκατάσταση

Σε αυτόν τον οδηγό, θα δημιουργήσουμε ένα σύμπλεγμα 3 κόμβων χρησιμοποιώντας διακομιστές CentOS 7:

  • 1 Master Kubernetes (kube-master)
  • 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"

Έναρξη κτλ:

systemctl start etcd

Εγκαταστήστε και διαμορφώστε το ύφασμα δικτύου επικάλυψης Flannel (αυτό είναι απαραίτητο ώστε τα κοντέινερ που εκτελούνται σε διαφορετικούς διακομιστές να μπορούν να βλέπουν το ένα το άλλο):

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

Τοποθετήστε 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

Εγκαταστήστε τα πακέτα κόμβων 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

Τοποθετήστε 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

Το Selenium είναι ένα πλαίσιο για την αυτοματοποίηση των προγραμμάτων περιήγησης για δοκιμαστικούς σκοπούς. Είναι ένα ισχυρό εργαλείο του οπλοστασίου οποιουδήποτε προγραμματιστή ιστού.

Το πλέγμα σεληνίου επιτρέπει την κλιμακούμενη και παράλληλη εξ αποστάσεως εκτέλεση δοκιμών σε ένα σύμπλεγμα κόμβων σεληνίου που συνδέονται με έναν κεντρικό κόμβο σεληνίου.

Since Selenium nodes are stateless themselves and the amount of nodes we run is flexible, depending on our testing workloads, this is a perfect candidate application to be deployed on a Kubernetes cluster.

In the next section, we'll deploy a grid consisting of 5 application containers:

  • 1 central Selenium hub that will be the remote endpoint to which our tests will connect.
  • 2 Selenium nodes running Firefox.
  • 2 Selenium nodes running Chrome.

Deployment strategy

To automatically manage replication and self-healing, we'll create a Kubernetes replication controller for each type of application container we listed above.

To provide developers who are running tests with a stable Selenium hub endpoint, we'll create a Kubernetes service connected to the hub replication controller.

Selenium hub

Replication controller
# 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

Deployment:

[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)

Κόμβοι σεληνίου

Ελεγκτής αναπαραγωγής κόμβου Firefox:

# 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 υπηρεσίας διανομέα Selenium, σε αυτήν την περίπτωση 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, ενώ το pod selenium-node-firefox-y9qjpείναι στο kube-node1.

Επαναλαμβάνουμε την ίδια διαδικασία για τους κόμβους Selenium Chrome.

Ελεγκτής αναπαραγωγής κόμβου 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 εργαζόμενοι).

Χρησιμοποιώντας pods, RC και μια υπηρεσία, αναπτύξαμε με επιτυχία ένα Selenium Grid που αποτελείται από έναν κεντρικό διανομέα και 4 κόμβους, επιτρέποντας στους προγραμματιστές να εκτελούν 4 ταυτόχρονες δοκιμές Selenium τη φορά στο σύμπλεγμα.

Η Kubernetes προγραμμάτισε αυτόματα τα κοντέινερ σε ολόκληρο το σύμπλεγμα.

Ξεκινώντας με το Kubernetes στο CentOS 7

Αυτοίαση

Η Kubernetes επαναπρογραμματίζει αυτόματα τα pods σε υγιείς διακομιστές, εάν ένας ή περισσότεροι από τους διακομιστές μας διακοπούν. Στο παράδειγμά μου, το kube-node2 τρέχει αυτήν τη στιγμή το Selenium hub pod και 1 Selenium Firefox node pod.

[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-node1, διασφαλίζοντας ελάχιστη διακοπή της υπηρεσίας.

[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

Κλιμάκωση του πλέγματος σεληνίου σας

Η κλιμάκωση του πλέγματος Selenium είναι εξαιρετικά εύκολη με το Kubernetes. Φανταστείτε ότι αντί για 2 κόμβους Firefox, θα ήθελα να εκτελέσω 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


Διαμόρφωση στατικής δικτύωσης και IPv6 στο CentOS 7

Διαμόρφωση στατικής δικτύωσης και IPv6 στο CentOS 7

Το VULTR έκανε πρόσφατα αλλαγές στο τέλος του και όλα θα πρέπει τώρα να λειτουργούν σωστά με το NetworkManager ενεργοποιημένο. Εάν θέλετε να απενεργοποιήσετε

Δημιουργία δικτύου διακομιστών Minecraft με το BungeeCord σε Debian 8, Debian 9 ή CentOS 7

Δημιουργία δικτύου διακομιστών Minecraft με το BungeeCord σε Debian 8, Debian 9 ή CentOS 7

Τι χρειάζεστε Ένα Vultr VPS με τουλάχιστον 1 GB μνήμης RAM. Πρόσβαση SSH (με δικαιώματα root/διαχειριστή). Βήμα 1: Εγκατάσταση του BungeeCord Πρώτα πράγματα

Ενισχύστε την παραγωγικότητα με τα Z και Zsh στο CentOS

Ενισχύστε την παραγωγικότητα με τα Z και Zsh στο CentOS

Εισαγωγή Η εργασία σε συστήματα Linux σημαίνει ότι κάποιος χρησιμοποιεί τη γραμμή εντολών πιο συχνά. Πρέπει επίσης να πληκτρολογήσετε μεγάλα ονόματα καταλόγου ξανά και ξανά

Ρύθμιση του RethinkDB Cluster στο CentOS 7

Ρύθμιση του RethinkDB Cluster στο CentOS 7

Εισαγωγή Το RethinkDB είναι μια βάση δεδομένων NoSQL που αποθηκεύει δεδομένα ως έγγραφα JSON. Διαθέτει μια εξαιρετικά διαισθητική γλώσσα ερωτημάτων και διαθέτει χαρακτηριστικά που είναι κοινά διαθέσιμα i

Εγκαταστήστε το DirectAdmin στο CentOS 6 ή 7

Εγκαταστήστε το DirectAdmin στο CentOS 6 ή 7

Το DirectAdmin είναι ένας ιδιόκτητος πίνακας ελέγχου που βασίζεται στο web που μπορείτε να εγκαταστήσετε στον διακομιστή σας, ο οποίος προσφέρει μια ποικιλία λειτουργιών διαχείρισης συστήματος. Σε αυτό

Επισκόπηση και αντιμετώπιση προβλημάτων διαδικασίας εκκίνησης CentOS 7 και RHEL 7

Επισκόπηση και αντιμετώπιση προβλημάτων διαδικασίας εκκίνησης CentOS 7 και RHEL 7

Αυτό το άρθρο περιγράφει τη διαδικασία εκκίνησης για συστήματα CentOS/RHEL 7.x. Αν και μπορεί να παραμείνει παρόμοιο με τις προηγούμενες εκδόσεις, με το RHEL 7, το systemd είναι

Εγκαταστήστε το PostgreSQL στο CentOS 7

Εγκαταστήστε το PostgreSQL στο CentOS 7

Εισαγωγή Το PostgreSQL είναι το πιο προηγμένο σύστημα διαχείρισης σχεσιακών βάσεων δεδομένων ανοιχτού κώδικα στον κόσμο (RDBMS). Είναι συμβατό με τα πρότυπα ANSI SQL:2008 και

Βασικά στοιχεία διαχείρισης χρηστών σε συστήματα CentOS

Βασικά στοιχεία διαχείρισης χρηστών σε συστήματα CentOS

Η διαχείριση των χρηστών μπορεί να είναι μια τρομακτική εργασία: από την καθημερινή συντήρηση, τους κινδύνους ασφαλείας και την έλλειψη ενδελεχούς ηλεκτρονικής τεκμηρίωσης. Αυτό το άρθρο θα σας βοηθήσει να ξεκινήσετε

Εγκατάσταση του Docker CE στο CentOS 7

Εγκατάσταση του Docker CE στο CentOS 7

Η τεχνολογία Docker container σάς επιτρέπει να εκτελείτε εφαρμογές σε ένα συγκεκριμένο και απομονωμένο περιβάλλον. Το Docker Community Edition (CE) είναι το νέο όνομα για το fre

Αρχική εγκατάσταση ενός διακομιστή CentOS 7

Αρχική εγκατάσταση ενός διακομιστή CentOS 7

Εισαγωγή Ένας πρόσφατα ενεργοποιημένος διακομιστής CentOS 7 πρέπει να προσαρμοστεί για να μπορέσει να χρησιμοποιηθεί ως σύστημα παραγωγής. Σε αυτό το άρθρο, το πιο σημαντικό

Ελέγξτε την ταχύτητα Διαδικτύου με το Speedtest-cli στο CentOS

Ελέγξτε την ταχύτητα Διαδικτύου με το Speedtest-cli στο CentOS

Εισαγωγή Σε αυτό το σεμινάριο, καλό είναι να εγκαταστήσετε το Speedtest-cli για να ελέγξετε την ταχύτητα δικτύου του διακομιστή σας. Το Speedtest-cli είναι μια διεπαφή γραμμής εντολών για το th

Εγκαταστήστε το περιβάλλον GUI στο CentOS 6

Εγκαταστήστε το περιβάλλον GUI στο CentOS 6

Η διαχείριση του διακομιστή σας μόνο με SSH μπορεί να είναι εκφοβιστική. Το καλό για εμάς είναι ότι το Vultr έχει μια επιλογή View Console. Για να χρησιμοποιήσετε πλήρως την κονσόλα Vultrs VNC

Ρυθμίστε τη ζώνη ώρας και το NTP στο CentOS 6

Ρυθμίστε τη ζώνη ώρας και το NTP στο CentOS 6

Εισαγωγή Για τους διαχειριστές διακομιστών, είναι σημαντικό να ρυθμίζουν και να διατηρούν σωστά την ώρα στους διακομιστές. Ο εσφαλμένα ρυθμισμένος χρόνος θα προκαλέσει χάος εντός του ου

Πώς να εγκαταστήσετε το Foreman στο CentOS 7

Πώς να εγκαταστήσετε το Foreman στο CentOS 7

Χρησιμοποιώντας ένα διαφορετικό σύστημα; Το Foreman είναι ένα δωρεάν και ανοιχτού κώδικα εργαλείο που σας βοηθά με τη διαμόρφωση και τη διαχείριση φυσικών και εικονικών διακομιστών. Forema

Ασφάλιση και σκλήρυνση του πυρήνα CentOS 7 με το Sysctl

Ασφάλιση και σκλήρυνση του πυρήνα CentOS 7 με το Sysctl

Εισαγωγή Το Sysctl επιτρέπει στο χρήστη να ρυθμίσει με ακρίβεια τον πυρήνα χωρίς να χρειάζεται να ξαναχτίσει τον πυρήνα. Θα εφαρμόσει επίσης τις αλλαγές αμέσως, έτσι ο διακομιστής κέρδισε

Χρησιμοποιήστε το Nethogs για την παρακολούθηση της χρήσης εύρους ζώνης δικτύου

Χρησιμοποιήστε το Nethogs για την παρακολούθηση της χρήσης εύρους ζώνης δικτύου

Σε αυτό το σεμινάριο, θα καλύψουμε τη διαδικασία εγκατάστασης και χρήσης nethogs στο CentOS 6x x64. Το nethogs είναι ένα εργαλείο παρακολούθησης δικτύου που επιτρέπει στο Networ

Εγκαταστήστε το CentOS Web Panel (CWP) στο CentOS 6

Εγκαταστήστε το CentOS Web Panel (CWP) στο CentOS 6

Το CentOS Web Panel ή CWP είναι ένας πίνακας ελέγχου φιλοξενίας ανοιχτού κώδικα που έχει σχεδιαστεί για γρήγορη και εύκολη διαχείριση ενός διακομιστή. Περιλαμβάνει όλα τα χαρακτηριστικά o

Ρυθμίστε τα Zarafa και Yaffas στο CentOS 6

Ρυθμίστε τα Zarafa και Yaffas στο CentOS 6

Υπάρχουν πολλές λύσεις εκεί έξω που αντικαθιστούν το Microsoft Exchange με μια λύση Linux, αλλά όλες είχαν ένα πρόβλημα που δεν μου άρεσε πολύ. Όταν λαμβάνω

Πώς να εγκαταστήσετε και να ρυθμίσετε το Concourse CI στο CentOS 7

Πώς να εγκαταστήσετε και να ρυθμίσετε το Concourse CI στο CentOS 7

Χρησιμοποιώντας ένα διαφορετικό σύστημα; Εισαγωγή Η συνεχής ενοποίηση είναι μια πρακτική ανάπτυξης λογισμικού DevOps που επιτρέπει στους προγραμματιστές να συγχωνεύουν συχνά

Ανάπτυξη ενός Glowing Bear Backend Server στο CentOS 7

Ανάπτυξη ενός Glowing Bear Backend Server στο CentOS 7

Το Glowing Bear είναι μια διεπαφή ιστού για τον πελάτη WeeChat IRC και προσπαθεί να είναι μια σύγχρονη διεπαφή. Με τα χαρακτηριστικά του, όπως κλικ για αναφορά, αντικατάσταση emoji

The Rise of Machines: Real World Applications of AI

The Rise of Machines: Real World Applications of AI

Η Τεχνητή Νοημοσύνη δεν είναι στο μέλλον, είναι εδώ ακριβώς στο παρόν Σε αυτό το blog Διαβάστε πώς οι εφαρμογές Τεχνητής Νοημοσύνης έχουν επηρεάσει διάφορους τομείς.

Επιθέσεις DDOS: Μια σύντομη επισκόπηση

Επιθέσεις DDOS: Μια σύντομη επισκόπηση

Είστε επίσης θύμα των επιθέσεων DDOS και έχετε μπερδευτεί σχετικά με τις μεθόδους πρόληψης; Διαβάστε αυτό το άρθρο για να λύσετε τις απορίες σας.

Έχετε αναρωτηθεί ποτέ πώς κερδίζουν χρήματα οι χάκερ;

Έχετε αναρωτηθεί ποτέ πώς κερδίζουν χρήματα οι χάκερ;

Μπορεί να έχετε ακούσει ότι οι χάκερ κερδίζουν πολλά χρήματα, αλλά έχετε αναρωτηθεί ποτέ πώς κερδίζουν τέτοια χρήματα; ας συζητήσουμε.

Επαναστατικές εφευρέσεις από την Google που θα σας φέρουν εύκολη στη ζωή.

Επαναστατικές εφευρέσεις από την Google που θα σας φέρουν εύκολη στη ζωή.

Θέλετε να δείτε επαναστατικές εφευρέσεις της Google και πώς αυτές οι εφευρέσεις άλλαξαν τη ζωή κάθε ανθρώπου σήμερα; Στη συνέχεια, διαβάστε στο blog για να δείτε τις εφευρέσεις της Google.

Friday Essential: Τι συνέβη με τα αυτοκίνητα που κινούνται με AI;

Friday Essential: Τι συνέβη με τα αυτοκίνητα που κινούνται με AI;

Η ιδέα των αυτοκινούμενων αυτοκινήτων να βγαίνουν στους δρόμους με τη βοήθεια της τεχνητής νοημοσύνης είναι ένα όνειρο που έχουμε εδώ και καιρό. Όμως, παρά τις πολλές υποσχέσεις, δεν φαίνονται πουθενά. Διαβάστε αυτό το blog για να μάθετε περισσότερα…

Τεχνολογική μοναδικότητα: Ένα μακρινό μέλλον του ανθρώπινου πολιτισμού;

Τεχνολογική μοναδικότητα: Ένα μακρινό μέλλον του ανθρώπινου πολιτισμού;

Καθώς η Επιστήμη εξελίσσεται με γρήγορους ρυθμούς, αναλαμβάνοντας πολλές από τις προσπάθειές μας, αυξάνονται και οι κίνδυνοι να υποβάλλουμε τον εαυτό μας σε μια ανεξήγητη Ιδιότητα. Διαβάστε τι σημαίνει η μοναδικότητα για εμάς.

Εξέλιξη της αποθήκευσης δεδομένων – Infographic

Εξέλιξη της αποθήκευσης δεδομένων – Infographic

Οι μέθοδοι αποθήκευσης των δεδομένων εξελίσσονται μπορεί να είναι από τη γέννηση των Δεδομένων. Αυτό το ιστολόγιο καλύπτει την εξέλιξη της αποθήκευσης δεδομένων με βάση ένα infographic.

Λειτουργίες Αρχιτεκτονικών Επιπέδων Αναφοράς Μεγάλων Δεδομένων

Λειτουργίες Αρχιτεκτονικών Επιπέδων Αναφοράς Μεγάλων Δεδομένων

Διαβάστε το ιστολόγιο για να μάθετε διαφορετικά επίπεδα στην Αρχιτεκτονική Μεγάλων Δεδομένων και τις λειτουργίες τους με τον απλούστερο τρόπο.

6 εκπληκτικά οφέλη από την ύπαρξη έξυπνων οικιακών συσκευών στη ζωή μας

6 εκπληκτικά οφέλη από την ύπαρξη έξυπνων οικιακών συσκευών στη ζωή μας

Σε αυτόν τον ψηφιακό κόσμο, οι έξυπνες οικιακές συσκευές έχουν γίνει κρίσιμο μέρος της ζωής. Ακολουθούν μερικά εκπληκτικά οφέλη των έξυπνων οικιακών συσκευών σχετικά με το πώς κάνουν τη ζωή μας να αξίζει και να απλοποιείται.

Η ενημέρωση του συμπληρώματος macOS Catalina 10.15.4 προκαλεί περισσότερα προβλήματα από την επίλυση

Η ενημέρωση του συμπληρώματος macOS Catalina 10.15.4 προκαλεί περισσότερα προβλήματα από την επίλυση

Πρόσφατα, η Apple κυκλοφόρησε το macOS Catalina 10.15.4 μια συμπληρωματική ενημέρωση για την επιδιόρθωση προβλημάτων, αλλά φαίνεται ότι η ενημέρωση προκαλεί περισσότερα προβλήματα που οδηγούν σε bricking των μηχανών mac. Διαβάστε αυτό το άρθρο για να μάθετε περισσότερα