Tập tành SET UP CLUSTER K8S KUBESPRAY

9th Feb 2023
Tập tành SET UP CLUSTER K8S KUBESPRAY
Table of contents

Overview

Kubernetes hay K8S đang ngày càng một phổ biến. Dạo gần đây thì mình cũng bắt đầu vừa học vừa làm Kubernetes. Vừa note lại để sau có quên thì xem lại cũng như vừa để chia sẻ cái hay cái mới mình học được với mọi người thì trong blog này mình sẽ chia sẻ cách để các bạn có thể set up một cluster K8S bằng Kubespray. Bài viết này

Getting Started

Kubernetes

Kubernetes là một mã nguồn mở của Google và được dùng để quản lý các ứng dụng, service giúp bạn thuận tiện trong việc cấu hình cũng như triển khai tự động. Các bạn có thể xem thêm tại https://kubernetes.io/

Kubespray

Là một công cụ giúp bạn set up một cluster K8S. Mã nguồn tại https://github.com/kubernetes-sigs/kubespray. Và để chuẩn bị cho việc set up cluster các bạn hãy clone kubespray về cho mình

$ git clone https://github.com/kubernetes-sigs/kubespray.git && cd kubespray

Python

Ở đây python3 là một tài nguyên cần thiết trong việc bạn set up cluster K8S. Vì vậy trước khi bắt đầu hãy chắc chắn máy của bạn đã có python3 và pip3 nhé.

Server

Trong phạm vi bài viết mình xây dựng cluster K8S gồm có 3 master node vậy mình cần 3 con host cho 3 node. Bạn nào không có host thì có thể dựng 3 con máy ảo lên tạm nhé. Sau khi đã chuẩn bị 3 máy cho 3 node thì bạn hãy copy ssh public key của mình bỏ vào ~/.ssh/authorized_keys ở 3 host nhé.

Solution

Các đầu việc của chúng ta gồm có

  1. Cài đặt các dependencies
  2. Set up inventory folder
    • update ansible host
    • update params cho cụm K8S
  3. Chạy command để set up cluster K8S

1. Cài đặt dependencies

$ sudo pip3 install -r requirements.txt

2. Set up inventory folder

$ cp -rfp inventory/sample inventory/mycluster
$ declare -a IPS=(10.10.1.3 10.10.1.4 10.10.1.5)
$ CONFIG_FILE=inventory/mycluster/hosts.yaml python3 contrib/inventory_builder/inventory.py ${IPS[@]}

Sau khi thực hiện xong 3 command trên thì bạn sẽ có 1 file hosts.yaml (inventory/mycluster/hosts.yaml). bây giờ chúng ta sẽ điều chỉnh cho phù hợp.

Bạn sẽ điều chỉnh lại các values trong group_vars/k8s-cluster và group_vars/all tuỳ theo mong muốn của mình. Còn nếu không thì có thể bỏ qua

# inventory/mycluster/hosts.yaml
all:
  hosts:
    node1:
      ansible_host: ${USER_HOST_01}@${PUBLIC_IP_HOST_01}
      ip: ${PRIVATE_IP_HOST_01}
    node2:
      ansible_host: ${USER_HOST_02}@${PUBLIC_IP_HOST_02}
      ip: ${PRIVATE_IP_HOST_02}
    node3:
      ansible_host: ${USER_HOST_03}@${PUBLIC_IP_HOST_03}
      ip: ${PRIVATE_IP_HOST_03}
  children:
    kube-master:
      hosts:
        node1:
        node2:
        node3:
    kube-node:
      hosts:
        node1:
        node2:
        node3:
    etcd:
      hosts:
        node1:
        node2:
        node3:
    k8s-cluster:
      children:
        kube-master:
        kube-node:
    calico-rr:
      hosts: {}

3. Chạy command set up K8S

$ ansible-playbook -i inventory/mycluster/hosts.yaml  --become --become-user=root cluster.yml

Sau khi cài đặt k8s cluster thì bạn hãy vào server 01 và kéo file /etc/kubernetes/admin.conf về local tại ~/.kube/config và set up lại local /etc/hosts

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: 
    server: https://${PRIVATE_IP_HOST_01}:6443
  name: cluster.local
contexts:
- context:
    cluster: cluster.local
    user: kubernetes-admin
  name: [email protected]
current-context: [email protected]
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:
    client-certificate-data: 
    client-key-data: 

thay thế ${PRIVATE_IP_HOST_01} thành kubernetes.default.svc.cluster.local

$ sudo echo ${PUBLIC_IP_HOST_01} >> /etc/hosts

bây giờ bạn có thể kiểm tra thành quả của mình

$ kubectl cluster-info
$ kubectl get nodes

Summary

Trong bài viết này mình đã chia sẻ với các bạn về cách để set up một cluster k8s với 3 nodes. Hẹn gặp lại các bạn trong các bài viết tiếp theo về series Kubernetes.

Bạn thấy bài viết này như thế nào?
0 reactions

Add new comment

Image CAPTCHA
Enter the characters shown in the image.

Related Articles

Creating a software system is a lot like constructing a building. If the foundation is not solid, structural problems can undermine the integrity and function of the building.

Việc áp dụng rộng rãi đám mây hiện nay đã khiến nhiều nhà cung cấp chuyển trọng tâm từ các giải pháp tại chỗ sang các mô hình đám mây, vậy đâu là lựa chọn tốt hơn cho doanh nghiệp của bạn.

CI-CD trong công nghệ phần mềm dùng để tích hợp triển khai dự án tự động liên tục hay deploy dự án một cách liên tục. Có khá nhiều platform CI-CD nổi tiếng như: Jenkins, Gitlab CI, Circle CI… Hay mới đây chúng ta có thêm cả Github Action