So installieren Sie MODX Revolution auf einem CentOS 7 LAMP VPS
Verwenden Sie ein anderes System? MODX Revolution ist ein schnelles, flexibles, skalierbares, kostenloses und Open-Source-Content-Management-System (CMS) für Unternehmen, das i
Kubernetes ist eine Open-Source-Plattform, die von Google für die Verwaltung von Containeranwendungen auf einem Servercluster entwickelt wurde. Es baut auf anderthalb Jahrzehnten Erfahrung auf, die Google mit der Ausführung von Containerclustern in großem Maßstab hat , und bietet Entwicklern eine Infrastruktur im Google-Stil, die sich auf erstklassige Open-Source-Projekte stützt, wie z.
Mit Kubernetes können Entwickler ihre Anwendungsinfrastruktur deklarativ über YAML-Dateien und Abstraktionen wie Pods, RCs und Services definieren (dazu später mehr) und sicherstellen, dass der zugrunde liegende Cluster jederzeit dem benutzerdefinierten Status entspricht.
Einige seiner Funktionen umfassen:
Fahren Sie mit der Installation fort, wenn Sie bereits mit Kubernetes vertraut sind.
Kubernetes bietet Entwicklern folgende Abstraktionen (logische Einheiten) an:
Es ist die Grundeinheit der Kubernetes-Workloads. Ein Pod modelliert einen anwendungsspezifischen "logischen Host" in einer containerisierten Umgebung. In Laienbegriffen modelliert es eine Gruppe von Anwendungen oder Diensten, die in der Welt vor dem Container auf demselben Server ausgeführt wurden. Container in einem Pod verwenden denselben Netzwerk-Namespace und können auch Datenmengen gemeinsam nutzen.
Pods eignen sich hervorragend zum Gruppieren mehrerer Container in logischen Anwendungseinheiten, bieten jedoch keine Replikation oder Neuplanung im Falle eines Serverausfalls.
Hier bietet sich ein Replikationscontroller oder RC an. Ein RC stellt sicher, dass immer mehrere Pods eines bestimmten Dienstes im Cluster ausgeführt werden.
Hierbei handelt es sich um Schlüsselwert-Metadaten, die an jede Kubernetes-Ressource (Pods, RCs, Dienste, Knoten usw.) angehängt werden können.
Pods und Replikationscontroller eignen sich hervorragend zum Bereitstellen und Verteilen von Anwendungen in einem Cluster. Pods verfügen jedoch über kurzlebige IP-Adressen, die sich bei einer Neuplanung oder einem Neustart des Containers ändern.
Ein Kubernetes-Dienst bietet einen stabilen Endpunkt (feste virtuelle IP + -Portbindung an die Hostserver) für eine Gruppe von Pods, die von einem Replikationscontroller verwaltet werden.
In seiner einfachsten Form besteht ein Kubernetes-Cluster aus zwei Knotentypen:
Der Kubernetes-Master ist die Steuereinheit des gesamten Clusters.
Die Hauptkomponenten des Masters sind:
Der Kubernetes-Knoten sind Arbeitsserver, die für die Ausführung von Pods verantwortlich sind.
Die Hauptkomponenten eines Knotens sind:
In diesem Handbuch erstellen wir einen 3-Knoten-Cluster mit CentOS 7-Servern:
Sie können später nach dem gleichen Installationsverfahren für Kubernetes-Knoten so viele zusätzliche Knoten hinzufügen, wie Sie möchten.
Konfigurieren Sie Hostnamen und /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
Firewall deaktivieren:
systemctl disable firewalld
systemctl stop firewalld
Installieren Sie die Kubernetes-Masterpakete:
yum install etcd kubernetes-master
Aufbau:
# /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"
Starten Sie Etcd:
systemctl start etcd
Installieren und konfigurieren Sie die Flanell-Overlay-Netzwerkstruktur (dies ist erforderlich, damit Container, die auf verschiedenen Servern ausgeführt werden, einander sehen können):
yum install flannel
Erstellen Sie eine Flanell-Konfigurationsdatei ( flannel-config.json
):
{
"Network": "10.20.0.0/16",
"SubnetLen": 24,
"Backend": {
"Type": "vxlan",
"VNI": 1
}
}
Legen Sie die Flanellkonfiguration auf dem Etcd-Server fest:
etcdctl set coreos.com/network/config < flannel-config.json
Zeigen Sie Flanell auf den Etcd-Server:
# /etc/sysconfig/flanneld
FLANNEL_ETCD="http://kube-master:2379"
Aktivieren Sie die Dienste so, dass sie beim Booten gestartet werden:
systemctl enable etcd
systemctl enable kube-apiserver
systemctl enable kube-controller-manager
systemctl enable kube-scheduler
systemctl enable flanneld
Starten Sie den Server neu.
Installieren Sie die Kubernetes-Knotenpakete:
yum install docker kubernetes-node
In den nächsten beiden Schritten wird Docker so konfiguriert, dass Overlays für eine bessere Leistung verwendet werden. Weitere Informationen finden Sie in diesem Blogbeitrag :
Löschen Sie das aktuelle Docker-Speicherverzeichnis:
systemctl stop docker
rm -rf /var/lib/docker
Konfigurationsdateien ändern:
# /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
Konfigurieren Sie kube-node1 für die Verwendung unseres zuvor konfigurierten Masters:
# /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"
Installieren und konfigurieren Sie die Flanell-Overlay-Netzwerkstruktur (erneut - dies ist erforderlich, damit Container, die auf verschiedenen Servern ausgeführt werden, einander sehen können):
yum install flannel
Zeigen Sie Flanell auf den Etcd-Server:
# /etc/sysconfig/flanneld
FLANNEL_ETCD="http://kube-master:2379"
Dienste aktivieren:
systemctl enable docker
systemctl enable flanneld
systemctl enable kubelet
systemctl enable kube-proxy
Starten Sie den Server neu.
Überprüfen Sie nach dem Neustart aller Server, ob Ihr Kubernetes-Cluster betriebsbereit ist:
[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
Selen ist ein Framework zur Automatisierung von Browsern zu Testzwecken. Es ist ein mächtiges Werkzeug des Arsenals eines jeden Webentwicklers.
Das Selenium-Grid ermöglicht die skalierbare und parallele Remote-Ausführung von Tests über einen Cluster von Selenium-Knoten, die mit einem zentralen Selenium-Hub verbunden sind.
Da Selenium-Knoten selbst zustandslos sind und die Anzahl der von uns ausgeführten Knoten abhängig von unseren Test-Workloads flexibel ist, ist dies eine perfekte Kandidatenanwendung für die Bereitstellung in einem Kubernetes-Cluster.
Im nächsten Abschnitt stellen wir ein Raster bereit, das aus 5 Anwendungscontainern besteht:
Um die Replikation und Selbstheilung automatisch zu verwalten, erstellen wir einen Kubernetes-Replikationscontroller für jeden oben aufgeführten Typ von Anwendungscontainer.
Um Entwicklern, die Tests ausführen, einen stabilen Selenium-Hub-Endpunkt bereitzustellen, erstellen wir einen Kubernetes-Dienst, der mit dem Hub-Replikationscontroller verbunden ist.
# 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
Einsatz:
[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
Hier können wir sehen, dass Kubernetes meinen Selen-Hub-Container auf kube-node2 platziert hat.
# 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
Einsatz:
[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
Nach der Bereitstellung des Dienstes ist er erreichbar über:
(unter Verwendung der öffentlichen IP eines anderen Kubernetes-Knotens)
Firefox-Knotenreplikationscontroller:
# 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"
Einsatz:
Ersetzen Sie replace_with_service_ip
in selenium-node-firefox-rc.yaml
der aktuellen Selen - Hub - Service IP, in diesem Fall 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
Wie wir sehen können, hat Kubernetes zwei Replikate erstellt selenium-firefox-node
und diese über den Cluster verteilt. Pod selenium-node-firefox-lc6qt
befindet sich auf kube-node2, während sich pod selenium-node-firefox-y9qjp
auf kube-node1 befindet.
Wir wiederholen den gleichen Vorgang für unsere Selenium Chrome-Knoten.
Chrome Node Replication Controller:
# 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"
Einsatz:
[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
In diesem Handbuch haben wir einen kleinen Kubernetes-Cluster mit 3 Servern eingerichtet (1 Master-Controller + 2 Worker).
Mithilfe von Pods, RCs und einem Service haben wir erfolgreich ein Selenium-Grid bereitgestellt, das aus einem zentralen Hub und 4 Knoten besteht, sodass Entwickler 4 gleichzeitige Selenium-Tests gleichzeitig im Cluster ausführen können.
Kubernetes plante die Container automatisch im gesamten Cluster.
Kubernetes plant Pods automatisch auf fehlerfreie Server um, wenn einer oder mehrere unserer Server ausfallen. In meinem Beispiel führt kube-node2 derzeit den Selenium-Hub-Pod und 1 Selenium Firefox-Knoten-Pod aus.
[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
Wir simulieren einen Serverausfall, indem wir kube-node2 herunterfahren. Nach einigen Minuten sollten Sie feststellen, dass die Container, die auf kube-node2 ausgeführt wurden, auf kube-node1 verschoben wurden, um eine minimale Unterbrechung des Dienstes zu gewährleisten.
[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
Das Skalieren Ihres Selen-Gitters ist mit Kubernetes ganz einfach. Stellen Sie sich vor, ich würde anstelle von 2 Firefox-Knoten 4 ausführen. Die Hochskalierung kann mit einem einzigen Befehl durchgeführt werden:
[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
Verwenden Sie ein anderes System? MODX Revolution ist ein schnelles, flexibles, skalierbares, kostenloses und Open-Source-Content-Management-System (CMS) für Unternehmen, das i
Vultr bietet Ihnen eine hervorragende Konnektivität für private Netzwerke für Server, die am selben Standort ausgeführt werden. Aber manchmal möchten Sie zwei Server in verschiedenen Ländern
Verwenden Sie ein anderes System? Einführung CyberPanel ist eines der ersten Control Panels auf dem Markt, das sowohl Open Source als auch OpenLiteSpeed verwendet. Was ist das?
Verwenden Sie ein anderes System? ESpeak kann TTS-Audiodateien (Text-to-Speech) generieren. Diese können aus vielen Gründen nützlich sein, z. B. um Ihr eigenes Turin zu erstellen
Verwenden Sie ein anderes System? Thelia ist ein Open-Source-Tool zum Erstellen von E-Business-Websites und zum Verwalten von Online-Inhalten, die in PHP geschrieben wurden. Thelia Quellcode i
Cockpit ist ein kostenloses Open Source-Programm für die Linux-Serververwaltung. Es ist sehr leicht und hat eine schöne, einfach zu bedienende Weboberfläche. Es erlaubt System
Gollum ist die Git-basierte Wiki-Software, die als Backend des GitHub-Wikis verwendet wird. Durch die Bereitstellung von Gollum können Sie ein GitHub-ähnliches Wiki-System auf Ihnen hosten
BBR (Bottleneck Bandwidth and RTT) ist ein neuer Algorithmus zur Überlastungskontrolle, der von Google zum Linux-Kernel-TCP-Stack hinzugefügt wird. Mit BBR an Ort und Stelle,
YOURLS (Your Own URL Shortener) ist eine Open-Source-Anwendung zur URL-Verkürzung und Datenanalyse. In diesem Artikel werden wir den Installationsprozess behandeln
Verwenden Sie ein anderes System? RTMP eignet sich hervorragend für die Bereitstellung von Live-Inhalten. Wenn RTMP mit FFmpeg gekoppelt ist, können Streams in verschiedene Qualitäten konvertiert werden. Vultr i
LimeSurvey ist ein kostenloses und Open-Source-Online-Umfragetool, das häufig zum Veröffentlichen von Online-Umfragen und zum Sammeln von Umfrage-Feedback verwendet wird. In diesem Artikel werde ich
Einführung Java ist eine beliebte Softwareplattform, mit der Sie Java-Anwendungen und -Applets in verschiedenen Hardwareumgebungen entwickeln und ausführen können. Es gibt
Verwenden Sie ein anderes System? Netdata ist ein aufstrebender Stern im Bereich der Echtzeitüberwachung von Systemmetriken. Im Vergleich zu anderen Tools der gleichen Art bietet Netdata:
In diesem Tutorial erfahren Sie, wie Sie einen Just Cause 2-Multiplayer-Server einrichten. Voraussetzungen Bitte stellen Sie sicher, dass das System vollständig aktualisiert ist, bevor Sie beginnen
Verwenden Sie ein anderes System? In diesem Tutorial werde ich erklären, wie ein Starbound-Server unter CentOS 7 eingerichtet wird. Voraussetzungen Sie müssen dieses Spiel besitzen
ZNC ist ein kostenloser Open-Source-IRC-Bouncer, der permanent mit einem Netzwerk verbunden bleibt, sodass Clients Nachrichten empfangen können, die gesendet werden, während sie offline sind. Thi
Django ist ein beliebtes Python-Framework zum Schreiben von Webanwendungen. Mit Django können Sie Anwendungen schneller erstellen, ohne das Rad neu zu erfinden. Wenn du willst
ionCube Loader ist eine PHP-Erweiterung, mit der ein Webserver PHP-Dateien ausführen kann, die mit ionCube Encoder codiert wurden und für deren Ausführung erforderlich sind
Einführung Installieren Sie in diesem Tutorial PufferPanel auf unserem Vultr VPS. PufferPanel ist ein Open Source-Bedienfeld, das Sie kostenlos verwalten können
Verwenden Sie ein anderes System? Einführung BoltWire ist ein kostenloses und leichtes Content-Management-System, das in PHP geschrieben wurde. Im Vergleich zu den meisten anderen Content Managern
Ransomware-Angriffe nehmen zu, aber kann KI helfen, den neuesten Computervirus zu bekämpfen? Ist KI die Antwort? Lesen Sie hier, ob KI boone oder bane ist
ReactOS, ein quelloffenes und kostenloses Betriebssystem, ist hier mit der neuesten Version. Kann es den Anforderungen moderner Windows-Benutzer genügen und Microsoft zu Fall bringen? Lassen Sie uns mehr über dieses alte, aber neuere Betriebssystem erfahren.
Whatsapp hat endlich die Desktop-App für Mac- und Windows-Benutzer auf den Markt gebracht. Jetzt können Sie ganz einfach von Windows oder Mac auf WhatsApp zugreifen. Verfügbar für Windows 8+ und Mac OS 10.9+
Lesen Sie dies, um zu erfahren, wie Künstliche Intelligenz bei kleinen Unternehmen beliebt wird und wie sie die Wahrscheinlichkeit erhöht, sie wachsen zu lassen und ihren Konkurrenten einen Vorsprung zu verschaffen.
Vor kurzem hat Apple macOS Catalina 10.15.4 als Ergänzungsupdate veröffentlicht, um Probleme zu beheben, aber es scheint, dass das Update mehr Probleme verursacht, die zum Bricking von Mac-Computern führen. Lesen Sie diesen Artikel, um mehr zu erfahren
13 Tools zur kommerziellen Datenextraktion von Big Data
Unser Computer speichert alle Daten in einer organisierten Weise, die als Journaling-Dateisystem bekannt ist. Es ist eine effiziente Methode, die es dem Computer ermöglicht, Dateien zu suchen und anzuzeigen, sobald Sie auf die Suche klicken.https://wethegeek.com/?p=94116&preview=true
Da sich die Wissenschaft schnell weiterentwickelt und einen Großteil unserer Bemühungen übernimmt, steigt auch das Risiko, uns einer unerklärlichen Singularität auszusetzen. Lesen Sie, was Singularität für uns bedeuten könnte.
Ein Einblick in 26 Big-Data-Analysetechniken: Teil 1
KI im Gesundheitswesen hat in den letzten Jahrzehnten große Fortschritte gemacht. Somit wächst die Zukunft der KI im Gesundheitswesen immer noch von Tag zu Tag.