Hướng dẫn cài đặt Cluster Kubernetes với RKE trên CentOS 7
BÀI VIẾT

Hướng dẫn cài đặt Cluster Kubernetes với RKE trên CentOS 7

546
author Võ Trung Huy - 2021-11-08 14:56:49 (GMT+7)

Bạn không sử dụng CentOS 7?
Xem bài viết cho các distro khác

Giới thiệu

Rancher Kubernetes Engine (RKE) là một công cụ dùng để triển khai môi trường Kubernetes trên máy chủ vật lý hoặc máy chủ ảo hóa. RKE giúp đơn giản hóa việc cài đặt Kubernetes trên bất kì hệ điều hành và nền tảng nào bạn đang chạy. RKE còn nhận được chứng nhận từ tổ chức nổi tiếng CNCF.

Trong bài viết này chúng ta sẽ sử dụng RKE sẽ cài đặt cluster Kubernetes trên các máy chủ chạy hệ điều hành CentOS 7.

Việc cài đặt sẽ được thực hiện trên 3 máy chủ có IP lần lượt là:

10.0.0.2

10.0.0.3

10.0.0.4

Mô hình cài đặt Kubernetes cluster RKE

Chuẩn bị

Các máy chủ cần được thông firewall với nhau với các port sau :

Kết quả
22/TCP Port SSH
6443/TCP Port Kube-API
2376/TCP Port Docker daemon TLS
2379/TCP Port ETCD client
2380/TCP Port ETCD peer
8472/UDP Canal/Flannel VXLAN overlay networking 
9099/TCP Canal/Flannel livenessProbe/readinessProbe
10250/TCP Port kubelet
443/TCP Port Rancher agent 
10254 Port Ingress controller livenessProbe/readinessProbe
30000-32767 NodePort port range default 

Chúng ta chạy update toàn bộ server bằng trước khi cài Docker

bash (root)
yum update

Cài đặt Docker

Chúng ta thực hiện cài đặt Docker lần lượt trên cả 3 máy chủ như sau:

Cài đặt pakage yum-utils

bash (root)
yum install -y yum-utils

Tiến hành download và add repository docker-ce

bash (root)
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

Tiến hành cài đặt Docker

bash (root)
yum install docker-ce docker-ce-cli containerd.io

Sau khi cài đặt xong chúng ta start Docker:

bash (root)
systemctl start docker

Cho Docker khởi động cùng hệ điều hành.

bash (root)
systemctl enable docker

Kiểm tra trạng thái của Docker

bash (root)
systemctl status docker
Kết quả
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: active (running) since Fri 2021-11-05 15:49:31 UTC; 4s ago
     Docs: https://docs.docker.com
 Main PID: 2332 (dockerd)
    Tasks: 7
   Memory: 75.8M
   CGroup: /system.slice/docker.service
           └─2332 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/co...
Hint: Some lines were ellipsized, use -l to show in full.

Sau khi cài đặt xong chúng ta kiểm tra phiên bản của Docker:

bash (root)
docker version
Kết quả
Client: Docker Engine - Community
 Version:           20.10.10
 API version:       1.41
 Go version:        go1.16.9
 Git commit:        b485636
 Built:             Mon Oct 25 07:44:50 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.10
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.16.9
  Git commit:       e2f740d
  Built:            Mon Oct 25 07:43:13 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.11
  GitCommit:        5b46e404f6b9f661a205e28d59c982d3634148f8
 runc:
  Version:          1.0.2
  GitCommit:        v1.0.2-0-g52b36a2
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

Tạo user với tên userdeploy và thêm vào group với tên docker để phục vụ cho việc cài đặt cluster của RKE.

Tiến hành tạo user userdeploy

bash (root)
adduser userdeploy

Tiến hành thêm user userdeploy vào group với tên docker

bash (root)
usermod -aG docker userdeploy

Lưu ý quan trọng : Bạn có thể SSH tới 3 máy chủ trên với user là userdeploy để có thể chạy công cụ RKE deploy được hướng dẫn ở phần bên dưới .

Cài đặt RKE

Chúng ta sẽ thực hiện cài đặt rke tại máy tính cá nhân của bạn . Từ máy tính của bạn có thể truy cập tới các bản release của RKE để có thể download binary tại link https://github.com/rancher/rke/releases

Copy binary vừa download được và chỉnh sửa tên của nó thành rke

Với macOS

bash (non-root)
mv rke_darwin-amd64 rke && chmod +x rke

Với các distro Linux

bash (non-root)
mv rke_linux-amd64 rke && chmod +x rke

Với Windows PowerShell

bash (non-root)
mv rke_windows-amd64.exe rke.exe

Sau khi cài đặt thành công chúng ta có thể kiểm tra version của rke:

bash (non-root)
./rke version
Kết quả
INFO[0000] Running RKE version: v1.3.2

Cài đặt công cụ kubectl

Chúng ta sẽ thực hiện cài đặt kubectl tại máy tính cá nhân của bạn .

Để có thể access tới cluster Kubernetes chúng ta cần một công cụ đó là kubectl

Cho Linux distro

bash (non-root)
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"

Cho MacOS

bash (non-root)
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/amd64/kubectl"

Cho Windows

bash (non-root)
curl -LO "https://dl.k8s.io/release/v1.22.0/bin/windows/amd64/kubectl.exe""

Sau khi cài đặt xong chúng ta có thể kiểm tra version của kubectl bằng cách

bash (non-root)
kubectl version
Kết quả
Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.6", GitCommit:"dff82dc0de47299ab66c83c626e08b245ab19037", GitTreeState:"clean", BuildDate:"2020-07-15T23:30:39Z", GoVersion:"go1.14.4", Compiler:"gc", Platform:"darwin/amd64"}

Cài đặt cluster Kubernetes

Chúng ta sẽ thực hiện cách thao tác sau tại máy tính cá nhân của bạn.

Đầu tiên, bạn cần tạo 1 file với tên cluster-kubernetes.yml có nội dung như sau:

Trong đó :

address : Là địa chỉ IP public hoặc nếu không có IP public thì sẽ nhập luôn IP private của các nodes .

internal_address : Là địa chỉ IP private của nodes

user : Là user mà rke sẽ ssh tới để pull các images cũng như up các services của Kuberneste .

ssh_key_path : Là đường dẫn của private key của user đã được define ở trên .

role : Là chỉ định role của node trong Kubernetes mình trong bài này chúng ta sẽ sử dụng chạy cả master và worker cho mỗi node.

cluster-kubernetes.yml
 - address: 10.0.0.2
    internal_address: 10.0.0.2
    user: userdeploy
    ssh_key_path: ~/.ssh/id_ed25519
    role: [controlplane, worker, etcd]
  - address: 10.0.0.3
    internal_address: 10.0.0.3
    user: userdeploy
    ssh_key_path: ~/.ssh/id_ed25519
    role: [controlplane, worker, etcd]
  - address: 10.0.0.4
    internal_address: 10.0.0.4
    user: userdeploy
    ssh_key_path: ~/.ssh/id_ed25519
    role: [controlplane, worker, etcd]

Sau khi đã tạo xong chúng ta thực thi rke để tạo 1 cụm cluster Kubernetes:

bash (root)
./rke up --config cluster-kubernetes.yml

Đợi một lát để rke tiến hành pull các images và up các container . Bạn sẽ nhìn thấy kết quả lệnh chạy cài đặt như sau:

Kết quả
INFO[0000] Running RKE version: v1.3.2
INFO[0000] Initiating Kubernetes cluster
INFO[0000] [dialer] Setup tunnel for host [10.0.0.4]
INFO[0000] [dialer] Setup tunnel for host [10.0.0.2]
INFO[0000] [dialer] Setup tunnel for host [10.0.0.3]
INFO[0000] Checking if container [cluster-state-deployer] is running on host [10.0.0.2], try #1
INFO[0000] Pulling image [rancher/rke-tools:v0.1.78] on host [10.0.0.2], try #1

Sau khi đợi khoảng 10 phút thì chúng ta được kết quả thông báo quá trình cài đặt cluster Kubernetes đã thành công:

Kết quả
INFO[0349] [addons] Executing deploy job rke-ingress-controller
INFO[0359] [ingress] removing default backend service and deployment if they exist
INFO[0360] [ingress] ingress controller nginx deployed successfully
INFO[0360] [addons] Setting up user addons
INFO[0360] [addons] no user addons defined
INFO[0360] Finished building Kubernetes cluster successfully

Sau khi đã hoàn tất sẽ có 1 file kubeconfig được tạo ra dùng để access tới hệ thống Kubernetes là kube_config_cluster-kubernetes.yml.

Thực hiện lệnh export sau:

bash (root)
export KUBECONFIG=kube_config_cluster-kubernetes.yml

Kiểm tra danh sách các node bằng lệnh:

bash (root)
kubectl get nodes

Kết quả chúng ta thấy 3 node đang ở trạng thái sẵn sàng.

Kết quả
NAME       STATUS   ROLES   AGE     VERSION
10.0.0.2   Ready    controlplane,etcd,worker   5m16s  v1.21.6
10.0.0.3   Ready    controlplane,etcd,worker   5m16s   v1.21.6
10.0.0.4   Ready    controlplane,etcd,worker   5m16s   v1.21.6

Chúng ta kết nối tới máy chủ và kiểm tra các container đang chạy bằng .

bash (root)
docker ps 

Kết quả chúng ta thấy các container đã chạy

Kết quả
CONTAINER ID   IMAGE                                           COMMAND                  CREATED        STATUS          PORTS     NAMES
14bcc17abbc3   rancher/hyperkube:v1.21.6-rancher1              "/opt/rke-tools/entr…"   14 hours ago   Up 30 seconds             kube-proxy
7d6cc286aa2a   rancher/hyperkube:v1.21.6-rancher1              "/opt/rke-tools/entr…"   14 hours ago   Up 30 seconds             kubelet
c62464f1e272   rancher/hyperkube:v1.21.6-rancher1              "/opt/rke-tools/entr…"   14 hours ago   Up 30 seconds             kube-scheduler
e9746698de69   rancher/hyperkube:v1.21.6-rancher1              "/opt/rke-tools/entr…"   14 hours ago   Up 30 seconds             kube-controller-manager
9ae338b99b34   rancher/hyperkube:v1.21.6-rancher1              "/opt/rke-tools/entr…"   14 hours ago   Up 5 seconds              kube-apiserver
9f62bbc38211   rancher/rke-tools:v0.1.78                       "/docker-entrypoint.…"   14 hours ago   Up 30 seconds             etcd-rolling-snapshots
573d0848cdb7   rancher/mirrored-coreos-etcd:v3.4.16-rancher1   "/usr/local/bin/etcd…"   14 hours ago   Up 30 seconds             etcd

Các option trong cluster-kubernetes.yml

Dưới đây là một số option trong manifest cluster-kubernetes.yml:

  • Bastion host : Sử dụng trong trường hợp bạn không thể SSH trực tiếp tới các máy chủ mà phải thông qua một Bastion host .
bastion_host:
    address: x.x.x.x
    user: userdeploy
    port: 22
    ssh_key_path: /home/user/.ssh/bastion_rsa
  • Network: Mặc định RKE sẽ cài đặt network plug-in Canal . Nếu bạn muốn tuỳ chỉnh có thể sử dụng các option dưới đây .

    • Canal
network:
  plugin: canal
  options:
    canal_iface: eth1
    canal_flannel_backend_type: vxlan
    canal_autoscaler_priority_class_name: system-cluster-critical # Available as of RKE v1.2.6+
    canal_priority_class_name: system-cluster-critical # Available as of RKE v1.2.6+
  • Flannel
  plugin: flannel
  options:
    flannel_iface: eth1
    flannel_backend_type: vxlan
    flannel_autoscaler_priority_class_name: system-cluster-critical # Available as of RKE v1.2.6+
    flannel_priority_class_name: system-cluster-critical # Available as of RKE v1.2.6+
  • Calico
network:
  plugin: calico
  options:
    calico_cloud_provider: aws
    calico_autoscaler_priority_class_name: system-cluster-critical # Available as of RKE v1.2.6+
    calico_priority_class_name: system-cluster-critical # Available as of RKE v1.2.6+
  • Backup ETCD : Mặc định khi cài đặt sẽ không có backup ETCD vì thế nếu bạn muốn backup thì phải thêm cấu trúc YAML bên dưới và files backup sẽ nằm mặc định tại /opt/rke/etcd-snapshots .
services:
  etcd:
    snapshot: true
    creation: 6h
    retention: 24h
  • Enable nginx controller : Mặc định khi cài đặt sẽ không có ingress-controller nếu cần bạn có thể add thêm cấu trúc YAML bên dưới .
ingress:
  provider: nginx
  options:
    use-forwarded-headers: "true"

Tổng kết

Bên trên là toàn bộ hướng dẫn cài đặt thành công một cluster Kubernetes 3 nodes trong thời gian rất ngắn chỉ khoảng 10 phút . Để tối ưu thời gian cho việc cài đặt các bạn có thể sử dụng Ansible để provisioning cho các bước Chuẩn bịCài đặt Docker

Chúc các bạn thành công!


Bạn có làm được theo hướng dẫn này không?

Bài liên quan

Hướng dẫn cài đặt Kubernetes trên CentOS 7 tự động hoá với Ansible
Hướng dẫn cài đặt Kubernetes trên CentOS 7 tự động hoá với Ansible
Hướng dẫn cài đặt Cluster Kubernetes với RKE trên Ubuntu 20.04
Hướng dẫn cài đặt Cluster Kubernetes với RKE trên Ubuntu 20.04

Cloud VPS tại 123HOST

Hiệu năng, ổn định và bảo mật

Xem thêm

Trở thành tác giả

Được trả phí từ 100k đến 800k/ mỗi bài viết

Chi tiết
Thông tin tác giả
Võ Trung Huy

Tôi một người hiền lành , thân thiện , hài hước, và yêu công nghệ

2 Bình luận

Tính năng đang được phát triển

Đang tải bình luận