Bắt đầu với Kubernetes trên CentOS 7

Kubernetes là một nền tảng nguồn mở được phát triển bởi Google để quản lý các ứng dụng được đóng gói trên một cụm máy chủ. Nó xây dựng dựa trên một thập kỷ rưỡi kinh nghiệm mà Google có với việc vận hành các cụm container theo quy mô và cung cấp cho các nhà phát triển cơ sở hạ tầng kiểu Google, tận dụng các dự án nguồn mở tốt nhất, như:

  • Docker : một công nghệ container ứng dụng.
  • Etcd : kho dữ liệu khóa-giá trị phân tán quản lý thông tin toàn cụm và cung cấp khám phá dịch vụ.
  • Flannel : cấu trúc mạng lớp phủ cho phép kết nối container trên nhiều máy chủ.

Kubernetes cho phép các nhà phát triển xác định cơ sở hạ tầng ứng dụng của họ một cách khai báo thông qua các tệp YAML và trừu tượng hóa như Pods, RC và Dịch vụ (nhiều hơn về điều này sau) và đảm bảo rằng cụm bên dưới luôn khớp với trạng thái do người dùng xác định.

Một số tính năng của nó bao gồm:

  • Tự động lập lịch trình tài nguyên hệ thống và tự động đặt các thùng chứa ứng dụng trên một cụm.
  • Mở rộng các ứng dụng một cách nhanh chóng với một lệnh duy nhất.
  • Cập nhật cán với thời gian chết bằng không.
  • Tự phục hồi: tự động sắp xếp lại ứng dụng nếu máy chủ bị lỗi, tự động khởi động lại các container, kiểm tra sức khỏe.

Bỏ qua phần Cài đặt nếu bạn đã quen thuộc với Kubernetes.

Các khái niệm cơ bản

Kubernetes cung cấp các tóm tắt sau (đơn vị logic) cho nhà phát triển:

  • Vỏ quả.
  • Bộ điều khiển nhân rộng.
  • Nhãn.
  • Dịch vụ.

Pods

Đây là đơn vị cơ bản của khối lượng công việc Kubernetes. Một nhóm mô hình một "máy chủ logic" dành riêng cho ứng dụng trong môi trường được đóng gói. Theo thuật ngữ cư sĩ, nó mô hình hóa một nhóm các ứng dụng hoặc dịch vụ được sử dụng để chạy trên cùng một máy chủ trong thế giới tiền container. Các container bên trong một nhóm chia sẻ cùng một không gian tên mạng và cũng có thể chia sẻ khối lượng dữ liệu.

Bộ điều khiển nhân rộng

Pods là tuyệt vời để nhóm nhiều container vào các đơn vị ứng dụng logic, nhưng chúng không cung cấp sao chép hoặc sắp xếp lại trong trường hợp máy chủ bị lỗi.

Đây là nơi một bộ điều khiển sao chép hoặc RC có ích. Một RC đảm bảo rằng một số nhóm của một dịch vụ nhất định luôn chạy trên cụm.

Nhãn

Chúng là siêu dữ liệu khóa-giá trị có thể được gắn vào bất kỳ tài nguyên Kubernetes nào (nhóm, RC, dịch vụ, nút, ...).

Dịch vụ

Các pod và bộ điều khiển sao chép rất tốt cho việc triển khai và phân phối các ứng dụng trên một cụm, nhưng các pod có IP tạm thời thay đổi khi sắp xếp lại hoặc khởi động lại container.

Dịch vụ Kubernetes cung cấp điểm cuối ổn định (cổng IP + ảo cố định liên kết với máy chủ lưu trữ) cho một nhóm nhóm được quản lý bởi bộ điều khiển sao chép.

Cụm Kubernetes

Ở dạng đơn giản nhất, cụm Kubernetes được tạo bởi hai loại nút:

  • 1 bậc thầy Kubernetes.
  • N nút Kubernetes.

Thầy Kubernetes

Kubernetes master là đơn vị điều khiển của toàn bộ cụm.

Các thành phần chính của tổng thể là:

  • Etcd: kho dữ liệu có sẵn trên toàn cầu lưu trữ thông tin về cụm và các dịch vụ và ứng dụng đang chạy trên cụm.
  • Máy chủ API Kube: đây là trung tâm quản lý chính của cụm Kubernetes và nó hiển thị giao diện RESTful.
  • Trình quản lý điều khiển: xử lý sao chép các ứng dụng được quản lý bởi các bộ điều khiển sao chép.
  • Bộ lập lịch: theo dõi việc sử dụng tài nguyên trên toàn cụm và gán khối lượng công việc phù hợp.

Nút Kubernetes

Nút Kubernetes là các máy chủ worker chịu trách nhiệm chạy các pod.

Các thành phần chính của một nút là:

  • Docker: một daemon chạy các thùng chứa ứng dụng được xác định trong nhóm.
  • Kubelet: một đơn vị điều khiển cho các nhóm trong một hệ thống cục bộ.
  • Kube-proxy: proxy mạng đảm bảo định tuyến chính xác cho các dịch vụ Kubernetes.

Cài đặt

Trong hướng dẫn này, chúng tôi sẽ tạo một cụm 3 nút bằng máy chủ CentOS 7:

  • 1 bậc thầy Kubernetes (kube-master)
  • 2 nút Kubernetes (kube-node1, kube-node2)

Bạn có thể thêm nhiều nút như bạn muốn sau này theo cùng một quy trình cài đặt cho các nút Kubernetes.

Tất cả các nút

Định cấu hình tên máy chủ và /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

Vô hiệu hóa tường lửa:

systemctl disable firewalld
systemctl stop firewalld

Thầy Kubernetes

Cài đặt gói chính Kubernetes:

yum install etcd kubernetes-master

Cấu hình:

# /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"

Bắt đầu Etcd:

systemctl start etcd

Cài đặt và cấu hình cấu trúc mạng lớp phủ Flannel (điều này là cần thiết để các container chạy trên các máy chủ khác nhau có thể nhìn thấy nhau):

yum install flannel

Tạo tệp cấu hình Flannel ( flannel-config.json):

{
  "Network": "10.20.0.0/16",
  "SubnetLen": 24,
  "Backend": {
    "Type": "vxlan",
    "VNI": 1
  }  
}

Đặt cấu hình Flannel trong máy chủ Etcd:

etcdctl set coreos.com/network/config < flannel-config.json

Điểm Flannel đến máy chủ Etcd:

# /etc/sysconfig/flanneld
FLANNEL_ETCD="http://kube-master:2379"

Cho phép các dịch vụ để chúng bắt đầu khởi động:

systemctl enable etcd
systemctl enable kube-apiserver
systemctl enable kube-controller-manager
systemctl enable kube-scheduler
systemctl enable flanneld

Khởi động lại máy chủ.

Nút Kubernetes

Cài đặt gói nút Kubernetes:

yum install docker kubernetes-node

Hai bước tiếp theo sẽ cấu hình Docker để sử dụng lớp phủ để có hiệu suất tốt hơn. Để biết thêm thông tin truy cập bài viết blog này :

Xóa thư mục lưu trữ docker hiện tại:

systemctl stop docker
rm -rf /var/lib/docker

Thay đổi tập tin cấu hình:

# /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

Cấu hình kube-node1 để sử dụng tổng thể được cấu hình trước đó của chúng tôi:

# /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"

Cài đặt và cấu hình cấu trúc mạng lớp phủ Flannel (một lần nữa - điều này là cần thiết để các container chạy trên các máy chủ khác nhau có thể nhìn thấy nhau):

yum install flannel

Điểm Flannel đến máy chủ Etcd:

# /etc/sysconfig/flanneld
FLANNEL_ETCD="http://kube-master:2379"

Cho phép dịch vụ:

systemctl enable docker
systemctl enable flanneld
systemctl enable kubelet
systemctl enable kube-proxy

Khởi động lại máy chủ.

Kiểm tra máy chủ Kubernetes của bạn

Sau khi tất cả các máy chủ đã khởi động lại, hãy kiểm tra xem cụm Kubernetes của bạn có hoạt động không:

[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

Ví dụ: Triển khai lưới Selen bằng Kubernetes

Selenium là một khung để tự động hóa các trình duyệt cho mục đích thử nghiệm. Đây là một công cụ mạnh mẽ trong kho vũ khí của bất kỳ nhà phát triển web nào.

Lưới Selen cho phép thực hiện các thử nghiệm từ xa có thể mở rộng và song song trên một cụm các nút Selen được kết nối với một trung tâm Selenium trung tâm.

Vì các nút Selen là không trạng thái và số lượng nút chúng tôi chạy rất linh hoạt, tùy thuộc vào khối lượng công việc thử nghiệm của chúng tôi, đây là một ứng dụng ứng cử viên hoàn hảo sẽ được triển khai trên cụm Kubernetes.

Trong phần tiếp theo, chúng tôi sẽ triển khai một lưới bao gồm 5 thùng chứa ứng dụng:

  • 1 trung tâm Selenium trung tâm sẽ là điểm cuối từ xa mà các thử nghiệm của chúng tôi sẽ kết nối.
  • 2 nút Selen chạy Firefox.
  • 2 nút Selen chạy Chrome.

Chiến lược triển khai

Để tự động quản lý sao chép và tự phục hồi, chúng tôi sẽ tạo bộ điều khiển sao chép Kubernetes cho từng loại vùng chứa ứng dụng mà chúng tôi đã liệt kê ở trên.

Để cung cấp cho các nhà phát triển đang chạy thử nghiệm với điểm cuối trung tâm Selenium ổn định, chúng tôi sẽ tạo dịch vụ Kubernetes được kết nối với bộ điều khiển sao chép trung tâm.

Trung tâm Selen

Bộ điều khiển nhân rộng
# 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

Triển khai:

[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

Ở đây chúng ta có thể thấy Kubernetes đã đặt thùng chứa selenium-hub của tôi trên kube-node2.

Dịch vụ
# 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

Triển khai:

[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

Sau khi triển khai dịch vụ, bạn có thể truy cập từ:

  • Bất kỳ nút Kubernetes nào, thông qua IP ảo 10.254.124.73 và cổng 4444.
  • Các mạng bên ngoài, thông qua bất kỳ IP công khai nào của các nút Kubernetes, trên cổng 30000.

Bắt đầu với Kubernetes trên CentOS 7Bắt đầu với Kubernetes trên CentOS 7 (sử dụng IP công cộng của một nút Kubernetes khác)

Các nút Selen

Trình điều khiển sao chép nút 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"

Triển khai:

Thay thế replace_with_service_ipvào selenium-node-firefox-rc.yamlvới IP dịch vụ trung tâm Selenium thực tế, trong trường hợp này 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

Như chúng ta có thể thấy, Kubernetes đã tạo ra 2 bản sao selenium-firefox-nodevà nó đã phân phối chúng trên toàn cụm. Pod selenium-node-firefox-lc6qtnằm trên kube-node2, trong khi pod selenium-node-firefox-y9qjpnằm trên kube-node1.

Chúng tôi lặp lại quy trình tương tự cho các nút Selenium Chrome của chúng tôi.

Bộ điều khiển sao chép nút 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"

Triển khai:

[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

Gói lại

Trong hướng dẫn này, chúng tôi đã thiết lập một cụm Kubernetes nhỏ gồm 3 máy chủ (1 bộ điều khiển chính + 2 công nhân).

Sử dụng các nhóm, RC và dịch vụ, chúng tôi đã triển khai thành công Lưới Selen bao gồm một trung tâm trung tâm và 4 nút, cho phép các nhà phát triển chạy 4 thử nghiệm Selen đồng thời tại một cụm trên một cụm.

Kubernetes tự động lên lịch các container trên toàn bộ cụm.

Bắt đầu với Kubernetes trên CentOS 7

Tự chữa bệnh

Kubernetes tự động sắp xếp lại các nhóm đến các máy chủ khỏe mạnh nếu một hoặc nhiều máy chủ của chúng tôi gặp sự cố. Trong ví dụ của tôi, kube-node2 hiện đang chạy pod trung tâm Selenium và 1 pod nút 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  

Chúng tôi sẽ mô phỏng lỗi máy chủ bằng cách tắt kube-node2. Sau một vài phút, bạn sẽ thấy rằng các container đang chạy trên kube-node2 đã được lên lịch lại thành kube-node1, đảm bảo gián đoạn dịch vụ tối thiểu.

[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

Thu nhỏ lưới Selen của bạn

Thu nhỏ lưới Selenium của bạn cực dễ với Kubernetes. Hãy tưởng tượng rằng thay vì 2 nút Firefox, tôi muốn chạy 4. Việc nâng cấp có thể được thực hiện bằng một lệnh duy nhất:

[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

Bắt đầu với Kubernetes trên CentOS 7



Leave a Comment

Cách cài đặt SuiteCRM trên Ubuntu 16.04

Cách cài đặt SuiteCRM trên Ubuntu 16.04

Hướng dẫn cài đặt SuiteCRM, một giải pháp CRM mã nguồn mở, trên Ubuntu 16.04 với các bước chi tiết và dễ hiểu.

ReactOS: Đây có phải là tương lai của Windows?

ReactOS: Đây có phải là tương lai của Windows?

ReactOS, một hệ điều hành mã nguồn mở và miễn phí đã có phiên bản mới nhất. Liệu nó có thể đáp ứng đủ nhu cầu của người dùng Windows hiện đại và hạ gục Microsoft? Hãy cùng tìm hiểu thêm về trải nghiệm hệ điều hành kiểu cũ nhưng mới hơn này.

Liệu AI có thể chiến đấu với số lượng các cuộc tấn công bằng Ransomware ngày càng tăng

Liệu AI có thể chiến đấu với số lượng các cuộc tấn công bằng Ransomware ngày càng tăng

Các cuộc tấn công ransomware đang gia tăng, nhưng liệu AI có thể giúp đối phó với loại virus máy tính mới nhất? AI có phải là câu trả lời? Đọc ở đây biết là AI boone hay cấm

Luôn kết nối thông qua Ứng dụng WhatsApp Desktop 24 * 7

Luôn kết nối thông qua Ứng dụng WhatsApp Desktop 24 * 7

Whatsapp cuối cùng đã ra mắt ứng dụng Máy tính để bàn cho người dùng Mac và Windows. Giờ đây, bạn có thể truy cập Whatsapp từ Windows hoặc Mac một cách dễ dàng. Có sẵn cho Windows 8+ và Mac OS 10.9+

Làm thế nào AI có thể đưa quá trình tự động hóa lên cấp độ tiếp theo?

Làm thế nào AI có thể đưa quá trình tự động hóa lên cấp độ tiếp theo?

Hãy đọc phần này để biết Trí tuệ nhân tạo đang trở nên phổ biến như thế nào đối với các công ty quy mô nhỏ và làm thế nào nó đang tăng khả năng khiến họ phát triển và giúp đối thủ cạnh tranh của họ có thể cạnh tranh.

Bản cập nhật bổ sung macOS Catalina 10.15.4 đang gây ra nhiều vấn đề hơn là giải quyết

Bản cập nhật bổ sung macOS Catalina 10.15.4 đang gây ra nhiều vấn đề hơn là giải quyết

Gần đây Apple đã phát hành macOS Catalina 10.15.4 một bản cập nhật bổ sung để khắc phục các sự cố nhưng có vẻ như bản cập nhật đang gây ra nhiều vấn đề hơn dẫn đến việc máy mac bị chai. Đọc bài viết này để tìm hiểu thêm

13 Công cụ trích xuất dữ liệu thương mại của Dữ liệu lớn

13 Công cụ trích xuất dữ liệu thương mại của Dữ liệu lớn

13 Công cụ trích xuất dữ liệu thương mại của Dữ liệu lớn

Hệ thống tệp nhật ký là gì và nó hoạt động như thế nào?

Hệ thống tệp nhật ký là gì và nó hoạt động như thế nào?

Máy tính của chúng tôi lưu trữ tất cả dữ liệu một cách có tổ chức được gọi là hệ thống tệp Ghi nhật ký. Đây là một phương pháp hiệu quả cho phép máy tính tìm kiếm và hiển thị các tệp ngay khi bạn nhấn tìm kiếm. Https://wethegeek.com/? P = 94116 & preview = true

Điểm kỳ dị về công nghệ: Tương lai xa của nền văn minh nhân loại?

Điểm kỳ dị về công nghệ: Tương lai xa của nền văn minh nhân loại?

Khi Khoa học phát triển với tốc độ nhanh chóng, chiếm rất nhiều nỗ lực của chúng ta, những rủi ro của việc phục tùng bản thân trước một Điểm kỳ dị không thể giải thích cũng tăng lên. Hãy đọc, điểm kỳ dị có thể có ý nghĩa gì đối với chúng ta.

Hiểu rõ hơn về 26 kỹ thuật phân tích dữ liệu lớn: Phần 1

Hiểu rõ hơn về 26 kỹ thuật phân tích dữ liệu lớn: Phần 1

Hiểu rõ hơn về 26 kỹ thuật phân tích dữ liệu lớn: Phần 1