Conceptes bàsics
Clúster de Kubernetes
Instal·lació
Proveu el vostre servidor Kubernetes
Exemple: desplegament d'una graella de Selenium mitjançant Kubernetes
Autocuració
Ampliar la vostra quadrícula de seleni
Kubernetes és una plataforma de codi obert desenvolupada per Google per gestionar aplicacions en contenidors en un clúster de servidors. Es basa en una dècada i mitja d'experiència que té Google amb l'execució de grups de contenidors a escala , i ofereix als desenvolupadors una infraestructura d'estil de Google, aprofitant els millors projectes de codi obert, com ara:
- Docker : una tecnologia de contenidors d'aplicacions.
- Etcd : un magatzem de dades de valor-clau distribuït que gestiona la informació de tot el clúster i proporciona descobriment de serveis.
- Flanel : un teixit de xarxa superposat que permet la connectivitat de contenidors a diversos servidors.
Kubernetes permet als desenvolupadors definir la seva infraestructura d'aplicacions de manera declarativa mitjançant fitxers YAML i abstraccions, com ara pods, RC i serveis (més sobre això més endavant) i garanteix que el clúster subjacent coincideixi amb l'estat definit per l'usuari en tot moment.
Algunes de les seves característiques inclouen:
- Programació automàtica dels recursos del sistema i col·locació automàtica de contenidors d'aplicacions en un clúster.
- Escala aplicacions sobre la marxa amb una sola ordre.
- Actualitzacions en continu sense temps d'inactivitat.
- Autocuració: reprogramació automàtica d'una aplicació si un servidor falla, reinici automàtic dels contenidors, controls de salut.
Passeu a la instal·lació si ja esteu familiaritzat amb Kubernetes.
Conceptes bàsics
Kubernetes ofereix les abstraccions següents (unitats lògiques) als desenvolupadors:
- Beines.
- Controladors de replicació.
- Etiquetes.
- Serveis.
Beines
És la unitat bàsica de les càrregues de treball de Kubernetes. Un pod modela un "amfitrió lògic" específic d'una aplicació en un entorn en contenidors. En termes senzills, modela un grup d'aplicacions o serveis que solien executar-se al mateix servidor al món precontenidor. Els contenidors dins d'un pod comparteixen el mateix espai de noms de xarxa i també poden compartir volums de dades.
Controladors de replicació
Els pods són ideals per agrupar diversos contenidors en unitats d'aplicacions lògiques, però no ofereixen replicació ni reprogramació en cas d'error del servidor.
Aquí és on un controlador de rèplica o RC és útil. Un RC garanteix que una sèrie de pods d'un servei determinat s'executen sempre al clúster.
Etiquetes
Són metadades clau-valor que es poden adjuntar a qualsevol recurs de Kubernetes (pods, RC, serveis, nodes, ...).
Serveis
Els pods i els controladors de rèplica són excel·lents per desplegar i distribuir aplicacions en un clúster, però els pods tenen IP efímeres que canvien en reprogramar-les o en reiniciar el contenidor.
Un servei de Kubernetes proporciona un punt final estable (IP virtual fixa + enllaç de port amb els servidors host) per a un grup de pods gestionats per un controlador de rèplica.
Clúster de Kubernetes
En la seva forma més senzilla, un clúster de Kubernetes està format per dos tipus de nodes:
- 1 mestre Kubernetes.
- N nodes Kubernetes.
Mestre de Kubernetes
El mestre Kubernetes és la unitat de control de tot el clúster.
Els components principals del màster són:
- Etcd: un magatzem de dades disponible a nivell mundial que emmagatzema informació sobre el clúster i els serveis i aplicacions que s'executen al clúster.
- Servidor de l'API Kube: aquest és el centre de gestió principal del clúster Kubernetes i exposa una interfície RESTful.
- Gestor de controladors: gestiona la rèplica d'aplicacions gestionades pels controladors de rèplica.
- Programador: fa un seguiment de la utilització dels recursos al clúster i assigna les càrregues de treball en conseqüència.
Node Kubernetes
El node Kubernetes són servidors de treball que s'encarreguen d'executar pods.
Els components principals d'un node són:
- Docker: un dimoni que executa els contenidors d'aplicacions definits en pods.
- Kubelet: una unitat de control per a pods en un sistema local.
- Kube-proxy: un servidor intermediari de xarxa que garanteix l'encaminament correcte dels serveis de Kubernetes.
Instal·lació
En aquesta guia, crearem un clúster de 3 nodes amb servidors CentOS 7:
- 1 mestre Kubernetes (kube-master)
- 2 nodes Kubernetes (kube-node1, kube-node2)
Podeu afegir tants nodes addicionals com vulgueu més endavant seguint el mateix procediment d'instal·lació per als nodes de Kubernetes.
Tots els nodes
Configureu els noms d'amfitrió i /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
Desactiva el tallafoc:
systemctl disable firewalld
systemctl stop firewalld
Mestre de Kubernetes
Instal·leu els paquets mestres de Kubernetes:
yum install etcd kubernetes-master
Configuració:
# /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"
Inici Etcd:
systemctl start etcd
Instal·leu i configureu el teixit de xarxa de superposició Flannel (això és necessari perquè els contenidors que s'executen en diferents servidors es puguin veure entre ells):
yum install flannel
Creeu un fitxer de configuració de Flannel ( flannel-config.json):
{
"Network": "10.20.0.0/16",
"SubnetLen": 24,
"Backend": {
"Type": "vxlan",
"VNI": 1
}
}
Estableix la configuració de Flannel al servidor Etcd:
etcdctl set coreos.com/network/config < flannel-config.json
Apunta Flannel al servidor Etcd:
# /etc/sysconfig/flanneld
FLANNEL_ETCD="http://kube-master:2379"
Habiliteu els serveis perquè s'iniciïn a l'arrencada:
systemctl enable etcd
systemctl enable kube-apiserver
systemctl enable kube-controller-manager
systemctl enable kube-scheduler
systemctl enable flanneld
Reinicieu el servidor.
Node Kubernetes
Instal·leu els paquets de nodes de Kubernetes:
yum install docker kubernetes-node
Els dos passos següents configuraran Docker perquè utilitzi overlayfs per obtenir un millor rendiment. Per a més informació visiteu aquesta entrada del blog :
Suprimiu el directori d'emmagatzematge de Docker actual:
systemctl stop docker
rm -rf /var/lib/docker
Canvia els fitxers de configuració:
# /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
Configureu kube-node1 per utilitzar el nostre mestre configurat anteriorment:
# /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"
Instal·leu i configureu el teixit de xarxa de superposició de Flannel (de nou: això és necessari perquè els contenidors que s'executen en diferents servidors es puguin veure entre ells):
yum install flannel
Apunta Flannel al servidor Etcd:
# /etc/sysconfig/flanneld
FLANNEL_ETCD="http://kube-master:2379"
Habilita els serveis:
systemctl enable docker
systemctl enable flanneld
systemctl enable kubelet
systemctl enable kube-proxy
Reinicieu el servidor.
Proveu el vostre servidor Kubernetes
Després que tots els servidors s'hagin reiniciat, comproveu si el vostre clúster de Kubernetes està operatiu:
[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
Exemple: desplegament d'una graella de Selenium mitjançant Kubernetes
Selenium és un marc per automatitzar els navegadors amb finalitats de prova. És una potent eina de l'arsenal de qualsevol desenvolupador web.
Selenium grid permet l'execució remota escalable i paral·lela de proves a través d'un clúster de nodes de Selenium connectats a un concentrador central de 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
Aquí podem veure que Kubernetes ha col·locat el meu contenidor de concentrador de seleni a kube-node2.
Servei
# 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
Desplegament:
[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
Després de desplegar el servei, s'hi podrà accedir des de:
- Qualsevol node de Kubernetes, mitjançant la IP virtual 10.254.124.73 i el port 4444.
- Xarxes externes, mitjançant les IP públiques de qualsevol node Kubernetes, al port 30000.

(utilitzant la IP pública d'un altre node de Kubernetes)
Nodes de seleni
Controlador de rèplica de nodes de 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"
Desplegament:
Substituïu replace_with_service_ip-la selenium-node-firefox-rc.yamlper la IP real del servei del concentrador de Selenium, en aquest cas 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
Com podem veure, Kubernetes n'ha creat 2 rèpliques selenium-firefox-nodei les ha distribuïdes pel clúster. El pod selenium-node-firefox-lc6qtestà al kube-node2, mentre que el pod selenium-node-firefox-y9qjpestà al kube-node1.
Repetim el mateix procés per als nostres nodes de Selenium Chrome.
Controlador de rèplica de nodes de 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"
Desplegament:
[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
Embolcallant
En aquesta guia, hem configurat un petit clúster Kubernetes de 3 servidors (1 controlador mestre + 2 treballadors).
Mitjançant pods, RC i un servei, hem implementat amb èxit una graella de selenium que consta d'un concentrador central i 4 nodes, la qual cosa permet als desenvolupadors executar 4 proves de Selenium simultàniament al clúster.
Kubernetes va programar automàticament els contenidors a tot el clúster.
![Com començar amb Kubernetes a CentOS 7 Com començar amb Kubernetes a CentOS 7]()
Autocuració
Kubernetes reprograma automàticament els pods a servidors saludables si un o més dels nostres servidors cauen. Al meu exemple, kube-node2 està executant actualment el pod de concentrador de Selenium i 1 pod de node de Selenium Firefox.
[root@kube-node2 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5617399f146c selenium/node-firefox "/opt/bin/entry_poin 5 minutes ago Up 5 minutes k8s_selenium-node-firefox.46e635d8_selenium-node-firefox-zmj1r_default_31c89517-7a75-11e5-8648-5600001611e0_baae8e00
185230a3b431 gcr.io/google_containers/pause:0.8.0 "/pause" 5 minutes ago Up 5 minutes k8s_POD.3805e8b7_selenium-node-firefox-zmj1r_default_31c89517-7a75-11e5-8648-5600001611e0_40f809df
fdd5834c249d selenium/hub "/opt/bin/entry_poin About an hour ago Up About an hour k8s_selenium-hub.cb8bf0ed_selenium-hub-pilc8_default_6c98c1ff-7a68-11e5-8648-5600001611e0_5765e2c9
00e4ccb0bda8 gcr.io/google_containers/pause:0.8.0 "/pause" About an hour ago Up About an hour k8s_POD.3b3ee8b9_selenium-hub-pilc8_default_6c98c1ff-7a68-11e5-8648-5600001611e0_8398ac33
Simularem la fallada del servidor tancant el kube-node2. Al cap d'un parell de minuts, hauríeu de veure que els contenidors que s'executaven al kube-node2 s'han reprogramat a kube-node1, garantint una interrupció mínima del servei.
[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
Ampliar la vostra quadrícula de seleni
Ampliar el vostre Selenium Grid és molt fàcil amb Kubernetes. Imagineu que en comptes de 2 nodes de Firefox, m'agradaria executar-ne 4. L'augment d'escala es pot fer amb una sola ordre:
[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
![Com començar amb Kubernetes a CentOS 7 Com començar amb Kubernetes a CentOS 7]()