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



Multicraft (Bảng điều khiển Minecraft) trên CentOS 6

Multicraft (Bảng điều khiển Minecraft) trên CentOS 6

Multicraft là bảng điều khiển dựa trên web đơn giản, dễ sử dụng cho các máy chủ Minecraft. Bạn có thể tạo, dừng, bắt đầu, theo dõi, định cấu hình, tải lên, tải xuống và chạy máy chủ của bạn một cách hiệu quả thông qua bảng điều khiển trực tuyến.

Hướng dẫn cấu hình Mạng tĩnh và IPv6 trên CentOS 7

Hướng dẫn cấu hình Mạng tĩnh và IPv6 trên CentOS 7

VULTR gần đây đã thực hiện các thay đổi ở phần cuối của họ và mọi thứ sẽ hoạt động tốt ngoài hộp với tính năng NetworkManager được kích hoạt. Nếu bạn muốn tắt NetworkManager, bạn có thể làm theo các bước sau.

Cài đặt Wordpress với Apache, PHP và MySQL (Tập lệnh khởi động tự động)

Cài đặt Wordpress với Apache, PHP và MySQL (Tập lệnh khởi động tự động)

Bạn có thể sao chép và dán tập lệnh bash sau vào vùng tập lệnh khởi động của Bảng điều khiển Vultr. Nó sẽ cài đặt tất cả các gói cần thiết để chạy Wordpress, tạo và nhập thông tin xác thực cơ sở dữ liệu và mở các cổng tường lửa cần thiết.

Cài đặt ownCloud 7 trên CentOS 6 với Nginx w / SSL, PHP-FPM và PGQuery (Tập lệnh khởi động tự động)

Cài đặt ownCloud 7 trên CentOS 6 với Nginx w / SSL, PHP-FPM và PGQuery (Tập lệnh khởi động tự động)

Bạn có thể sao chép và dán tập lệnh bash sau vào vùng tập lệnh khởi động của Bảng điều khiển Vultr. Kịch bản khởi động này sẽ cài đặt phiên bản hiện tại

Hướng dẫn cài đặt ownCloud 6 trên CentOS 6

Hướng dẫn cài đặt ownCloud 6 trên CentOS 6

ownCloud cung cấp quyền truy cập toàn cầu vào các tệp của bạn thông qua web, máy tính hoặc thiết bị di động của bạn - mọi lúc mọi nơi. Nó cũng cung cấp một nền tảng để dễ dàng xem và đồng bộ hóa danh bạ, lịch và dấu trang của bạn trên tất cả các thiết bị của bạn và cho phép chỉnh sửa cơ bản ngay trên web.

Hướng dẫn cách sửa cấu hình mạng sau khi khôi phục ảnh chụp

Hướng dẫn cách sửa cấu hình mạng sau khi khôi phục ảnh chụp

Sau khi khôi phục ảnh chụp nhanh sang máy mới, bạn có thể gặp phải sự cố do địa chỉ MAC của bộ điều hợp mạng thay đổi. Thông thường, khi bộ điều hợp mạng thay đổi, hệ điều hành sẽ tạo ra bộ điều hợp mạng mới cho nó. Bạn thường thấy bộ điều hợp mạng trên eth1 (hoặc eth2 nếu bạn đã bật mạng riêng).

Hướng dẫn cách giám sát cổng và dịch vụ với MonitorIX trên CentOS6

Hướng dẫn cách giám sát cổng và dịch vụ với MonitorIX trên CentOS6

MonitorIX có thể được sử dụng để giám sát lưu lượng và sử dụng hệ thống để giúp chẩn đoán sự cố hoặc đơn giản là để xem hiệu suất hệ thống. Bài viết này sẽ đi qua các bước về cách cài đặt MonitorIX và định cấu hình nó để ghi nhật ký một cổng tùy chỉnh, trong trường hợp này là cổng Minecraft (25565).

Hướng dẫn kích hoạt thông báo đăng nhập SSH trên Linux

Hướng dẫn kích hoạt thông báo đăng nhập SSH trên Linux

Máy chủ Linux của bạn có được nhiều người dùng truy cập không? Nếu vậy, hãy xem xét thêm thông báo đăng nhập SSH bất cứ khi nào ai đó đăng nhập. Các ví dụ dưới đây gửi email khi ai đó đăng nhập vào máy chủ của bạn. Để làm việc này, máy chủ của bạn phải có thể gửi thư bằng maillệnh. Bạn có thể làm theo hướng dẫn này để thiết lập Exim với Gmail nếu tài khoản VULTR của bạn không được xác minh để gửi thư.

Hướng dẫn thiết lập tập tin hoán đổi trên Linux

Hướng dẫn thiết lập tập tin hoán đổi trên Linux

Sẽ có lúc bạn cần tăng khả năng phản hồi của máy chủ để tránh các vấn đề về bộ nhớ. Sự cố hết bộ nhớ xảy ra khi một ứng dụng chạy trên máy chủ của bạn bắt đầu tiêu thụ một lượng lớn bộ nhớ. Hoán đổi được thiết kế dưới dạng bộ nhớ ảo , sử dụng ổ cứng của bạn để lưu trữ dữ liệu không thể lưu trong RAM. Hướng dẫn này sẽ chỉ cho bạn cách tạo một tệp hoán đổi, hoạt động trong Ubuntu, CentOS và Debian. Hướng dẫn này không dành cho bất kỳ ISO tùy chỉnh nào, nhưng có thể làm theo.

Hướng dẫn cài đặt OpenVPN trên CentOS 7

Hướng dẫn cài đặt OpenVPN trên CentOS 7

Bài viết này sẽ chỉ cho bạn cách cài đặt và thiết lập OpenVPN trên CentOS 7 với OpenVPN Access Server. OpenVPN Access Server là một ứng dụng đầy đủ tính năng bao gồm một giao diện người dùng web để quản lý máy chủ OpenVPN.

Hướng dẫn cài đặt MariaDB trên CentOS 7

Hướng dẫn cài đặt MariaDB trên CentOS 7

MariaDB đã được biết đến là một sự thay thế mang lại những cải tiến và tối ưu hóa hiệu suất so với MySQL. Hướng dẫn này sẽ chỉ cho bạn cách cài đặt MariaDB lên CentOS 7 theo hai cách khác nhau.

Hướng dẫn đặt tên máy chủ trên CentOS

Hướng dẫn đặt tên máy chủ trên CentOS

Hướng dẫn này hướng dẫn bạn trong quá trình thay đổi tên máy chủ trên hệ thống CentOS 7. Tên máy chủ được đặt tại thời điểm hệ điều hành CentOS được cài đặt hoặc nếu bạn đang quay một máy ảo thì nó được gán động cho thể hiện khi khởi động. Các phương pháp được mô tả trong hướng dẫn này sẽ hoạt động mà không cần khởi động lại hệ thống của bạn.

Hướng dẫn cài đặt MongoDB trên CentOS 7

Hướng dẫn cài đặt MongoDB trên CentOS 7

MongoDB là một hệ quản trị cơ sở dữ liệu mã nguồn mở thuộc họ NoSQL. Nó được thiết kế theo kiểu hướng đối tượng, các bảng trong MongoDB được cấu trúc rất linh hoạt, cho phép các dữ liệu lưu trữ trên bảng không cần tuân theo một cấu trúc nhất định nào cả (điều này rất thích hợp để làm big data). MongoDB lưu trữ dữ liệu theo hướng tài liệu (document), các dữ liệu được lưu trữ trong document kiểu JSON nên truy vấn sẽ rất nhanh. Hôm nay qua bài viết này các bạn sẽ biết cách cài đặt dịch vụ MongoDB 3.4 trên CentOS 7.

Hướng dẫn cài đặt ImageMagick trên CentOS 6

Hướng dẫn cài đặt ImageMagick trên CentOS 6

ImageMagick® là bộ phần mềm để tạo, chỉnh sửa, soạn hoặc chuyển đổi hình ảnh bitmap. Nó có thể đọc và viết hình ảnh ở nhiều định dạng (hơn 100) bao gồm DPX, EXR, GIF, JPEG, JPEG-2000, PDF, PNG, Postcript, SVG và TIFF. Sử dụng ImageMagick để thay đổi kích thước, lật, phản chiếu, xoay, làm biến dạng, cắt và biến đổi hình ảnh, điều chỉnh màu sắc hình ảnh, áp dụng các hiệu ứng đặc biệt khác nhau hoặc vẽ văn bản, đường thẳng, đa giác, hình elip và đường cong Bézier.

Hướng dẫn cài đặt PostgreSQL trên CentOS 7

Hướng dẫn cài đặt PostgreSQL trên CentOS 7

PostgreSQL là Hệ thống quản lý cơ sở dữ liệu quan hệ mã nguồn mở (RDBMS) tiên tiến nhất thế giới. Nó tuân thủ các tiêu chuẩn ANSI SQL: 2008 và có hầu hết các loại dữ liệu được xác định trong thông số kỹ thuật của nó, bao gồm INTEGER, NUMERIC, BOOLESE, CHAR, VARCHAR, DATE, INTERVAL và TIMESTAMP.

Hướng dẫn cài đặt MailCatcher trên CentOS 7

Hướng dẫn cài đặt MailCatcher trên CentOS 7

MailCatcher là một công cụ cung cấp một cách dễ dàng cho các nhà phát triển kiểm tra các email mà ứng dụng của họ gửi đi mà không phải chờ nhà cung cấp email. Nó bắt tất cả các email mà nó nhận được và lưu trữ chúng để hiển thị. Cả HTML và tin nhắn văn bản đơn giản đều được hỗ trợ.

Thiết lập mạng riêng của bạn với OpenVPN

Thiết lập mạng riêng của bạn với OpenVPN

Vultr cung cấp cho bạn kết nối mạng riêng tuyệt vời cho các máy chủ đang chạy ở cùng một vị trí. Nhưng đôi khi bạn muốn hai máy chủ ở các quốc gia / trung tâm dữ liệu khác nhau có thể giao tiếp một cách riêng tư và an toàn. Hướng dẫn này sẽ chỉ cho bạn cách đạt được điều đó với sự trợ giúp của OpenVPN. Các hệ điều hành được sử dụng ở đây là Debian và CentOS, chỉ để hiển thị cho bạn hai cấu hình khác nhau. Điều này có thể dễ dàng điều chỉnh cho Debian -> Debian, Ubuntu -> FreeBSD, v.v.

Công cụ giám sát tốt hơn cho Ubuntu và CentOS

Công cụ giám sát tốt hơn cho Ubuntu và CentOS

Các hệ thống Linux tàu với các công cụ giám sát theo mặc định như top, dfvà durằng các quá trình giúp đỡ màn hình và không gian đĩa. Thông thường, mặc dù, chúng không thân thiện với người dùng / hình ảnh. Chúng tôi sẽ thành lập ba phiên bản thân thiện hơn trong những công cụ đề cập ở trên ( htop, ncdu, pydf) để giúp đỡ tốt hơn theo dõi các trường hợp VM của chúng tôi.

Máy chủ thư đơn giản với Postfix, Dovecot và sàng trên CentOS 7

Máy chủ thư đơn giản với Postfix, Dovecot và sàng trên CentOS 7

Hướng dẫn này sẽ chỉ cho bạn cách tải một máy chủ thư đơn giản trên CentOS 7, với Postfix là MTA, Dovecot là MDA và Sàng để sắp xếp thư - tất cả đều qua kết nối được mã hóa để bảo mật được cải thiện.

Hướng dẫn thiết lập cụm RethinkDB trên CentOS 7

Hướng dẫn thiết lập cụm RethinkDB trên CentOS 7

RethinkDB là một cơ sở dữ liệu NoQuery lưu trữ dữ liệu dưới dạng tài liệu JSON. Nó có một ngôn ngữ truy vấn siêu trực quan và có các tính năng thường có sẵn trong RDBMS truyền thống như tham gia bảng và nhóm theo . Hướng dẫn này sẽ giải thích cách thiết lập cụm RethinkDB bằng cách sử dụng 3 máy chủ VPS Vultr chạy CentOS 7.

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

Tác động của trí tuệ nhân tạo trong chăm sóc sức khỏe 2021

Tác động của trí tuệ nhân tạo trong chăm sóc sức khỏe 2021

AI trong lĩnh vực chăm sóc sức khỏe đã có những bước tiến nhảy vọt so với những thập kỷ trước. Vì vậy, tương lai của AI trong Chăm sóc sức khỏe vẫn đang phát triển từng ngày.