Sunday, January 19, 2025

[Kubernetes 14] Hướng dẫn triển khai Rancher để quản lý Kubernetes Cluster

-

1. Giới thiệu

Rancher là công cụ nguồn mở, giao diện nền web, để quản lý Kubernetes Cluster, triển khai ứng dụng trên Kubernetes cho dù Cluster của bạn chạy ở đâu, cung cấp bởi dịch vụ nào (AWS, GCP, Azure …). Từ một Server cài đặt Rancher bạn có thể quản lý một hay nhiều Kubernetes Cluster trên cùng một giao diện.

Rancher cho phép bạn theo dõi, giám sát tình trạng của Kubernetes Cluster, nhận các cảnh bảo về sử dụng tài nguyên …

Để triển khai Rancher, bạn cần cài đặt Rancher trên một Server: gọi là Server Rancher, cần đảm bảo địa chỉ IP của Server Rancher và các Node của Kubernetes Cluster cần quản lý liên lạc mạng được với nhau.

2. Triển khai Rancher lên Kubernetes bằng helm.

2.1. Thêm Repo Rancher Helm Chart

– Các phiên bản của Rancher được phân loại như sau:

+ Bản mới nhất được đề xuất để thử các tính năng mới nhất

helm repo add rancher-latest https://releases.rancher.com/server-charts/latest

+ Bản ổn định được đề xuất cho môi trường cung cấp dịch vụ

helm repo add rancher-stable https://releases.rancher.com/server-charts/stable

+ Alpha là bản thử nghiệm của các bản sắp phát hành sắp tới

helm repo add rancher-alpha https://releases.rancher.com/server-charts/alpha

Ở bài này mình sẽ sử dụng bản latest với cú pháp như dưới

root@k8s-standalone:/home# helm repo add rancher-latest https://releases.rancher.com/server-charts/latest
"rancher-latest" has been added to your repositories

Verify repo vừa thêm

root@k8s-standalone:/home# helm repo ls
NAME            URL                                              
nginx-stable    https://helm.nginx.com/stable                    
rancher-latest  https://releases.rancher.com/server-charts/latest

2.2. Triển khai cert-manager

Ta triển khai cert-manager với cú pháp như dưới

root@k8s-standalone:~# kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.7.1/cert-manager.crds.yaml

customresourcedefinition.apiextensions.k8s.io/certificaterequests.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/certificates.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/challenges.acme.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/clusterissuers.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/issuers.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/orders.acme.cert-manager.io created

Thêm Helm repo Jetstack

root@k8s-standalone:/home# helm repo add jetstack https://charts.jetstack.io
"jetstack" has been added to your repositories

Cập nhật lại repo của Helm chart

root@k8s-standalone:/home# helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "jetstack" chart repository
...Successfully got an update from the "rancher-latest" chart repository
Update Complete. ⎈Happy Helming!⎈

Cài đặt Helm chart cert-manager

root@k8s-standalone:/home# helm install cert-manager jetstack/cert-manager \
  --namespace cert-manager \
  --create-namespace \
  --version v1.7.1

Đầu ra trông sẽ như vậy

NAME: cert-manager
LAST DEPLOYED: Tue Oct  4 10:27:48 2022
NAMESPACE: cert-manager
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
cert-manager v1.7.1 has been deployed successfully!

In order to begin issuing certificates, you will need to set up a ClusterIssuer
or Issuer resource (for example, by creating a 'letsencrypt-staging' issuer).

More information on the different types of issuers and how to configure them
can be found in our documentation:

https://cert-manager.io/docs/configuration/

For information on how to configure cert-manager to automatically provision
Certificates for Ingress resources, take a look at the `ingress-shim`
documentation:

https://cert-manager.io/docs/usage/ingress/

Khi bạn đã triển khai xong, bạn có thể xác minh xem nó được triển khai chưa như ở dưới

root@k8s-standalone:/home# kubectl get pods --namespace cert-manager
NAME                                     READY   STATUS    RESTARTS   AGE
cert-manager-76d44b459c-8fv5t            1/1     Running   0          90s
cert-manager-cainjector-9b679cc6-m48nn   1/1     Running   0          90s
cert-manager-webhook-57c994b6b9-vbg9x    1/1     Running   0          90s

2.3. Triển khai Rancher

Tạo namespace cattle-system cho Rancher

root@k8s-standalone:~# kubectl create namespace cattle-system
namespace/cattle-system created

Triển khai Rancher với phiên bản rancher-latest, mình sử dụng ingress.tls.source=rancher vì mình sẽ sử dụng cert-manager tự xác thực của Rancher.

root@k8s-standalone:/home# helm install rancher rancher-latest/rancher \
  --namespace cattle-system \
  --set hostname=rancher.hoanghd.com \
  --set bootstrapPassword=admin \
  --set ingress.tls.source=rancher

Đầu ra của lệnh trông sẽ như dưới

NAME: rancher
LAST DEPLOYED: Tue Oct  4 10:35:37 2022
NAMESPACE: cattle-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Rancher Server has been installed.

NOTE: Rancher may take several minutes to fully initialize. Please standby while Certificates are being issued, Containers are started and the Ingress rule comes up.

Check out our docs at https://rancher.com/docs/

If you provided your own bootstrap password during installation, browse to https://rancher.hoanghd.com to get started.

If this is the first time you installed Rancher, get started by running this command and clicking the URL it generates:

```
echo https://rancher.my.org/dashboard/?setup=$(kubectl get secret --namespace cattle-system bootstrap-secret -o go-template='{{.data.bootstrapPassword|base64decode}}')
```

To get just the bootstrap password on its own, run:

```
kubectl get secret --namespace cattle-system bootstrap-secret -o go-template='{{.data.bootstrapPassword|base64decode}}{{ "\n" }}'
```


Happy Containering!

Sau khi thêm các secret, hãy kiểm tra xem Rancher đã được triển khai thành công hay chưa

root@loadbalancer3:/home# kubectl -n cattle-system rollout status deploy/rancher
deployment "rancher" successfully rolled out

Bạn có thể kiểm tra trạng thái deployment xem đã triển khai xong hay chưa bằng lệnh dưới.

root@loadbalancer3:/home# kubectl -n cattle-system get deploy rancher
NAME      READY   UP-TO-DATE   AVAILABLE   AGE
rancher   3/3     3            3           3m8s

Xác minh các services thuộc namespace cattle-system

root@loadbalancer3:/home# kubectl get svc/rancher -n cattle-system
NAME      TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
rancher   ClusterIP   10.96.39.167   <none>        80/TCP,443/TCP   2m33s

Xác minh các ingress thuộc namespace cattle-system ta thấy khi triển khai bằng helm thì hệ thống đã tự tạo ra 1 ingress cho Rancher, nhưng do mình đã có 1 ingress mà trước đó đã triển khai nên mình sẽ sử dụng ingress do chính mình triển khai.

root@loadbalancer3:/home# kubectl get ing -n cattle-system
NAME      CLASS    HOSTS                 ADDRESS   PORTS     AGE
rancher   <none>   rancher.hoanghd.com             80, 443   24m

Mình sẽ xoá ingress hiện tại

root@loadbalancer3:/home# kubectl delete ing/rancher -n cattle-system
ingress.networking.k8s.io "rancher" deleted

Xác minh lại ingress cũ đã được xoá.

root@loadbalancer3:/home# kubectl get ing -n cattle-system
No resources found in cattle-system namespace.

Mình tạo 1 manifest ingress mới với nội dung như dưới

cat > ./rancher-ingress.yaml << OEF
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: rancher-ingress
  namespace: cattle-system
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    cert-manager.io/issuer: rancher
    cert-manager.io/issuer-kind: Issuer
    meta.helm.sh/release-name: rancher
    meta.helm.sh/release-namespace: cattle-system
    nginx.ingress.kubernetes.io/proxy-connect-timeout: "30"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "1800"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "1800"
spec:
  ingressClassName: nginx
  rules:
    - host: rancher.hoanghd.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: rancher
                port:
                  number: 80
  tls:
  - hosts:
    - rancher.hoanghd.com
    secretName: tls-rancher-ingress 
OEF

Triển khai manifest trên

root@loadbalancer3:/home# kubectl apply -f ./rancher-ingress.yaml 
ingress.networking.k8s.io/rancher-ingress created

Xác nhận lại ingress mình đặt tên mới là rancher-ingress đã được tạo

root@loadbalancer3:/home# kubectl get ing -n cattle-system
NAME              CLASS   HOSTS                 ADDRESS          PORTS     AGE
rancher-ingress   nginx   rancher.hoanghd.com   192.168.13.239   80, 443   9s

Bằng cách nào đó bạn tự tạo 1 domain mà trước đó đã khai báo trong ingress, mình sẽ sử dụng file host

hoanghd@mb-hoanghd ~ % cat  /etc/hosts | grep rancher
192.168.13.239 rancher.hoanghd.com

Hãy đảm bảo máy client có thể connect tới domain này

hoanghd@mb-hoanghd ~ % ping rancher.hoanghd.com
PING rancher.hoanghd.com (192.168.13.239): 56 data bytes
64 bytes from 192.168.13.239: icmp_seq=0 ttl=64 time=0.448 ms
64 bytes from 192.168.13.239: icmp_seq=1 ttl=64 time=0.400 ms
64 bytes from 192.168.13.239: icmp_seq=2 ttl=64 time=0.478 ms
64 bytes from 192.168.13.239: icmp_seq=3 ttl=64 time=0.445 ms

--- rancher.hoanghd.com ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.400/0.443/0.478/0.028 ms

Dùng trình duyệt truy cập url: https://rancher.hoanghd.com ta có kết quả như dưới

Chọn Set a specific password to use và đặt mật khẩu mới cho Rancher, tại What URL should be used for this Rancher installation? All the nodes in your clusters will need to be able to reach this nếu không có thay đổi về url của Rancher thì các bạn giữ nguyên.

Bấm chọn I agree to the terms and conditions for using Rancher và Continue để hoàn thành.

Khi login vào ta sẽ có 1 giao diện như vậy, nó cho ta biết chi tiết node của mình và rất nhiều tính năng khác, để tránh bài quá dài thì mình sẽ hướng dẫn sử dụng Rancher ở 1 bài khác.

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

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories