_Tác giả đã chọn Quỹ nguồn mở và miễn phí để nhận khoản đóng góp như một phần của Viết cho DOnations chương trình._

Giới thiệu

Kubernetes là một hệ thống dàn nhạc container quản lý các thùng chứa ở quy mô lớn. Ban đầu được phát triển bởi Google dựa trên kinh nghiệm của mình khi chạy các thùng chứa trong sản xuất, Kubernetes là nguồn mở và được phát triển tích cực bởi một cộng đồng trên khắp thế giới.

Kubeadm tự động cài đặt và cấu hình các thành phần Kubernetes như máy chủ API, Trình quản lý bộ điều khiển và Kube DNS. Tuy nhiên, nó không tạo ra người dùng 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 các nhiệm vụ sơ bộ này, có thể sử dụng công cụ quản lý cấu hình như Ansible hoặc là SaltStack. Sử dụng các công cụ này giúp 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ẽ thiết lập một cụm Kubernetes từ đầu bằng cách sử dụng Ansible và Kubeadm, và sau đó triển khai một ứng dụng Nginx được chứa vào nó.

Những mục tiêu

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 (a nút trong Kubernetes đề cập đến một máy chủ) có trách nhiệm quản lý trạng thái của cụm. Nó chạy Etcd, lưu trữ dữ liệu cụm giữa các thành phần lập lịch tải công việc cho các nút công nhân.

  • Hai nút công nhân

Nút công nhân là các máy chủ nơi bạn khối lượng công việc (tức là các ứng dụng và dịch vụ được container) sẽ chạy. Một nhân viên sẽ tiếp tục chạy khối lượng công việc của bạn sau khi họ được gán cho nó, ngay cả khi chủ nhân đi xuống sau khi lập lịch hoàn tất. Năng lực 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, miễn là các máy chủ trong cụm có đủ tài nguyên CPU và RAM cho các ứng dụng của bạn để tiêu thụ. Hầu hết các ứng dụng Unix truyền thống bao gồm các ứng dụng web, cơ sở dữ liệu, các trình tiện ích và các công cụ dòng lệnh đều có thể được chứa và được thực hiện để 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 thiết lập, bạn sẽ triển khai máy chủ web Nginx để đảm bảo rằng nó đang chạy tải công việc một cách chính xác.

Điều kiện tiên quyết

  • Một cặp khóa SSH trên máy Linux / macOS / BSD cục bộ của bạn. Nếu trước đây bạn chưa sử dụng các khóa SSH, bạn có thể tìm hiểu cách thiết lập chúng bằng cách làm theo giải thích này về cách thiết lập khóa SSH trên máy cục bộ của bạn.

  • Ba máy chủ chạy CentOS 7 với RAM ít nhất 1GB. Bạn sẽ có thể SSH vào mỗi máy chủ như người dùng root với cặp khóa SSH của bạn. Hãy chắc chắn cũng thêm khóa công khai của bạn vào centos tài khoản của người dùng trên nút chính. Nếu bạn cần hướng dẫn cách thêm khóa SSH vào tài khoản người dùng cụ thể, hãy xem hướng dẫn này Cách thiết lập khóa SSH trên CentOS7.

  • Ansible được cài đặt trên máy cục bộ của bạn. Để biết hướng dẫn cài đặt, hãy làm theo tài liệu cài đặt chính thức Ansible.

  • Quen thuộc với Playbook Ansible. Để xem xét, hãy xem Quản lý cấu hình 101: Viết Ansible Playbooks.

  • Kiến thức về cách khởi chạy vùng chứa từ hình ảnh Docker. Nhìn vào "Bước 5 - Chạy một Docker Container" trong Cách cài đặt và sử dụng Docker trên CentOS 7 nếu bạn cần bồi dưỡng.

Bước 1 - Thiết lập Thư mục Không gian làm việc và Tệp Khoảng không quảng cáo Ansible

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

Trong số ba máy chủ của bạn, một máy chủ sẽ là máy chủ với IP được hiển thị dưới dạng master_ip. Hai máy chủ khác sẽ là công nhân và sẽ có các IP worker_1_ipworker_2_ip.

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

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 Playbook Ansible của bạn. Nó cũng sẽ là thư mục bên trong mà bạn sẽ chạy tất cả các lệnh cục bộ.

Tạo tệp có tên ~/kube-cluster/hosts sử dụng vi hoặc trình soạn thảo văn bản yêu thích của bạn:

vi ~/kube-cluster/hosts

nhấn i để chèn văn bản sau vào tệp, 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

Khi bạn hoàn thành, nhấn ESC theo dõi bởi :wq để ghi các thay đổi vào tệp và thoát.

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

bên trong bậc thầy nhóm, có một mục nhập máy chủ có tên là "master" liệt kê IP của nút chính (master_ip) và chỉ định rằng Ansible sẽ chạy các lệnh từ xa với tư cách là người dùng root.

Tương tự, trong công nhân nhóm, có hai mục nhập cho các máy chủ công nhân (worker_1_ipworker_2_ip) cũng chỉ định ansible_user như là người chủ.

Sau khi thiết lập khoảng không quảng cáo máy chủ với các nhóm, hãy tiếp tục cài đặt các phụ thuộc cấp hệ điều hành và tạo cài đặt cấu hình.

Bước 2 - Cài đặt Kubernetes 'Dependencies

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 CentOS's yum quản lý gói. Các gói này là:

  • Docker - một thời gian chạy container. Đây là thành phần chạy các vùng chứa của bạn. Hỗ trợ các thời gian chạy khác như rkt đang được phát triển tích cực ở 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 nút và xử lý các hoạt động cấp nút.

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

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

vi ~/kube-cluster/kube-dependencies.yml

Thêm các lượt phát sau vào tệp để cài đặt các gói này vào máy chủ của bạn:

~/kube-cluster/kube-dependencies.yml

- hosts: all
  become: yes
  tasks:
   - name: install Docker
     yum:
       name: docker
       state: present
       update_cache: true

   - name: start Docker
     service:
       name: docker
       state: started

   - name: disable SELinux
     command: setenforce 0

   - name: disable SELinux on reboot
     selinux:
       state: disabled

   - name: ensure net.bridge.bridge-nf-call-ip6tables is set to 1
     sysctl:
      name: net.bridge.bridge-nf-call-ip6tables
      value: 1
      state: present

   - name: ensure net.bridge.bridge-nf-call-iptables is set to 1
     sysctl:
      name: net.bridge.bridge-nf-call-iptables
      value: 1
      state: present

   - name: add Kubernetes' YUM repository
     yum_repository:
      name: Kubernetes
      description: Kubernetes YUM repository
      baseurl: https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
      gpgkey: https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
      gpgcheck: yes

   - name: install kubelet
     yum:
        name: kubelet
        state: present
        update_cache: true

   - name: install kubeadm
     yum:
        name: kubeadm
        state: present

   - name: start kubelet
     service:
       name: kubelet
       enabled: yes
       state: started

- hosts: master
  become: yes
  tasks:
   - name: install kubectl
     yum:
        name: kubectl
        state: present

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 vùng chứa.

  • Khởi động dịch vụ Docker.

  • Tắt SELinux vì nó chưa được Kubernetes hỗ trợ đầy đủ.

  • Đặt một vài liên quan đến netfilter sysctl giá trị cần thiết cho mạng. Điều này sẽ cho phép Kubernetes thiết lập các quy tắc iptables để nhận lưu lượng mạng cầu nối IPv4 và IPv6 trên các nút.

  • Thêm kho Kubernetes YUM vào danh sách kho lưu trữ của máy chủ từ xa của bạn.

  • Số lượt cài đặt kubeletkubeadm.

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

Lưu và đóng tệp khi bạn hoàn tất.

Tiếp theo, thực hiện playbook:

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 [disable SELinux] ****
changed: [master]
changed: [worker1]
changed: [worker2]

TASK [disable SELinux on reboot] ****
changed: [master]
changed: [worker1]
changed: [worker2]

TASK [ensure net.bridge.bridge-nf-call-ip6tables is set to 1] ****
changed: [master]
changed: [worker1]
changed: [worker2]

TASK [ensure net.bridge.bridge-nf-call-iptables is set to 1] ****
changed: [master]
changed: [worker1]
changed: [worker2]

TASK [start Docker] ****
changed: [master]
changed: [worker1]
changed: [worker2]

TASK [add Kubernetes' YUM 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]

TASK [start kubelet] ****
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 hiện, Docker, kubeadmkubelet sẽ được cài đặt trên tất cả các máy chủ từ xa. kubectl không phải là thành phần bắt buộc và chỉ cần thiết để thực hiện các lệnh cụm. Việc cài đặt nó chỉ trên nút chính có ý nghĩa trong ngữ cảnh này, vì bạn sẽ chạy kubectl lệnh chỉ từ chủ. Tuy nhiên, lưu ý rằng kubectl các lệnh có thể được chạy từ bất kỳ nút nào của nhân viên hoặc từ bất kỳ máy nào có thể 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 thiết lập nút chính và khởi tạo cụm.

Bước 4 - Thiết lập nút chính

Trong phần này, bạn sẽ thiết lập nút chính. Tuy nhiên, trước khi tạo bất kỳ playbook nào, nó có giá trị bao gồm một vài khái niệm như PodPlugin mạng Pod, vì cụm của bạn sẽ bao gồm cả hai.

Một nhóm là một đơn vị nguyên tử chạy một hoặc nhiều vùng chứa. Các thùng chứa này chia sẻ các tài nguyên như khối lượng tệp và giao diện mạng chung. Pod là đơn vị lập lịch cơ bản trong Kubernetes: tất cả các vùng chứa trong một nhóm được đảm bảo chạy trên cùng một nút mà nhóm được lên lịch.

Mỗi nhóm có địa chỉ IP của riêng nó và một nhóm trên một nút sẽ có thể truy cập vào nhóm trên một nút khác bằng cách sử dụng IP của nhóm. Các thùng chứa trên một nút duy nhất có thể giao tiếp dễ dàng thông qua giao diện cục bộ. Tuy nhiên, việc giao tiếp giữa các nhóm phức tạp hơn và đòi hỏi một thành phần mạng riêng biệt có thể định tuyến một cách minh bạch lưu lượng từ một nhóm trên một nút đến một nhóm trên một nhóm 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 suất.

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

vi ~/kube-cluster/master.yml

Thêm lối chơi sau vào tệp để 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: centos
      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/centos/.kube/config
        remote_src: yes
        owner: centos

    - name: install Pod network
      become: yes
      become_user: centos
      shell: kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.9.1/Documentation/kube-flannel.yml >> pod_network_setup.txt
      args:
        chdir: $HOME
        creates: pod_network_setup.txt

Dưới đây là bảng phân tích về cách chơi này:

  • Nhiệm vụ đầu tiên khởi tạo cụm bằng cách chạy kubeadm init. Vượt qua đối số --pod-network-cidr=10.244.0.0/16 chỉ định mạng con riêng tư mà các IP nhóm sẽ được chỉ định. Flannel sử dụng mạng con ở trên theo mặc định; chúng tôi đang nói kubeadm để sử dụng cùng một mạng con.

  • Nhiệm vụ thứ hai tạo ra một .kube thư mục tại /home/centos. Thư mục này sẽ giữ thông tin cấu hình như các tệp 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.

  • Nhiệm vụ thứ ba sẽ sao chép /etc/kubernetes/admin.conf tệp được tạo từ kubeadm init không phải gốc của bạn centos thư mục chính của người dùng. Điều này sẽ cho phép bạn sử dụng kubectl để truy cập 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 để kể kubectl để tạo các đối tượng được mô tả trong descriptor.[yml|json] tập tin. Các kube-flannel.yml tệp chứa các mô tả về các đối tượng cần thiết để thiết lập Flannel trong cụm.

Lưu và đóng tệp khi bạn hoàn tất.

Thực hiện playbook:

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, SSH vào nó bằng lệnh sau:

ssh centos@master_ip

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

kubectl get nodes

Bây giờ bạn sẽ thấy kết quả sau:

OutputNAME      STATUS    ROLES     AGE       VERSION
master    Ready     master    1d        v1.10.1

Đầu ra nói rằng master nút đã hoàn thành tất cả các tác vụ khởi tạo và nằm trong Ready trạng thái mà từ đó nó có thể bắt đầu chấp nhận các nút công nhân và thực hiện các tác vụ được gửi tới Máy chủ API. Bây giờ bạn có thể thêm công nhân từ máy cục bộ của bạn.

Bước 5 - Thiết lập các nút công nhân

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

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

vi ~/kube-cluster/workers.yml

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

~/kube-cluster/workers.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ì mà playbook thực hiện:

  • Lần chơi đầu tiên nhận lệnh join cần được chạy trên các nút 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>. Một khi nó nhận được lệnh thực tế với mã thông báobăm các giá trị, nhiệm vụ đặt nó như là một thực tế để 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 chạy lệnh nối trên tất cả các nút của nhân viê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 và đóng tệp khi bạn hoàn tất.

Thực hiện playbook:

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 nút công nhân, cụm của bạn bây giờ đã được thiết lập và hoạt động đầy đủ, với các công nhân đã sẵn sàng để chạy các khối lượng công việc. Trước khi lên lịch ứng dụng, hãy xác minh rằng cụm đang hoạt động như dự định.

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

Một cụm đôi khi có thể thất bại trong khi thiết lập vì nút bị hỏng hoặc kết nối mạng giữa máy chủ và nhân viên không hoạt động chính xác. Hãy kiểm tra cụm sao và đảm bảo rằng các nút đang hoạt động chính xác.

Bạn sẽ 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 nút đã sẵn sàng. Nếu bạn bị ngắt kết nối khỏi nút chính, bạn có thể SSH trở lại vào nó bằng lệnh sau đây:

ssh centos@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 đầu ra tương tự như sau:

OutputNAME      STATUS    ROLES     AGE       VERSION
master    Ready     master    1d        v1.10.1
worker1   Ready     <none>    1d        v1.10.1 
worker2   Ready     <none>    1d        v1.10.1

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

Tuy nhiên, nếu một vài nút có NotReady như STATUS, nó có thể có nghĩa là các nút công nhân vẫn chưa hoàn thành thiết lập của họ. Đợi khoảng 5 đến 10 phút trước khi chạy lại kubectl get node và kiểm tra đầu ra mới. Nếu một vài nút vẫn còn NotReady là trạng thái, 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 một ứng dụng Nginx ví dụ trên cụm.

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

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

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

kubectl run nginx --image=nginx --port 80

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

Tiếp theo, chạy lệnh sau để tạo một dịch vụ có tên nginx sẽ hiển thị công khai ứng dụng. Nó sẽ làm như vậy thông qua một NodePort, một lược đồ sẽ làm cho nhóm 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

Các dịch vụ là một kiểu đối tượng Kubernetes khác để trưng ra các dịch vụ nội bộ cụm cho các máy khách, cả bên trong và bên ngoài. Chúng cũng có khả năng tải các yêu cầu cân bằng cho nhiều nhóm, và là một thành phần không thể thiếu trong Kubernetes, thường 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 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 đầu ra ở trên, bạn có thể truy xuất cổng Nginx đang chạy. Kubernetes sẽ gán một cổng ngẫu nhiên lớn hơn 30000 tự động, trong khi đảm bảo rằng cổng chưa bị ràng buộc bởi một dịch vụ khác.

Để kiểm tra mọi thứ đang hoạt động, hãy truy cập http://worker_1_ip:nginx_port hoặc là http://worker_2_ip:nginx_port thông qua trình duyệt trên máy cục bộ 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 hết hãy xóa nginx dịch vụ từ nút chính:

kubectl delete service nginx

Chạy phần 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 rằng thao tác này đã hoạt động:

kubectl get deployments

OutputNo resources found.

Phần kết luận

Trong hướng dẫn này, bạn đã thiết lập thành công một cụm Kubernetes trên CentOS 7 bằng Kubeadm và Ansible để tự động hóa.

Nếu bạn đang tự hỏi phải làm gì với cluster ngay bây giờ khi nó được thiết lập, một bước tiếp theo tốt là làm quen với việc triển khai các ứng dụng và dịch vụ của riêng bạn lên cluster. 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:

  • Ứng dụng Dockerizing - Liệt kê các ví dụ 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. Pods có mặt khắp nơi ở Kubernetes, vì vậy việc hiểu chúng sẽ tạo thuận lợi cho công việc của bạn.

  • Tổng quan về triển khai - điều này cung cấp tổng quan về triển khai. Nó rất hữu ích để hiểu cách các bộ điều khiển như triển khai hoạt động như thế nào 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ụ - điều 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 mà chúng có là cần thiết để chạy cả hai ứ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à Tập, Ingresses và Bí mật, tất cả đều tiện dụng khi triển khai các ứng dụng sản xuất.

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 hướng dẫn cụ thể theo nhiệm vụ và tra cứu tham chiếu API cho các đối tượng khác nhau.