Kubernetes là gì?
Kubernetes (còn được gọi là k8s) là một hệ thống điều phối container mã nguồn mở để tự động hóa việc triển khai, mở rộng và quản lý các ứng dụng. Ban đầu nó được thiết kế bởi Google và hiện nay đang được duy trì bởi tổ chức Cloud Native Computing Foundation.
Nó nhằm mục đích cung cấp một “nền tảng để tự động hóa việc triển khai, mở rộng và vận hành các container chứa ứng dụng trên các cụm máy chủ”. Nó hoạt động với một loạt các công cụ container, bao gồm Docker.
- Thiết kế bởi Google
- Phát triển bởi Cloud Native Computing Foundation
- Lần đầu phát hành vào 7/6/2014
- Phiên bản ổn định : 1.16
- Repository: github.com/kubernetes/kubernetes
- Viết bằng ngôn ngữ lập trình Go
- Loại phần mềm: Cluster management software
- License: Apache License 2.0
- Website: kubernetes.io
Ưu điểm và các tính năng của Kubernetes
- Endpoint slices: Theo dõi và mở rộng (scale) các node trên Kobernetes Cluster
- Load balancing: Kubernetes cung cấp cho các Pod địa chỉ IP riêng và một DNS duy nhất cho một nhóm Pods. Vì vậy có thể cân bằng tải giữa chúng.
- Automatic bin packing: Tự động đặt các container dựa trên yêu cầu tài nguyên của chúng và các ràng buộc khác, để tăng cường sử dụng và tiết kiệm nhiều tài nguyên hơn.
- Storage orchestration: Tự động gắn hệ thống lưu trữ mà bạn chọn, cho dù từ bộ nhớ cục bộ (local), nhà cung cấp đám mây như GCP hoặc AWS hoặc hệ thống lưu trữ mạng như NFS, iSCSI, Gluster, Ceph, Cinder hoặc Flocker.
- Self-healing: Khởi động lại các container bị dừng, thay thế và sắp xếp lại các container khi các node die, xóa bỏ container bị hỏng.
- Automated rollouts and rollbacks
- IPv4/IPv6 dual-stack: Phân bổ địa chỉ IPv4, IPv6 tới các Pods và Services
- Batch execution: Ngoài các dịch vụ, Kubernetes có thể quản lý Batch, CI, thay thế các container bị dừng.
- Horizontal scaling: Scale (mở rộng) ứng dụng của bạn lên hoặc xuống tùy theo mức độ sử dụng CPU
Các đối tượng trong Kubernetes
Pods
Một nhóm là một mức độ trừu tượng cao hơn nhóm các thành phần container. Một nhóm bao gồm một hoặc nhiều container được đảm bảo nằm cùng trên máy chủ và có thể chia sẻ tài nguyên.
Replica Sets
Replica Sets là 1 nhóm cho phép Kubernetes khai các Instance duy trì các instances đã được khai báo cho một Pod
Services
Kubernetes Services là một tập hợp các pods hoạt động cùng nhau, chẳng hạn như một lớp của ứng dụng nhiều tầng. Tập hợp các nhóm tạo thành một dịch vụ được xác định bởi một bộ chọn nhãn (Label Selector). Kubernetes cung cấp hai chế độ quản lý dịch vụ, sử dụng biến môi trường hoặc sử dụng Kubernetes DNS.
Volumes
Mặc định, các hệ thống tệp tin (File System) trong Kubernetes Container không bền. Điều này có nghĩa là việc khởi động lại pod sẽ xóa sạch mọi dữ liệu trên các container đó và do đó, hình thức lưu trữ này khá hạn chế sử dụng. Vì vậy, Kubernetes cung cấp một giải pháp khác là Volumes để lưu trữ vĩnh viễn dữ liệu trong suốt vòng đời của pod. Nó có thể được chia sẻ giữa các container với nhau trong cùng một Pod. Một Volume sẽ được mount vào container bởi một mount point được định nghĩa trong config của pod.
Namespaces
Kubernetes cung cấp phân vùng các tài nguyên mà nó quản lý thành các tập hợp không chồng lấp được gọi là Namespace. Chúng được thiết kế để sử dụng trong các môi trường có nhiều người dùng trải rộng trên nhiều nhóm hoặc dự án hoặc thậm chí tách các môi trường như phát triển (dev), thử nghiệm (test) và sản xuất (Production).
Hướng dẫn cài đặt Kubernetes trên Ubuntu Server
Tiền đề bài viết
- Hệ điều hành: Ubuntu Server 18.04 LTS
- Tài khoản có quyền sudo
Cài đặt docker.io
Đầu tiên chúng ta cài dặt docker.io
sudo apt install docker.io
Sau đó khởi động nó lên và cho nó boot cùng với hệ điều hành
sudo systemctl start docker sudo systemctl enable docker
Cài đặt Kubernetes
Thêm Kubernetes signing key vào hệ thống
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add
Thêm repository
sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
Cài đặt kubeadm
sudo apt install kubeadm
Kubernetes sẽ từ chối hoạt động nếu hệ thống của bạn đang sử dụng swap do đó chúng tôi cần phải tắt swap
sudo swapoff -a
Tạo single node cluster
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
Bạn sẽ nhận được thông báo như sau:
Chúng ta thực hiện command như hướng dẫn ở trên
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
Sau đó triển khai 1 pod trên cluster
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
Sử dụng kubectl get pods –all-namespaces để kiểm tra lại:
kubectl get pods --all-namespaces
Cài đặt Dashboard UI
Nếu bạn muốn có 1 trang quản lý dạng Web UI thay vì quản lý các Pod, container bằng giao diện dòng lệnh thì hãy thực hiện các command dưới đây.
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
Khởi động trang quản lý của Kubernetes Dashboard UI
kubectl proxy --address='0.0.0.0' --accept-hosts='.*'
Giờ chúng ta truy cập tới đường dẫn http://<diachi_ip>:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
Có 2 hình thức login là Kubeconfig và Token
Trong bước này, chúng ta sẽ tạo sử dụng Token để đăng nhập.
Gõ lệnh bên dưới để get token
kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')
Copy token vào trang trang login => bấm [ Login ] để đăng nhập
Nguồn: vinasupport.com