Chuyển đến nội dung chính

Bài đăng

Hiển thị các bài đăng có nhãn kubernetes

Phiên bản kubernetes version 1.21 ra đời ngày 08 tháng 04 năm 2021

 Phiên bản kubernetes version 1.21 ra đời ngày 08 tháng 04 năm 2021 Một số nâng cấp và thay đổi trong phiên bản kubernetes version 1.21.  Tính năng cronjob từ bảng thử trở thành tính năng chính thức sau một thời gian là bảng beta.  Feature Secrets và ConfigMaps sẽ không thay đổi sau khi bạn tạo, muốn thay đổi các giá trị trong feature này thì phải tạo mới.  - Sự thay đổi này làm cho hệ thống scale hơn như Kubernetes thông báo vì API Server sẽ không cần phải lấy lại thông tin sau khi bạn thay đổi các giá trị tài nguyên trong Secrets và ConfigMaps.  Kubernetes v1.21 hỗ trợ IP version 4 và IP version 6.  Shutdown worker node một các có hệ thống, như các phiên bản trước thì tính năng này không có nên khi một node đột ngột shutdown thì pod không được shutdown một cách có hệ thống và tuần tự.  Khi tính năng này ra đời làm cho các pod shotdown có hệ thống và tuần tự nên không gây nên những vấn đề trong workload.  Giám sát PV, Kubenetes v1.21 có tính năng alpha là giám sát health của Persis

Khai báo một Network Policy trong kubernetes cluster.

Phần này giúp ta khởi đầu với việc sử dụng NetworkPolicy API cho việc khai báo một network policy để các pod trong cluster giao tiếp với nhau như thế nào ?   Chuẩn bị :  1. Trước khi đi vào phần chính là khai báo một network policy trong cluster kubernetes thì bạn phải có sẵn một cluster trước.  2. Và version của kubernetes server phải bằng v1.8 hoặc hơn.  3. Có sẵn network providers cho hệ thống cluster của bạn, một số network provider có trên thị trường hiện nay:  - Calio  - Cilium   - Kube-router  - Romana  - Weave Net Tạo một nginx deployment và expose nó ra một service. Để tạo một deployment ta chạy lệnh sau:  kubectl create deployment nginx --image=nginx deployment.apps/nginx created Vậy  một deployment được tạo, giờ ta expose deployment này ra một service có tên là nginx.  kubectl expose deployment nginx --port=80 service/nginx expose Service nginx và pod nginx này chạy trên namespace default và service nginx expose trên port 80. kubectl get svc,pod NAME C

Hai tính năng "beta" quan trọng của Kubernetes 1.20

 Kubernetes 1.20 cho ra đời 2 tính năng thử nghiệm "beta" đó là cho phép Kubernetes admins và users có thêm quyền điều khiển tương thích trong việc "khi một pod được sinh ra thì quyền của việc mount volume trong pod như thế nào ?  - Nó sẽ cho phép user bỏ qua quá trình set lại permission của volume khi thấy permission cho volume đã đúng.   Thông thường nếu pod của bạn đang chạy với quyền non-root thì bạn phải set  fsGroup  trong pod của bạn mà volume của bạn có quyền đọc và ghi được. Nhưng khi bạn set  fsGroup   trong pod thì khi mỗi lần volume được mount trong pod thì nó phải set lại permission với câu lệnh  chown()   và   chmod()   cho tất cả các files và thư mục trong volume, và thậm chí việc set lại permission xảy ra khi permission ban đầu đã đúng. Việc này rất tốn nhiều tài nguyên khi volume của bạn chứa rất nhiều file nhỏ và thư mục trong đó, đó là lý do vì sao khi quá trình khởi động một pod rất lâu.  Kubernetes 1.20 cho ra đời 1 tính năng không tham gia vào việc

Docker sẽ bị loại bỏ trên những bản release tiếp Theo của Kubernetes.

  Ngày 02 tháng 12 năm 2020 , Kubernetes ra thông báo là docker sẽ được loại bỏ trên những bản kubernetes tiếp theo.  Từ bản Kubernetes 1.22 thì docker sẽ không được hỗ trợ trên bộ Kubernetes.  Như hình vẽ thì các node sẽ giao tiếp với Control Plane, và trên mỗi node, kubelet sẽ lấy thông tin node và thực thi CRI để tạo/xoá container chạy trên node mà kubenet đang quản lý.  Trong một bộ Kubernetes cluster thì docker chỉ đóng vai trò là CRI cho kubernetes Cluster.  Vậy CRI là gì ? CRI là viết tắt bởi Container Runtime Interface, là phần mềm đảm nhiệm cho container chạy.  Trong Kubernetes kubelets thì docker làm chức năng CRI dưới hình thái là một module gọi lại dockershim, vậy thực chất thì module dockershim bị loại bỏ khỏi Kubernetes ở các phiên bản tiếp theo.  Lý do :  Theo như Kubernetes đưa ra thì docker chỉ có chức năng CRI trong cluster nhưng nó vẫn có những thành phần không cần thiết được cài đặt trên cluster, làm cho cluster hoạt động nặng hơn,  [hinh h5] Theo như hình trên thì

Các thành phần Kubernetes.

Khi bạn triển khai Kubernetes, Kubernetes cluster được hình thành.  Một Kubernetes cluster chứa một bộ các worker còn gọi là node. Bên trong những node này chạy các container, mỗi cluster có ít nhất một worker node.  Những worker node chứa các ***POD, những POD này là những thành phần ứng dụng workload.  Control plane quản lý các worker node và các POD trong một cluster.  Trên môi trường sản phẩm, Control Plane thường chạy nhiều tính toán và nhiều nodes , nó có khả năng fault-tolerance* và high-availability**.  Đây là các components trong một Kubernetes Cluster.  1. Các thành phần Control Plane:   Các thành phần Control plane nó quyết định toàn cục của một cluster, cũng như phát hiện và phản hồi một sự kiện trong cluster.  Các thành phần control plane có thể chạy bất kỳ trên máy nào trong cluster, Tuy nhiên để đơn giản, ta set up một đoạn code để start tất cả các thành phần control plane trong một một node và không chạy những ứng dụng dành cho người dùng trên node này.  + kube-apiserve

Stateful Sets trong kubernetes.

 Khi set up một hệ thống kubernetes, có cả database trong đó thì phần tạo database master - slave trong kubernetes là phần tương đối khó nhằn,  Ví dụ trong bài viết này ta sẽ tạo một pod master và 2 pods slave , Pod master cho phép đọc và ghi dữ liệu, trong khi các pods slave còn lại chỉ cho phép đọc. Trước tiên ta sẽ set up pod master trước và sau đó là các slave.  Các bước set up các pod master và slave như hình.  Lúc này ta khai báo biến MASTER_HOST trỏ đến mysql-master để dữ liệu cần replicate từ master đã chỉ định  Trong headless service cần khai báo metadata name là:  name : mysql-h clusterIP : None   Và trong pod-definition.yml thì cần khai báo : subdomain : mysql-h hostname : mysql-pod Copy metadata và spec vào phần template của Deployment và đổi Deployment thành StatefulSet  Lúc này DNS trong kubernetes sẽ là : mysql-pod.mysql-h.default.svc.cluster.local  Nó sẽ bị duplicate DNS như trên.  Stateful Sets trong kubernetes là khi bạn tạo các pod StatefulSet thì pod được tạo đầu t

NodePort , Load Balancer và Ingess trong kubernetes.

Khái niệm NodePort , Load balancer và Ingress hay làm chúng ta lẫn lộn. Để làm rõ vấn đề này bạn cần vững và hiểu các khái niệm sau :  NodePort :  NodePort là dịch vụ cơ bản nhất của Kubernetes để traffic bên ngoài đi vào dịch vụ bên trong.  NodePort được định nghĩa trong file YAML như sau:  apiVersion: v1 kind: Service metadata: name: my-nodeport-service spec: selector: app: my-app type: NodePort ports: - name: http port: 80 targetPort: 80 nodePort: 30036 protocol: TCP NodePort hiện tại của service là : 30036 Loadbalancer:   Loadbalancer sẽ cung cấp 1 single IP address để truy cập vào dịch vụ phía trong:  Ingress: Ingress không phải là kiểu dịch vụ như 2 dịch vụ nói trên,  Ingress giống nginx hơn, nó control domain, subdomain và các sub path phía sau domain: Define 1 ingress như sau:  apiVersion: extensions/v1beta1 kind: Ingress metadata: name: my-ingress spec: backend: serviceName: other

Cài đặt kubernetes cluster trên ubuntu.

I. Yêu cầu cầu hình server ubuntu trước khi cài đặt kubernetes. Master : 2 GB RAM 2 Cores of CPU Slave /  Node : 1 GB RAM 1 Core of CPU   I.1 Update repository. apt-get update   I.2 Tắt swap: swapoff -a nano /etc/fstab Coment out, để khi server reboot, swap không được khởi tạo. I.3 Update hostname: nano /etc/hostname   I.4 Update file hosts: nano /etc/hosts  I.5 Cài đặt OpenSSH-server: sudo apt-get install openssh-server  I.6 Cài đặt docker: # sudo su # apt-get update # apt-get install -y docker.io Cài đặt repo cho kubernetes : # apt-get update && apt-get install -y apt-transport-https curl # curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - # cat <<EOF >/etc/apt/sources.list.d/kubernetes.list deb http://apt.kubernetes.io/ kubernetes-xenial main EOF # apt-get update  I.7 : Cài đặt kubeadm, Kubelet And Kubectl   # apt-get install -y kubelet kubeadm kubectl Updat