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
- Cặp SSH key trên máy Linux / Mac OS / BSD local của bạn. Nếu bạn chưa sử dụng SSH key trước đây, bạn có thể tìm hiểu cách cài đặt chúng theo giải thích này về cách cài đặt SSH key trên máy local của bạn . 
- Ba server chạy Ubuntu 16.04 với ít nhất 2GB RAM và 2 vCPU mỗi máy. Bạn có thể SSH vào từng server với quyền là user root bằng cặp SSH key của bạn . 
- Ansible được cài đặt trên máy local của bạn. Nếu bạn đang chạy Ubuntu 16.04 làm hệ điều hành của bạn , hãy làm theo phần “Bước 1 - Cài đặt Ansible” trong Cách cài đặt và cấu hình Ansible trên Ubuntu 16.04 để cài đặt Ansible.Để biết hướng dẫn cài đặt trên các nền tảng khác như Mac OS X hoặc CentOS, hãy làm theo tài liệu cài đặt Ansible chính thức . 
- Làm quen với sách vở Ansible. Để xem lại, hãy xem Quản lý cấu hình 101: Viết Playbooks Ansible . 
- Kiến thức về cách chạy containers từ Docker image . Xem “Bước 5 - Chạy Docker Container” trong Cách cài đặt và sử dụng Docker trên Ubuntu 16.04 nếu bạn cần cập nhật. 
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_ip và worker_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:
[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_ip và worker_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:
- 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 - ubuntuuser không phải root.
- Cấu hình file - sudoersđể cho phép user- ubuntuchạy các lệnh- sudomà 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- ubuntutừ 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:
OutputPLAY [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:
- 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 - kubeletvà- kubeadm.
 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:
OutputPLAY [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, kubeadm và kubelet 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ư Pod và Pod 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:
- 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/16chỉ đị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- kubeadmsử dụng cùng một mạng con.
- Tác vụ thứ hai tạo một folder - .kubetạ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 initvà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- kubectltạo các đối tượng được mô tả trong file- descriptor.[yml|json]. Tệp- kube-flannel.ymlchứa mô tả của các đối tượng cần thiết để cài đặt- Flanneltrong 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:
OutputNAME      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:
- 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:
OutputPLAY [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:
OutputNAME      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ó NotReady là STATUS , đ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 khai và Dị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ư ports và volumes ).
 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:
OutputNAME         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:
OutputNAME         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 
OutputNo 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 , Ingresses và Secrets , 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.
Các tin liên quan
Cách tạo một cụm Kubernetes bằng Kubeadm trên Ubuntu 18.042019-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
 

