Sơ lược về Ansible #
Ansible là một trong những công cụ hỗ trợ việc tự động hoá trong quản trị hệ thống của bạn. Kubernetes là một trong những công cụ hỗ trợ điều phối container tốt nhất. Vậy điều gì nếu chúng có thể hoạt động với nhau? Trong bài viết này mình sẽ nói về vấn đề đó.
Ansible là một framework mạnh làm việc với các file YAML. Thế mạnh của Ansible là ở các module, các module có thể giúp bạn gọi ứng dụng bên ngoài. Trong bài viết này, mình sẽ nói về module có khả năng đọc các cài đặt trong playbook
Truy cập vào một Kubernetes Cluster #
Để có thể sử dụng Kubernetes Module trong Ansible, bạn phải có quyền truy cập vào Kubernetes Cluster. Trong bài viết này, mình sẽ sử dung Minikube
$ kubectl cluster-info Kubernetes master is running at https://192.168.39.190:8443 KubeDNS is running at https://192.168.39.190:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'. |
Sử dụng K8s Module #
Mục đích của bài viết này là sử dụng Kubernetes thông qua Ansible sử dụng k8s module. Với Module đó, bạn có thể quản lý các đối tượng trong Kubernetes từ playbook của bạn. Cụ thể, bạn tạo namespace mới sử dụng kubectl sẽ như sau:
$ kubectl create namespace my-tel4vn |
thì đoạn lệnh có thể được chạy từ file yaml với cú pháp sau:
- hosts: localhost tasks: - name: create namespace k8s: name: my-tel4vn api_version: v1 kind: Namespace state: present |
Sau đó bạn có thể chạy file với playbook của ansible:
$ ansible-playbook ./example.yaml
|
Kết quả bạn cũng có namespace cần tạo như khi sử dụng câu lệnh:
$ kubectl get namespaces NAME STATUS AGE default Active 37h kube-node-lease Active 37h kube-public Active 37h kube-system Active 37h demo Active 11h my-tel4vn Active 3s |
Tải xuống Image sử dụng Podman #
Với Podman, bạn có thể tải xuống bất image nào từ repository mà không cần daemon nào chạy cả. Tất cả bạn cần là nơi để chạy container và nơi để tải xuống image. Lúc đó, bạn có thể sử dụng các cú pháp của YAML để tự động thao tác này:
- name: pull an image podman_image: name: docker.io/nginx:latest |
Và chạy playbook:
$ ansible-playbook ./example.yaml [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all' PLAY [localhost] ************************ TASK [Gathering Facts] ************************ ok: [localhost] TAStạc vụK [create k8s namespace] ************************ ok: [localhost] TASK [pull an image] ************************ changed: [localhost] PLAY RECAP ************************ localhost: ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 |
Deploy ứng dụng với Ansible #
Ansible không chỉ giới hạn trong việc tự động các tác vụ và còn có thể sử dụng như kubectl để deploy một ứng dụng. Nói một cách khác, file YAML mà bạn lấy được từ Kubernetes như một file dùng để cho Ansible có thể chạy. Đây là các cài đặt mà khi bạn sử dụng kubectl để deploy webserver sẽ được tự tạo ra:
apiVersion: apps/v1 kind: Deployment metadata: name: my-webserver spec: selector: matchLabels: run: my-webserver replicas: 1 template: metadata: labels: run: my-webserver spec: containers: - name: my-webserver image: nginx ports: - containerPort: 80 |
Nếu bạn có được các thông số trên từ kubectl thì rất dễ dàng cho việc tạo file YAML và thực thi nó với Ansible để có kết quả tương tự. So với thông số yaml tạo bởi K8s thì thông số để Ansible thực thi chỉ thêm một số trường định nghĩa đối tượng mà thôi:
- name: deploy a web server k8s: api_version: v1 namespace: my-tel4vn definition: kind: Deployment metadata: labels: app: nginx name: nginx-deploy-tel4vn spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: my-webserver image: quay.io/jitesoft/nginx ports: - containerPort: 80 protocol: TCP |
Sau khi chỉnh sửa cho phù hợp với hạ tầng hiện tại, bạn hoàn toàn có thể dùng ansible để thao tác trên Kubernetes Cluster:
$ kubectl -n my-tel4vn get pods NAME READY STATUS nginx-deploy-tel4vn-7fdc9-t9wc2 1/1 Running |
Kết luận #
Sau bài viết trên, mục tiêu của mình là bạn đọc có thể sử dụng ansible để tự động thực hiện các thao tác với Kubernetes Cluster, hiểu được cách dùng file YAML để thiết đặt trước các công việc và có thể chuyển file YAML lấy được từ Kubernetes thành file mà ansible có thể đọc được.
Bạn có thể tham khảo Cheat sheet ở đây để hiểu rõ hơn về việc Playbook: Intro to playbooks
Nguồn: opensource.com