Cách tạo một cụm Kubernetes bằng Kubeadm trên Ubuntu 18.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 / macOS / 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 18.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 18.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 18.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ư macOS 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 18.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 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. Sau khi hoàn tất, 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 các 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 đó 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
ubuntu
user không phải root.Cấu hình file
sudoers
để cho phép userubuntu
chạy các lệnhsudo
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 userubuntu
từ xa. Điều này sẽ cho phép bạn SSH vào từng server với quyền là userubuntu
.
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 các phụ thuộc của Kubernetetes
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
kubelet
và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/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ớikubeadm
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ụngkubectl
để 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 đặtFlannel
.kubectl apply -f descriptor.[yml|json]
là cú pháp để yêu cầukubectl
tạo các đối tượng được mô tả trong filedescriptor.[yml|json]
. Tệpkube-flannel.yml
chứa mô tả của các đối tượng cần thiết để cài đặtFlannel
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:
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 lại kubectl get nodes
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 18.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 - 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ụ - 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 16.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