By using this site, you agree to the Privacy Policy and Terms of Use.
Accept
FantasistaFantasista
  • Home
  • Network
  • System
  • Software
  • Security
    SecurityShow More
    Hướng dẫn chung về Kali Linux
    27/05/2022
    Ransomware tấn công có chủ đích vào các tổ chức
    03/11/2021
    Series Pentesterlab – Day 22: CVE-2007-1860: mod_jk double-decoding
    04/10/2021
    Series Pentesterlab – Day 21: From SQL Injection to Shell
    15/09/2021
    Series Tryhackme – Day 01: Starting Out In Cyber Sec
    13/09/2021
  • Coding
  • Life
Search
© 2022 Foxiz News Network. Ruby Design Company. All Rights Reserved.
Reading: Giới thiệu và cài đặt Kubernetes Cluster
Share
Sign In
Notification Show More
Latest News
Hướng dẫn chung về Kali Linux
27/05/2022
Ransomware tấn công có chủ đích vào các tổ chức
03/11/2021
Hướng dẫn kích hoạt IDM Full không cần crack, sử dụng key an toàn
10/10/2021
Series Pentesterlab – Day 22: CVE-2007-1860: mod_jk double-decoding
04/10/2021
Series Pentesterlab – Day 21: From SQL Injection to Shell
15/09/2021
Aa
FantasistaFantasista
Aa
Search
Have an existing account? Sign In
Follow US
© 2022 Foxiz News Network. Ruby Design Company. All Rights Reserved.
Fantasista > Blog > Fantasista > Hệ thống > Docker > Giới thiệu và cài đặt Kubernetes Cluster
DockerHệ thống

Giới thiệu và cài đặt Kubernetes Cluster

Fantasista
Fantasista 20/07/2021
Updated 2021/07/21 at 8:42 Chiều
Share
13 Min Read
SHARE
Mục lục
1. Kubernetes là gì? Khái niệm!2. Kubernetes có thế làm những gì?3. Sơ lược kiến trúc – các thành phần của Kubernetes4. Tạo Cluster Kubernetes5. Cấu hình kubectl máy trạm truy cập đến các Cluster

1. Kubernetes là gì? Khái niệm!

Kubernetes (còn gọi là k8s) là một hệ thống để chạy, quản lý, điều phối các ứng dụng được container hóa trên một cụm máy (1 hay nhiều) gọi là cluster. Với Kubernetes bạn có thể cấu hình để chạy các ứng dụng, dịch vụ sao cho phù hợp nhất khi chúng tương tác với nhau cũng như với bên ngoài. Bạn có thể điều chỉnh tăng giảm tài nguyên, bản chạy phục vụ cho dịch vụ (scale), bạn có thể cập nhật (update), thu hồi update khi có vấn đề … Kubernetes là một công cụ mạnh mẽ, mềm dẻo, dễ mở rộng khi so sánh nó với công cụ tương tự là Docker Swarm!

Kubernetes được thiết kế bởi Google, về ngữ nghĩa thì tên này là tiếng Hy Lạp có nghĩa là tài công.

2. Kubernetes có thế làm những gì?

Với các dịch vụ web hiện đại, người dùng mong muốn các ứng dụng luôn sẵn sàng hoạt động 24/7 và các lập trình viên muốn triển khai các phiên bản của ứng dụng đó nhiều lần trong ngày. Việc đóng gói ứng dụng vào container giúp giải quyết mục tiêu này, cho phép các ứng dụng được phát hành và cập nhật một cách dễ dàng, nhanh chóng mà không có downtime. Kubernetes giúp bạn đảm bảo các ứng dụng container chạy ở bất kì đâu và bất kì lúc nào bạn muốn, đồng thời giúp chúng tìm thấy các tài nguyên và công cụ cần thiết để chạy. Kubernetes là nền tảng mã nguồn mở, chạy được trong môi trường production, được thiết kế và phát triển bởi Google, kết hợp với những ý tưởng tốt nhất từ cộng đồng.

3. Sơ lược kiến trúc – các thành phần của Kubernetes

Hệ thống Kubernetes thật sự phức tạp, các thành phần của sẽ được tìm hiểu dần qua từng bài viết, nhưng ở đây có một sơ đồ và một vài khái quát ban đầu về kiến trúc / thành phần của nó.

image 15 - Giới thiệu và cài đặt Kubernetes Cluster

Master Server là máy chính của cluster, tại đây điều khiển cả cụm máy:

  • etct là thành phần cơ bản cần thiết cho Kubernetes, nó lưu trữ các cấu hình chung cho cả cụm máy, etct chạy tại máy master. etct là một dự án nguồn mở (xem tại etcd) nó cung cấp dịch vụ lưu dữ liệu theo cặp key/value
  • kube-apiserver chạy tại máy master, cung cấp các API Restful để các client (như kubectl) tương tác với Kubernetes
  • kube-scheduler chạy tại master, thành phần này giúp lựa chọn Node nào để chạy các ứng dụng căn cứ vào tài nguyên và các thành phần khác sao cho hệ thống ổn định.
  • kube-controller chạy tại master, nó điều khiển trạng thái cluster, tương tác để thực hiện các tác vụ tạo, xóa, cập nhật … các tài nguyên

Kubelet dịch vụ vụ chạy trên tất cả các máy (Node), nó đảm đương giám sát chạy, dừng, duy trì các ứng dụng chạy trên node của nó.

Kube-proxy: cung cấp mạng proxy để các ứng dụng nhận được traffic từ ngoài mạng vào cluster.

4. Tạo Cluster Kubernetes

Để có một Kubernetes cần có các máy chủ (ít nhất một máy), trên các máy cài đặt Docker và Kubernetes. Một máy khởi tạo là master và các máy khác là worker kết nối vào. Có nhiều cách để có Cluster Kubernetes, như cài đặt minikube để có kubernetes một nút (node) để thực hành (môi trường chạy thử), hay dùng ngay Kubernetes trong Docker Desktop, hay cài đặt một hệ thống đầy đủ (Cài Docker, Cài và khởi tạo Cluster Kubernetes), hay mua từ các nhà cung cấp dịch vụ như Google Cloud Platform, AWS, Azuze …

Ở đây, giới thiệu hai cách một là nếu muốn đơn giản – cluster một nút thì dùng ngay từ Docker Destop để thử nghiệm. Hai là cài đặt đầy đủ một hệ thống – cách mà triển khai product sẽ áp dụng.

4.1. Tạo Cluster Kubernetes từ Docker Desktop

Đây là cách đơn giản, nhanh chóng để có Cluster Kubernetes, vì Docker Destop các phiên bản mới đã tích hợp sẵn, việc của bạn chỉ đơn giản là kích hoạt nó, chỉ có một hạn chế đó là Kubernetes chỉ có một Node, loại này thích hợp để bạn chạy thủ các tính năng mà ngại cấu hình phức tạp.

Để kích hoạt thì mở giao diện của Docker Destop nên (giống nhau cho cả bản Windows và macOS), rồi tại mục Kubernetes chọn Enable Kubernetes rồi nhấn Apply vậy là máy của bạn đã có Cluster Kubernetes.

image 16 - Giới thiệu và cài đặt Kubernetes Cluster

Các lệnh kiểm tra thông tin trên kubernetes:

kubectl version

kubectl cluster-info

image 17 - Giới thiệu và cài đặt Kubernetes Cluster

Lệnh cho biết các node trong kube:

kubectl get nodes

image 18 - Giới thiệu và cài đặt Kubernetes Cluster

Lệnh kiểm tra thông tin chi tiết node trong k8s:

kubectl describle node/docker-desktop

image 19 - Giới thiệu và cài đặt Kubernetes Cluster

4.2. Triển khai hệ thống hoàn chỉnh, có nhiều node

Tạo các máy ảo từ hyper-v qua Vagrant bằng hướng dẫn sau:

Enable Hyper-V and Install Vagrant on Windows 10|11
https://docs.microsoft.com/en-us/virtualization/community/team-blog/2017/20170706-vagrant-and-hyper-v-tips-and-tricks

Chú ý cd vào thư mục Hyperv-share trong ổ D để tất cả dữ liệu của vagrant và HyperV nằm trong đó để dễ quản lý.

Mặc định sẽ tạo là máy ảo ubuntu.

4.2.1. Tạo file vargrant và các máy ảo từ đó trên Hyper-V

Chú ý không tại được máy ảo Hyper Centos với IP cố định, mà phải sử dụng card mạng Default Switch

Máy master:

# -*- mode: ruby -*-

# vi: set ft=ruby :

# Tạo máy ảo từ box centos/7, gán địa chỉ IP, đặt hostname, gán 2GB bộ nhớ, 2 cpus  

Vagrant.configure(“2”) do |config|

    config.vm.box = “centos/7”

    #config.vm.network “private_network”, ip: “172.17.103.170”

    #config.vm.hostname = “master.xtl”

    config.vm.provider “hyperv” do |vb|

      #vb.name = “master.xtl”

      vb.cpus = 2

      vb.memory = “2048”

    end

    # Chạy file install-docker-kube.sh sau khi nạp Box

    config.vm.provision “shell”, path: “./../install-docker-kube.sh”

    # Chạy các lệnh shell

    config.vm.provision “shell”, inline: <<-SHELL

      # Đặt pass 123 có tài khoản root và cho phép SSH

      echo “123” | passwd –stdin root

      sed -i ‘s/^PasswordAuthentication no/PasswordAuthentication yes/’ /etc/ssh/sshd_config

      systemctl reload sshd

  # Ghi nội dung sau ra file /etc/hosts để truy cập được các máy theo HOSTNAME

  cat >>/etc/hosts<<EOF

  172.17.103.170 master.xtl

  172.17.105.40 worker1.xtl

  172.17.107.94 worker2.xtl

  EOF

    SHELL

  end

Máy worker1:

# -*- mode: ruby -*-

# vi: set ft=ruby :

# Tạo máy ảo từ box centos/7, gán địa chỉ IP, đặt hostname, gán 2GB bộ nhớ, 2 cpus  

Vagrant.configure(“2”) do |config|

    config.vm.box = “centos/7”

    config.vm.network “private_network”, ip: “172.16.10.101”

    config.vm.hostname = “worker1.xtl”

    config.vm.provider “hyperv” do |vb|

      #vb.name = “worker1.xtl”

      vb.cpus = 1

      vb.memory = “2048”

    end

    # Chạy file install-docker-kube.sh sau khi nạp Box

    config.vm.provision “shell”, path: “./../install-docker-kube.sh”

    # Chạy các lệnh shell

    config.vm.provision “shell”, inline: <<-SHELL

      # Đặt pass 123 có tài khoản root và cho phép SSH

      echo “123” | passwd –stdin root

      sed -i ‘s/^PasswordAuthentication no/PasswordAuthentication yes/’ /etc/ssh/sshd_config

      systemctl reload sshd

  # Ghi nội dung sau ra file /etc/hosts để truy cập được các máy theo HOSTNAME

  cat >>/etc/hosts<<EOF

  172.17.103.170 master.xtl

  172.17.105.40 worker1.xtl

  172.17.107.94 worker2.xtl

  EOF

    SHELL

  end

Máy worker2:

# -*- mode: ruby -*-

# vi: set ft=ruby :

# Tạo máy ảo từ box centos/7, gán địa chỉ IP, đặt hostname, gán 2GB bộ nhớ, 2 cpus  

Vagrant.configure(“2”) do |config|

    config.vm.box = “centos/7”

    config.vm.network “private_network”, ip: “172.16.10.101”

    config.vm.hostname = “worker2.xtl”

    config.vm.provider “hyperv” do |vb|

      #vb.name = “worker2.xtl”

      vb.cpus = 1

      vb.memory = “2048”

    end

    # Chạy file install-docker-kube.sh sau khi nạp Box

    config.vm.provision “shell”, path: “./../install-docker-kube.sh”

    # Chạy các lệnh shell

    config.vm.provision “shell”, inline: <<-SHELL

      # Đặt pass 123 có tài khoản root và cho phép SSH

      echo “123” | passwd –stdin root

      sed -i ‘s/^PasswordAuthentication no/PasswordAuthentication yes/’ /etc/ssh/sshd_config

      systemctl reload sshd

  # Ghi nội dung sau ra file /etc/hosts để truy cập được các máy theo HOSTNAME

  cat >>/etc/hosts<<EOF

  172.17.103.170 master.xtl

  172.17.105.40 worker1.xtl

  172.17.107.94 worker2.xtl

  EOF

    SHELL

  end

Do không set được IP theo file nên cần vào các máy ảo để đặt lại hosts

4.2.2. Khởi tạo Cluster trên node master

Trong lệnh khởi tạo cluster có tham số –pod-network-cidr để chọn cấu hình mạng của POD, do dự định dùng Addon calico nên chọn –pod-network-cidr=172.17.0.0/16

Gõ lệnh sau để khở tạo là nút master của Cluster:

kubeadm init –apiserver-advertise-address=172.17.103.170 –pod-network-cidr=172.17.0.0/16

Kết quả:

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 172.17.103.170:6443 –token z2f4lm.i5ey2p6yig07334n \

        –discovery-token-ca-cert-hash sha256:3c3e9197ae94ee3edc2bfd67228ba096899179dd7f2fc9072b

Sau khi lệnh chạy xong, chạy tiếp cụm lệnh nó yêu cầu chạy sau khi khởi tạo- để chép file cấu hình đảm bảo trình kubectl trên máy này kết nối Cluster:

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

Tiếp đó, nó yêu cầu cài đặt một Plugin mạng trong các Plugin tại addon, ở đây đã chọn calico, nên chạy lệnh sau để cài nó

kubectl apply -f https://docs.projectcalico.org/v3.10/manifests/calico.yaml

Gõ vài lệnh sau để kiểm tra

# Thông tin cluster

kubectl cluster-info

# Các node trong cluster

kubectl get nodes

# Các pod đang chạy trong tất cả các namespace

kubectl get pods -A

4.2.3. Kết nối các node vào Cluster

Hãy vào máy node master (bằng SSH ssh root@172.16.10.100). Thực hiện lệnh sau với Cluster để lấy lệnh kết nối

kubeadm token create –print-join-command

Nó cho nội dung lệnh kubeadm join … thực hiện lệnh này trên các node worker thì node worker sẽ nối vào Cluster:

kubeadm join 172.17.103.170:6443 –token 2hhu69.f2ke9nc9u37u8jke –discovery-token-ca-cert-hash sha256:3c3e9197ae94ee3edc2bfd67228ba096899179dd7f2fc9072b9f17d80c1ec63c

SSH vào máy worker1, work2 và thực hiện kết nối.

Giờ kiểm tra các node có trong Cluster

kubectl get nodes

image 20 - Giới thiệu và cài đặt Kubernetes Cluster

5. Cấu hình kubectl máy trạm truy cập đến các Cluster

Chương trình client kubectl là công cụ dòng lệnh kết nối và tương tác với các Cluster Kubernetes, thường khi cài đặt Kubernetes mọi người cũng cài luôn kubectl như phần trên trên, ngay cả máy cài Docker Desktop cũng đã có kubectl. Tất nhiên, bạn có cài đặt kubectl trên một máy không Docker, không Kubernetes với mục đích chỉ dùng nó kết nối đến hệ thống Cluster từ xa. Nếu muốn cài ở máy độc lập như vậy xem tại Intall kubectl

Hiện tại chúng ta có 2 hệ thống k8s: docker-desktop và hệ thống cluster từ 3 máy ảo Centos. Tại thời điểm này sử dụng lệnh kubectl cluster-info thì sẽ hiển thị thông tin k8s mặc định của docker-desktop. Nhưng do chúng ta muốn sử dụng với hệ thống 3 máy ảo Centos, do đó chúng ta cần thực hiện:

Đầu tiên, xem thông tin config của k8s:

kubectl config view

image 21 - Giới thiệu và cài đặt Kubernetes Cluster

kubectl đang làm việc với config với một cluster docker-desktop, cấu hình làm việc là context: docker-desktop. Bây giờ cần kết nối thêm các cluster khác vào đây. File config view này nằm ở đường dẫn C:\Users\nhatt\.kube

Cần copy file config trong node master của Cluster 3 node về thư mục chứa config của kube:

scp root@172.17.103.170:/etc/kubernetes/admin.conf C:\Users\nhatt\.kube\

image 22 - Giới thiệu và cài đặt Kubernetes Cluster

Đổi tên admin.config thành config-mycluster để giống với hướng dẫn

Vậy trên máy của tôi đang có 2 file cấu hình

  • /User/xuanthulab/.kube/config-mycluster cấu hình kết nối đến Cluster mới tạo ở trên
  • /User/xuanthulab/.kube/config cấu hình kết nối đến Cluster cục bộ của bản Kubernetes có sẵn của Docker

5.1. Cách 1

Nếu muốn yêu cầu kubectl sử dụng ngay file cấu hình nào đó, thì gán biến môi trường KUBECONFIG bằng đường dẫn file cấu hình, ví dụ sử dụng file cấu hình config-mycluster

export KUBECONFIG=C:/Users/nhatt/.kube/config-mycluster

Sau lệnh đó thì kubectl sẽ dùng config-mycluster để có thông tin kết nối đến, nhưng trường hợp này chỉ có hiệu lực trong một phiên làm việc, ví dụ nếu bạn đóng terminal và mở lại thì lại phải thiết lập lại biến môi trường như trên.

5.2. Cách 2 – Trộn 2 kubectl vào để có thể sử dụng đồng thời cả hai

Giờ bạn sẽ thực hiện kết hợp 2 file: config và config-mycluster thành 1 và lưu trở lại config.

export KUBECONFIG=C:/Users/nhatt/.kube/config-mycluster

kubectl config view –flatten > C:/Users/nhatt/.kube/config_temp

mv C:\Users\nhatt\.kube\config_temp C:/Users/nhatt/.kube/config

Như vậy trong file cấu hình đã có các ngữ cảnh khác nhau để sử dụng, đóng terminal và mở lại rồi gõ lệnh, có các ngữ cảnh nào

*** làm trên windows lệnh flatten không được, ko merge 2 file được

You Might Also Like

Series Pentesterlab – Day 02: Unix phần 2

Hướng dẫn lệnh grep trong Linux

Lệnh find trong Linux

Series Pentesterlab – Day 02: Unix phần 1

Các thành phần trong OpenStack

TAGGED: kubernetes, microservices

Sign Up For Daily Newsletter

Be keep up! Get the latest breaking news delivered straight to your inbox.
By signing up, you agree to our Terms of Use and acknowledge the data practices in our Privacy Policy. You may unsubscribe at any time.
Fantasista 20/07/2021
Share this Article
Facebook TwitterEmail Copy Link Print
Share
Posted by Fantasista
Follow:
Xin chào, mình là Tân. Mình tạo blog này 01/06/2021. Đây là nơi mình ghi chép lại những suy nghĩ, cảm nhận trong cuộc sống và những kiến thức mà mình học được.
Previous Article Bắt gói tin các thiết bị giả lập trong EVE bằng Wireshark
Next Article Các thành phần trong OpenStack
Leave a comment Leave a comment

Trả lời Hủy

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Stay Connected

235.3k Followers Like
69.1k Followers Follow
11.6k Followers Pin
56.4k Followers Follow
136k Subscribers Subscribe
4.4k Followers Follow
- Advertisement -
Ad imageAd image

Latest News

Hướng dẫn chung về Kali Linux
Bảo mật Công cụ bảo mật 27/05/2022
Ransomware tấn công có chủ đích vào các tổ chức
An toàn thông tin Bảo mật 03/11/2021
Hướng dẫn kích hoạt IDM Full không cần crack, sử dụng key an toàn
Phần mềm Tiện ích 10/10/2021
Series Pentesterlab – Day 22: CVE-2007-1860: mod_jk double-decoding
Bảo mật Pentest 04/10/2021
https://pbs.twimg.com/profile_images/1542611508093661184/MR5LYGqH_normal.jpg
@envato
1.5k Following
71k Followers
https://pbs.twimg.com/profile_images/1542611508093661184/MR5LYGqH_normal.jpg 8 giờ ago
@barts_ron Hi! Thanks for contacting us. It looks like all our systems are running smoothly. You can check the stat… https://t.co/Haz9yXFnMM
https://pbs.twimg.com/profile_images/1542611508093661184/MR5LYGqH_normal.jpg 15 giờ ago
@NeilEvansRocks Thank you for reaching out. I am happy to answer general questions here. For more personalized assi… https://t.co/KG3fxSwwXS
https://pbs.twimg.com/profile_images/1542611508093661184/MR5LYGqH_normal.jpg Mar 26, 2023
@olaarrh Hi there, to continue we would need you to submit a help ticket since we will be dealing with sensitive ac… https://t.co/sbSNJf6LC7

You Might also Like

Bảo mậtLinuxPentest

Series Pentesterlab – Day 02: Unix phần 2

12/08/2021
Linux

Hướng dẫn lệnh grep trong Linux

11/08/2021
Linux

Lệnh find trong Linux

11/08/2021
LinuxPentest

Series Pentesterlab – Day 02: Unix phần 1

10/08/2021
//

We influence 20 million users and is the number one business and technology news network on the planet

Quick Link

  • About
  • Contact
  • FAQs

Top Categories

  • Home
  • Network
  • System
  • Software
  • Security
  • Coding
  • Life
FantasistaFantasista
Follow US

© 2022 Foxiz News Network. Ruby Design Company. All Rights Reserved.

Join Us!

Subscribe to our newsletter and never miss our latest news, podcasts etc..

Zero spam, Unsubscribe at any time.

Removed from reading list

Undo
Welcome Back!

Sign in to your account

Register Lost your password?