CentOS 7上的Kubernetes入门

Kubernetes是Google开发的开源平台,用于跨服务器集群管理容器化的应用程序。它建立在Google大规模运行容器集群的十五年经验的基础上,并利用最佳的开源项目为开发人员提供Google风格的基础架构,例如:

  • Docker:一种应用程序容器技术。
  • Etcd:分布式键值数据存储库,用于管理群集��围的信息并提供服务发现。
  • Flannel:一种覆盖网络结构,支持跨多个服务器的容器连接。

Kubernetes允许开发人员通过YAML文件和抽象(如Pod,RC和Services)以声明方式定义其应用程序基础结构(稍后会详细介绍),并确保基础集群始终与用户定义的状态匹配。

它的一些功能包括:

  • 系统资源的自动调度和集群中应用程序容器的自动放置。
  • 使用单个命令即时扩展应用程序。
  • 滚动更新,停机时间为零。
  • 自我修复:如果服务器发生故障,将自动重新安排应用程序的时间,自动重启容器,进行健康检查。

如果您已经熟悉Kubernetes,请跳到安装

基本概念

Kubernetes向开发人员提供以下抽象(逻辑单元):

  • 豆荚。
  • 复制控制器。
  • 标签。
  • 服务。

豆荚

它是Kubernetes工作负载的基本单位。Pod在容器化环境中为特定于应用程序的“逻辑主机”建模。用通俗易懂的术语,它对一组应用程序或服务建模,这些应用程序或服务曾经在容器前世界中的同一服务器上运行。容器内的容器共享相同的网络名称空间,也可以共享数据量。

复制控制器

Pod非常适合将多个容器分组为逻辑应用程序单元,但是在服务器故障的情况下,它们不提供复制或重新计划。

这是复制控制器或RC派上用场的地方。RC确保给定服务的多个Pod始终在集群中运行。

标签

它们是可以附加到任何Kubernetes资源(吊舱,RC,服务,节点等)的键值元数据。

服务

Pod和复制控制器非常适合在整个群集中部署和分发应用程序,但是Pod具有临时IP,这些IP在重新计划或容器重启后会更改。

Kubernetes服务为复制控制器管理的一组Pod提供了稳定的终结点(固定的虚拟IP +与主机服务器绑定的端口)。

Kubernetes集群

最简单的形式是,Kubernetes集群由两种类型的节点组成:

  • 1位 Kubernetes大师
  • N个 Kubernetes节点

Kubernetes大师

Kubernetes主站是整个集群的控制单元。

主机的主要组件是:

  • Etcd:全球可用的数据存储,用于存储有关集群以及集群中运行的服务和应用程序的信息。
  • Kube API服务器:这是Kubernetes集群的主要管理中心,它公开了RESTful接口。
  • 控制器管理器:处理由复制控制器管理的应用程序的复制。
  • 调度程序:跟踪整个群集的资源利用率并相应地分配工作负载。

Kubernetes节点

Kubernetes节点是负责运行Pod的工作服务器。

节点的主要组成部分是:

  • Docker:运行在pod中定义的应用程序容器的守护程序。
  • Kubelet:本地系统中吊舱的控制单元。
  • Kube-proxy:一种网络代理,可确保Kubernetes服务的正确路由。

安装

在本指南中,我们将使用CentOS 7服务器创建一个3节点集群:

  • 1个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
  }  
}

在Etcd服务器中设置Flannel配置:

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以使用overlayfs以获得更好的性能。有关更多信息,请访问此博客文章

删除当前的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以使用我们之前配置的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"

安装和配置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网格

Selenium是用于自动化浏览器以进行测试的框架。它是任何Web开发人员的强大工具。

Selenium网格支持跨连接到中央Selenium集线器的Selenium节点群集的测试的可伸缩性和并行远程执行。

由于Selenium节点本身是无状态的,并且我们运行的节点数量是灵活的,这取决于我们的测试工作负载,因此这是要在Kubernetes集群上部署的理想的候选应用程序。

在下一节中,我们将部署一个由5个应用程序容器组成的网格:

  • 1个中央Selenium集线器,它将是我们的测试将连接到的远程端点。
  • 2个运行Firefox的Selenium节点。
  • 2个运行Chrome的Selenium节点。

部署策略

为了自动管理复制和自我修复,我们将为上面列出的每种类型的应用程序容器创建一个Kubernetes复制控制器。

为了为正在运行测试的开发人员提供稳定的Selenium集线器端点,我们将创建一个连接到集线器复制控制器的Kubernetes服务。

硒中枢

复制控制器
# selenium-hub-rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
  name: selenium-hub
spec:
  replicas: 1
  selector:
    name: selenium-hub
  template:
    metadata:
      labels:
        name: selenium-hub
    spec:
      containers:
        - name: selenium-hub
          image: selenium/hub
          ports:
            - containerPort: 4444

部署:

[root@kube-master ~]# kubectl create -f selenium-hub-rc.yaml
replicationcontrollers/selenium-hub
[root@kube-master ~]# kubectl get rc
CONTROLLER     CONTAINER(S)   IMAGE(S)       SELECTOR            REPLICAS
selenium-hub   selenium-hub   selenium/hub   name=selenium-hub   1
[root@kube-master ~]# kubectl get pods
NAME                 READY     STATUS    RESTARTS   AGE
selenium-hub-pilc8   1/1       Running   0          50s
[root@kube-master ~]# kubectl describe pod selenium-hub-pilc8
Name:               selenium-hub-pilc8
Namespace:          default
Image(s):           selenium/hub
Node:               kube-node2/45.63.16.92
Labels:             name=selenium-hub
Status:             Running
Reason:             
Message:            
IP:             10.20.101.2
Replication Controllers:    selenium-hub (1/1 replicas created)
Containers:
  selenium-hub:
    Image:      selenium/hub
    State:      Running
      Started:      Sat, 24 Oct 2015 16:01:39 +0000
    Ready:      True
    Restart Count:  0
Conditions:
  Type      Status
  Ready     True
Events:
  FirstSeen             LastSeen            Count   From            SubobjectPath               Reason      Message
  Sat, 24 Oct 2015 16:01:02 +0000   Sat, 24 Oct 2015 16:01:02 +0000 1   {scheduler }                            scheduled   Successfully assigned selenium-hub-pilc8 to kube-node2
  Sat, 24 Oct 2015 16:01:05 +0000   Sat, 24 Oct 2015 16:01:05 +0000 1   {kubelet kube-node2}    implicitly required container POD   pulled      Successfully pulled Pod container image "gcr.io/google_containers/pause:0.8.0"
  Sat, 24 Oct 2015 16:01:05 +0000   Sat, 24 Oct 2015 16:01:05 +0000 1   {kubelet kube-node2}    implicitly required container POD   created     Created with docker id 6de00106b19c
  Sat, 24 Oct 2015 16:01:05 +0000   Sat, 24 Oct 2015 16:01:05 +0000 1   {kubelet kube-node2}    implicitly required container POD   started     Started with docker id 6de00106b19c
  Sat, 24 Oct 2015 16:01:39 +0000   Sat, 24 Oct 2015 16:01:39 +0000 1   {kubelet kube-node2}    spec.containers     pulled      Successfully pulled image "selenium/hub"
  Sat, 24 Oct 2015 16:01:39 +0000   Sat, 24 Oct 2015 16:01:39 +0000 1   {kubelet kube-node2}    spec.containers     created     Created with docker id 7583cc09268c
  Sat, 24 Oct 2015 16:01:39 +0000   Sat, 24 Oct 2015 16:01:39 +0000 1   {kubelet kube-node2}    spec.containers     started     Started with docker id 7583cc09268c

在这里我们可以看到Kubernetes将我的selenium-hub容器放置在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

部署服务后,可以从以下位置访问该服务:

  • 通过虚拟IP 10.254.124.73和端口4444的任何Kubernetes节点。
  • 通过任何Kubernetes节点的公共IP在端口30000上的外部网络。

CentOS 7上的Kubernetes入门CentOS 7上的Kubernetes入门 (使用另一个Kubernetes节点的公共IP)

硒节点

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_ipselenium-node-firefox-rc.yaml实际硒枢纽服务IP,在这种情况下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个工作器)。

使用Pod,RC和服务,我们成功部署了一个由中央集线器和4个节点组成的Selenium Grid,使开发人员可以在集群上一次运行4个并发的Selenium测试。

Kubernetes自动在整个集群中调度容器。

CentOS 7上的Kubernetes入门

自我修复

如果我们的一台或多台服务器出现故障,Kubernetes会自动将Pod重新安排到运行状况良好的服务器上。在我的示例中,kube-node2当前正在运行Selenium集线器Pod和1个Selenium Firefox节点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

扩展硒网格

使用Kubernetes扩展Selenium Grid非常容易。想象一下,我要运行4个而不是2个Firefox节点。可以使用单个命令来完成升级:

[root@kube-master ~]# kubectl scale rc selenium-node-firefox --replicas=4
scaled

[root@kube-master ~]# kubectl get rc
CONTROLLER              CONTAINER(S)            IMAGE(S)                SELECTOR                     REPLICAS
selenium-hub            selenium-hub            selenium/hub            name=selenium-hub            1
selenium-node-chrome    selenium-node-chrome    selenium/node-chrome    app=selenium-node-chrome     2
selenium-node-firefox   selenium-node-firefox   selenium/node-firefox   name=selenium-node-firefox   4

[root@kube-master ~]# kubectl get pods
NAME                          READY     STATUS    RESTARTS   AGE
selenium-hub-pilc8            1/1       Running   1          1h
selenium-node-chrome-9u1ld    1/1       Running   0          14m
selenium-node-chrome-mgi52    1/1       Running   0          14m
selenium-node-firefox-8ylo2   1/1       Running   0          40s
selenium-node-firefox-lc6qt   1/1       Running   0          24m
selenium-node-firefox-y9qjp   1/1       Running   0          24m
selenium-node-firefox-zmj1r   1/1       Running   0          40s

CentOS 7上的Kubernetes入门



Leave a Comment

如何在CentOS 7上安装Oxwall

如何在CentOS 7上安装Oxwall

Oxwall是一个开源社交网络软件平台,可用于免费构建自定义社交网站(SNS)。在这篇文章中,

如何在CentOS 7上设置vsFTPd

如何在CentOS 7上设置vsFTPd

FTP是用于通过Internet传输文件的有用协议,本指南将向您展示如何设置vsFTPd(非常安全的文件传输协议守护程序)o

使用Nethogs监视网络带宽使用情况

使用Nethogs监视网络带宽使用情况

在本教程中,我们将介绍在CentOS 6x x64上安装和使用nethogs的过程。nethogs是一种网络监视工具,它允许Networ

如何在CentOS 7上安装BoltWire CMS

如何在CentOS 7上安装BoltWire CMS

使用其他系统?简介BoltWire是一个用PHP编写的免费,轻量级的内容管理系统。与大多数其他内容管理人员相比

在CentOS 6上设置SA-MP San Andreas多人服务器

在CentOS 6上设置SA-MP San Andreas多人服务器

欢迎来到另一个Vultr教程。在这里,您将学习如何安装和运行SAMP服务器。本指南是为CentOS 6编写的。先决条件

使用Etckeeper进行/ etc的版本控制

使用Etckeeper进行/ etc的版本控制

简介/ etc /目录在Linux系统运行中起着至关重要的作用。其原因是因为几乎每个系统配置

如何在CentOS 7上安装Microweber

如何在CentOS 7上安装Microweber

使用其他系统?Microweber是一个开放源代码的拖放式CMS和在线商店。Microweber源代码托管在GitHub上。本指南将向您展示

如何在CentOS 7上安装SonarQube

如何在CentOS 7上安装SonarQube

使用其他系统?SonarQube是用于质量系统开发的开源工具。它是用Java编写的,并且支持多个数据库。它提供

如何在CentOS 7上使用Mosh进行远程服务器管理

如何在CentOS 7上使用Mosh进行远程服务器管理

使用其他系统?Mosh是Mobile Shell的缩写,是一种新兴的远程终端应用程序,旨在提供更好的连接和使用

如何在CentOS 7上安装MoinMoin

如何在CentOS 7上安装MoinMoin

MoinMoin是一个使用Python编写的基于文件系统的开源Wiki引擎。如今,MoinMoin已广泛用于开源社区。许多供应商

在CentOS 7上安装H2O Web服务器

在CentOS 7上安装H2O Web服务器

H2O是新一代HTTP服务器,它对所有当前使用的Web服务器都具有出色的,功能齐全的HTTP / 2实现。使用H2O作为您的Web服务器

如何在Debian,CentOS和FreeBSD上使用Sudo

如何在Debian,CentOS和FreeBSD上使用Sudo

在Linux和Unix系统管理员中,使用sudo用户访问服务器并在root级执行命令是一种非常普遍的做法。使用泡沫

如何在Ubuntu 16.10上安装Countly Analytics

如何在Ubuntu 16.10上安装Countly Analytics

使用其他系统?Countly是一个开源Web /移动分析和营销平台。它具有许多用于从Web收集数据的功能

如何在CentOS 7上安装MODX CMS和Nginx

如何在CentOS 7上安装MODX CMS和Nginx

MODX是一个用PHP编写的免费开放源内容管理系统。它使用MySQL或MariaDB来存储其数据库。MODX专为满足以下条件的企业而设计:

如何在CentOS 7 LAMP VPS上安装Lychee 3.1相册

如何在CentOS 7 LAMP VPS上安装Lychee 3.1相册

使用其他系统?Lychee 3.1相册是一种简单,灵活,免费和开源的照片管理工具,可在VPS服务器上运行。安装

如何在CentOS 7上安装ERPNext开源ERP

如何在CentOS 7上安装ERPNext开源ERP

使用其他系统?ERP或企业资源计划是用于管理核心业务流程的企业应用程序套件。ERPNext是免费的

如何在CentOS 7 LAMP VPS上安装Paste 2.1

如何在CentOS 7 LAMP VPS上安装Paste 2.1

使用其他系统?Paste 2.1是一个简单,灵活,免费和开源的pastebin应用程序,用于存储代码,文本等。最初是

如何在CentOS 7上安装Seafile Server

如何在CentOS 7上安装Seafile Server

使用其他系统?Seafile(社区版本)是一个免费和开源的文件同步和共享解决方案,类似于ownCloud。机智

如何在CentOS 7上安装Kolab组件

如何在CentOS 7上安装Kolab组件

使用其他系统?Kolab Groupware是一个免费的基于Web的开源组件软件。它的功能包括电子邮件通信,事件

如何在CentOS 7 LAMP VPS上安装Omeka Classic 2.4 CMS

如何在CentOS 7 LAMP VPS上安装Omeka Classic 2.4 CMS

使用其他系统?Omeka Classic 2.4 CMS是一个免费的开源数字发布平台和用于共享数字内容的内容管理系统(CMS)

AI 能否應對越來越多的勒索軟件攻擊?

AI 能否應對越來越多的勒索軟件攻擊?

勒索軟件攻擊呈上升趨勢,但人工智能能否幫助應對最新的計算機病毒?AI 是答案嗎?在這裡閱讀知道是 AI 布恩還是禍根

ReactOS:這是 Windows 的未來嗎?

ReactOS:這是 Windows 的未來嗎?

ReactOS,一個開源和免費的操作系統,這裡有最新版本。它能否滿足現代 Windows 用戶的需求並打倒微軟?讓我們更多地了解這種老式但更新的操作系統體驗。

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

Whatsapp 終於為 Mac 和 Windows 用戶推出了桌面應用程序。現在您可以輕鬆地從 Windows 或 Mac 訪問 Whatsapp。適用於 Windows 8+ 和 Mac OS 10.9+

人工智能如何將流程自動化提升到新的水平?

人工智能如何將流程自動化提升到新的水平?

閱讀本文以了解人工智能如何在小型公司中變得流行,以及它如何增加使它們成長並為競爭對手提供優勢的可能性。

macOS Catalina 10.15.4 補充更新引發的問題多於解決

macOS Catalina 10.15.4 補充更新引發的問題多於解決

最近,Apple 發布了 macOS Catalina 10.15.4 補充更新以修復問題,但似乎該更新引起了更多問題,導致 mac 機器變磚。閱讀這篇文章以了解更多信息

大數據的13個商業數據提取工具

大數據的13個商業數據提取工具

大數據的13個商業數據提取工具

什麼是日誌文件系統,它是如何工作的?

什麼是日誌文件系統,它是如何工作的?

我們的計算機以稱為日誌文件系統的有組織的方式存儲所有數據。這是一種有效的方法,可以讓計算機在您點擊搜索時立即搜索和顯示文件。 https://wethegeek.com/?p=94116&preview=true

技術奇點:人類文明的遙遠未來?

技術奇點:人類文明的遙遠未來?

隨著科學的快速發展,接管了我們的大量工作,我們陷入無法解釋的奇點的風險也在增加。閱讀,奇點對我們意味著什麼。

洞察 26 種大數據分析技術:第 1 部分

洞察 26 種大數據分析技術:第 1 部分

洞察 26 種大數據分析技術:第 1 部分

2021 年人工智能對醫療保健的影響

2021 年人工智能對醫療保健的影響

過去幾十年,醫療保健領域的人工智能取得了巨大飛躍。因此,醫療保健中人工智能的未來仍在日益增長。