Enkle konsepter
Kubernetes-klyngen
Installasjon
Test Kubernetes-serveren din
Eksempel: Utplassering av et selennett ved hjelp av Kubernetes
Selv helbreding
Skalering av selennettet
Kubernetes er en åpen kildekode-plattform utviklet av Google for å administrere containeriserte applikasjoner på tvers av en klynge av servere. Den bygger på halvannet ti års erfaring som Google har med å kjøre klynger av containere i stor skala , og gir utviklere en infrastruktur i Google-stil, som utnytter best-of-breed åpen kildekode-prosjekter, som:
- Docker : en applikasjonsbeholderteknologi.
- Etcd : et distribuert nøkkelverdi-datalager som administrerer informasjon om hele klyngen og gir tjenesteoppdagelse.
- Flanell : et overleggsnettverk som muliggjør containertilkobling på tvers av flere servere.
Kubernetes lar utviklere definere applikasjonsinfrastrukturen deklarativt gjennom YAML-filer og abstraksjoner som Pods, RCs og Services (mer om dette senere) og sikrer at den underliggende klyngen samsvarer med den brukerdefinerte tilstanden til enhver tid.
Noen av funksjonene inkluderer:
- Automatisk planlegging av systemressurser og automatisk plassering av applikasjonsbeholdere på tvers av en klynge.
- Skalering av applikasjoner med en enkelt kommando.
- Rullende oppdateringer uten nedetid.
- Selvhelbredelse: automatisk omlegging av en applikasjon hvis en server svikter, automatisk omstart av beholdere, helsesjekker.
Gå videre til installasjonen hvis du allerede er kjent med Kubernetes.
Enkle konsepter
Kubernetes tilbyr følgende abstraksjoner (logiske enheter) til utviklere:
- Pods.
- Replikeringskontrollere.
- Etiketter.
- Tjenester.
Pods
Det er den grunnleggende enheten for Kubernetes-arbeidsbelastninger. En pod modellerer en applikasjonsspesifikk "logisk vert" i et containerisert miljø. I lekmannstermer modellerer den en gruppe applikasjoner eller tjenester som pleide å kjøre på samme server i pre-container-verdenen. Beholdere inne i en pod deler samme nettverksnavneområde og kan også dele datavolumer.
Replikeringskontrollere
Poder er flotte for å gruppere flere beholdere i logiske applikasjonsenheter, men de tilbyr ikke replikering eller omplanlegging i tilfelle serverfeil.
Det er her en replikeringskontroller eller RC kommer til nytte. En RC sikrer at et antall pods av en gitt tjeneste alltid kjører på tvers av klyngen.
Etiketter
De er nøkkelverdi-metadata som kan knyttes til enhver Kubernetes-ressurs (pods, RC-er, tjenester, noder, ...).
Tjenester
Poder og replikeringskontrollere er flotte for å distribuere og distribuere applikasjoner på tvers av en klynge, men poder har flyktige IP-er som endres ved omplanlegging eller omstart av container.
En Kubernetes-tjeneste gir et stabilt endepunkt (fast virtuell IP + portbinding til vertsserverne) for en gruppe pods administrert av en replikeringskontroller.
Kubernetes-klyngen
I sin enkleste form er en Kubernetes-klynge sammensatt av to typer noder:
- 1 Kubernetes-mester.
- N Kubernetes-noder.
Kubernetes mester
Kubernetes-masteren er kontrollenheten for hele klyngen.
Hovedkomponentene til masteren er:
- Etcd: et globalt tilgjengelig datalager som lagrer informasjon om klyngen og tjenestene og applikasjonene som kjører på klyngen.
- Kube API-server: dette er hovedsenteret for administrasjon av Kubernetes-klyngen, og det viser et RESTful-grensesnitt.
- Controller manager: håndterer replikering av applikasjoner administrert av replikeringskontrollere.
- Planlegger: sporer ressursutnyttelse på tvers av klyngen og tildeler arbeidsbelastninger deretter.
Kubernetes node
Kubernetes-noden er arbeiderservere som er ansvarlige for å kjøre pods.
Hovedkomponentene i en node er:
- Docker: en demon som kjører applikasjonsbeholdere definert i pods.
- Kubelet: en kontrollenhet for pods i et lokalt system.
- Kube-proxy: en nettverksproxy som sikrer riktig ruting for Kubernetes-tjenester.
Installasjon
I denne veiledningen vil vi lage en 3 node-klynge ved å bruke CentOS 7-servere:
- 1 Kubernetes master (kube-master)
- 2 Kubernetes-noder (kube-node1, kube-node2)
Du kan legge til så mange ekstra noder du vil senere ved å følge samme installasjonsprosedyre for Kubernetes-noder.
Alle noder
Konfigurer vertsnavn og /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
Deaktiver brannmur:
systemctl disable firewalld
systemctl stop firewalld
Kubernetes mester
Installer Kubernetes hovedpakker:
yum install etcd kubernetes-master
Konfigurasjon:
# /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"
Start osv.:
systemctl start etcd
Installer og konfigurer Flannel overlay nettverksstruktur (dette er nødvendig for at containere som kjører på forskjellige servere kan se hverandre):
yum install flannel
Opprett en Flanell-konfigurasjonsfil ( flannel-config.json):
{
"Network": "10.20.0.0/16",
"SubnetLen": 24,
"Backend": {
"Type": "vxlan",
"VNI": 1
}
}
Angi Flanell-konfigurasjonen i Etcd-serveren:
etcdctl set coreos.com/network/config < flannel-config.json
Pek Flanell til Etcd-serveren:
# /etc/sysconfig/flanneld
FLANNEL_ETCD="http://kube-master:2379"
Aktiver tjenester slik at de starter ved oppstart:
systemctl enable etcd
systemctl enable kube-apiserver
systemctl enable kube-controller-manager
systemctl enable kube-scheduler
systemctl enable flanneld
Start serveren på nytt.
Kubernetes node
Installer Kubernetes nodepakker:
yum install docker kubernetes-node
De neste to trinnene vil konfigurere Docker til å bruke overlegg for bedre ytelse. For mer informasjon besøk dette blogginnlegget :
Slett gjeldende docker-lagringskatalog:
systemctl stop docker
rm -rf /var/lib/docker
Endre konfigurasjonsfiler:
# /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
Konfigurer kube-node1 for å bruke vår tidligere konfigurerte master:
# /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"
Installer og konfigurer Flannel overlay nettverksstruktur (igjen - dette er nødvendig slik at containere som kjører på forskjellige servere kan se hverandre):
yum install flannel
Pek Flanell til Etcd-serveren:
# /etc/sysconfig/flanneld
FLANNEL_ETCD="http://kube-master:2379"
Aktiver tjenester:
systemctl enable docker
systemctl enable flanneld
systemctl enable kubelet
systemctl enable kube-proxy
Start serveren på nytt.
Test Kubernetes-serveren din
Etter at alle serverne har startet på nytt, sjekk om Kubernetes-klyngen din er operativ:
[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
Eksempel: Utplassering av et selennett ved hjelp av Kubernetes
Selenium er et rammeverk for å automatisere nettlesere for testformål. Det er et kraftig verktøy i arsenalet til enhver webutvikler.
Selenium-nettet muliggjør skalerbar og parallell ekstern utførelse av tester på tvers av en klynge av Selenium-noder som er koblet til en sentral Selenium-hub.
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
Her kan vi se at Kubernetes har plassert selen-hub-beholderen min på kube-node2.
Service
# 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
Utplassering:
[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
Etter å ha distribuert tjenesten, vil den være tilgjengelig fra:
- Enhver Kubernetes-node, via den virtuelle IP 10.254.124.73 og porten 4444.
- Eksterne nettverk, via alle Kubernetes-nodenes offentlige IP-er, på port 30000.

(ved å bruke den offentlige IP-en til en annen Kubernetes-node)
Selen noder
Firefox nodereplikeringskontroller:
# 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"
Utplassering:
Bytt replace_with_service_ipinn selenium-node-firefox-rc.yamlmed den faktiske Selenium-hub-tjenestens IP, i dette tilfellet 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
Som vi kan se, har Kubernetes laget 2 kopier av selenium-firefox-nodeog har distribuert dem over hele klyngen. Pod selenium-node-firefox-lc6qter på kube-node2, mens pod selenium-node-firefox-y9qjper på kube-node1.
Vi gjentar den samme prosessen for våre Selenium Chrome-noder.
Chrome nodereplikeringskontroller:
# 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"
Utplassering:
[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
Avslutter
I denne veiledningen har vi satt opp en liten Kubernetes-klynge med 3 servere (1 hovedkontroller + 2 arbeidere).
Ved å bruke pods, RC-er og en tjeneste, har vi implementert et Selenium Grid som består av en sentral hub og 4 noder, som gjør det mulig for utviklere å kjøre 4 samtidige Selenium-tester om gangen på klyngen.
Kubernetes planla automatisk beholderne på tvers av hele klyngen.
![Komme i gang med Kubernetes på CentOS 7 Komme i gang med Kubernetes på CentOS 7]()
Selv helbreding
Kubernetes flytter automatisk pods til sunne servere hvis en eller flere av våre servere går ned. I mitt eksempel kjører kube-node2 for øyeblikket Selenium hub pod og 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
Vi vil simulere serverfeil ved å slå av kube-node2. Etter et par minutter bør du se at beholderne som kjørte på kube-node2 har blitt flyttet til kube-node1, noe som sikrer minimalt avbrudd i tjenesten.
[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
Skalering av selennettet
Å skalere selennettet er superenkelt med Kubernetes. Tenk deg at i stedet for 2 Firefox-noder, vil jeg kjøre 4. Oppskaleringen kan gjøres med en enkelt kommando:
[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
![Komme i gang med Kubernetes på CentOS 7 Komme i gang med Kubernetes på CentOS 7]()