diff --git a/Practice-2/PhungHoangLong/README.md b/Practice-2/PhungHoangLong/README.md new file mode 100644 index 00000000..d7b1d477 --- /dev/null +++ b/Practice-2/PhungHoangLong/README.md @@ -0,0 +1,397 @@ +# PRACTICE-2 PRACTICES DOCUMENTATION +# DEPLOY PROJECT PHP WITH ANSIBLE + +--- + +## **Author:** *Phung Hoang Long* +**Date of issue**: *May 26th 2022* + +--- + +# OVERVIEW + +## 1. Need to know: + +### LAMP Stack comprises the following open-source software applications. +- Linux – This is the operating system hosting the Applications. +- Apache – Apache HTTP is a free and open-source cross-platform web server. +- MySQL/MariaDB – Open Source relational database management system. +- PHP – Programming/Scripting Language used for developing Web applications. + +### Ansible is an open-source software provisioning, configuration management, and application-deployment tool enabling infrastructure as code + +### **Idempotent** The resource models are idempotent meaning change commands are not run unless needed, and Ansible will bring the system back to a desired state regardless of the actual state – rather than you having to tell it how to get to the state. + +## 2. Prepare +- Ubuntu 20.04 + +- Desktop Hypervisor for running virtual machines (E.g: *Virtual Box, VM Workstation, etc*) + +#### **Note:** +> *Virtual Box Workstation is **recommended** to use.* + +- VM Network (Bridgr Adapter): `192.168.0.109` + +# SETUP + +## 1. Environment Preparations + +In this guide, we shall be making use of Ansible playbooks and roles. These are some of the modules that make Ansible much easy to use. + +- Install Ansible +``` +$ sudo apt update +$ sudo apt install software-properties-common +$ sudo add-apt-repository --yes --update ppa:ansible/ansible +$ sudo apt install ansible +``` + +- Install sshpass +> SSH password-based login. User can specify `ssh` password in inventory file(s). +``` +$ sudo apt-get install -y sshpass +``` + +## 2. Configure Ansible Playbook and Roles. + +### Directory layout + +``` +├── inventory +├── lampstack.yml +├── project.yml +├── roles +│ ├── apache +│ │ ├── files +│ │ │ ├── apache.conf.j2 +│ │ │ └── info.php.j2 +│ │ ├── handlers +│ │ │ └── main.yml +│ │ └── tasks +│ │ └── main.yml +│ ├── mariadb +│ │ └──tasks +│ │ └── main.yml +│ └── project +│ └── tasks +│ └── main.yml +└── vars + └── default.yml +``` + +### Config + +#### ansible.cfg +``` +[defaults] +inventory = /home/hoanglong/ansible/inventory +remote_user = hoanglong +host_key_checking = False + +[privilege_escalation] +become = True +become_method = sudo +become_user = root +become_ask_pass = False + +[ssh_connection] +pipelining=true +``` +**Fields:** + +- host_key_checking +> Prompting for confirmation of the key. (Default: true) +- pipelining +> Speed up Ansible + +#### inventory +``` +[lampstack] +192.168.0.109 + +[all:vars] +ansible_ssh_user = {{ your_user }} +ansible_ssh_pass = {{ your_password }} +ansible_become_pass = {{ your_password }} +``` +**Test ping** +``` +ansible all -m ping +``` + + +#### vars/default.yaml +``` +--- +home_folder: "home/hoanglong" +www_folder: "/var/www" + +mysql_root_password: "12345678" +app_user: "hoanglong" +http_host: "php-webserver" +http_conf: "php-webserver.conf" +http_port: "80" +disable_default: true + +project_index_file: "index.php" +git_repo: "https://github.com/longph2710/deploy-php-project" +``` + +### Apache && Mariadb + +#### Apache role + +**Add the content below in the tasks/main.yaml file to install apache2 and PHP** +``` +--- +- name: Install prerequisites + apt: name={{ item }} update_cache=yes state=latest force_apt_get=yes + loop: [ 'aptitude' ] + +#Apache Configuration +- name: Install Apache and PHP Packages + apt: name={{ item }} update_cache=yes state=latest + loop: [ 'apache2', 'php', 'php-mysql', 'libapache2-mod-php' ] + +- name: Create document root + file: + path: "/var/www/{{ http_host }}" + state: directory + owner: "{{ app_user }}" + mode: '0755' + +- name: Set up Apache virtualhost + template: + src: "files/apache.conf.j2" + dest: "/etc/apache2/sites-available/{{ http_conf }}" + +- name: Enable new site + shell: /usr/sbin/a2ensite {{ http_conf }} + +- name: Disable default Apache site + shell: /usr/sbin/a2dissite 000-default.conf + when: disable_default + notify: Reload Apache +# UFW Configuration +- name: "UFW - Allow HTTP on port {{ http_port }}" + ufw: + rule: allow + port: "{{ http_port }}" + proto: tcp + +# PHP Info Page +- name: Sets Up PHP Info Page + template: + src: "files/info.php.j2" + dest: "/var/www/{{ http_host }}/info.php" + +- name: Reload Apache + service: + name: apache2 + state: reloaded + +- name: Restart Apache + service: + name: apache2 + state: restarted + +- name : Ensure Apache is running + service: + name: apache2 + state: started +``` + +**Add the following content in the handles/main.yaml for the Apache handlers** +``` +--- +- name: Reload Apache + service: + name: apache2 + state: reloaded + +- name: Restart Apache + service: + name: apache2 + state: restarted +``` + +**Create apache.conf.j2 as the VirtualHost file** +``` + + ServerAdmin webmaster@localhost + ServerName {{ http_host }} + ServerAlias www.{{ http_host }} + DocumentRoot /var/www/{{ http_host }} + ErrorLog ${APACHE_LOG_DIR}/error.log + CustomLog ${APACHE_LOG_DIR}/access.log combined + + + Options -Indexes + + + + DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm + + + +``` + +**Create info.php.j2 as PHP test file** +``` + Result: ok=18 changed=5 + + + +> PHP is install successfull + + + +### Deploy Project (project role) + +- Project is pushed to github. +- Using Ansible to clone project and deploy it into VM as a server. + +#### Tasks +**Add the following code to main.yaml** +``` +--- +- name: Install git + apt: + name: git + state: latest + +- name: Create directory for cloning source code + file: + path: /{{ home_folder }}/repo + state: directory + +- name: Checkout project source code + git: + clone: yes + update: yes + repo: "{{ git_repo }}" + dest: /{{ home_folder }}/repo + force: yes + accept_hostkey: yes + +- name: Check if source code is uploaded + shell: test -e /var/www/{{ http_host }}/{{project_index_file}} && echo -n yes || echo -n no + register: uploaded + changed_when: uploaded.stdout == 'exception' + +- name: Copy source code to /var/www/{{ http_host }} + shell: cp -r /{{ home_folder }}/repo/* /var/{{ http_host }} + when: uploaded.stdout == 'no' + +- name: Add name record + lineinfile: + path: /etc/hosts + line: "192.168.0.109 {{ http_host }}" + +- name: Reload Apache + service: + name: apache2 + state: reloaded + +- name: Restart Apache + service: + name: apache2 + state: restarted + +- name : Ensure Apache is running + service: + name: apache2 + state: started +``` + +#### + +**Create project.yaml to run configure lamp** +``` +- name: deploy project + hosts: lampstack + become: yes + become_method: sudo + vars_files: + - vars/default.yaml + roles: + - project +``` +**Run this command** +``` +ansible-playbook -i inventory project.yaml +``` +> Result: ok=9 changed=2 + + + +> Access `192.168.0.109` to view website + + \ No newline at end of file diff --git a/Practice-2/PhungHoangLong/images/lampstack.png b/Practice-2/PhungHoangLong/images/lampstack.png new file mode 100644 index 00000000..0163292e Binary files /dev/null and b/Practice-2/PhungHoangLong/images/lampstack.png differ diff --git a/Practice-2/PhungHoangLong/images/php.png b/Practice-2/PhungHoangLong/images/php.png new file mode 100644 index 00000000..9cb2eb45 Binary files /dev/null and b/Practice-2/PhungHoangLong/images/php.png differ diff --git a/Practice-2/PhungHoangLong/images/piing2.png b/Practice-2/PhungHoangLong/images/piing2.png new file mode 100644 index 00000000..497bd10e Binary files /dev/null and b/Practice-2/PhungHoangLong/images/piing2.png differ diff --git a/Practice-2/PhungHoangLong/images/ping.png b/Practice-2/PhungHoangLong/images/ping.png new file mode 100644 index 00000000..646bc922 Binary files /dev/null and b/Practice-2/PhungHoangLong/images/ping.png differ diff --git a/Practice-2/PhungHoangLong/images/project.png b/Practice-2/PhungHoangLong/images/project.png new file mode 100644 index 00000000..660e9e5b Binary files /dev/null and b/Practice-2/PhungHoangLong/images/project.png differ diff --git a/Practice-2/PhungHoangLong/images/site.png b/Practice-2/PhungHoangLong/images/site.png new file mode 100644 index 00000000..28b880ba Binary files /dev/null and b/Practice-2/PhungHoangLong/images/site.png differ diff --git a/Practice-6/PhungHoangLong/README.md b/Practice-6/PhungHoangLong/README.md new file mode 100644 index 00000000..f06e63e5 --- /dev/null +++ b/Practice-6/PhungHoangLong/README.md @@ -0,0 +1,200 @@ +# FINAL REPORT: Tìm hiểu về cơ chế Autoscaling trong Kubernetes + +--- + +### **Author:** *Phùng Hoàng Long* + +--- + +`Autoscaling` là cách thức tự động tăng/giảm tài nguyên máy tính mà được cấp cho app của chúng ta bất kì thời điểm nào khi cần. Điều này giúp tạo ra những hệ thống trên cloud có khả năng mở rộng 24/24 nhằm đáp ứng nhu cầu sử dụng. + +Autoscaling trong Kubernetes có 3 khả năng: + +- `Horizontal Pod Autoscaler`: điều chỉnh số lượng replicas của ứng dụng +- `Cluster Autoscaler`: điều chỉnh số lượng Nodes và cluster +- `Vertical Pod Autoscaler`: điều chỉnh giới hạn tài nguyên của container + +Trong đó, HPA và CPA là điều chỉnh ở `Pod level` tức là việc scale chỉ ảnh hưởng đến pod. + +Còn Cluster Autoscaler sẽ thực hiện scale ở mức `Cluster level` + +# I. kiến trúc của Kubernetes + +Trước hết cùng tìm hiểu qua về cấu trúc của Kubernetes nhé. + + + +Trong `Kubernetes` cơ bản sẽ chứa các thành phần: +- `Pods`: là một tập hợp các `Containers` đang chạy, đây là đơn vị sẽ yêu cầu được phân các tài nguyên của máy tính như CPU, RAM hay bộ nhớ. +- `Nodes`: là khái niệm dùng để chỉ các máy công nhân dùng để chạy các Container trong Kubernetes. +- `Control plane`: đây là nơi đầu não của `Kubernetes cluster`, nó sẽ là nơi đưa ra quyết định để quản lý vòng đời của các Containers. +- `Cluster`: Một `cluster` bao gồm `Control plane` và một hay nhiều `Nodes`. + +Đó là các thành phần cơ bản liên quan đến `Autoscaling`, ngoài ra bạn có thể tìm hiểu thêm tại Đây nhé. + +# II. Horizontal Pod Autoscale (HPA) + +Trong Kubernetes, HPA sẽ tự động cập nhập tài nguyên của workload để phù hợp với nhu cầu. + +`Horizontal scaling` nghĩa là chúng ta phải triển khai nhiều pods hơn để phản ứng với việc tăng tải.Nếu như lượng tải giảm và số lượng Pods nhiều hơn số lượng tối thiểu thì HPA sẽ thực hiện scale down. + +HPA được triển khai như một Kubernetes API resource và một controller. HPA controller chạy trong `control plane` sẽ định kỳ điều chỉnh tài nguyên của pods để phù hợp với những thông số thu thập được của CPU, RAM, bộ nhớ hay bất kỳ metric tùy chọn nào được cài đặt. + +## Cách thức hoạt động + +### 1. Thu thập Metrics + +HPA sẽ thực hiện tăng số lượng Pods trong workload của bạn dựa vào một hay nhiều loại metrics sau: +- Tài nguyên sử dụng thực tế: khi thông số CPU, RAM, bộ nhớ của Pod vượt qua một ngưỡng. +- Số liệu tùy chỉnh: dựa vào bất kỳ metric nào được báo cáo bởi Kubernetes. Điều này hay được áp dụng trong trường hợp ngăn chặn sự kiện nghẽn cổ chai của network. +- Số liệu bên ngoài: dựa vào các metric được cung cấp bới các ứng dụng hay dịch vụ từ bên thứ 3 cho cluster của bạn. + +Tất cả những metrics này sẽ được tổng hợp về một `Metrics server`. + + + +Bạn có thể hình dung các bước thu thập metric như sau: +- Các metrics được thu thập bởi các exporter +- Các metrics này được đẩy đến `kubelet` +- `Metrics Server` thu thập metrics thông qua `kubelet` +- Metrics được đẩy đến API server, HPA sẽ gọi API này để lấy các metrics, tính toán để scale pods + +### 2. Chu trình scale + + + +Một chu trình hoàn chỉnh để scale được thực hiện như sau: +- [1] Metrics server tổng hợp các thông số từ các pods hiện tại +- [2] Sau mỗi khoảng thời gian nhất định HPA sẽ check các thông số một lần, nếu giá trị rơi vào khoảng thiết lập trong HPA thì nó sẽ tiến hành tăng/ giảm số lượng pods +- [3] Trong trường hợp scale-up, `Kubernetes scheduler` sẽ tạo một pods vào node mà có đủ tài nguyên mà pod yêu cầu +- [4] Nếu không đủ tài nguyên, Cluster auto-scaler sẽ tăng số node lên để đáp ứng với lượng pod mà đang được dự định tạo mới +- [5] Trong trường hợp scale-down, HPA sẽ giảm số lượng pod +- [6] Cluster scaler nếu thấy các node đang "rảnh", và pods của 1 node X nào đó có thể chuyển sang một node khác để tận dụng tài nguyên thì pod sẽ chuyển sang, và node X đó sẽ được xóa (scale-down) đi. + +Chúng ta có thể nhận thấy, việc scale-up cũng không chỉ làm tăng số lượng pods mà trong trường hợp nhất định khi các node hiện tại không còn đủ tài nguyên đế scale up nữa thì node mới sẽ được tạo để sử dụng. Việc tạo node mới này do `Cluster Autoscaler` đảm nhận. + +### 3. Thuật toán + +Câu hỏi của chúng ta ở đây là HPA đã tính toán tài nguyên để thực hiện scale như thế nào? + +Để scale một pod thì đầu tiên HPA sẽ dựa vào cấu hình tài nguyên của pod đó. Mỗi một pod sẽ được cấu hình để duy trì lượng tài nguyên mong muốn. + +Để scale phù hợp với tình hình hiện tại thì tất nhiên thông số tài nguyên yêu cầu trên các pods hiện tại là rất quan trọng. Công thức để tính số lượng pod cần thiết như sau: + +``` +Số_Pods_cần_thiết = ceil(Số_pods_hiện_tại * (Thông_số_hiện_tại / Thông_số_mong_muốn)) +``` + +Ví dụ: khi bạn đang sử dụng 2 Pods, bạn muốn duy trì RAM 500MB/Pod nhưng yêu cầu hiện tại là 1300MB, vậy thì: +``` +Số_Pods_cần_thiết = ceil(2 * (1300 / 500)) = 6 +``` +Sau đó HPA sẽ thực hiện scale lên thành 6 Pods cho bạn. + +Đó là ví dụ cho việc scale theo cấu hình chỉ có một metric. Việc cấu hình theo nhiều metrics cũng không phức tạp hơn là bao, HPA sẽ tính toán theo nhiều metrics và lấy ra số pods lớn nhất tính toán được. + +Trước khi có quyết định về giá trị cuối cùng, control plane cũng sẽ xem sét xem có metrics nào bị mất hay không và bao nhiêu Pods đã sẵn sàng. Toàn bộ những Pods đang trong quá trình bị tắt hoặc loại bỏ sẽ bị loại trừ. + +Nếu một Pod bị mất metrics, nó sẽ được xem xét sau. Chúng sẽ được dùng để quyết định lượng điều chỉnh cuối cùng. + +Khi scale CPU, nếu Pod chưa sẵn sàng do vẫn đang được khởi tạo hoặc unhealthy cũng sẽ được xem xét sau. + +Do hạn chế kỹ thuật, HPA không thể xác định chính xác pod đã sẵn sàng hay chưa khi nó mới được mở. Thay vào đó, HPA sẽ xét Pod là chưa sẵn sàng trong một khoảng thời gian ngắn sau khi Pod được mở. trạng thái chưa sẵn sàng này được biểu diễn bằng một cờ và mặc định tồn tại trong khoảng 30s. + +# III. Cluster Autoscaler (CA) + +Cluster Autoscaler tự động thêm hoặc loại bỏ các nút trong một cụm dựa trên các yêu cầu tài nguyên từ các pod. Cluster Autoscaler không trực tiếp đo lường các giá trị sử dụng CPU và bộ nhớ để đưa ra quyết định scale up. Thay vào đó, nó kiểm tra cứ sau 10 giây để phát hiện bất kỳ Pod nào ở trạng thái đang chờ xử lý, cho thấy bộ lập lịch không thể gán chúng cho một nút do không đủ dung lượng cụm. + +## Cách thức hoạt động + + + +Trong kịch bản scale up, CA tự động khởi động khi số lượng Pod đang chờ xử lý (không thể lên lịch) tăng lên do thiếu tài nguyên và hoạt động để thêm các nút bổ sung vào cụm. + +- [1] Đầu tiên, có một số pods đang trong trạng thái pending và gửi yêu cầu đến CA. +- [2] CA nhận yêu cầu tăng Nodes và tiến hành triển khai node mới. +- [3] Node mới được tạo ra +- [4] Cuối cùng Kubernetes scheduler sẽ xếp các pod đang pending vào node mới. + +# IV. Veticalal Pod Autoscale (VPA) + +Khác với HPA, VPA không scale số lượng pods hoạt động mà tăng chính tài nguyên sử dụng của pod đó. + +Với VPA, có 2 loại resource configuration mà ta có thể quản lý trên từng container của pods: request, limit. + +`request` định nghĩa lượng tài nguyên nhỏ nhất mà container cần sử dụng. Ví dụ như chúng ta cần ít nhất 256MB bộ nhớ để chạy thì Kubernetes sẽ cung cấp tối thiểu là 256MB cho chúng ta. + +`limit` định nghĩa lượng tài nguyên tối đa mà container có thể được cấp. Ví dụ như chúng ta cần ít nhất 256MB bộ nhớ để chạy nhưng bạn không muốn container sử dụng quá 512Mb bộ nhớ thì Kubernetes sẽ cung cấp tối đa 512Mb bộ nhớ cho container. + +## VPA vs HPA + +VPA và HPA khác nhau ở cách mà chúng thực hiện scale. + + + + + + + + + + + + + + + + + + + + + +
Yêu cầuHPAVPA
Tăng tài nguyênTăng số lượng podsTăng cấu hình tài nguyên của pods
Giảm tài nguyênGiảm số lượng podsGiảm cấu hình tài nguyên của pods
+ +## Thành phần của VPA +VPA sẽ có 3 thành phần sau: +- VPA Recommender: component này sẽ monitor các tài nguyên đã tiêu thụ trước đó tài nguyên hiện tại để cung cấp giá trị cpu và memory requests gợi ý. +- VPA Updater: component này sẽ kiểm tra Pod được quản lý bởi scalable resource có cpu và memory đúng với giá trị của Recommender cung cấp ở trên hay không, nếu không, nó sẽ kill Pod đó và tạo lại Pod mới với cpu và memory requests đã được cập nhật đúng theo Recommender. +- VPA Admission Controller: thực hiện thay đổi cấu hình của pod trong quá trình pod được khởi tạo. + +## Lợi ích +VPA cung cấp những lợi ích sau: +- Thiết lập được giới hạn tài nguyên phù hợp cho khối lượng công việc của bạn, cải thiện sự ổn định và hiệu quả chi phí. +- Các Nodes được sử dụng hiệu quả vì các pod sử dụng chính xác những gì chúng cần. +- Pods được lập lịch trên những node mà có đủ tài nguyên sử dụng. +- Bạn không phải chạy những tác vụ benchmarking tốn thời gian đề xác định giá trị chính xác cho yêu cầu CPU và bộ nhớ. +- Giảm thời gian bảo trì do autoscaler có thể điều chỉnh CPU và RAM tự động theo thời gian mà bạn không cần can thiệp. + +## Cách thức hoạt động + +Tổng quan về hoạt động của VPA được biểu diễn như sau: + + + +- [1] Người dùng cấu hình cho VPA. +- [2] VPA Recommender đọc cấu hình VPA và các metrics từ Metrics server. +- [3] VPA Recommender cung cấp cấu hình gợi ý cho pod. +- [4] VPA Updater đọc cấu hình gợi ý +- [5] VPA Updater kết thúc pod +- [6] Khi Deployment nhận ra pod đã bị kết thúc, nó sẽ tái khởi tạo pod để phù hợp với cấu hình replica +- [7] Khi pod đang trong quá trình khởi tạo, VPA Admission Controller sẽ lấy cấu hình được gợi ý bởi VPA Recommender. Vì Kubernetes không hỗ trợ tự động thay đổi giới hạn tài nguyên của pod đang chạy, VPA không thể cập nhật các pod hiện có với các cấu hình mới. Nó chấm dứt các pod đang sử dụng các cấu hình cũ. Khi bộ điều khiển của pod yêu cầu thay thế từ dịch vụ API Kubernetes, VPA Admission Controller sẽ đưa yêu cầu tài nguyên cập nhật và giới hạn giá trị vào đặc điểm kỹ thuật của pod mới. +- [8] Cuối cùng, VPA Admission Controller thực hiện thêm tài nguyên cho pod. + +VPA sử dụng 3 chế độ: +- `updateMode=auto`: Áp dụng trực tiếp gợi ý bằng cách cập nhập hoặc tái tại pods. +- `updateMode=off`: Lưu trữ các gợi ý để tham khảo. +- `updateMode=initial`: Áp dụng gợi ý cho những pods được tạo mới. + +## Hạn chế của VPA + +VPA có thể hữu ích với nhiều ứng dụng, tuy nhiên có một vài lưu ý cần để ý: +- Không sử dụng VPA cùng với HPA khi cùng sử dụng chung nguồn metrics. Đó là vì khi tài nguyên sử dụng đến một ngưỡng nhất định thì HPA và VPA sẽ cùng xảy ra, điều này sẽ dẫn đến nhiều kết quả không mong muốn và dẫn đến các vấn đề. +- VPA có thể đề xuất nhiều tài nguyên hơn có sẵn trong cluster, do đó khiến pod không được gán cho một nút (do không đủ tài nguyên) và do đó không bao giờ chạy. Để khắc phục hạn chế này, bạn nên đặt LimitRange ở mức tối đa có sẵn. Điều này sẽ đảm bảo rằng các Pod không yêu cầu nhiều tài nguyên hơn LimitRange định nghĩa. + + +# REFERENCES + +- https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/ +- https://www.kubecost.com/kubernetes-autoscaling +- https://cloud.google.com/kubernetes-engine/docs/concepts/verticalpodautoscaler \ No newline at end of file diff --git a/Practice-6/PhungHoangLong/images/HPA-VPA.svg b/Practice-6/PhungHoangLong/images/HPA-VPA.svg new file mode 100644 index 00000000..2f1c9e4c --- /dev/null +++ b/Practice-6/PhungHoangLong/images/HPA-VPA.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Practice-6/PhungHoangLong/images/VPA.svg b/Practice-6/PhungHoangLong/images/VPA.svg new file mode 100644 index 00000000..a68830d9 --- /dev/null +++ b/Practice-6/PhungHoangLong/images/VPA.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Practice-6/PhungHoangLong/images/autoscale-group.png b/Practice-6/PhungHoangLong/images/autoscale-group.png new file mode 100644 index 00000000..c7374fb7 Binary files /dev/null and b/Practice-6/PhungHoangLong/images/autoscale-group.png differ diff --git a/Practice-6/PhungHoangLong/images/cluster-architecture-1.png b/Practice-6/PhungHoangLong/images/cluster-architecture-1.png new file mode 100644 index 00000000..e1793c85 Binary files /dev/null and b/Practice-6/PhungHoangLong/images/cluster-architecture-1.png differ diff --git a/Practice-6/PhungHoangLong/images/cluster-architecture-2.svg b/Practice-6/PhungHoangLong/images/cluster-architecture-2.svg new file mode 100644 index 00000000..5e7289cb --- /dev/null +++ b/Practice-6/PhungHoangLong/images/cluster-architecture-2.svg @@ -0,0 +1,412 @@ + + + Kubernetes components + + + + image/svg+xml + + Kubernetes components + + + Cloud Native Computing Foundation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + k-proxy + + + + + + + + + + kubelet + + + + + + + + + + + + sched + + + + + + + + + + sched + + + + + + + + + + sched + + + + + Control Plane + Node + + + + + + + + etcd + + + + + Kubernetes cluster + + + + + + + + api + + + + + + + + + + api + + + + + + + + + + api + + + + + + + + + + + + + c-c-m + + + + + + + + + + c-c-m + + + + + + + + + + c-c-m + + + + + + + + + + + + + c-m + + + + + + + + + + c-m + + + + + + + + + + c-m + + + + + Node + Node + + + + + + + + + + + + + + + + + + + + k-proxy + + + + + + + + + + kubelet + + + + + + + + + + kubelet + + + + + + + + + + k-proxy + + + + + + + + + + + + + + + + + + + + Control plane + Scheduler + + + + + + + + sched + + + + + Cloud controllermanager(optional) + + + + + + + + c-c-m + + + + + Controllermanager + + + + + + + + c-m + + + + + kubelet + + + + + + + + kubelet + + + + + kube-proxy + + + + + + + + k-proxy + + + + + + (persistence store) + etcd + + + + + + + + + etcd + + + + + + Node + + API server + + + + + + + + api + + + + + + + diff --git a/Practice-6/PhungHoangLong/images/metrics-server.png b/Practice-6/PhungHoangLong/images/metrics-server.png new file mode 100644 index 00000000..3e5f8b0a Binary files /dev/null and b/Practice-6/PhungHoangLong/images/metrics-server.png differ diff --git a/Practice-6/PhungHoangLong/images/scale-node.png b/Practice-6/PhungHoangLong/images/scale-node.png new file mode 100644 index 00000000..10cfb7e2 Binary files /dev/null and b/Practice-6/PhungHoangLong/images/scale-node.png differ diff --git a/Practice-6/PhungHoangLong/images/vpa-allocate-resources.png b/Practice-6/PhungHoangLong/images/vpa-allocate-resources.png new file mode 100644 index 00000000..5a4e100e Binary files /dev/null and b/Practice-6/PhungHoangLong/images/vpa-allocate-resources.png differ