![Search icon](https://hackernoon.imgix.net/search-new.png?w=19&h=19)
Trong bài viết trước, tôi đã đi sâu vào thế giới hấp dẫn của microservice - Các mẫu kiến trúc microservice Phần 1: Các mẫu phân rã . Đây là phần mở đầu của loạt bài viết toàn diện của tôi về microservice và các mẫu của chúng.
Mặc dù bước hợp lý là tiếp tục với Phần 2 của loạt bài này, nhưng tôi đã quyết định rằng điều tiếp theo mà tôi muốn khám phá và kể cho bạn nghe là quy trình quan trọng trong việc cung cấp các dịch vụ vi mô này đến người dùng cuối một cách liền mạch.
CI/CD là một kỹ thuật phân phối ứng dụng cho khách hàng, đạt được bằng cách thêm tính năng tự động hóa vào các giai đoạn phát triển ứng dụng khác nhau. Tôi tin rằng việc nắm bắt CI/CD (Tích hợp liên tục và Triển khai liên tục) có thể giúp các nhà phát triển hiểu rõ hơn về cách các tạo phẩm của dự án phụ trợ tồn tại ngoài ranh giới của kho lưu trữ dự án. Sự hiểu biết này cũng có thể tạo ra sự thay đổi cơ bản trong quan điểm của nhà phát triển. Thay vì chỉ xem công việc của mình như những dòng mã, họ có thể bắt đầu nắm bắt bối cảnh rộng hơn của dự án như một sản phẩm có giá trị.
Trong bài viết này, chúng tôi mong muốn làm sáng tỏ quy trình CI/CD thông qua ứng dụng thực tế. Chúng tôi sẽ hướng dẫn bạn từng bước, chia nhỏ từng mô-đun, trong đó bạn sẽ xây dựng quy trình CI/CD theo cách thủ công. Để làm được điều này, chúng tôi sẽ khai thác sức mạnh của các công cụ DevOps hiện đại như AWS, Docker, Kubernetes, Ansible, Git, Apache Maven và Jenkins . Vì vậy, hãy bắt đầu cuộc hành trình này!
Mô-đun này được dành riêng cho việc tạo phiên bản Máy chủ ảo AWS EC2. Là một phần của bài viết này, bạn sẽ thiết lập ba phiên bản EC2 cho Jenkins, Ansible và Kubernetes. Hiện tại, bạn có thể tiếp tục với các mô-đun tiếp theo và truy cập lại mô-đun này trong các phần "[mô-đun 2]: Jenkins", “[mô-đun 6]: Ansible" và "[mô-đun 7]: Kubernetes".
Truy cập https://aws.amazon.com.
Nhấp vào nút Tạo tài khoản AWS .
Làm theo hướng dẫn trên trang web tạo tài khoản.
Truy cập https://console.aws.amazon.com/console/home. Nhấp vào nút Đăng nhập .
Nhập tất cả các thông tin cần thiết trên trang web này.
Tìm EC2 trong hộp tìm kiếm.
Chọn Máy chủ ảo EC2 bằng cách nhấp vào Dịch vụ EC2 .
Nhấp vào nút Khởi chạy phiên bản .
Đi tới phần “Tên và thẻ” .
Cung cấp tên cho phiên bản Máy chủ ảo AWS EC2 mới trong phần “Tên” .
Bạn cũng có thể thêm các thẻ bổ sung cho máy chủ ảo của mình bằng cách nhấp vào ”Thêm thẻ bổ sung” .
Đi tới phần "Hình ảnh ứng dụng và hệ điều hành (Hình ảnh máy của Amazon)" .
Để chơi MIỄN PHÍ với máy chủ ảo:
Đi tới phần "Loại phiên bản" .
Để chơi MIỄN PHÍ với máy chủ ảo:
Chọn một loại có thẻ đủ điều kiện Bậc miễn phí trong phần Loại phiên bản .
Đối với tôi đó là t2.micro (Gia đình: t2 1cCPU 1 GiB Bộ nhớ Thế hệ hiện tại:true) .
Đi tới phần "Cấu hình bộ nhớ" .
Để chơi MIỄN PHÍ với máy chủ ảo:
Không thay đổi cài đặt mặc định. Khách hàng đủ điều kiện sử dụng bậc miễn phí có thể nhận được 30 GB bộ lưu trữ EBS Mục đích chung (SSD) hoặc Từ tính .
Chuyển đến phần “Cài đặt mạng“ .
Bạn cần thiết lập bảo mật cho máy chủ ảo của mình. Để làm điều này,
Theo mặc định, máy chủ ảo của bạn có thể truy cập được thông qua ( Type - SSH, Protocol - TCP, Port - 22 ). Nếu bạn cần các loại kết nối bổ sung, hãy thêm chúng bằng cách thêm các quy tắc nhóm bảo mật gửi đến bổ sung.
Vào phần “Cặp khóa (Đăng nhập)” .
Tạo một cặp khóa mới nếu bạn chưa tạo.
Nếu bạn chưa tạo “cặp khóa” :
Khởi chạy phiên bản Máy chủ ảo EC2 bằng cách nhấp vào nút “Khởi chạy phiên bản” .
Sau khi hoàn tất quá trình tạo phiên bản Máy chủ ảo EC2, bạn sẽ thấy như sau.
Sau đó, bạn nên đi tới phần “Phiên bản” bằng cách nhấp vào nút “Xem tất cả các phiên bản” .
Bây giờ bạn có thể thấy phiên bản Máy chủ ảo AWS EC2 của bạn đang chạy.
Bây giờ, hãy cấu hình JenkinsServer trên phiên bản Máy chủ ảo EC2.
Bạn cần một máy chủ ảo để chạy Jenkins.
Làm theo hướng dẫn từ [Mô-đun 1]: Phần Máy chủ ảo AWS EC2 của hướng dẫn này để hoàn thành bước này và tạo một phiên bản máy chủ ảo EC2 có tên JenkinsServer.
Đừng quên thêm thiết lập nhóm bảo mật. Nó cho phép Jenkins và SSH hoạt động tương ứng trên cổng 8080 và 22 .
Sử dụng tên “JenkinsServer” để phân biệt phiên bản Máy chủ ảo EC2 của bạn.
Tạo nhóm bảo mật “CI_CD_Pipeline” và “CI_CD_Pipeline_Key_Pair“ cho phiên bản AWS EC2 “JenkinsServer” mới. Bạn có thể tái sử dụng chúng thêm trong bài viết.
Đi tới trang chủ Bảng điều khiển AWS → Bảng thông tin Bảng điều khiển quản lý EC2 → Phiên bản.
Sau đó, bạn nên chọn JenkinsServer và sau đó nhấp vào nút “Kết nối” .
Sau đó bạn sẽ thấy trang web này. Bạn nên nhấp lại vào nút “Kết nối” .
Bây giờ bạn có thể thấy thiết bị đầu cuối trực tuyến phiên bản máy chủ ảo EC2.
Bây giờ bạn cần tải xuống Jenkins trên phiên bản máy chủ ảo EC2 của mình.
Làm theo các hướng dẫn này:
Truy cập trang web tải xuống Jenkins.
Bạn có thể thấy các tùy chọn Bản phát hành ổn định (LTS) và Bản phát hành thường xuyên (Hàng tuần). Chọn tùy chọn Red Hat/Fedora/Alma/Rocky/CentOS LTS.
Bạn sẽ thấy trang web này.
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
Bây giờ Jenkins đã được tải xuống.
Để hoàn tất quá trình cài đặt Jenkins, chúng ta cần nhập khóa Jenkins.
Để nhập khóa Jenkins, chúng ta cần sao chép lệnh “sudo vòng/phút..” và thực thi nó.
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
Bằng cách này, trình quản lý gói “rpm” có thể xác minh rằng các gói Jenkins bạn cài đặt chính xác là những gói do dự án Jenkins xuất bản và chúng không bị giả mạo hoặc bị hỏng.
Để chạy Jenkins, chúng ta cần cài đặt Java trên phiên bản máy chủ ảo EC2 của mình.
Để cài đặt Java , hãy sử dụng lệnh này.
sudo amazon-linux-extras install java-openjdk11 -y
Xác minh xem Java đã được cài đặt đúng hay chưa bằng lệnh này:
java -version
Bạn sẽ thấy một cái gì đó như thế.
Để chạy Jenkins, bạn cần cài đặt fontconfig trên phiên bản máy chủ ảo EC2 của chúng tôi.
Sử dụng lệnh này.
sudo yum install fontconfig java-11-openjdk -y
Fontconfig là một thư viện được thiết kế để cung cấp cấu hình phông chữ, tùy chỉnh và truy cập ứng dụng trên toàn hệ thống. Nó được Jenkins yêu cầu vì Jenkins có tính năng hiển thị phông chữ.
Trong các bước trước, bạn đã định cấu hình phiên bản máy chủ ảo EC2 để sử dụng kho lưu trữ Jenkins cụ thể, sau đó nhập khóa GPG được liên kết với kho lưu trữ này. Bây giờ, bạn cần chạy lệnh sẽ tìm kiếm tất cả các kho lưu trữ mà nó biết, bao gồm cả kho Jenkins mà bạn đã thêm, để tìm gói Jenkins. Sau khi tìm thấy gói Jenkins trong kho Jenkins, nó sẽ tải xuống và cài đặt gói đó.
Hãy chạy lệnh này.
sudo yum install jenkins -y
Bạn có thể khởi động Jenkins bằng lệnh này.
sudo systemctl start jenkins
Để kiểm tra xem Jenkins có đang chạy hay không, hãy sử dụng lệnh này.
sudo systemctl status jenkins
Bạn sẽ thấy kết quả như trên ảnh chụp màn hình bên dưới:
Jenkins bây giờ đã sẵn sàng và đang chạy.
Để truy cập ứng dụng Jenkins, hãy mở bất kỳ trình duyệt web nào và nhập địa chỉ IP công cộng hoặc tên miền của phiên bản EC2 của bạn, sau đó là cổng 8080.
http://<your-ec2-ip>:8080
Lần đầu tiên bạn truy cập Jenkins, nó sẽ bị khóa bằng mật khẩu được tạo tự động.
Bạn cần hiển thị mật khẩu này bằng lệnh sau.
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
Sao chép mật khẩu này, quay lại trình duyệt của bạn, dán nó vào trường Mật khẩu quản trị viên và nhấp vào "Tiếp tục".
Sau đó bạn sẽ có thể nhìn thấy trang web này.
Bây giờ, bạn có thể sử dụng Máy chủ Jenkins của mình.
Bây giờ, vì Jenkins đang hoạt động tốt nên bạn có thể bắt đầu tạo quy trình Jenkins. Để tạo quy trình Jenkins, bạn cần tạo một “dự án Freestyle” mới. Để tạo một “dự án Freestyle” mới, bạn cần truy cập bảng điều khiển Jenkins và nhấp vào nút “Mục mới” .
Nhập tên của Github “Dự án Freestyle” (“tên đường ống” sẽ được sử dụng thêm) và sau đó nhấp vào nút “OK” .
Sau đó cung cấp Mô tả của đường dẫn.
Sau đó nhấp vào nút “Áp dụng” và “Lưu”. Sau đó, điều đó có nghĩa là bạn đã tạo nền tảng của quy trình sẽ được xây dựng trong hướng dẫn này.
Bây giờ, vì Jenkins đang chạy trên phiên bản Máy chủ ảo AWS EC2 nên bạn có thể định cấu hình Git bằng quy trình.
Git là một hệ thống kiểm soát phiên bản phân tán (VCS) mã nguồn mở và miễn phí được thiết kế để giúp các nhóm phần mềm theo dõi mọi sửa đổi đối với mã trong một loại cơ sở dữ liệu đặc biệt. Nếu xảy ra lỗi, nhà phát triển có thể quay ngược thời gian và so sánh các phiên bản mã trước đó để giúp sửa lỗi đồng thời giảm thiểu sự gián đoạn cho tất cả các thành viên trong nhóm. VCS đặc biệt hữu ích cho
Git là hệ thống kiểm soát phiên bản phổ biến nhất cho phép chúng tôi lấy mã mới nhất từ kho lưu trữ Github dự án của bạn sang phiên bản máy chủ ảo EC2 nơi Jenkins của bạn được cài đặt.
Sử dụng lệnh này để cài đặt Git.
sudo yum install git -y
Bây giờ hãy xác minh Git đang hoạt động bằng lệnh này.
git --version
Hiện tại Git đang hoạt động tốt trên phiên bản Máy chủ ảo EC2.
Vì Git đang hoạt động tốt trên phiên bản Máy chủ ảo EC2 nên chúng tôi có thể tích hợp Jenkins với Git ngay bây giờ.
Để bắt đầu tích hợp này, hãy cài đặt plugin Jenkins Github.
Chuyển đến phần bảng điều khiển của Jenkins.
Nhấp vào nút “Quản lý Jenkins” và sau đó nhấp vào nút “Quản lý plugin” .
Nhấp vào nút “Các plugin có sẵn” .
Tìm hộp Tìm kiếm plugin Github .
Chọn plugin Github .
Chọn plugin Github . Và sau đó nhấp vào nút “Cài đặt mà không cần khởi động lại” .
Đợi quá trình tải xuống plugin Github kết thúc.
Đúng! Plugin Jenkins Github đã được cài đặt.
Bây giờ khi plugin GitHub Jenkins đã được cài đặt, cuối cùng bạn có thể định cấu hình plugin này để tích hợp Jenkins với Git. Để làm điều đó, bạn cần quay lại trang chính bằng cách nhấp vào nút “Quay lại trang đầu”.
Sau đó, trên trang chính, bạn cần nhấp vào nút “Quản lý Jenkins” và sau đó nhấp vào nút “Cấu hình công cụ toàn cầu” .
Sau đó, trên trang web Cấu hình Công cụ Toàn cầu, bạn nên chuyển đến phần Git.
Trong phần Git, bạn cần cấu hình Git bằng cách cung cấp tên và đường dẫn tới Git trên máy tính.
Sau đó nhấp vào nút “Áp dụng” và “Lưu” **.**
Đến đây, bạn đã cấu hình xong plugin Jenkins Github.
Bây giờ, khi plugin Jenkins Github đã được cài đặt và định cấu hình, giờ đây bạn có thể sử dụng plugin này trong quy trình của mình. Điều này sẽ cho phép quy trình mà bạn đã tạo trong mô-đun 2 lấy mã dự án của bạn từ kho lưu trữ GitHub được chỉ định.
Chà, để tích hợp plugin này vào quy trình của bạn, bạn cần đi tới phần Quản lý mã nguồn và chọn Git trong quy trình của bạn. Sau đó, bạn cần cung cấp URL kho lưu trữ dự án của mình. Nếu kho lưu trữ dự án của bạn được công khai trên Github, bạn không cần cung cấp thông tin xác thực. Nếu kho lưu trữ dự án ở chế độ riêng tư trên Github, bạn cần cung cấp thông tin xác thực.
Bạn có thể sử dụng dự án của tôi với URL Kho lưu trữ tiếp theo: https://github.com/Sunagatov/Hello.git .
Chỉ cần sao chép và dán nó vào đầu vào “ URL kho lưu trữ” . Sau đó nhấp vào nút “Áp dụng” và “Lưu” để hoàn tất quá trình tích hợp Git với quy trình.
Bây giờ bạn có thể sử dụng quy trình đã cập nhật của mình để lấy dự án từ Github. Để làm điều đó, bạn cần nhấp vào nút **“Xây dựng ngay”**. Kết quả là bạn sẽ thấy quá trình xây dựng thành công trong lịch sử xây dựng.
Mở bản dựng đầu tiên từ lịch sử bản dựng.
Bây giờ bạn có thể thấy kết quả công việc thành công của bản dựng đầu tiên. Nếu bạn mở thiết bị đầu cuối AWS EC2 của mình. Bạn có thể kiểm tra xem đường ống có hoạt động tốt không.
Chỉ cần sử dụng lệnh này.
cd /var/lib/jenkins/workspace/{your pipeline name}
Bằng cách này, bạn có thể thấy rằng dự án của mình từ Github đã được kéo sang phiên bản máy chủ ảo AWS EC2 của bạn.
Apache Maven là một công cụ quản lý dự án và tự động hóa xây dựng được sử dụng rộng rãi trong phát triển phần mềm. Nó hợp lý hóa quá trình biên dịch, kiểm tra và đóng gói mã bằng cách quản lý các phần phụ thuộc của dự án và cung cấp vòng đời xây dựng nhất quán. Maven sử dụng các tệp cấu hình dựa trên XML (tệp POM) để xác định cấu trúc, các phần phụ thuộc và tác vụ của dự án, cho phép các nhà phát triển quản lý và triển khai hiệu quả các dự án phần mềm phức tạp.
Bây giờ bạn đã tích hợp Git vào quy trình, bạn có thể nâng cao hơn nữa quy trình bằng cách kết hợp Apache Maven cho phép bạn xây dựng, thử nghiệm và đóng gói dự án của mình. Để làm được điều đó, bạn cần cài đặt Apache Maven trên phiên bản Máy chủ ảo AWS EC2 đã cài đặt Jenkins và Git.
Để tải xuống Apache Maven, hãy vào thư mục “/opt” .
cd /opt
Và sau đó sử dụng lệnh này.
sudo wget https://dlcdn.apache.org/maven/maven-3/3.9.4/binaries/apache-maven-3.9.4-bin.tar.gz
Lệnh này sẽ tải xuống Apache Maven chính thức mới nhất (kiểm tra phiên bản mới nhất trên trang web chính thức của Apache Maven). Để tìm bản phát hành Apache Maven chính thức mới nhất, hãy sử dụng liên kết https://maven.apache.org/download.cgi .
Sử dụng lệnh này để trích xuất Apache Maven từ kho lưu trữ đã tải xuống:
sudo tar -xvzf apache-maven-*.tar.gz
Di chuyển đến thư mục gốc bằng lệnh này.
cd ~
Chỉnh sửa tệp .bash_profile bằng lệnh này.
vi .bash_profile
Thêm các biến JAVA_HOME và M2_HOME.
Gán đường dẫn tới JDK11 cho JAVA_HOME và đường dẫn đến thư mục maven cho biến M2_HOME .
Để tìm đường dẫn JDK, hãy sử dụng lệnh này.
sudo find / -name java
Cách sử dụng VIM
Lưu các thay đổi.
Sau đó, thực hiện lệnh này để làm mới các biến hệ thống.
source .bash_profile
Để xác minh $PATH , hãy sử dụng lệnh này.
echo $PATH
Để xác minh Apache Maven , hãy sử dụng lệnh này.
mvn -v
Nếu bạn đã làm mọi thứ chính xác, bạn sẽ có thể xem phiên bản Apache Maven.
Vì Apache Maven có thể được sử dụng trên phiên bản EC2 nên bạn có thể cài đặt plugin Apache Maven để tích hợp nó với quy trình.
Để đạt được điều này, hãy làm theo các bước sau:
Chờ cho đến khi kết thúc quá trình tải xuống.
Và sau đó nhấp vào nút “Quay lại trang đầu” .
Với việc cài đặt thành công plugin Apache Maven Jenkins, giờ đây bạn có thể sử dụng plugin này trong quy trình mà bạn đã tạo và cập nhật trong mô-đun 2 và 3.
Để làm đươc như vậy, hãy tuân theo những bước sau:
Sau đó đi đến phần “Maven” . Nhấp vào nút Thêm Thêm Maven . Bỏ chọn “Cài đặt tự động”.
Sau đó thêm tên và đường dẫn MAVEN_HOME .
Nhấp vào nút “Áp dụng” và “Lưu” .
Đến đây bạn đã cấu hình xong plugin Apache Maven Jenkins.
Bây giờ, khi plugin Apache Maven GitHub đã được cài đặt và định cấu hình, giờ đây bạn có thể sử dụng Apache Maven trong quy trình của mình. Điều này sẽ cho phép quy trình mà bạn đã tạo trong “[mô-đun 2]: Máy chủ Jenkins” xây dựng mã dự án của bạn để tạo một tạo phẩm jar.
Để tích hợp Apache Maven vào quy trình, bạn cần làm theo các bước sau:
Cuối cùng, bạn nên nhấp vào nút “Áp dụng” và “Lưu” để hoàn tất quá trình tích hợp Apache Maven với quy trình.
Bây giờ bạn có thể sử dụng quy trình đã cập nhật để xây dựng dự án Github của mình. Để làm điều đó, bạn cần nhấp vào nút **“Xây dựng ngay”**. Kết quả là bạn sẽ thấy kết quả công việc thành công trong lịch sử xây dựng.
Nếu bạn mở thiết bị đầu cuối AWS EC2 của mình. Bạn có thể kiểm tra xem đường ống có hoạt động tốt không.
Chỉ cần sử dụng lệnh này.
cd /var/lib/jenkins/workspace/{your pipeline name}/target
Bằng cách này, bạn có thể thấy tạo phẩm JAR, cho biết quá trình xây dựng dự án của bạn thành công từ GitHub.
Bây giờ, hãy tạo một phiên bản EC2 mới với tên "Ansible Server" nơi bạn sẽ cài đặt Docker và Ansible.
Sử dụng hướng dẫn từ phần “ Khởi chạy phiên bản Máy chủ ảo AWS EC2” của hướng dẫn này để hoàn thành bước này. Đừng quên thêm thiết lập nhóm bảo mật. Nó cho phép Docker và SSH hoạt động tương ứng trên các cổng 8080 và 22.
Nhấp vào nút “Kết nối”.
Bây giờ bạn có thể thấy thiết bị đầu cuối trực tuyến của phiên bản Máy chủ ảo EC2.
sudo chown ansible-admin:ansible-admin /opt/docker
Bây giờ bạn cần cài đặt docker trên phiên bản Ansible EC2 của mình. Để làm điều đó bạn cần tạo một thư mục docker mới.
sudo mkdir /opt/docker
Sau đó, cài đặt docker bằng cách thực hiện lệnh tiếp theo.
sudo yum install docker -y
Bạn cần thêm người dùng hiện tại “ansible-admin” vào nhóm Docker trên máy chủ ảo “AnsibleServer” EC2 để cấp đặc quyền quản trị viên Docker.
sudo usermod -a -G docker ansible-admin
Bạn sẽ cần phải đăng xuất và đăng nhập lại để những thay đổi này có hiệu lực.
Sau đó, bạn có thể thực hiện lệnh tiếp theo
id ansible-admin
để thấy rằng người dùng docker mới tồn tại.
Bây giờ, khi Docker được cài đặt trên phiên bản Ansible EC2, bạn có thể khởi chạy nó bằng cách thực hiện lệnh tiếp theo.
sudo systemctl start docker
Khi Docker được khởi động, bạn có thể thực hiện lệnh tiếp theo
sudo systemctl status docker
để xem docker đó đang hoạt động và đang chạy.
Trong phiên bản cuối cùng của quy trình, quy trình này sẽ bao gồm việc tạo hình ảnh Docker mới từ dự án GitHub của bạn và đẩy nó lên Docker Hub. Để thực hiện điều này, dự án GitHub của bạn phải chứa Dockerfile.
Nếu bạn đã sử dụng dự án “Xin chào” được cung cấp trong mô-đun “ [Mô-đun 3]: Git và Github” , thì bạn không cần tạo Dockerfile mới vì kho lưu trữ dự án này đã chứa Dockerfile.
FROM eclipse-temurin:17-jre-jammy ENV HOME=/opt/app WORKDIR $HOME ADD hello-0.0.1-SNAPSHOT.jar $HOME ENTRYPOINT ["java", "-jar", "/opt/app/hello-0.0.1-SNAPSHOT.jar" ]
Nếu bạn đã sử dụng kho lưu trữ dự án của riêng mình và nó không chứa Dockerfile, bạn sẽ cần tạo một Dockerfile mới.
Để tạo một Dockerfile mới, hãy thực hiện lệnh sau để tạo tệp mới.
sudo touch Dockerfile
Sau đó, bạn có thể điền vào tệp này một chuỗi lệnh mô tả cách xây dựng môi trường ứng dụng được chứa trong vùng chứa. Các lệnh này bao gồm các hành động như sao chép tệp vào hình ảnh, cài đặt phần mềm, đặt biến môi trường và định cấu hình vùng chứa.
Để điền vào Dockerfile bằng các lệnh này, hãy thực hiện lệnh sau.
vim Dockerfile
Dockerfile đã sẵn sàng để sử dụng.
Bây giờ, Dockerfile của bạn đã sẵn sàng để sử dụng, hãy tiếp tục bằng cách sao chép tạo phẩm JAR của dự án của bạn từ phiên bản **"JenkinsServer"**EC2 và dán nó vào phiên bản EC2 "AnsibleServer" . Điều quan trọng cần lưu ý là việc chuyển tiền này sẽ được tự động hóa hơn nữa thông qua đường ống.
Bằng cách hoàn thành bước này, bạn sẽ sẵn sàng kiểm tra Dockerfile của mình cùng với môi trường Docker mà bạn đã thiết lập.
Trước khi bắt đầu thử nghiệm, hãy đảm bảo bạn xác thực chính mình trên Dockerhub. Thực hiện lệnh sau.
docker login
Lệnh này sẽ nhắc bạn cung cấp thông tin đăng nhập Dockerhub, bao gồm tên người dùng và mật khẩu của bạn.
Với điều này, bạn đã hoàn tất quá trình đăng nhập vào Docker và hiện đã sẵn sàng tiến hành thử nghiệm.
Sau khi hoàn tất đăng nhập thành công vào Dockerhub, bạn đã sẵn sàng bắt đầu thử nghiệm Dockerfile mà bạn đã chuẩn bị.
Thực hiện lệnh này để tạo hình ảnh docker.
docker build -t hello:latest .
Tiếp theo, thực hiện lệnh tiếp theo để thiết lập thẻ hỗ trợ tải hình ảnh lên Dockerhub:
docker tag hello:latest zufarexplainedit/hello:latest
Cuối cùng, tiến hành đẩy hình ảnh Docker lên Dockerhub thông qua việc thực hiện lệnh này.
docker push zufarexplainedit/hello:latest
Làm theo các bước sau, điều hướng đến tài khoản Dockerhub của bạn để xác minh xem bạn có thể nhìn thấy hình ảnh mới hay không.
Bây giờ bạn sẽ thấy rằng hình ảnh đã được thêm vào một cách hiệu quả. Kết quả này xác nhận việc cài đặt thành công môi trường Docker và Dockerfile của bạn là chính xác.
Bây giờ chúng ta hãy định cấu hình Máy chủ Ansible trên phiên bản Máy chủ ảo EC2.
Bạn cần một máy chủ ảo để chạy Ansible.
Làm theo hướng dẫn từ [Mô-đun 1]: Phần Máy chủ ảo AWS EC2 của hướng dẫn này để hoàn thành bước này và tạo phiên bản máy chủ ảo EC2 cho Ansible.
Đừng quên thêm thiết lập nhóm bảo mật. Nó cho phép Ansible và SSH hoạt động tương ứng trên cổng 8080 và 22 .
Sử dụng tên “AnsibleServer” để phân biệt phiên bản Máy chủ ảo EC2 của bạn.
Bạn có thể sử dụng lại nhóm bảo mật “CI_CD_Pipeline” và “CI_CD_Pipeline_Key_Pair“ cho phiên bản EC2 “AnsibleServer” mới.
Đi tới trang chủ Bảng điều khiển AWS → Bảng thông tin Bảng điều khiển quản lý EC2 → Phiên bản → AnsibleServer.
Sau đó nhấp vào nút “Kết nối” .
Sau đó bạn sẽ thấy trang web này. Bạn nên nhấp lại vào nút “Kết nối” .
Bây giờ bạn có thể thấy thiết bị đầu cuối trực tuyến phiên bản máy chủ ảo EC2.
Bây giờ hãy cấu hình Ansible Server trên phiên bản máy chủ ảo EC2.
Điều đầu tiên bạn cần làm khi muốn định cấu hình AnsibleServer trên phiên bản máy chủ ảo EC2 là thay đổi tên máy chủ của nó.
Hãy làm nó. Thực hiện lệnh này để mở tệp tên máy chủ:
sudo vi /etc/hostname
Bạn sẽ thấy một cái gì đó như thế này:
Thay thế tên máy chủ này bằng “ansible-server”. Sau đó, khởi động lại nó.
sudo init 6
Bây giờ, hãy thêm người dùng ansible-admin mới vào phiên bản Máy chủ ảo AWS EC2.
Để làm điều đó sử dụng lệnh này:
sudo useradd ansible-admin
Sau đó, đặt mật khẩu cho người dùng ansible-admin .
sudo passwd ansible-admin
Ngoài ra, bạn cần định cấu hình đặc quyền của người dùng bằng cách chỉnh sửa tệp sudoers .
sudo visudo
Thêm “ansible-admin ALL=(ALL) ALL” vào tệp sudoers này.
Ngoài ra, bạn cần chỉnh sửa tệp /etc/ssh/sshd_config để bật Mật khẩu xác thực.
sudo vi /etc/ssh/sshd_config
Sau đó, bạn cần tải lại dịch vụ để xác nhận những thay đổi này.
sudo service sshd reload
Kết quả của việc thực hiện lệnh này, bạn sẽ thấy:
Bây giờ bạn có thể sử dụng lệnh này để tránh thêm sudo cho tất cả các lệnh tiếp theo.
sudo su - ansible-admin
Bạn đang dự định quản lý thêm các máy chủ từ xa như phiên bản máy chủ ảo K8s EC2 trong bài viết này. Đó là lý do tại sao bạn cần thiết lập khóa SSH.
ssh-keygen
Kết quả của việc thực hiện lệnh này, bạn sẽ thấy:
Bây giờ các khóa SSH đã được tạo và sẵn sàng để sử dụng.
Bây giờ bạn có thể cài đặt Ansible trên phiên bản máy chủ ảo EC2 “AnsibleServer” của mình.
Hãy làm nó.
Thực hiện lệnh này để cài đặt Ansible.
sudo amazon-linux-extras install ansible2
Để xác minh Ansible, hãy sử dụng lệnh này:
ansible --version
Kết quả của việc thực hiện lệnh này, bạn sẽ thấy:
Khi Ansible được cài đặt trên phiên bản máy chủ ảo EC2 “AnsibleServer” của bạn, bạn có thể định cấu hình Jenkins để tích hợp nó với Ansible. Bạn cần cài đặt plugin “Xuất bản qua SSH” để tích hợp Jenkins với phiên bản Máy chủ ảo EC2 nơi Ansible được cài đặt và với các phiên bản Máy chủ ảo EC2 khác nơi cài đặt Kubernetes .
Đi tới “Bảng điều khiển” → “ Quản lý Jenkins” → “Cấu hình hệ thống” → “Các plugin có sẵn” .
Sau đó nhập “Xuất bản qua SSH” vào hộp tìm kiếm.
Nhấp vào nút “Cài đặt mà không cần khởi động lại” . Chờ cho đến khi kết thúc quá trình tải xuống.
Giờ đây, plugin “Xuất bản qua SSH” đã được cài đặt trên phiên bản Máy chủ ảo Jenkins EC2.
Với việc cài đặt thành công plugin Apache Maven Jenkins, giờ đây bạn có thể sử dụng plugin này trong quy trình mà bạn đã tạo và cập nhật trong mô-đun 2 và 3.
Để làm đươc như vậy, hãy tuân theo những bước sau:
Đi tới “Bảng điều khiển“ → “Quản lý Jenkins” → “Cấu hình hệ thống” → “Xuất bản qua SSH” .
Nhập tất cả dữ liệu cần thiết như trên ảnh chụp màn hình, bao gồm tên máy chủ, tên người dùng và khóa riêng (hoặc mật khẩu nếu có).
Sau đó nhấp vào nút “Áp dụng” và “Lưu” .
Đến đây bạn đã hoàn tất việc định cấu hình plugin Jenkins “Xuất bản qua SSH” .
Tiếp theo, nhấp vào “Kiểm tra cấu hình” để xác thực rằng plugin đang hoạt động chính xác.
Ở phía bên trái, bạn có thể thấy trạng thái cấu hình plugin thử nghiệm là “Thành công”. Nó có nghĩa là cấu hình plugin là chính xác.
Bạn cần tạo một thư mục mới trên phiên bản AnsibleServer EC2 nơi JAR của dự án sẽ được lưu trữ. Bình này sẽ được sử dụng để tạo hình ảnh Docker sau này.
Hãy bắt đầu.
Chuyển đến thư mục “/opt” trong phiên bản AnsibleServer EC2.
cd /opt
Tạo một thư mục mới “docker” ở đó.
sudo mkdir docker
Cấp đặc quyền cho thư mục “docker” này.
sudo chown ansible-admin:ansible-admin docker
Bây giờ, hãy kiểm tra các đặc quyền của thư mục “docker” bằng cách thực hiện lệnh này.
ll
Bạn có thể thấy rằng thư mục “docker” có thể truy cập được bằng người dùng “ansible-admin” .
Giờ đây, khi plugin Github “Xuất bản qua SSH” đã được cài đặt và định cấu hình, giờ đây bạn có thể tích hợp nó vào quy trình mà bạn đã tạo trong “[mô-đun 2]: Máy chủ Jenkins” để chuyển một tạo phẩm jar dự án từ “ JenkinsServer” sang “Máy chủ Ansible” .
Chà, để tích hợp plugin Github “Xuất bản qua SSH” vào quy trình, bạn cần làm theo các bước sau:
Cuối cùng, bạn nên nhấp vào nút “Áp dụng” và “Lưu” để hoàn tất quá trình tích hợp plugin “Xuất bản qua SSH” với đường dẫn.
Giờ đây, bạn có thể sử dụng quy trình đã cập nhật của mình để chuyển tạo phẩm jar dự án từ “ JenkinsServer” sang “AnsibleServer” . Để làm điều đó, bạn cần nhấp vào nút “Xây dựng ngay” . Kết quả là bạn sẽ thấy kết quả công việc thành công trong lịch sử xây dựng.
Nếu bạn mở thiết bị đầu cuối AWS EC2 “AnsibleServer” của mình. Bạn có thể kiểm tra xem đường ống có hoạt động tốt không.
Chỉ cần sử dụng lệnh này.
cd /opt/docker
Bằng cách này, bạn có thể thấy tạo phẩm JAR, cho biết quá trình xây dựng dự án của bạn thành công từ GitHub.
Khi bạn chạy Playbook Ansible, bạn chỉ định các máy chủ mà nó sẽ chạy trên đó. Bạn có thể làm điều này theo hai cách:
hosts
thành danh sách địa chỉ IP hoặc tên máy chủ./etc/ansible/hosts
.
Bằng cách chỉnh sửa /etc/ansible/hosts
, bạn có thể dễ dàng quản lý các nhóm máy chủ mà không cần phải ghi địa chỉ IP của chúng mỗi khi bạn chạy playbook.
Hãy cùng tìm hiểu máy chủ lưu trữ phiên bản AnsibleServer EC2 bằng cách thực hiện lệnh sau.
sudo ifconfig
Sau khi tìm ra máy chủ phiên bản AnsibleServer EC2, bạn có thể thêm nó vào tệp máy chủ Ansible bằng cách thực hiện lệnh sau.
sudo vi /etc/ansible/hosts
Bạn cũng có thể thêm “[ansible]” làm tài liệu tham khảo
Nếu bạn đang quản lý một cụm máy chủ và muốn áp dụng một playbook cho tất cả chúng, thay vì chỉ định địa chỉ IP của từng máy chủ trong playbook, bạn có thể chỉ cần thêm tất cả các máy chủ vào một nhóm trong tệp kiểm kê rồi chỉ định nhóm trong vở kịch.
Ansible được thiết kế để tự động hóa các tác vụ trên máy chủ từ xa. Xác thực SSH không mật khẩu cho phép Ansible kết nối với các máy chủ đó mà không cần nhập mật khẩu thủ công.
Thực hiện lệnh này để tạo kết nối an toàn từ máy tính của bạn đến một máy tính khác (như kết nối tại địa chỉ IP 172.31.34.41), sử dụng khóa SSH của người dùng ansible-admin.
sudo ssh-copy-id -i /home/{your user name}/.ssh/id_rsa.pub {your user name}@{your host address}
Trong trường hợp của tôi, nó trông như thế này.
sudo ssh-copy-id -i /home/ansible-admin/.ssh/id_rsa.pub [email protected]
Bây giờ bạn có thể thấy “Số khóa được thêm: 1” . Điều đó có nghĩa là quá trình cài đặt xác thực SSH không mật khẩu đã hoàn tất thành công.
Bây giờ Ansible đã được thiết lập xong và sẵn sàng hoạt động, bạn có thể tạo một Playbook Ansible mới cho quy trình của mình. Playbook này sẽ cho phép Ansible tạo và gửi hình ảnh Docker mới tới Dockerhub.
Đây là cách bạn có thể làm điều đó:
touch hello-app.yml
hello-app.yml
mới tạo. Mở nó lên để chỉnh sửa bằng lệnh này. vi hello-app.yml
--- - hosts: ansible user: root tasks: - name: create docker image command: docker build -t hello:latest . args: chdir: /opt/docker - name: create tag to push image onto dockerhub command: docker tag hello:latest zufarexplainedit/hello:latest - name: push docker image onto dockerhub command: docker push zufarexplainedit/hello:latest
Playbook Ansible cho các tác vụ Docker đã sẵn sàng để sử dụng.
Với Ansible, Playbook Ansible, AnsibleServer và JenkinsServer đều được cấu hình đúng cách, đã đến lúc thử nghiệm playbook Ansible.
Điều hướng đến vị trí của playbook Ansible của bạn.
cd /opt/docker
Sau đó, thực hiện lệnh sau.
sudo -u ansible-admin ansible-playbook /opt/docker/hello-app.yml
Sau khi hoàn thành, bạn sẽ thấy kết quả thực hiện thành công của Playbook Ansible của mình.
Hơn nữa, hãy dành chút thời gian để truy cập tài khoản Dockerhub của bạn và xác minh xem hiện tại có hiển thị hình ảnh mới hay không.
Bạn sẽ thấy hình ảnh mới được thêm vào. Kết quả này xác nhận rằng Playbook Ansible của bạn là chính xác.
Giờ đây, khi plugin Github “Xuất bản qua SSH” , Ansible và Docker đã được cài đặt và định cấu hình, giờ đây bạn có thể tích hợp tất cả chúng vào quy trình mà bạn đã tạo trong “[mô-đun 2]: Máy chủ Jenkins” để chuyển tạo phẩm jar dự án từ “ JenkinsServer” đến “AnsibleServer” , sau đó xây dựng hình ảnh Docker mới từ dự án của bạn rồi đẩy hình ảnh Docker này lên Dockerhub.
Để đạt được nó, bạn cần làm theo các bước sau:
Cuối cùng, hãy nhấp vào nút “Áp dụng” và “Lưu” để hoàn tất việc tích hợp các tác vụ Ansible Docker với quy trình.
Giờ đây, bạn có thể kiểm tra quy trình đã nâng cấp của mình để chuyển liền mạch tạo phẩm jar dự án từ “ JenkinsServer” sang “AnsibleServer” , sau đó tạo hình ảnh Docker mới từ dự án của bạn rồi đẩy hình ảnh Docker này lên Dockerhub. Để làm điều đó, bạn cần nhấp vào nút “Xây dựng ngay” . Kết quả là bạn sẽ thấy kết quả công việc thành công trong lịch sử xây dựng.
Hơn nữa, hãy dành chút thời gian để truy cập tài khoản Dockerhub của bạn và xác minh xem hiện tại có hiển thị hình ảnh mới hay không.
Bạn sẽ thấy hình ảnh mới được thêm vào. Kết quả này xác nhận rằng Playbook Ansible của bạn với các tác vụ Docker đã được tích hợp thành công vào quy trình.
Bây giờ hãy cấu hình K8 trên phiên bản EC2. Bạn sẽ tạo một phiên bản EC2 mới và cài đặt công cụ dòng lệnh kubectl để tương tác sâu hơn với cụm Kubernetes .
Sử dụng hướng dẫn từ phần “ Khởi chạy phiên bản Máy chủ ảo AWS EC2” của hướng dẫn này để hoàn thành bước này.
Đừng quên thêm thiết lập nhóm bảo mật. Nó cho phép tất cả các công cụ và SSH hoạt động tương ứng trên cổng 8080 và 22 .
Sử dụng tên “K8sServer” để phân biệt phiên bản Máy chủ ảo EC2 của bạn.
Bạn có thể sử dụng lại nhóm bảo mật “CI_CD_Pipeline” và “CI_CD_Pipeline_Key_Pair“ cho phiên bản EC2 “K8sServer” mới.
Nhấp vào nút “Kết nối”.
Bây giờ bạn có thể thấy thiết bị đầu cuối trực tuyến của phiên bản Máy chủ ảo EC2.
Điều đầu tiên bạn cần làm khi muốn định cấu hình KuberenetesServer trên phiên bản máy chủ ảo EC2 là thay đổi tên máy chủ của nó.
Hãy làm nó. Thực hiện lệnh này để mở tệp tên máy chủ:
sudo vi /etc/hostname
Bạn sẽ thấy một cái gì đó như thế này.
Thay thế tên máy chủ này bằng “kubernetes-server” rồi khởi động lại nó.
sudo init 6
Tên máy chủ của bạn sẽ được thay đổi.
Sử dụng lệnh này để kiểm tra phiên bản AWS .
aws --version
Bằng cách này, bạn có thể xem phiên bản aws-cli hiện tại của mình.
Nếu bạn có thể thấy phiên bản aws-cli/1.18 , bạn nên tải xuống phiên bản mới nhất.
Bây giờ, khi bạn phát hiện ra rằng mình có phiên bản aws-cli cũ trên phiên bản EC2, bạn cần cập nhật nó. Để làm được điều đó, hãy truy cập AWS → Tài liệu → Giao diện dòng lệnh AWS → Hướng dẫn sử dụng cho Phiên bản 2.
Sao chép-dán lệnh cuộn tròn .
Đầu tiên, thực hiện lệnh này để tải xuống awscli phiên bản 2.
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
Đợi quá trình tải xuống bắt đầu.
Bạn sẽ thấy một cái gì đó như thế này.
Thứ hai, bạn cần thực thi lệnh này để giải nén kho lưu trữ awscli phiên bản 2.
unzip awscliv2.zip
Thứ ba, bạn nên thực hiện lệnh này để cài đặt awscli phiên bản 2.
sudo ./aws/install
Sau đó, tải lại thiết bị đầu cuối trực tuyến phiên bản Máy chủ ảo Kubernetes EC2.
Tiếp theo, sử dụng lệnh này để kiểm tra phiên bản AWS
aws --version
Bạn có thể thấy aws cli có aws-cli/2.
Kubectl là một công cụ dòng lệnh cơ bản để tương tác với bất kỳ cụm Kubernetes nào, bất kể cơ sở hạ tầng cơ bản. Nó cho phép bạn quản lý tài nguyên, triển khai ứng dụng, định cấu hình mạng, nhật ký truy cập và thực hiện nhiều tác vụ khác trong cụm Kubernetes.
Bây giờ bạn cần cài đặt công cụ dòng lệnh kubectl để tương tác thêm với cụm Kubernetes. Để làm được điều đó, bạn cần truy cập AWS → Tài liệu → Amazon EKS → Hướng dẫn sử dụng → Cài đặt hoặc cập nhật kubectl → Linux .
Hoặc chỉ cần nhấp vào liên kết https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html .
Đầu tiên, thực hiện lệnh này để tải xuống kubectl.
curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/1.27.1/2023-04-19/bin/linux/amd64/kubectl
Đợi quá trình tải xuống.
Bạn sẽ thấy một cái gì đó như thế này.
Cấp quyền cho kubectl.
chmod +x kubectl
Di chuyển kubectl vào thư mục /usr/local/bin.
sudo mv kubectl /usr/local/bin
Kiểm tra phiên bản kubectl.
kubectl version --output=yaml
Eksctl là một công cụ dòng lệnh khác được thiết kế riêng cho dịch vụ Amazon EKS. Eksctl có thể được sử dụng để tạo cụm AWS EKS, quản lý nhóm nút và thực hiện các tác vụ dành riêng cho EKS, chẳng hạn như tích hợp với vai trò IAM và các dịch vụ AWS khác bằng cách loại bỏ phần lớn việc quản lý và thiết lập cơ sở hạ tầng AWS.
Thực hiện lệnh tải kubectl.
curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
Di chuyển eksctl vào thư mục /usr/local/bin.
sudo mv /tmp/eksctl /usr/local/bin
Kiểm tra phiên bản của eksctl.
eksctl version
Bạn nên xem phiên bản
Bạn cần tạo một vai trò IAM và gắn nó vào phiên bản EC2 “KubernetesServer” của mình.
Để làm được điều đó bạn cần tìm EC2 trong hộp tìm kiếm.
Chọn Máy chủ ảo EC2 bằng cách nhấp vào liên kết https://us-east-1.console.aws.amazon.com/ec2/ .
Đi tới Bảng điều khiển IAM → Vai trò .
Nhấp vào nút “Tạo vai trò” trên trang web vai trò IAM .
Sau đó chọn “Dịch vụ AWS”, “EC2”. Và nhấp vào nút “Tiếp theo” .
Sau đó, tìm “AmazonEC2FullAccess” , “AmazonEC2FullAccess“ , “IAMFullAccess“ , “AWSCloudFormationFullAccess“ trong hộp tìm kiếm rồi nhấp vào nút “Thêm quyền” .
Và sau đó nhấp vào nút “Tiếp theo” .
Sau đó nhập “Eksctl_Role” vào ô nhập “Tên vai trò” .
Và nhấp vào nút “Tạo vai trò” .
Vai trò cuối cùng đã được tạo.
Truy cập trang web phiên bản AWS EC2. Chọn “KuberbetesServer”. Sau đó nhấp vào “Hành động” → “Bảo mật” → “Sửa đổi vai trò IAM”.
Chọn “Eksctl_Role” rồi nhấp vào nút “Cập nhật vai trò IAM” .
Bây giờ Vai trò IAM của bạn đã được kết nối với công cụ “EKS_Server” và eksctl của bạn.
Cụm Amazon EKS (Dịch vụ Kubernetes đàn hồi) là môi trường Kubernetes được quản lý trên AWS, tự động hóa các tác vụ cơ sở hạ tầng phức tạp như thiết lập, thay đổi quy mô và bảo trì. Điều này rất cần thiết vì nó cung cấp nền tảng hiệu quả, an toàn và được tối ưu hóa cho AWS để triển khai, quản lý và mở rộng quy mô các ứng dụng trong bộ chứa, hợp lý hóa các hoạt động và giúp nhà phát triển tập trung vào mã hóa thay vì quản lý cơ sở hạ tầng cơ bản.
Bây giờ là lúc thiết lập cụm EKS của bạn.
Để đạt được điều này, hãy làm theo các bước sau:
eksctl create cluster --name cluster-name \ --region region-name \ --node-type instance-type \ --nodes-min 2 \ --nodes-max 2 \ --zones <AZ-1>,<AZ-2>
Ví dụ, trong trường hợp của tôi, nó trông như thế này.
eksctl create cluster --name zufarexplainedit \ --region eu-north-1 \ --node-type t3.micro
Thực hiện lệnh đã sửa đổi và kiên nhẫn chờ quá trình tạo cụm hoàn tất. Bạn sẽ nhận thấy trạng thái cụm EKS được biểu thị là "đang tạo" trên trang web AWS CloudFormation.
Quy trình tạo cụm thường mất khoảng 20 phút. Sau khi hoàn thành, thiết bị đầu cuối sẽ hiển thị kết quả của quá trình.
Hơn nữa, bạn có thể xác minh trạng thái tạo cụm EKS thành công trên trang web AWS CloudFormation.
Tệp YAML triển khai Kubernetes là tập lệnh cấu hình được viết ở định dạng YAML nhằm xác định cách quản lý và duy trì một ứng dụng hoặc dịch vụ cụ thể trong cụm Kubernetes. Nó gói gọn các hướng dẫn để sắp xếp việc triển khai, mở rộng quy mô, cập nhật và giám sát các vùng chứa đang chạy ứng dụng. Tệp này bao gồm các chi tiết như hình ảnh vùng chứa, số lượng bản sao mong muốn, giới hạn tài nguyên, biến môi trường, cài đặt mạng, v.v. Khi được áp dụng cho cụm Kubernetes, tệp YAML triển khai đảm bảo trạng thái mong muốn của ứng dụng, tự động quản lý việc tạo, mở rộng quy mô và khôi phục các vùng chứa để duy trì mức độ sẵn có và độ tin cậy mong muốn.
Bây giờ, khi cụm Kubernetes, eksctl, kubectl đã được cài đặt và định cấu hình, bạn có thể tạo tệp yaml Triển khai Kubernetes.
Bạn có thể làm điều đó bằng cách thực hiện lệnh sau.
touch hello-app-deployment.yaml
Sau đó, chỉnh sửa tập tin này bằng cách thực hiện lệnh sau.
vi hello-app-deployment.yaml
Thêm nội dung này vào hello-app-deployment.yaml.
apiVersion: apps/v1 kind: Deployment metadata: name: zufarexplainedit-hello-app labels: app: hello-app spec: replicas: 2 selector: matchLabels: app: hello-app template: metadata: labels: app: hello-app spec: containers: - name: hello-app image: zufarexplainedit/hello imagePullPolicy: Always ports: - containerPort: 8080 strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 maxUnavailable: 1
Bây giờ hello-app-deployment.yaml đã được tạo và sẵn sàng để sử dụng.
Tệp YAML của Dịch vụ Kubernetes là tập lệnh cấu hình được viết ở định dạng YAML nhằm xác định mức độ trừu tượng hóa mạng cho một tập hợp các nhóm, cho phép chúng được truy cập nhất quán trong cụm Kubernetes. Tệp này phác thảo cách dịch vụ sẽ được phát hiện, truy cập và cân bằng tải bởi các dịch vụ khác hoặc máy khách bên ngoài. Nó bao gồm các thông số kỹ thuật như loại dịch vụ (ClusterIP, NodePort, LoadBalancer), số cổng, bộ chọn để xác định nhóm, v.v. Khi được áp dụng cho cụm Kubernetes, tệp Service YAML sẽ tạo một cổng và IP ảo định tuyến lưu lượng truy cập đến các nhóm thích hợp, trừu tượng hóa các thay đổi của nhóm cơ bản và cung cấp điểm cuối ổn định để liên lạc, cho phép kết nối liền mạch và mở rộng quy mô linh hoạt.
Khi Kubernetes cluster, eksctl, kubectl được cài đặt và cấu hình, bạn có thể tạo tệp yaml của Kubernetes Service.
Để làm điều đó, bạn cần tạo tệp yaml Dịch vụ Kubernetes bằng cách thực hiện lệnh sau.
touch hello-app-service.yaml
Sau đó, chỉnh sửa tập tin này bằng cách thực hiện lệnh sau.
vi hello-app-service.yaml
Thêm nội dung này vào hello-app-deployment.yaml.
apiVersion: v1 kind: Service metadata: name: zufarexplainedit-hello-app-service labels: app: hello-app spec: selector: app: hello-app ports: - port: 8080 targetPort: 8080 type: LoadBalancer
Bây giờ hello-app-service.yaml đã được tạo và sẵn sàng để sử dụng.
Khi cụm Kubernetes EKS đã được cài đặt và định cấu hình thành công cũng như các tệp triển khai và dịch vụ Kubernetes của bạn đã sẵn sàng, đã đến lúc thử nghiệm mọi thứ bằng lệnh kubectl.
Áp dụng triển khai.
Sử dụng lệnh sau để áp dụng cấu hình triển khai.
kubectl apply -f hello-app-deployment.yaml
Điều này sẽ tạo ra một quá trình triển khai với số lượng bản sao được chỉ định và chiến lược cập nhật luân phiên, đảm bảo tính khả dụng và khả năng quản lý của ứng dụng của bạn.
2. Áp dụng dịch vụ.
Tiếp theo, áp dụng cấu hình dịch vụ.
kubectl apply -f hello-app-service.yaml
Thao tác này sẽ thiết lập dịch vụ loại LoadBalancer, hiển thị ứng dụng của bạn trên internet.
Lưu ý rằng có thể mất một chút thời gian để LoadBalancer được cấp phép và nhận địa chỉ IP bên ngoài.
Kiểm tra trạng thái LoadBalancer.
Theo dõi trạng thái dịch vụ của bạn bằng cách sử dụng.
kubectl get service zufarexplainedit-hello-app-service
Khi một IP bên ngoài được chỉ định, bạn gần như đã sẵn sàng truy cập vào ứng dụng của mình.
Truy cập ứng dụng của bạn.
Sử dụng trình duyệt web, nhập địa chỉ IP bên ngoài được chỉ định theo sau: 8080. Sau một lát, trang sẽ tải và hiển thị thông báo "HelloWorld". Hãy nhớ rằng quá trình tải lần đầu có thể mất vài giây.
Khi cần dọn dẹp tài nguyên trong môi trường Kubernetes, bạn có thể sử dụng các lệnh kubectl sau để loại bỏ các hoạt động triển khai, nhóm và dịch vụ một cách hiệu quả.
1. Xóa tất cả triển khai .
Để xóa tất cả các triển khai, bạn có thể sử dụng lệnh sau.
kubectl delete deployments --all
Hành động này đảm bảo rằng không còn phiên bản triển khai đang hoạt động nào trong cụm của bạn.
2. Xóa tất cả các nhóm .
Nếu bạn cần xóa tất cả các nhóm, cho dù chúng có được quản lý bởi quá trình triển khai hay không, bạn có thể sử dụng lệnh sau.
kubectl delete pods --all
Việc xóa nhóm có thể giúp đặt lại trạng thái cụm của bạn hoặc chuẩn bị cho quá trình triển khai mới.
3. Xóa tất cả dịch vụ .
Để dọn dẹp các dịch vụ hiển thị ứng dụng của bạn trên mạng, bạn có thể sử dụng lệnh sau.
kubectl delete services --all
Việc xóa dịch vụ có thể dẫn đến thời gian ngừng hoạt động, vì vậy hãy cân nhắc các tác động trước khi tiếp tục.
Để xóa tất cả tài nguyên được liên kết với cụm Amazon EKS được chỉ định được tạo bằng eksctl
, bao gồm nút công nhân, thành phần mạng và các tài nguyên khác, bạn có thể sử dụng lệnh sau.
eksctl delete cluster --name {your cluster name} --region {your region name}
Đối với tôi nó là.
eksctl delete cluster --name zufarexplainedit --region eu-north-1
Hãy đảm bảo bạn chắc chắn về việc dừng cụm vì hành động này không thể đảo ngược và sẽ dẫn đến mất dữ liệu.
Bây giờ, hãy thêm người dùng ansible-admin mới vào phiên bản Máy chủ ảo AWS EC2 “KubernetesServer” .
Để làm điều đó sử dụng lệnh này.
sudo useradd ansible-admin
Sau đó, đặt mật khẩu cho người dùng ansible-admin .
sudo passwd ansible-admin
Ngoài ra, bạn cần định cấu hình đặc quyền của người dùng bằng cách chỉnh sửa tệp sudoers .
sudo visudo
Thêm “ansible-admin ALL=(ALL) ALL” vào tệp sudoers này.
Ngoài ra, bạn cần chỉnh sửa tệp /etc/ssh/sshd_config để bật Mật khẩu xác thực.
sudo vi /etc/ssh/sshd_config
Sau đó, bạn cần tải lại dịch vụ để thực hiện những thay đổi này.
sudo service sshd reload
Kết quả của việc thực hiện lệnh này, bạn sẽ thấy:
Bây giờ bạn có thể sử dụng lệnh này để tránh thêm sudo cho tất cả các lệnh tiếp theo.
sudo su - ansible-admin
Bạn đang dự định quản lý thêm các máy chủ từ xa như phiên bản máy chủ ảo K8s EC2 trong bài viết này. Đó là lý do tại sao bạn cần thiết lập khóa SSH.
ssh-keygen
Kết quả của việc thực hiện lệnh này, bạn sẽ thấy:
Bây giờ các khóa SSH đã được tạo và sẵn sàng để sử dụng.
Ansible được thiết kế để tự động hóa các tác vụ trên máy chủ từ xa. Xác thực SSH không mật khẩu cho phép Ansible kết nối với các máy chủ đó mà không cần nhập mật khẩu thủ công.
Thực hiện lệnh này để tạo kết nối an toàn từ máy tính của bạn đến một máy tính khác (như kết nối tại địa chỉ IP 172.31.34.41), sử dụng khóa SSH của người dùng ansible-admin.
sudo ssh-copy-id -i /home/{your user name}/.ssh/id_rsa.pub {your user name}@{your host address}
Trong trường hợp của tôi, nó trông như thế này.
sudo ssh-copy-id -i /home/ansible-admin/.ssh/id_rsa.pub [email protected]
Bây giờ bạn có thể thấy “Số khóa được thêm: 1” . Điều đó có nghĩa là quá trình cài đặt xác thực SSH không mật khẩu đã hoàn tất thành công.
Khi bạn chạy Playbook Ansible, bạn chỉ định các máy chủ mà nó sẽ chạy trên đó. Trong bước này, bạn cần chỉ định máy chủ phiên bản KubernetesServer EC2. Để làm điều đó, bạn cần lặp lại các bước tương tự mà bạn đã thực hiện trong “ [Học phần 6]: Ansible”.
Hãy cùng tìm hiểu máy chủ phiên bản KubernetesServer EC2 bằng cách thực hiện lệnh sau.
sudo ifconfig
Sau khi tìm thấy máy chủ phiên bản KubernetesServer EC2, bạn có thể thêm nó vào tệp máy chủ Ansible bằng cách thực hiện lệnh sau.
sudo vi /etc/ansible/hosts
Bạn cũng có thể thêm “[kubernetes]” làm tài liệu tham khảo
Bây giờ Kubernetes đã hoàn tất thiết lập và sẵn sàng hoạt động, bạn có thể tạo cẩm nang Ansible mới với các nhiệm vụ Kubernetes cho quy trình của mình. Cẩm nang này sẽ cho phép Ansible chạy ứng dụng của bạn trên cụm Kubernetes bằng các lệnh kubectl.
Đây là cách bạn có thể làm điều đó:
touch kubernetes-hello-app.yml
hello-app.yml
mới tạo. Mở nó lên để chỉnh sửa bằng lệnh này. vi kubernetes-hello-app.yml
--- - hosts: kubernetes tasks: - name: deploy regapp on kubernetes command: kubectl apply -f hello-app-deployment.yaml - name: create service for regapp command: kubectl apply -f hello-app-service.yaml - name: update deployment with new pods if image updated in docker hub command: kubectl rollout restart deployment.apps/zufarexplainedit-hello-app
Playbook Ansible cho các tác vụ Kubernetes đã sẵn sàng để sử dụng.
Giờ đây, playbook Kubernetes, Ansible và Ansible cho các tác vụ Kubernetes đều đã được thiết lập và sẵn sàng hoạt động, bạn có thể tích hợp nó với Jenkins.
Đi tới JenkinsServer → bảng điều khiển Jenkins → Mục mới.
Tạo dự án Jenkins Freestyle mới với tên “CD-Job”.
Nhấp vào nút “OK”.
Chuyển đến phần “Hành động sau xây dựng”.
Nhấp vào nút “Thêm hành động sau khi xây dựng”.
Chọn tùy chọn “Gửi tạo phẩm xây dựng qua SSH”.
Chọn “AnsibleServer” làm Máy chủ SSH.
Thêm lệnh này vào đầu vào “lệnh thực thi”.
sudo -u ansible-admin ansible-playbook /opt/docker/kubernetes-hello-app.yml
Nhấp vào nút “Áp dụng” và “Lưu”.
Đi tới bảng điều khiển Jenkins → “CI_CD_Pipeline” → Định cấu hình → phần “Hành động sau xây dựng”.
Nhấp vào nút “Thêm hành động sau khi xây dựng”.
Chọn tùy chọn “Xây dựng các dự án khác”.
Đi tới phần “Xây dựng các dự án khác”.
Chọn tùy chọn “Chỉ kích hoạt nếu bản dựng ổn định”.
Thêm “CD-Job” vào đầu vào “Dự án xây dựng”.
Nhấp vào nút “Áp dụng” và “Lưu”.
Bây giờ bạn có thể coi như đường ống đã hoàn tất và sẵn sàng để sử dụng.
Bây giờ là lúc đưa phiên bản quy trình cuối cùng vào thử nghiệm.
Điều hướng đến Jenkins → bảng điều khiển Jenkins → "CI_CD_Pipeline".
Nhấp vào nút "Xây dựng ngay".
Để xem kết quả, hãy xem lại nhật ký bảng điều khiển bản dựng.
Bạn sẽ nhận thấy rằng "CD-Job" đã được kích hoạt trong nhật ký bảng điều khiển bản dựng và trạng thái cuối cùng được đánh dấu là THÀNH CÔNG.
4
Hơn nữa, bạn có thể đến Dockerhub để xác nhận việc bổ sung hình ảnh Docker mới.
Và cuối cùng, bạn có thể truy cập ứng dụng của mình bằng trình duyệt web. Nhập địa chỉ IP bên ngoài được chỉ định theo sau là ":8080". Sau một lát, trang sẽ tải và hiển thị thông báo "HelloWorld".
Bạn đã hoàn thành tốt việc thiết lập quy trình CI/CD hiện đại này!
Bạn đã làm một công việc tuyệt vời và bạn là một anh hùng thực sự!
Cảm ơn tất cả nỗ lực của bạn!
Zufar Sunagatov là một kỹ sư phần mềm cao cấp giàu kinh nghiệm, đam mê thiết kế các hệ thống phần mềm hiện đại.