Thứ tư, 24/04/2019 | 00:00 GMT+7

Cách tạo một cụm Kubernetes bằng Kubeadm trên Ubuntu 16.04

Kubernetes là một hệ thống điều phối containers quản lý các containers trên quy mô lớn. Được Google phát triển ban đầu dựa trên kinh nghiệm chạy các containers trong quá trình production , Kubernetes là open-souce và được phát triển tích cực bởi cộng đồng trên khắp thế giới.

Lưu ý: Hướng dẫn này sử dụng version 1.14 của Kubernetes, version được hỗ trợ chính thức tại thời điểm xuất bản bài viết này. Để biết thông tin cập nhật về version mới nhất, vui lòng xem ghi chú phát hành hiện tại trong tài liệu Kubernetes chính thức.

Kubeadm tự động hóa cài đặt và cấu hình các thành phần Kubernetes như server API, Trình quản lý bộ điều khiển và Kube DNS. Tuy nhiên, nó không tạo user hoặc xử lý việc cài đặt các phụ thuộc cấp hệ điều hành và cấu hình của chúng. Đối với những tác vụ sơ bộ này, có thể sử dụng công cụ quản lý cấu hình như Ansible hoặc SaltStack . Việc sử dụng các công cụ này làm cho việc tạo các cụm bổ sung hoặc tạo lại các cụm hiện có đơn giản hơn nhiều và ít bị lỗi hơn.

Trong hướng dẫn này, bạn sẽ cài đặt một cụm Kubernetes từ đầu bằng Ansible và Kubeadm, sau đó triển khai một ứng dụng Nginx được chứa trong đó.

Bàn thắng

Cụm của bạn sẽ bao gồm các tài nguyên vật lý sau:

  • Một nút chính

Nút chính (một nút trong Kubernetes dùng để chỉ một server ) chịu trách nhiệm quản lý trạng thái của cụm. Nó chạy Etcd , nơi lưu trữ dữ liệu cụm giữa các thành phần lên lịch dung lượng công việc cho các node công nhân.

  • Hai nút công nhân

Các node công nhân là các server nơi dung lượng công việc của bạn (tức là các ứng dụng và dịch vụ được chứa trong containers ) sẽ chạy. Một nhân viên sẽ tiếp tục chạy dung lượng công việc của bạn sau khi họ được giao cho công việc đó, ngay cả khi nhân viên chính ngừng hoạt động sau khi lập lịch hoàn tất. Công suất của một cụm có thể được tăng lên bằng cách thêm công nhân.

Sau khi hoàn thành hướng dẫn này, bạn sẽ có một cụm sẵn sàng để chạy các ứng dụng được chứa trong containers , miễn là các server trong cụm có đủ tài nguyên CPU và RAM để các ứng dụng của bạn sử dụng. Hầu hết mọi ứng dụng Unix truyền thống bao gồm các ứng dụng web, database , daemon và các công cụ dòng lệnh đều có thể được chứa và chạy trên cụm. Bản thân cụm sẽ tiêu thụ khoảng 300-500MB bộ nhớ và 10% CPU trên mỗi nút.

Khi cụm được cài đặt , bạn sẽ triển khai web server Nginx cho nó đảm bảo rằng nó đang chạy dung lượng công việc một cách chính xác.

Yêu cầu

Bước 1 - Cài đặt Thư mục không gian làm việc và Tệp kiểm kê Ansible

Trong phần này, bạn sẽ tạo một folder trên máy local sẽ dùng làm không gian làm việc của bạn. Bạn cũng sẽ cấu hình local Ansible để nó có thể giao tiếp và thực thi các lệnh trên server từ xa của bạn. Để thực hiện việc này, bạn sẽ tạo một file hosts chứa thông tin về khoảng không quảng cáo như địa chỉ IP của server của bạn và các group mà mỗi server thuộc về.

Trong số ba server của bạn, một server sẽ là server có IP được hiển thị là master_ip . Hai server còn lại sẽ là worker_1_ip và sẽ có IP worker_1_ipworker_2_ip .

Tạo một folder có tên ~/kube-cluster trong folder chính của máy local của bạn và cd vào đó:

  • mkdir ~/kube-cluster
  • cd ~/kube-cluster

Thư mục này sẽ là không gian làm việc của bạn cho phần còn lại của hướng dẫn và sẽ chứa tất cả các vở kịch Ansible của bạn. Nó cũng sẽ là folder bên trong mà bạn sẽ chạy tất cả các lệnh local .

Tạo file có tên ~/kube-cluster/hosts bằng nano hoặc editor yêu thích của bạn:

  • nano ~/kube-cluster/hosts

Thêm văn bản sau vào file , văn bản này sẽ chỉ định thông tin về cấu trúc lôgic của cụm của bạn:

~ / kube-cluster / hosts
[masters] master ansible_host=master_ip ansible_user=root  [workers] worker1 ansible_host=worker_1_ip ansible_user=root worker2 ansible_host=worker_2_ip ansible_user=root  [all:vars] ansible_python_interpreter=/usr/bin/python3 

Bạn có thể nhớ lại rằng các file khoảng không quảng cáo trong Ansible được sử dụng để chỉ định thông tin server như địa chỉ IP, user từ xa và group server để nhắm đến như một đơn vị duy nhất để thực hiện các lệnh. ~/kube-cluster/hosts sẽ là file hàng tồn kho của bạn và bạn đã thêm hai group Ansible ( bậc thầy và group thợ ) vào nó để chỉ định cấu trúc logic của cụm của bạn.

Trong group thạc sĩ, có một mục server có tên là “bậc thầy” mà liệt kê các node chính của IP ( master_ip ) và quy định cụ thể rằng Ansible nên chạy lệnh từ xa như là user root.

Tương tự như vậy, trong group công nhân, có hai mục cho các server công nhân ( worker_1_ipworker_2_ip ) mà cũng xác định ansible_user như root.

Dòng cuối cùng của file yêu cầu Ansible sử dụng trình thông dịch Python 3 của server từ xa cho các hoạt động quản lý của nó.

Lưu file sau khi bạn đã thêm văn bản.

Sau khi cài đặt khoảng không quảng cáo server với các group , hãy chuyển sang cài đặt phụ thuộc cấp hệ điều hành và tạo cài đặt cấu hình.

Bước 2 - Tạo user không phải root trên tất cả server từ xa

Trong phần này, bạn sẽ tạo một user không phải root với các quyền sudo trên tất cả các server để bạn có thể SSH vào chúng theo cách thủ công với quyền là một user không có quyền . Điều này có thể hữu ích nếu, ví dụ, bạn muốn xem thông tin hệ thống bằng các lệnh như top/htop , xem danh sách các containers đang chạy hoặc thay đổi các file cấu hình do root sở hữu. Các hoạt động này được thực hiện thường xuyên trong quá trình bảo trì một cụm và việc sử dụng user không phải root cho các việc như vậy sẽ giảm thiểu rủi ro sửa đổi hoặc xóa các file quan trọng hoặc vô tình thực hiện các hoạt động nguy hiểm khác.

Tạo file có tên ~/kube-cluster/initial.yml trong không gian làm việc:

  • nano ~/kube-cluster/initial.yml

Tiếp theo, thêm lần chơi sau vào file để tạo user không phải root có quyền sudo trên tất cả các server . Một vở kịch trong Ansible là một tập hợp các bước được thực hiện nhằm vào các server và group cụ thể. Lần chơi sau sẽ tạo một user sudo không phải root:

~ / kube-cluster / initial.yml
- hosts: all   become: yes   tasks:     - name: create the 'ubuntu' user       user: name=ubuntu append=yes state=present createhome=yes shell=/bin/bash      - name: allow 'ubuntu' to have passwordless sudo       lineinfile:         dest: /etc/sudoers         line: 'ubuntu ALL=(ALL) NOPASSWD: ALL'         validate: 'visudo -cf %s'      - name: set up authorized keys for the ubuntu user       authorized_key: user=ubuntu key="{{item}}"       with_file:         - ~/.ssh/id_rsa.pub 

Dưới đây là phân tích về những gì mà sách vở này thực hiện:

  • Tạo ubuntu user không phải root.

  • Cấu hình file sudoers để cho phép user ubuntu chạy các lệnh sudo mà không có dấu nhắc password .

  • Thêm public key trong máy local của bạn (thường là ~/.ssh/id_rsa.pub ) vào danh sách khóa được ủy quyền của user ubuntu từ xa. Điều này sẽ cho phép bạn SSH vào từng server với quyền là user ubuntu .

Lưu file sau khi bạn đã thêm văn bản.

Tiếp theo, thực thi playbook bằng cách chạy local :

  • ansible-playbook -i hosts ~/kube-cluster/initial.yml

Lệnh sẽ hoàn thành trong vòng hai đến năm phút. Khi hoàn thành, bạn sẽ thấy kết quả tương tự như sau:

Output
PLAY [all] **** TASK [Gathering Facts] **** ok: [master] ok: [worker1] ok: [worker2] TASK [create the 'ubuntu' user] **** changed: [master] changed: [worker1] changed: [worker2] TASK [allow 'ubuntu' user to have passwordless sudo] **** changed: [master] changed: [worker1] changed: [worker2] TASK [set up authorized keys for the ubuntu user] **** changed: [worker1] => (item=ssh-rsa AAAAB3... changed: [worker2] => (item=ssh-rsa AAAAB3... changed: [master] => (item=ssh-rsa AAAAB3... PLAY RECAP **** master : ok=5 changed=4 unreachable=0 failed=0 worker1 : ok=5 changed=4 unreachable=0 failed=0 worker2 : ok=5 changed=4 unreachable=0 failed=0

Bây giờ cài đặt sơ bộ đã hoàn tất, bạn có thể chuyển sang cài đặt các phần phụ thuộc dành riêng cho Kubernetes.

Bước 3 - Cài đặt Sự phụ thuộc của Kubernetes

Trong phần này, bạn sẽ cài đặt các gói cấp hệ điều hành theo yêu cầu của Kubernetes với trình quản lý gói của Ubuntu. Các gói này là:

  • Docker - thời gian chạy containers . Nó là thành phần chạy các containers của bạn. Hỗ trợ cho runtimes khác như RKT đang được phát triển tích cực trong Kubernetes.

  • kubeadm - một công cụ CLI sẽ cài đặt và cấu hình các thành phần khác nhau của một cụm theo cách tiêu chuẩn.

  • kubelet - một dịch vụ / chương trình hệ thống chạy trên tất cả các node và xử lý các hoạt động ở level độ nút.

  • kubectl - một công cụ CLI được sử dụng để phát lệnh cho cụm thông qua Server API của nó.

Tạo một file có tên ~/kube-cluster/kube-dependencies.yml trong không gian làm việc:

  • nano ~/kube-cluster/kube-dependencies.yml

Thêm các lần phát sau vào file để cài đặt các gói này vào server của bạn:

~ / kube-cluster / kube-dependencies.yml
- hosts: all   become: yes   tasks:    - name: install Docker      apt:        name: docker.io        state: present        update_cache: true     - name: install APT Transport HTTPS      apt:        name: apt-transport-https        state: present     - name: add Kubernetes apt-key      apt_key:        url: https://packages.cloud.google.com/apt/doc/apt-key.gpg        state: present     - name: add Kubernetes' APT repository      apt_repository:       repo: deb http://apt.kubernetes.io/ kubernetes-xenial main       state: present       filename: 'kubernetes'     - name: install kubelet      apt:        name: kubelet=1.14.0-00        state: present        update_cache: true     - name: install kubeadm      apt:        name: kubeadm=1.14.0-00        state: present  - hosts: master   become: yes   tasks:    - name: install kubectl      apt:        name: kubectl=1.14.0-00        state: present        force: yes 

Lần chơi đầu tiên trong playbook thực hiện như sau:

  • Cài đặt Docker, thời gian chạy của containers .

  • Cài đặt apt-transport-https , cho phép bạn thêm các nguồn HTTPS bên ngoài vào danh sách các nguồn APT của bạn .

  • Thêm apt-key của repository Kubernetes APT để xác minh khóa.

  • Thêm repository Kubernetes APT vào danh sách nguồn APT của server từ xa của bạn.

  • Cài đặt kubeletkubeadm .

Lần chơi thứ hai bao gồm một tác vụ duy nhất là cài đặt kubectl trên nút chính của bạn.

Lưu ý: Mặc dù tài liệu Kubernetes khuyến nghị bạn sử dụng version Kubernetes ổn định mới nhất cho môi trường của bạn, nhưng hướng dẫn này sử dụng một version cụ thể. Điều này sẽ đảm bảo bạn có thể làm theo các bước thành công, vì Kubernetes thay đổi nhanh chóng và version mới nhất có thể không hoạt động với hướng dẫn này.

Lưu file khi bạn hoàn tất.

Tiếp theo, thực thi playbook bằng cách chạy local :

  • ansible-playbook -i hosts ~/kube-cluster/kube-dependencies.yml

Khi hoàn thành, bạn sẽ thấy kết quả tương tự như sau:

Output
PLAY [all] **** TASK [Gathering Facts] **** ok: [worker1] ok: [worker2] ok: [master] TASK [install Docker] **** changed: [master] changed: [worker1] changed: [worker2] TASK [install APT Transport HTTPS] ***** ok: [master] ok: [worker1] changed: [worker2] TASK [add Kubernetes apt-key] ***** changed: [master] changed: [worker1] changed: [worker2] TASK [add Kubernetes' APT repository] ***** changed: [master] changed: [worker1] changed: [worker2] TASK [install kubelet] ***** changed: [master] changed: [worker1] changed: [worker2] TASK [install kubeadm] ***** changed: [master] changed: [worker1] changed: [worker2] PLAY [master] ***** TASK [Gathering Facts] ***** ok: [master] TASK [install kubectl] ****** ok: [master] PLAY RECAP **** master : ok=9 changed=5 unreachable=0 failed=0 worker1 : ok=7 changed=5 unreachable=0 failed=0 worker2 : ok=7 changed=5 unreachable=0 failed=0

Sau khi thực thi, Docker, kubeadmkubelet sẽ được cài đặt trên tất cả các server từ xa. kubectl không phải là một thành phần bắt buộc và chỉ cần thiết để thực hiện các lệnh cụm. Chỉ cài đặt nó trên nút chính có ý nghĩa trong bối cảnh này, vì bạn sẽ chỉ chạy các lệnh kubectl từ nút chính. Tuy nhiên, lưu ý các lệnh kubectl có thể được chạy từ bất kỳ nút nào trong số các node công nhân hoặc từ bất kỳ máy nào mà nó có thể được cài đặt và cấu hình để trỏ đến một cụm.

Tất cả các phụ thuộc hệ thống hiện đã được cài đặt. Hãy cài đặt nút chính và khởi tạo cụm.

Bước 4 - Cài đặt nút chính

Trong phần này, bạn sẽ cài đặt nút chính. Tuy nhiên, trước khi tạo bất kỳ playbook nào, bạn nên xem xét một số khái niệm như PodPod Network Plugins , vì cụm của bạn sẽ bao gồm cả hai.

Một group là một đơn vị nguyên tử chạy một hoặc nhiều container . Các containers này dùng chung các tài nguyên như dung lượng file và network interface . Group là đơn vị lập lịch cơ bản trong Kubernetes: tất cả các containers trong group được đảm bảo chạy trên cùng một nút mà group được lập lịch.

Mỗi group có địa chỉ IP riêng và group trên một nút sẽ có thể truy cập group trên nút khác bằng IP của group . Các containers trên một nút có thể giao tiếp dễ dàng thông qua giao diện local . Tuy nhiên, giao tiếp giữa các group phức tạp hơn và yêu cầu một thành phần mạng riêng biệt có thể định tuyến lưu lượng truy cập từ một group trên một nút một cách rõ ràng đến một group trên một nút khác.

Chức năng này được cung cấp bởi các plugin mạng pod. Đối với cụm này, bạn sẽ sử dụng Flannel , một tùy chọn ổn định và hiệu quả.

Tạo một playbook Ansible có tên master.yml trên máy local của bạn:

  • nano ~/kube-cluster/master.yml

Thêm lần chơi sau vào file để khởi tạo cụm và cài đặt Flannel:

~ / kube-cluster / master.yml
- hosts: master   become: yes   tasks:     - name: initialize the cluster       shell: kubeadm init --pod-network-cidr=10.244.0.0/16 >> cluster_initialized.txt       args:         chdir: $HOME         creates: cluster_initialized.txt      - name: create .kube directory       become: yes       become_user: ubuntu       file:         path: $HOME/.kube         state: directory         mode: 0755      - name: copy admin.conf to user's kube config       copy:         src: /etc/kubernetes/admin.conf         dest: /home/ubuntu/.kube/config         remote_src: yes         owner: ubuntu      - name: install Pod network       become: yes       become_user: ubuntu       shell: kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml >> pod_network_setup.txt       args:         chdir: $HOME         creates: pod_network_setup.txt 

Đây là bản phân tích của vở kịch này:

  • Tác vụ đầu tiên khởi tạo cụm bằng cách chạy kubeadm init . Truyền đối số --pod-network-cidr=10.244.0.0/16 chỉ định mạng con riêng mà các IP group sẽ được gán từ đó. Flannel sử dụng mạng con trên theo mặc định; ta đang nói với kubeadm sử dụng cùng một mạng con.

  • Tác vụ thứ hai tạo một folder .kube tại /home/ubuntu . Thư mục này sẽ chứa thông tin cấu hình như các file khóa quản trị, được yêu cầu để kết nối với cụm và địa chỉ API của cụm.

  • Tác vụ thứ ba sao chép file /etc/kubernetes/admin.conf được tạo từ kubeadm init vào folder chính của user không phải root của bạn. Điều này sẽ cho phép bạn sử dụng kubectl để truy cập vào cụm mới được tạo.

  • Tác vụ cuối cùng chạy kubectl apply để cài đặt Flannel . kubectl apply -f descriptor.[yml|json] là cú pháp để yêu cầu kubectl tạo các đối tượng được mô tả trong file descriptor.[yml|json] . Tệp kube-flannel.yml chứa mô tả của các đối tượng cần thiết để cài đặt Flannel trong cụm.

Lưu file khi bạn hoàn tất.

Thực thi playbook local bằng lệnh:

  • ansible-playbook -i hosts ~/kube-cluster/master.yml

Khi hoàn thành, bạn sẽ thấy kết quả tương tự như sau:

Output
PLAY [master] **** TASK [Gathering Facts] **** ok: [master] TASK [initialize the cluster] **** changed: [master] TASK [create .kube directory] **** changed: [master] TASK [copy admin.conf to user's kube config] ***** changed: [master] TASK [install Pod network] ***** changed: [master] PLAY RECAP **** master : ok=5 changed=4 unreachable=0 failed=0

Để kiểm tra trạng thái của nút chính, hãy SSH vào đó bằng lệnh sau:

  • ssh ubuntu@master_ip

Khi bên trong nút chính, hãy thực thi:

  • kubectl get nodes

Đến đây bạn sẽ thấy kết quả sau:

Output
NAME STATUS ROLES AGE VERSION master Ready master 1d v1.14.0

Các trạng thái kết quả rằng master nút đã hoàn thành tất cả các nhiệm vụ khởi tạo và đang trong một Ready nhà nước mà từ đó nó có thể bắt đầu chấp nhận các node công nhân và thực hiện các nhiệm vụ gửi đến Server API. Đến đây bạn có thể thêm công nhân từ máy local của bạn .

Bước 5 - Cài đặt các node công nhân

Việc thêm công nhân vào cụm liên quan đến việc thực hiện một lệnh duy nhất trên mỗi. Lệnh này bao gồm thông tin cụm cần thiết, chẳng hạn như địa chỉ IP và cổng của Server API chính và mã thông báo an toàn. Chỉ các node vượt qua mã thông báo an toàn mới có thể tham gia cụm.

Điều hướng trở lại không gian làm việc của bạn và tạo một playbook có tên là workers.yml :

  • nano ~/kube-cluster/workers.yml

Thêm văn bản sau vào file để thêm công nhân vào cụm:

~ / kube-cluster / worker.yml
- hosts: master   become: yes   gather_facts: false   tasks:     - name: get join command       shell: kubeadm token create --print-join-command       register: join_command_raw      - name: set join command       set_fact:         join_command: "{{ join_command_raw.stdout_lines[0] }}"   - hosts: workers   become: yes   tasks:     - name: join cluster       shell: "{{ hostvars['master'].join_command }} >> node_joined.txt"       args:         chdir: $HOME         creates: node_joined.txt 

Đây là những gì sách vở thực hiện:

  • Lần chơi đầu tiên nhận được lệnh tham gia cần được chạy trên các node công nhân. Lệnh này sẽ có định dạng sau: kubeadm join --token <token> <master-ip>:<master-port> --discovery-token-ca-cert-hash sha256:<hash> . Khi nó nhận được lệnh thực sự với mã thông báo và giá trị băm thích hợp, nhiệm vụ sẽ đặt nó thành dữ kiện để lần chơi tiếp theo sẽ có thể truy cập thông tin đó.

  • Lần chơi thứ hai có một nhiệm vụ duy nhất là chạy lệnh nối trên tất cả các node công nhân. Khi hoàn thành nhiệm vụ này, hai nút công nhân sẽ là một phần của cụm.

Lưu file khi bạn hoàn tất.

Thực thi playbook bằng cách chạy local :

  • ansible-playbook -i hosts ~/kube-cluster/workers.yml

Khi hoàn thành, bạn sẽ thấy kết quả tương tự như sau:

Output
PLAY [master] **** TASK [get join command] **** changed: [master] TASK [set join command] ***** ok: [master] PLAY [workers] ***** TASK [Gathering Facts] ***** ok: [worker1] ok: [worker2] TASK [join cluster] ***** changed: [worker1] changed: [worker2] PLAY RECAP ***** master : ok=2 changed=1 unreachable=0 failed=0 worker1 : ok=2 changed=1 unreachable=0 failed=0 worker2 : ok=2 changed=1 unreachable=0 failed=0

Với việc bổ sung các node công nhân, cụm của bạn hiện đã được cài đặt và hoạt động đầy đủ, với các nhân viên sẵn sàng chạy dung lượng công việc. Trước khi lên lịch ứng dụng, hãy xác minh cụm đang hoạt động như dự kiến.

Bước 6 - Xác minh cụm

Một cụm đôi khi có thể bị lỗi trong quá trình cài đặt vì một nút bị lỗi hoặc kết nối mạng giữa chủ và công nhân không hoạt động chính xác. Hãy xác minh cụm và đảm bảo các node đang hoạt động chính xác.

Bạn cần phải kiểm tra trạng thái hiện tại của cụm từ nút chính đảm bảo rằng các node đã sẵn sàng. Nếu bạn ngắt kết nối khỏi nút chính, bạn có thể SSH trở lại nút đó bằng lệnh sau:

  • ssh ubuntu@master_ip

Sau đó, thực hiện lệnh sau để nhận trạng thái của cụm:

  • kubectl get nodes

Bạn sẽ thấy kết quả tương tự như sau:

Output
NAME STATUS ROLES AGE VERSION master Ready master 1d v1.14.0 worker1 Ready <none> 1d v1.14.0 worker2 Ready <none> 1d v1.14.0

Nếu tất cả các node của bạn có giá trị Ready cho STATUS , điều đó nghĩa là chúng là một phần của cụm và sẵn sàng chạy dung lượng công việc.

Tuy nhiên, nếu một số nút có NotReadySTATUS , điều đó có thể nghĩa là các node công nhân chưa hoàn thành cài đặt của chúng. Chờ khoảng năm đến mười phút trước khi chạy kubectl get node và kiểm tra kết quả mới. Nếu một số nút vẫn có trạng thái NotReady , bạn có thể phải xác minh và chạy lại các lệnh trong các bước trước đó.

Bây giờ cụm của bạn đã được xác minh thành công, hãy lên lịch cho một ứng dụng Nginx mẫu trên cụm.

Bước 7 - Chạy ứng dụng trên cụm

Đến đây bạn có thể triển khai bất kỳ ứng dụng được chứa trong cụm của bạn . Để giữ cho mọi thứ quen thuộc, hãy triển khai Nginx bằng cách sử dụng Triển khaiDịch vụ để xem cách ứng dụng này có thể được triển khai cho cụm. Bạn cũng có thể sử dụng các lệnh bên dưới cho các ứng dụng được chứa trong containers khác, miễn là bạn thay đổi tên Docker image và bất kỳ cờ nào có liên quan (chẳng hạn như portsvolumes ).

Vẫn trong nút chính, hãy thực hiện lệnh sau để tạo triển khai có tên nginx :

  • kubectl create deployment nginx --image=nginx

Việc triển khai là một loại đối tượng Kubernetes đảm bảo luôn có một số lượng group được chỉ định chạy dựa trên một mẫu đã xác định, ngay cả khi group bị lỗi trong thời gian tồn tại của cụm. Việc triển khai ở trên sẽ tạo một group với một containers từ Hình ảnh Nginx Docker của register Docker .

Tiếp theo, chạy lệnh sau để tạo một dịch vụ có tên nginx sẽ hiển thị ứng dụng công khai. Nó sẽ làm như vậy thông qua NodePort , một schemas sẽ làm cho group có thể truy cập thông qua một cổng tùy ý được mở trên mỗi nút của cụm:

  • kubectl expose deploy nginx --port 80 --target-port 80 --type NodePort

Dịch vụ là một loại đối tượng Kubernetes khác để hiển thị các dịch vụ nội bộ của cụm cho khách hàng, cả nội bộ và bên ngoài. Chúng cũng có khả năng cân bằng tải các yêu cầu tới nhiều group và là một thành phần không thể thiếu trong Kubernetes, thường xuyên tương tác với các thành phần khác.

Chạy lệnh sau:

  • kubectl get services

Điều này sẽ xuất ra văn bản tương tự như sau:

Output
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 1d nginx NodePort 10.109.228.209 <none> 80:nginx_port/TCP 40m

Từ dòng thứ ba của kết quả ở trên, bạn có thể truy xuất cổng mà Nginx đang chạy. Kubernetes sẽ tự động chỉ định một cổng ngẫu nhiên lớn hơn 30000 , đồng thời đảm bảo cổng đó chưa bị ràng buộc bởi một dịch vụ khác.

Để kiểm tra xem mọi thứ đang hoạt động, hãy truy cập http:// worker_1_ip : nginx_port hoặc http:// worker_2_ip : nginx_port thông qua trình duyệt trên máy local của bạn. Bạn sẽ thấy trang chào mừng quen thuộc của Nginx.

Nếu bạn muốn xóa ứng dụng Nginx, trước tiên hãy xóa dịch vụ nginx khỏi nút chính:

  • kubectl delete service nginx

Chạy các bước sau đảm bảo rằng dịch vụ đã bị xóa:

  • kubectl get services

Bạn sẽ thấy kết quả sau:

Output
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 1d

Sau đó xóa triển khai:

  • kubectl delete deployment nginx

Chạy phần sau để xác nhận điều này đã hoạt động:

  • kubectl get deployments
Output
No resources found.

Kết luận

Trong hướng dẫn này, bạn đã cài đặt thành công cụm Kubernetes trên Ubuntu 16.04 bằng Kubeadm và Ansible để tự động hóa.

Nếu bạn đang tự hỏi phải làm gì với cụm bây giờ khi nó được cài đặt , bước tiếp theo tốt là bạn sẽ cảm thấy thoải mái khi triển khai các ứng dụng và dịch vụ của riêng mình vào cụm. Dưới đây là danh sách các liên kết có thêm thông tin có thể hướng dẫn bạn trong quá trình này:

  • Dockerizing ứng dụng - liệt kê các ví dụ nêu chi tiết cách chứa các ứng dụng bằng Docker.

  • Tổng quan về Pod - mô tả chi tiết cách Pod hoạt động và mối quan hệ của chúng với các đối tượng Kubernetes khác. Pod phổ biến ở Kubernetes, vì vậy hiểu chúng sẽ tạo điều kiện thuận lợi cho công việc của bạn.

  • Tổng quan về Triển khai - phần này cung cấp tổng quan về các triển khai. Sẽ rất hữu ích khi hiểu cách các bộ điều khiển như triển khai hoạt động vì chúng được sử dụng thường xuyên trong các ứng dụng không trạng thái để mở rộng quy mô và tự động sửa chữa các ứng dụng không lành mạnh.

  • Tổng quan về Dịch vụ - phần này bao gồm các dịch vụ, một đối tượng thường được sử dụng khác trong các cụm Kubernetes. Hiểu các loại dịch vụ và các tùy chọn chúng có là điều cần thiết để chạy cả ứng dụng không trạng thái và trạng thái.

Các khái niệm quan trọng khác mà bạn có thể xem xét là Volumes , IngressesSecrets , tất cả đều có ích khi triển khai các ứng dụng production .

Kubernetes có rất nhiều chức năng và tính năng để cung cấp. Tài liệu Chính thức của Kubernetes là nơi tốt nhất để tìm hiểu về các khái niệm, tìm các hướng dẫn cụ thể cho nhiệm vụ và tra cứu các tham chiếu API cho các đối tượng khác nhau.


Tags:

Các tin liên quan

Cách tạo một cụm Kubernetes bằng Kubeadm trên Ubuntu 18.04
2019-04-24
Cách tạo một cụm Kubernetes bằng Kubeadm trên Ubuntu 18.04
2019-04-24
Cách tạo một cụm Kubernetes bằng Kubeadm trên Ubuntu 16.04
2019-04-24
Cách cài đặt và cấu hình Zabbix để giám sát an toàn server từ xa trên Ubuntu 18.04
2019-04-18
Cách cài đặt Anaconda trên Ubuntu 18.04 [Quickstart]
2019-04-18
Cách cài đặt Go và thiết lập môi trường lập trình cục bộ trên Ubuntu 18.04
2019-04-09
Cách backup thư mục lớn với Unison trên Ubuntu 16.04
2019-04-08
Cách cài đặt và sử dụng TensorFlow trên Ubuntu 18.04
2019-03-20
Cách thu thập số liệu cơ sở hạ tầng với Metricbeat trên Ubuntu 18.04
2019-03-15
Cách cài đặt và sử dụng ClickHouse trên Ubuntu 18.04
2019-03-11