Chuỗi hội thảo trên web: Quản lý gói Kubernetes với Helm và CI / CD với Jenkins X
Chuỗi hội thảo trên web
Bài viết này bổ sung một loạt hội thảo trên web về làm CI / CD với Kubernetes . Loạt bài thảo luận về cách thực hiện phương pháp tiếp cận root cloud để xây dựng, thử nghiệm và triển khai ứng dụng, bao gồm quản lý phát hành, công cụ root cloud , lưới dịch vụ và các công cụ CI / CD được dùng với Kubernetes. Nó được thiết kế để giúp các nhà phát triển và doanh nghiệp quan tâm đến việc tích hợp các phương pháp hay nhất về CI / CD với Kubernetes vào quy trình làm việc của họ.
Hướng dẫn này bao gồm các khái niệm và lệnh từ phiên thứ hai của loạt bài, Quản lý gói Kubernetes với Helm và CI / CD với Jenkins X.
Cảnh báo: Các quy trình trong hướng dẫn này chỉ nhằm mục đích demo . Do đó, họ không tuân theo các phương pháp tốt nhất và các biện pháp bảo mật cần thiết cho việc triển khai sẵn sàng production .
Để giảm lỗi và tổ chức sự phức tạp khi triển khai ứng dụng, hệ thống CI / CD phải bao gồm công cụ mạnh mẽ để quản lý / triển khai gói và đường ống với kiểm tra tự động. Nhưng trong các môi trường production hiện đại, sự phức tạp ngày càng tăng của cơ sở hạ tầng dựa trên cloud có thể gây ra các vấn đề trong việc kết hợp một môi trường CI / CD tin cậy . Hai công cụ dành riêng cho Kubernetes được phát triển để giải quyết vấn đề này là trình quản lý gói Helm và công cụ tự động hóa đường ống Jenkins X.
Helm là trình quản lý gói được thiết kế đặc biệt cho Kubernetes, được duy trì bởi Cloud Native Computing Foundation (CNCF) phối hợp với Microsoft, Google, Bitnami và cộng đồng người đóng góp Helm. Ở cấp độ cao, nó hoàn thành các mục tiêu giống như các trình quản lý gói hệ thống Linux như APT hoặc YUM: quản lý việc cài đặt các ứng dụng và phụ thuộc đằng sau mức thấp và che giấu sự phức tạp khỏi user . Nhưng với Kubernetes, nhu cầu về kiểu quản lý này thậm chí còn rõ ràng hơn: Việc cài đặt ứng dụng đòi hỏi sự phức tạp và tẻ nhạt của các file YAML và việc nâng cấp hoặc quay lại các bản phát hành có thể từ khó đến không thể. Để giải quyết vấn đề này, Helm chạy trên Kubernetes và đóng gói các ứng dụng thành các tài nguyên được cấu hình sẵn gọi là biểu đồ , user có thể quản lý bằng các lệnh đơn giản, giúp quá trình chia sẻ và quản lý ứng dụng thân thiện hơn.
Jenkins X là một công cụ CI / CD được sử dụng để tự động hóa đường ống production và môi trường cho Kubernetes. Sử dụng Docker image , biểu đồ Helm và công cụ đường ống Jenkins, Jenkins X có thể tự động quản lý các bản phát hành và version cũng như quảng bá ứng dụng giữa các môi trường trên GitHub.
Trong bài viết thứ hai của loạt bàiCI / CD với Kubernetes , bạn sẽ xem trước hai công cụ này bằng cách:
Quản lý, tạo và triển khai các gói Kubernetes với Helm.
Xây dựng đường ống CI / CD với Jenkins X.
Mặc dù nhiều nền tảng Kubernetes có thể sử dụng Helm và Jenkins X, trong hướng dẫn này, bạn sẽ chạy một cụm Kubernetes mô phỏng, được cài đặt trong môi trường local của bạn. Để làm điều này, bạn sẽ sử dụng Minikube , một chương trình cho phép bạn dùng thử các công cụ Kubernetes trên máy của riêng mình mà không cần phải cài đặt một cụm Kubernetes thực sự.
Đến cuối hướng dẫn này, bạn sẽ có hiểu biết cơ bản về cách các công cụ root Kubernetes này có thể giúp bạn triển khai hệ thống CI / CD cho ứng dụng cloud của bạn .
Yêu cầu
Để làm theo hướng dẫn này, bạn cần :
Server Ubuntu 16.04 có RAM 16 GB trở lên. Vì hướng dẫn này chỉ dành cho mục đích demo , các lệnh được chạy từ account root . Lưu ý các quyền không bị hạn chế của account này không tuân theo các phương pháp hay nhất dành cho production và có thể ảnh hưởng đến hệ thống của bạn. Vì lý do này, bạn nên làm theo các bước sau trong môi trường thử nghiệm như máy ảo hoặc DigitalOcean Server .
Tài khoản GitHub và mã thông báo API GitHub . Hãy nhớ ghi lại mã thông báo API này để bạn có thể nhập mã này trong phần Jenkins X của hướng dẫn này.
Quen thuộc với các khái niệm Kubernetes. Vui lòng tham khảo bài viết Giới thiệu về Kubernetes để biết thêm chi tiết.
Bước 1 - Tạo Cụm Kubernetes local với Minikube
Trước khi cài đặt Minikube, bạn sẽ phải cài đặt các phụ thuộc của nó, bao gồm công cụ dòng lệnh Kubernetes kubectl , socat chuyển tiếp dữ liệu hai chiều và chương trình containers Docker .
Trước tiên, hãy đảm bảo trình quản lý gói của hệ thống có thể truy cập các gói qua HTTPS với apt-transport-https
:
- apt-get update
- apt-get install apt-transport-https
Tiếp theo, đảm bảo download kubectl hợp lệ, hãy thêm khóa GPG cho repository chính thức của Google vào hệ thống của bạn:
- curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
Khi bạn đã thêm khóa GPG, hãy tạo file /etc/apt/sources.list.d/kubernetes.list
bằng cách mở nó trong editor của bạn:
- nano /etc/apt/sources.list.d/kubernetes.list
Khi file này được mở, hãy thêm dòng sau:
deb http://apt.kubernetes.io/ kubernetes-xenial main
Điều này sẽ hiển thị cho hệ thống của bạn nguồn để download kubectl. Khi bạn đã thêm dòng, hãy lưu và thoát khỏi file . Với editor nano, bạn có thể thực hiện việc này bằng cách nhấn CTRL+X
, nhập y
và nhấn ENTER
.
Cuối cùng, cập nhật danh sách nguồn cho APT và cài đặt kubectl
, socat
và docker.io
:
- apt-get update
- apt-get install -y kubectl socat docker.io
Lưu ý: Để Minikube mô phỏng một cụm Kubernetes, bạn phải download gói docker.io
thay vì bản phát hành docker.io
docker-ce
mới hơn. Đối với các môi trường sẵn sàng production , docker-ce
sẽ là lựa chọn thích hợp hơn, vì nó được duy trì tốt hơn trong repository lưu trữ Docker chính thức.
Đến đây bạn đã cài đặt kubectl, bạn có thể tiến hành cài đặt Minikube . Đầu tiên, sử dụng curl
để download file binary của chương trình:
- curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.28.0/minikube-linux-amd64
Tiếp theo, thay đổi quyền truy cập của file bạn vừa download để hệ thống của bạn có thể thực thi nó:
- chmod +x minikube
Cuối cùng, sao chép file minikube
vào đường dẫn thực thi tại /usr/local/bin/
và xóa file root khỏi folder chính của bạn:
- cp minikube /usr/local/bin/
- rm minikube
Với Minikube được cài đặt trên máy của bạn, bây giờ bạn có thể khởi động chương trình. Để tạo một cụm Minikube Kubernetes, hãy sử dụng lệnh sau:
- minikube start --vm-driver none
Cờ --vm-driver none
hướng dẫn Minikube chạy Kubernetes trên server local bằng cách sử dụng các containers thay vì máy ảo. Chạy Minikube theo cách này nghĩa là bạn không cần download trình điều khiển máy ảo, nhưng cũng nghĩa là server Kubernetes API sẽ chạy không an toàn dưới dạng root.
Cảnh báo: Vì server API có quyền root sẽ có quyền truy cập không giới hạn vào server local , bạn không nên chạy Minikube bằng cách sử dụng trình điều khiển none
trên các máy trạm cá nhân.
Đến đây bạn đã khởi động Minikube, hãy kiểm tra đảm bảo rằng cụm của bạn đang chạy bằng lệnh sau:
- minikube status
Bạn sẽ nhận được kết quả sau, với địa chỉ IP của bạn thay cho your_IP_address
:
minikube: Running cluster: Running kubectl: Correctly Configured: pointing to minikube-vm at your_IP_address
Đến đây bạn đã cài đặt cụm Kubernetes mô phỏng của bạn bằng Minikube, bạn có thể có được kinh nghiệm với quản lý gói Kubernetes bằng cách cài đặt và cấu hình trình quản lý gói Helm trên đầu cụm của bạn.
Bước 2 - Cài đặt Trình quản lý gói Helm trên Cụm của bạn
Để điều phối việc cài đặt các ứng dụng trên cụm Kubernetes của bạn, bây giờ bạn sẽ cài đặt trình quản lý gói Helm. Helm bao gồm một helm
khách hàng mà chạy ngoài cụm và tiller
server quản lý version ứng dụng từ bên trong cluster. Bạn sẽ phải cài đặt và cấu hình cả hai để chạy Helm thành công trên cụm của bạn .
Để cài đặt các file binary Helm , trước tiên hãy sử dụng curl
để download lệnh cài đặt sau từ repository Helm GitHub chính thức vào một file mới có tên get_helm.sh
:
- curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > get_helm.sh
Vì tập lệnh này yêu cầu quyền truy cập root, hãy thay đổi quyền của get_helm.sh
để chủ sở hữu của file (trong trường hợp này là root) có thể đọc, ghi và thực thi nó:
- chmod 700 get_helm.sh
Bây giờ, hãy thực thi tập lệnh:
- ./get_helm.sh
Khi tập lệnh kết thúc, bạn sẽ cài đặt helm
vào /usr/local/bin/helm
và cài đặt tiller
vào /usr/local/bin/tiller
.
Mặc dù tiller
hiện đang được cài đặt, nó chưa có role chính xác và cho phép truy cập vào các nguồn lực cần thiết trong cluster Kubernetes của bạn. Để gán các role và quyền này cho tiller
, bạn sẽ phải tạo một tài khoản dịch vụ có tên tiller
. Trong Kubernetes, account dịch vụ đại diện cho danh tính cho các quy trình chạy trong một group . Sau khi quy trình được xác thực thông qua account dịch vụ, quy trình đó có thể liên hệ với server API và truy cập tài nguyên cụm. Nếu một group không được chỉ định một account dịch vụ cụ thể, nó sẽ nhận account dịch vụ mặc định. Bạn cũng sẽ phải tạo một điều khiển truy cập dựa trên role cai trị (RBAC) mà cho phép các tiller
account dịch vụ.
Trong Kubernetes RBAC API, một role chứa các luật xác định một tập hợp các quyền. Một role có thể được xác định với phạm vi namespace
hoặc cluster
và chỉ có thể cấp quyền truy cập vào tài nguyên trong một không gian tên duy nhất. ClusterRole
có thể tạo các quyền giống nhau ở cấp độ của một cụm, cấp quyền truy cập vào các tài nguyên trong phạm vi cụm như các node và các tài nguyên có không gian tên như group . Để chỉ định đúng role của account dịch vụ tiller
đất, hãy tạo một file YAML có tên rbac_helm.yaml
và mở nó trong editor của bạn:
- nano rbac_helm.yaml
Thêm các dòng sau vào file để cấu hình account dịch vụ tiller
:
apiVersion: v1 kind: ServiceAccount metadata: name: tiller namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: tiller roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: tiller namespace: kube-system - kind: User name: "admin" apiGroup: rbac.authorization.k8s.io - kind: User name: "kubelet" apiGroup: rbac.authorization.k8s.io - kind: Group name: system:serviceaccounts apiGroup: rbac.authorization.k8s.io
Trong file trước, ServiceAccount
cho phép người tiller
quá trình để truy cập apiserver như một account dịch vụ chứng thực. ClusterRole
trao quyền nhất định để một role , và ClusterRoleBinding
chuyển nhượng mà vai một danh sách các subjects
, bao gồm tiller
account dịch vụ, admin
và kubelet
user , và các system:serviceaccounts
group .
Tiếp theo, triển khai cấu hình trong rbac_helm.yaml
bằng lệnh sau:
- kubectl apply -f rbac_helm.yaml
Với tiller
cấu hình triển khai, bây giờ bạn có thể khởi tạo Helm với --service-acount
cờ để sử dụng account dịch vụ bạn chỉ cần cài đặt :
- helm init --service-account tiller
Bạn sẽ nhận được kết quả sau, đại diện cho quá trình khởi tạo thành công:
OutputCreating /root/.helm Creating /root/.helm/repository Creating /root/.helm/repository/cache Creating /root/.helm/repository/local Creating /root/.helm/plugins Creating /root/.helm/starters Creating /root/.helm/cache/archive Creating /root/.helm/repository/repositories.yaml Adding stable repo with URL: https://kubernetes-charts.storage.googleapis.com Adding local repo with URL: http://127.0.0.1:8879/charts $HELM_HOME has been configured at /root/.helm. Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster. Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy. To prevent this, run `helm init` with the --tiller-tls-verify flag. For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation Happy Helming!
Điều này tạo ra một tiller
pod trong kube-system
không gian tên. Nó cũng tạo repository mặc định .helm
trong folder $HOME
của bạn và cấu hình repository biểu đồ ổn định Helm mặc định tại https://kubernetes-charts.storage.googleapis.com
và repository Helm local tại http://127.0.0.1:8879/charts
.
Để chắc chắn rằng tiller
pod đang chạy trong kube-system
namespace, nhập lệnh sau:
- kubectl --namespace kube-system get pods
Trong danh sách group của bạn, tiller-deploy
sẽ xuất hiện, như trong kết quả sau:
OutputNAME READY STATUS RESTARTS AGE etcd-minikube 1/1 Running 0 2h kube-addon-manager-minikube 1/1 Running 0 2h kube-apiserver-minikube 1/1 Running 0 2h kube-controller-manager-minikube 1/1 Running 0 2h kube-dns-86f4d74b45-rjql8 3/3 Running 0 2h kube-proxy-dv268 1/1 Running 0 2h kube-scheduler-minikube 1/1 Running 0 2h kubernetes-dashboard-5498ccf677-wktkl 1/1 Running 0 2h storage-provisioner 1/1 Running 0 2h tiller-deploy-689d79895f-bggbk 1/1 Running 0 5m
Nếu trạng thái của hộp tiller
là Running
, giờ đây nó có thể quản lý các ứng dụng Kubernetes từ bên trong cụm của bạn thay mặt cho Helm.
Để đảm bảo toàn bộ ứng dụng Helm đang hoạt động, hãy tìm kiếm repository Helm cho một ứng dụng như MongoDB:
- helm search mongodb
Trong kết quả , bạn sẽ thấy danh sách các ứng dụng có thể có phù hợp với cụm từ tìm kiếm của bạn:
OutputNAME CHART VERSION APP VERSION DESCRIPTION stable/mongodb 5.4.0 4.0.6 NoSQL document-oriented database that stores JSON-like do... stable/mongodb-replicaset 3.9.0 3.6 NoSQL document-oriented database that stores JSON-like do... stable/prometheus-mongodb-exporter 1.0.0 v0.6.1 A Prometheus exporter for MongoDB metrics stable/unifi 0.3.1 5.9.29 Ubiquiti Network's Unifi Controller
Đến đây bạn đã cài đặt Helm trên cụm Kubernetes của bạn , bạn có thể tìm hiểu thêm về trình quản lý gói bằng cách tạo biểu đồ Helm mẫu và triển khai ứng dụng từ nó.
Bước 3 - Tạo biểu đồ và triển khai ứng dụng với Helm
Trong trình quản lý gói Helm, các gói riêng lẻ được gọi là biểu đồ . Trong biểu đồ, một tập hợp các file xác định một ứng dụng, có thể khác nhau về độ phức tạp từ một group đến một ứng dụng có cấu trúc, đầy đủ. Bạn có thể download biểu đồ từ repository Helm hoặc bạn có thể sử dụng lệnh helm create
Helm để tạo biểu đồ của bạn .
Để kiểm tra các khả năng của Helm, hãy tạo một biểu đồ Helm mới có tên demo
bằng lệnh sau:
- helm create demo
Trong folder chính của bạn, bạn sẽ tìm thấy một folder mới được gọi là demo
, trong đó bạn có thể tạo và chỉnh sửa các mẫu biểu đồ của riêng mình.
Di chuyển vào folder demo
và sử dụng ls
để liệt kê nội dung của nó:
- cd demo
- ls
Bạn sẽ tìm thấy các file và folder sau trong demo
:
charts Chart.yaml templates values.yaml
Sử dụng editor của bạn, mở file Chart.yaml
:
- nano Chart.yaml
Bên trong, bạn sẽ tìm thấy các nội dung sau:
apiVersion: v1 appVersion: "1.0" description: A Helm chart for Kubernetes name: demo version: 0.1.0
Trong file Chart.yaml
này, bạn sẽ tìm thấy các trường như apiVersion
, phải luôn là v1
, description
cung cấp thông tin bổ sung về demo
là gì, name
của biểu đồ và số version
mà Helm sử dụng làm điểm đánh dấu phát hành. Khi bạn kiểm tra xong file , hãy đóng editor của bạn.
Tiếp theo, mở file giá values.yaml
:
- nano values.yaml
Trong file này, bạn sẽ tìm thấy các nội dung sau:
# Default values for demo. # This is a YAML-formatted file. # Declare variables to be passed into your templates. replicaCount: 1 image: repository: nginx tag: stable pullPolicy: IfNotPresent nameOverride: "" fullnameOverride: "" service: type: ClusterIP port: 80 ingress: enabled: false annotations: {} # kubernetes.io/ingress.class: nginx # kubernetes.io/tls-acme: "true" paths: [] hosts: - chart-example.local tls: [] # - secretName: chart-example-tls # hosts: # - chart-example.local resources: {} # We usually recommend not to specify default resources and to leave this as a conscious # choice for the user. This also increases chances charts run on environments with little # resources, such as Minikube. If you do want to specify resources, uncomment the following # lines, adjust them as necessary, and remove the curly braces after 'resources:'. # limits: # cpu: 100m # memory: 128Mi # requests: # cpu: 100m # memory: 128Mi nodeSelector: {} tolerations: [] affinity: {}
Bằng cách thay đổi nội dung của giá values.yaml
, các nhà phát triển biểu đồ có thể cung cấp các giá trị mặc định cho ứng dụng được xác định trong biểu đồ, kiểm soát số lượng bản sao, cơ sở hình ảnh, truy cập xâm nhập, quản lý bí mật, values.yaml
User biểu đồ có thể cung cấp giá trị của riêng họ cho các thông số này bằng file YAML tùy chỉnh bằng cách sử dụng helm install
. Khi user cung cấp các giá trị tùy chỉnh, các giá trị này sẽ overrides các giá trị trong file giá values.yaml
của biểu đồ.
Đóng file giá values.yaml
và liệt kê nội dung của folder templates
bằng lệnh sau:
- ls templates
Tại đây, bạn sẽ tìm thấy các mẫu cho các file khác nhau có thể kiểm soát các khía cạnh khác nhau của biểu đồ của bạn:
deployment.yaml _helpers.tpl ingress.yaml NOTES.txt service.yaml tests
Đến đây bạn đã khám phá biểu đồ demo
, bạn có thể thử nghiệm cài đặt biểu đồ Helm bằng cách cài đặt demo
. Quay lại folder chính của bạn bằng lệnh sau:
- cd
Cài đặt biểu đồ Helm demo
dưới tên web
với helm install
:
- helm install --name web ./demo
Bạn sẽ nhận được kết quả sau:
OutputNAME: web LAST DEPLOYED: Wed Feb 20 20:59:48 2019 NAMESPACE: default STATUS: DEPLOYED RESOURCES: ==> v1/Service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE web-demo ClusterIP 10.100.76.231 <none> 80/TCP 0s ==> v1/Deployment NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE web-demo 1 0 0 0 0s ==> v1/Pod(related) NAME READY STATUS RESTARTS AGE web-demo-5758d98fdd-x4mjs 0/1 ContainerCreating 0 0s NOTES: 1. Get the application URL by running these commands: export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=demo,app.kubernetes.io/instance=web" -o jsonpath="{.items[0].metadata.name}") echo "Visit http://127.0.0.1:8080 to use your application" kubectl port-forward $POD_NAME 8080:80
Trong kết quả này, bạn sẽ tìm thấy STATUS
của ứng dụng, cùng với danh sách các tài nguyên có liên quan trong cụm của bạn.
Tiếp theo, liệt kê các triển khai được tạo bởi biểu đồ Helm demo
bằng lệnh sau:
- kubectl get deploy
Điều này sẽ mang lại kết quả kết quả sẽ liệt kê các triển khai đang hoạt động của bạn:
OutputNAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE web-demo 1 1 1 1 4m
Liệt kê các group của bạn bằng lệnh kubectl get pods
sẽ hiển thị các group đang chạy ứng dụng web
của bạn, trông giống như sau:
OutputNAME READY STATUS RESTARTS AGE web-demo-5758d98fdd-nbkqd 1/1 Running 0 4m
Để chứng minh cách những thay đổi trong biểu đồ Helm có thể phát hành các version khác nhau của ứng dụng của bạn, hãy mở demo/values.yaml
trong editor của bạn và thay đổi replicaCount:
thành 3
và image:tag:
từ stable
thành latest
. Trong khối mã sau, bạn sẽ tìm thấy file YAML trông như thế nào sau khi bạn sửa đổi xong nó, với các thay đổi được đánh dấu:
# Default values for demo. # This is a YAML-formatted file. # Declare variables to be passed into your templates. replicaCount: 3 image: repository: nginx tag: latest pullPolicy: IfNotPresent nameOverride: "" fullnameOverride: "" service: type: ClusterIP port: 80 . . .
Lưu và thoát khỏi file .
Trước khi bạn triển khai version mới này của ứng dụng web
, hãy liệt kê các bản phát hành Helm của bạn như hiện tại bằng lệnh sau:
- helm list
Bạn sẽ nhận được kết quả sau, với một triển khai bạn đã tạo trước đó:
OutputNAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE web 1 Wed Feb 20 20:59:48 2019 DEPLOYED demo-0.1.0 1.0 default
Lưu ý REVISION
được liệt kê là 1
, cho thấy rằng đây là bản sửa đổi đầu tiên của ứng dụng web
.
Để triển khai ứng dụng web
với các thay đổi mới nhất được thực hiện đối với demo/values.yaml
, hãy nâng cấp ứng dụng bằng lệnh sau:
- helm upgrade web ./demo
Bây giờ, hãy liệt kê lại các bản phát hành Helm:
- helm list
Bạn sẽ nhận được kết quả sau:
OutputNAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE web 2 Wed Feb 20 21:18:12 2019 DEPLOYED demo-0.1.0 1.0 default
Lưu ý REVISION
đã thay đổi thành 2
, cho thấy rằng đây là bản sửa đổi thứ hai.
Để tìm lịch sử của các bản phát hành Helm cho web
, hãy sử dụng các bước sau:
- helm history web
Điều này sẽ hiển thị cả hai bản sửa đổi của ứng dụng web
:
REVISION UPDATED STATUS CHART DESCRIPTION 1 Wed Feb 20 20:59:48 2019 SUPERSEDED demo-0.1.0 Install complete 2 Wed Feb 20 21:18:12 2019 DEPLOYED demo-0.1.0 Upgrade complete
Để khôi phục ứng dụng của bạn về bản sửa đổi 1
, hãy nhập lệnh sau:
- helm rollback web 1
Điều này sẽ mang lại kết quả sau:
OutputRollback was a success! Happy Helming!
Bây giờ, hiển thị lịch sử phát hành Helm:
- helm history web
Bạn sẽ nhận được danh sách sau:
OutputREVISION UPDATED STATUS CHART DESCRIPTION 1 Wed Feb 20 20:59:48 2019 SUPERSEDED demo-0.1.0 Install complete 2 Wed Feb 20 21:18:12 2019 SUPERSEDED demo-0.1.0 Upgrade complete 3 Wed Feb 20 21:28:48 2019 DEPLOYED demo-0.1.0 Rollback to 1
Bằng cách quay lại ứng dụng web
, bạn đã tạo bản sửa đổi thứ ba có cài đặt tương tự như bản sửa đổi 1
. Lưu ý , bạn luôn có thể biết bản sửa đổi nào đang hoạt động bằng cách tìm mục DEPLOYED
trong STATUS
.
Để chuẩn bị cho phần tiếp theo, hãy dọn dẹp khu vực thử nghiệm của bạn bằng cách xóa bản phát hành web
của bạn bằng lệnh helm delete
:
- helm delete web
Kiểm tra lại lịch sử phát hành Helm:
- helm history web
Bạn sẽ nhận được kết quả sau:
OutputREVISION UPDATED STATUS CHART DESCRIPTION 1 Wed Feb 20 20:59:48 2019 SUPERSEDED demo-0.1.0 Install complete 2 Wed Feb 20 21:18:12 2019 SUPERSEDED demo-0.1.0 Upgrade complete 3 Wed Feb 20 21:28:48 2019 DELETED demo-0.1.0 Deletion complete
STATUS
cho REVISION 3
đã thay đổi thành DELETED
, cho biết rằng version web
được triển khai của bạn đã bị xóa. Tuy nhiên, mặc dù điều này không xóa bản phát hành, nhưng nó không xóa nó khỏi cửa hàng. Để xóa hoàn toàn bản phát hành, hãy chạy lệnh helm delete
với cờ --purge
.
- helm delete web --purge
Trong bước này, bạn đã quản lý các bản phát hành ứng dụng trên Kubernetes bằng Helm. Nếu bạn muốn nghiên cứu thêm về Helm, hãy xem phần Giới thiệu về Helm, hướng dẫn Trình quản lý gói cho Kubernetes hoặc xem lại tài liệu Helm chính thức.
Tiếp theo, bạn sẽ cài đặt và kiểm tra công cụ tự động hóa đường ống Jenkins X bằng cách sử dụng jx
CLI để tạo một cụm Kubernetes sẵn sàng cho CI / CD.
Bước 4 - Cài đặt Môi trường Jenkins X
Với Jenkins X, bạn có thể tạo cụm Kubernetes của bạn từ đầu với các giải pháp tự động hóa đường ống và CI / CD được tích hợp sẵn. Bằng cách cài đặt công cụ jx
CLI, bạn có thể quản lý hiệu quả các bản phát hành ứng dụng, Docker image và biểu đồ Helm, trong ngoài việc tự động quảng cáo các ứng dụng của bạn trên các môi trường trong GitHub.
Vì bạn sẽ sử dụng jx
để tạo cụm của bạn , trước tiên bạn phải xóa cụm Minikube mà bạn đã có. Để thực hiện việc này, hãy sử dụng lệnh sau:
- minikube delete
Thao tác này sẽ xóa cụm Kubernete mô phỏng local , nhưng sẽ không xóa các folder mặc định được tạo khi bạn cài đặt Minikube lần đầu. Để làm sạch chúng khỏi máy của bạn, hãy sử dụng các lệnh sau:
- rm -rf ~/.kube
- rm -rf ~/.minikube
- rm -rf /etc/kubernetes/*
- rm -rf /var/lib/minikube/*
Khi bạn đã xóa hoàn toàn Minikube khỏi máy của bạn , bạn có thể chuyển sang cài đặt file binary Jenkins X.
Trước tiên, hãy download file jx
nén từ kho lưu trữ Jenkins X GitHub chính thức bằng lệnh curl
và extract nó bằng lệnh tar
:
- curl -L https://github.com/jenkins-x/jx/releases/download/v1.3.781/jx-linux-amd64.tar.gz | tar xzv
Tiếp theo, di chuyển file jx
download đến đường dẫn thực thi tại /usr/local/bin
:
- mv jx /usr/local/bin
Jenkins X đi kèm với Docker Registry chạy bên trong cụm Kubernetes của bạn. Vì đây là một yếu tố nội bộ, các biện pháp bảo mật như certificate tự ký có thể gây ra rắc rối cho chương trình. Để khắc phục điều này, hãy đặt Docker sử dụng các đăng ký không an toàn cho dải IP local . Để thực hiện việc này, hãy tạo file /etc/docker/daemon.json
và mở nó trong editor của bạn:
- nano /etc/docker/daemon.json
Thêm các nội dung sau vào file :
{ "insecure-registries" : ["0.0.0.0/0"] }
Lưu và thoát khỏi file . Để những thay đổi này có hiệu lực, hãy khởi động lại dịch vụ Docker bằng lệnh sau:
- systemctl restart docker
Để xác minh bạn đã cấu hình Docker với các đăng ký không an toàn, hãy sử dụng lệnh sau:
- docker info
Ở cuối kết quả , bạn sẽ thấy dòng được đánh dấu sau:
OutputContainers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 15 Server Version: 18.06.1-ce Storage Driver: overlay2 Backing Filesystem: extfs Supports d_type: true Native Overlay Diff: true . . . Registry: https://index.docker.io/v1/ Labels: Experimental: false Insecure Registries: 0.0.0.0/0 127.0.0.0/8 Live Restore Enabled: false
Đến đây bạn đã download Jenkins X và cấu hình register Docker, hãy sử dụng công cụ jx
CLI để tạo một cụm Minikube Kubernetes với khả năng CI / CD:
- jx create cluster minikube --cpu=5 --default-admin-password=admin --vm-driver=none --memory=13314
Ở đây bạn đang tạo một cụm Kubernetes bằng Minikube, với cờ --cpu=5
để đặt 5 CPU và --memory=13314
để cung cấp cho cụm của bạn 13314 MB bộ nhớ. Vì Jenkins X là một chương trình mạnh mẽ nhưng lớn, các thông số kỹ thuật này sẽ đảm bảo Jenkins X hoạt động mà không gặp sự cố trong phần trình diễn này. Ngoài ra, bạn đang sử dụng --default-admin-password=admin
để đặt password Jenkins X làm admin
và --vm-driver=none
để cài đặt local cụm, như bạn đã làm trong Bước 1.
Khi Jenkins X quay cụm của bạn, bạn sẽ nhận được nhiều dấu nhắc khác nhau vào các thời điểm khác nhau trong suốt quá trình đặt các thông số cho cụm của bạn và xác định cách nó sẽ giao tiếp với GitHub để quản lý môi trường production của bạn.
Đầu tiên, bạn sẽ nhận được dấu nhắc sau:
Output? disk-size (MB) 150GB
Nhấn ENTER
để tiếp tục. Tiếp theo, bạn sẽ được yêu cầu nhập tên bạn muốn sử dụng với git, địa chỉ email bạn muốn sử dụng với git và tên user GitHub của bạn. Nhập từng cái này khi được yêu cầu , sau đó nhấn ENTER
.
Tiếp theo, Jenkins X sẽ nhắc bạn nhập mã thông báo API GitHub của bạn:
OutputTo be able to create a repository on GitHub we need an API Token Please click this URL https://github.com/settings/tokens/new?scopes=repo,read:user,read:org,user:email,write:repo_hook,delete_repo Then COPY the token and enter in into the form below: ? API Token:
Nhập mã thông báo của bạn tại đây hoặc tạo mã thông báo mới với các quyền thích hợp bằng cách sử dụng URL được đánh dấu trong khối mã trước đó.
Tiếp theo, Jenkins X sẽ hỏi:
Output? Do you wish to use GitHub as the pipelines Git server: (Y/n) ? Do you wish to use your_GitHub_username as the pipelines Git user for GitHub server: (Y/n)
Nhập Y
cho cả hai câu hỏi.
Sau đó, Jenkins X sẽ nhắc bạn trả lời như sau:
Output? Select Jenkins installation type: [Use arrows to move, type to filter] >Static Master Jenkins Serverless Jenkins ? Pick workload build pack: [Use arrows to move, type to filter] > Kubernetes Workloads: Automated CI+CD with GitOps Promotion Library Workloads: CI+Release but no CD
Đối với phần trước, hãy chọn Static Master Jenkins
và chọn Kubernetes Workloads: Automated CI+CD with GitOps Promotion
cho phần sau. Khi được yêu cầu chọn tổ chức cho repository môi trường của bạn, hãy chọn tên user GitHub của bạn.
Cuối cùng, bạn sẽ nhận được kết quả sau, xác minh cài đặt thành công và cung cấp password quản trị Jenkins X của bạn.
OutputCreating GitHub webhook for your_GitHub_username/environment-horsehelix-production for url http://jenkins.jx.your_IP_address.nip.io/github-webhook/ Jenkins X installation completed successfully ******************************************************** NOTE: Your admin password is: admin ******************************************************** Your Kubernetes context is now set to the namespace: jx To switch back to your original namespace use: jx namespace default For help on switching contexts see: https://jenkins-x.io/developing/kube-context/ To import existing projects into Jenkins: jx import To create a new Spring Boot microservice: jx create spring -d web -d actuator To create a new microservice from a quickstart: jx create quickstart
Tiếp theo, sử dụng lệnh jx get
để nhận danh sách các URL hiển thị thông tin về ứng dụng của bạn:
- jx get urls
Lệnh này sẽ mang lại một danh sách tương tự như sau:
Name URL jenkins http://jenkins.jx.your_IP_address.nip.io jenkins-x-chartmuseum http://chartmuseum.jx.your_IP_address.nip.io jenkins-x-docker-registry http://docker-registry.jx.your_IP_address.nip.io jenkins-x-monocular-api http://monocular.jx.your_IP_address.nip.io jenkins-x-monocular-ui http://monocular.jx.your_IP_address.nip.io nexus http://nexus.jx.your_IP_address.nip.io
Bạn có thể sử dụng các URL để xem dữ liệu Jenkins X về môi trường CI / CD của bạn thông qua giao diện user bằng lệnh địa chỉ vào trình duyệt và nhập tên user và password của bạn. Trong trường hợp này, đây sẽ là " administrator " cho cả hai.
Tiếp theo, đảm bảo rằng các account dịch vụ trong không gian tên jx
, jx-staging
và jx-production
có quyền administrator , hãy sửa đổi policy RBAC của bạn bằng các lệnh sau:
- kubectl create clusterrolebinding jx-staging1 --clusterrole=cluster-admin --user=admin --user=expose --group=system:serviceaccounts --serviceaccount=jx-staging:expose --namespace=jx-staging
- kubectl create clusterrolebinding jx-staging2 --clusterrole=cluster-admin --user=admin --user=expose --group=system:serviceaccounts --serviceaccount=jx-staging:default --namespace=jx-staging
- kubectl create clusterrolebinding jx-production1 --clusterrole=cluster-admin --user=admin --user=expose --group=system:serviceaccounts --serviceaccount=jx-production:expose --namespace=jx-productions
- kubectl create clusterrolebinding jx-production2 --clusterrole=cluster-admin --user=admin --user=expose --group=system:serviceaccounts --serviceaccount=jx-production:default --namespace=jx-productions
- kubectl create clusterrolebinding jx-binding1 --clusterrole=cluster-admin --user=admin --user=expose --group=system:serviceaccounts --serviceaccount=jx:expose --namespace=jx
- kubectl create clusterrolebinding jx-binding2 --clusterrole=cluster-admin --user=admin --user=expose --group=system:serviceaccounts --serviceaccount=jx:default --namespace=jx
Đến đây bạn đã tạo cụm Kubernetes local của bạn với chức năng Jenkins X được tích hợp sẵn, bạn có thể chuyển sang tạo ứng dụng trên nền tảng để kiểm tra khả năng CI / CD của nó và trải nghiệm đường ống Jenkins X.
Bước 5 - Tạo ứng dụng thử nghiệm trong môi trường Jenkins X của bạn
Với môi trường Jenkins X của bạn được cài đặt trong cụm Kubernetes, giờ đây bạn đã có sẵn cơ sở hạ tầng CI / CD có thể giúp bạn tự động hóa quy trình thử nghiệm. Trong bước này, bạn sẽ thử điều này bằng cách cài đặt một ứng dụng thử nghiệm trong đường ống Jenkins X đang hoạt động.
Với mục đích demo , hướng dẫn này sẽ sử dụng ứng dụng RSVP mẫu do group CloudYuga tạo . Bạn có thể tìm thấy ứng dụng này, cùng với các tài liệu hội thảo trên web khác, tại kho lưu trữ DO-Community GitHub .
Đầu tiên, sao chép ứng dụng mẫu từ repository bằng lệnh sau:
- git clone https://github.com/do-community/rsvpapp.git
Khi bạn đã nhân bản repository , hãy chuyển vào folder rsvpapp
và xóa các file git:
- cd rsvpapp
- rm -r .git/
Để khởi tạo repository git và dự án Jenkins X cho một ứng dụng mới, bạn có thể sử dụng jx create
để bắt đầu lại từ đầu hoặc một mẫu hoặc jx import
để nhập một ứng dụng hiện có từ một dự án local hoặc repository git. Đối với hướng dẫn này, hãy nhập ứng dụng RSVP mẫu bằng cách chạy lệnh sau từ trong folder chính của ứng dụng:
- jx import
Jenkins X sẽ nhắc bạn nhập tên user GitHub của bạn, cho dù bạn muốn khởi tạo git, thông báo commit , tổ chức của bạn và tên bạn muốn cho repository của bạn . Trả lời có để khởi tạo git, sau đó cung cấp phần còn lại của dấu nhắc với thông tin và tùy chọn GitHub cá nhân của bạn. Khi Jenkins X nhập ứng dụng, nó sẽ tạo biểu đồ Helm và file Jenkins trong folder chính của ứng dụng của bạn. Bạn có thể sửa đổi các biểu đồ này và Jenkinsfile theo yêu cầu của bạn.
Vì ứng dụng RSVP mẫu chạy trên cổng 5000
của containers , hãy sửa đổi file charts/rsvpapp/values.yaml
để phù hợp với file này. Mở charts/rsvpapp/values.yaml
trong editor của bạn:
- nano charts/rsvpapp/values.yaml
Trong file giá values.yaml
này, hãy đặt service:internalPort:
thành 5000
. Khi bạn đã thực hiện thay đổi này, file của bạn sẽ trông giống như sau:
# Default values for python. # This is a YAML-formatted file. # Declare variables to be passed into your templates. replicaCount: 1 image: repository: draft tag: dev pullPolicy: IfNotPresent service: name: rsvpapp type: ClusterIP externalPort: 80 internalPort: 5000 annotations: fabric8.io/expose: "true" fabric8.io/ingress.annotations: "kubernetes.io/ingress.class: nginx" resources: limits: cpu: 100m memory: 128Mi requests: cpu: 100m memory: 128Mi ingress: enabled: false
Lưu và thoát khỏi file của bạn.
Tiếp theo, thay đổi các charts/preview/requirements.yaml
để phù hợp với ứng dụng của bạn. requirements.yaml
là một file YAML trong đó các nhà phát triển có thể khai báo phụ thuộc bảng xếp hạng, cùng với vị trí của biểu đồ và version mong muốn. Vì ứng dụng mẫu của ta sử dụng MongoDB cho mục đích database , bạn cần sửa đổi file charts/preview/requirements.yaml
cầu.yaml để liệt kê MongoDB như một phần phụ thuộc. Mở file trong editor của bạn bằng lệnh sau:
- nano charts/preview/requirements.yaml
Chỉnh sửa file bằng cách thêm mục nhập mongodb-replicaset
sau mục nhập alias: cleanup
, như được đánh dấu trong khối mã sau:
# !! File must end with empty line !! dependencies: - alias: expose name: exposecontroller repository: http://chartmuseum.jenkins-x.io version: 2.3.92 - alias: cleanup name: exposecontroller repository: http://chartmuseum.jenkins-x.io version: 2.3.92 - name: mongodb-replicaset repository: https://kubernetes-charts.storage.googleapis.com/ version: 3.5.5 # !! "alias: preview" must be last entry in dependencies array !! # !! Place custom dependencies above !! - alias: preview name: rsvpapp repository: file://../rsvpapp
Ở đây bạn đã chỉ định biểu đồ mongodb-replicaset
làm phụ thuộc cho biểu đồ preview
.
Tiếp theo, lặp lại quá trình này cho biểu đồ rsvpapp
của bạn. Tạo file charts/rsvpapp/requirements.yaml
và mở nó trong editor của bạn:
- nano charts/rsvpapp/requirements.yaml
Khi file được mở, hãy thêm phần sau, đảm bảo có một dòng trống duy nhất trước và sau các dòng được điền:
dependencies: - name: mongodb-replicaset repository: https://kubernetes-charts.storage.googleapis.com/ version: 3.5.5
Đến đây bạn đã chỉ định biểu đồ mongodb-replicaset
làm phụ thuộc cho biểu đồ rsvpapp
của bạn .
Tiếp theo, để kết nối các lối vào của ứng dụng RSVP mẫu vào backend MongoDB, thêm một MONGODB_HOST
biến môi trường để bạn deployment.yaml
file trong charts/rsvpapp/templates/
. Mở file này trong editor của bạn:
- nano charts/rsvpapp/templates/deployment.yaml
Thêm các dòng được đánh dấu sau vào file , ngoài một dòng trống ở đầu file và hai dòng trống ở cuối file . Lưu ý các dòng trống này là bắt buộc để file YAML hoạt động:
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: {{ template "fullname" . }} labels: draft: {{ default "draft-app" .Values.draft }} chart: "{{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}" spec: replicas: {{ .Values.replicaCount }} template: metadata: labels: draft: {{ default "draft-app" .Values.draft }} app: {{ template "fullname" . }} {{- if .Values.podAnnotations }} annotations: {{ toYaml .Values.podAnnotations | indent 8 }} {{- end }} spec: containers: - name: {{ .Chart.Name }} image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" env: - name: MONGODB_HOST value: "mongodb://{{.Release.Name}}-mongodb-replicaset-0.{{.Release.Name}}-mongodb-replicaset,{{.Release.Name}}-mongodb-replicaset-1.{{.Release.Name}}-mongodb-replicaset,{{.Release.Name}}-mongodb-replicaset-2.{{.Release.Name}}-mongodb-replicaset:27017" imagePullPolicy: {{ .Values.image.pullPolicy }} ports: - containerPort: {{ .Values.service.internalPort }} resources: {{ toYaml .Values.resources | indent 12 }}
Với những thay đổi này, Helm sẽ có thể triển khai ứng dụng của bạn với MongoDB làm database của nó.
Tiếp theo, kiểm tra Jenkinsfile
Jenkins được tạo bởi Jenkins X bằng cách mở file từ folder chính của ứng dụng của bạn:
- nano Jenkinsfile
Jenkinsfile
này xác định đường dẫn được kích hoạt mỗi khi bạn commit một version ứng dụng của bạn vào repository GitHub. Nếu bạn muốn tự động kiểm tra mã của bạn để các kiểm tra được kích hoạt mỗi khi đường ống được kích hoạt, bạn sẽ thêm kiểm tra vào tài liệu này.
Để chứng minh điều này, hãy thêm một trường hợp thử nghiệm được tùy chỉnh bằng cách thay thế sh "python -m unittest"
dưới stage('CI Build and push snapshot')
và stage('Build Release')
trong Jenkinsfile
bằng các dòng được đánh dấu sau:
. . . stages { stage('CI Build and push snapshot') { when { branch 'PR-*' } environment { PREVIEW_VERSION = "0.0.0-SNAPSHOT-$BRANCH_NAME-$BUILD_NUMBER" PREVIEW_NAMESPACE = "$APP_NAME-$BRANCH_NAME".toLowerCase() HELM_RELEASE = "$PREVIEW_NAMESPACE".toLowerCase() } steps { container('python') { sh "pip install -r requirements.txt" sh "python -m pytest tests/test_rsvpapp.py" sh "export VERSION=$PREVIEW_VERSION && skaffold build -f skaffold.yaml" sh "jx step post build --image $DOCKER_REGISTRY/$ORG/$APP_NAME:$PREVIEW_VERSION" dir('./charts/preview') { sh "make preview" sh "jx preview --app $APP_NAME --dir ../.." } } } } stage('Build Release') { when { branch 'master' } steps { container('python') { // ensure we're not on a detached head sh "git checkout master" sh "git config --global credential.helper store" sh "jx step git credentials" // so we can retrieve the version in later steps sh "echo \$(jx-release-version) > VERSION" sh "jx step tag --version \$(cat VERSION)" sh "pip install -r requirements.txt" sh "python -m pytest tests/test_rsvpapp.py" sh "export VERSION=`cat VERSION` && skaffold build -f skaffold.yaml" sh "jx step post build --image $DOCKER_REGISTRY/$ORG/$APP_NAME:\$(cat VERSION)" } } } . . .
Với các dòng được thêm vào, đường ống Jenkins X sẽ cài đặt các phần phụ thuộc và thực hiện kiểm tra Python khi nào bạn commit thay đổi ứng dụng của bạn .
Đến đây bạn đã thay đổi ứng dụng RSVP mẫu, hãy commit và đẩy những thay đổi này lên GitHub bằng các lệnh sau:
- git add *
- git commit -m update
- git push
Khi bạn đẩy những thay đổi này lên GitHub, bạn sẽ kích hoạt một bản dựng ứng dụng mới của bạn . Nếu bạn mở giao diện user Jenkins bằng cách chuyển đến http://jenkins.jx. your_IP_address .nip.io
và nhập "admin" cho tên user và password của bạn, bạn sẽ tìm thấy thông tin về bản dựng mới của bạn . Nếu bạn nhấp vào “Lịch sử xây dựng” từ menu ở phía bên trái của trang, bạn sẽ thấy lịch sử của các bản dựng đã commit của bạn . Nếu bạn nhấp vào biểu tượng màu xanh lam bên cạnh một bản dựng, sau đó chọn “Console Ouput” từ menu bên trái, bạn sẽ tìm thấy kết quả console cho các bước tự động trong quy trình của bạn . Di chuyển đến cuối kết quả này, bạn sẽ thấy thông báo sau:
Output. . . Finished: SUCCESS
Điều này nghĩa là ứng dụng của bạn đã vượt qua các bài kiểm tra tùy chỉnh của bạn và hiện đã được triển khai thành công.
Khi Jenkins X xây dựng bản phát hành ứng dụng, nó sẽ thúc đẩy ứng dụng đến môi trường staging
. Để xác minh ứng dụng của bạn đang chạy, hãy liệt kê các ứng dụng đang chạy trên cụm Kubernetes của bạn bằng cách sử dụng lệnh sau:
- jx get app
Bạn sẽ nhận được kết quả tương tự như sau:
OutputAPPLICATION STAGING PODS URL rsvpapp 0.0.2 1/1 http://rsvpapp.jx-staging.your_IP_address.nip.io
Từ đó, bạn có thể thấy rằng Jenkins X đã triển khai ứng dụng của bạn trong môi trường jx-staging
của bạn dưới dạng version 0.0.2
. Đầu ra cũng hiển thị URL mà bạn có thể sử dụng để truy cập ứng dụng của bạn . Truy cập URL này sẽ hiển thị cho bạn ứng dụng RSVP mẫu:
Tiếp theo, hãy kiểm tra hoạt động của ứng dụng của bạn bằng lệnh sau:
- jx get activity -f rsvpapp
Bạn sẽ nhận được kết quả tương tự như sau:
OutputSTEP STARTED AGO DURATION STATUS your_GitHub_username/rsvpappv/master #1 3h42m23s 4m51s Succeeded Version: 0.0.1 Checkout Source 3h41m52s 6s Succeeded CI Build and push snapshot 3h41m46s NotExecuted Build Release 3h41m46s 56s Succeeded Promote to Environments 3h40m50s 3m17s Succeeded Promote: staging 3h40m29s 2m36s Succeeded PullRequest 3h40m29s 1m16s Succeeded PullRequest: https://github.com/your_GitHub_username/environment-horsehelix-staging/pull/1 Merge SHA: dc33d3747abdacd2524e8c22f0b5fbb2ac3f6fc7 Update 3h39m13s 1m20s Succeeded Status: Success at: http://jenkins.jx.your_IP_address.nip.io/job/your_GitHub_username/job/environment-horsehelix-staging/job/master/2/display/redirect Promoted 3h39m13s 1m20s Succeeded Application is at: http://rsvpapp.jx-staging.your_IP_address.nip.io Clean up 3h37m33s 1s Succeeded your_GitHub_username/rsvpappv/master #2 28m37s 5m57s Succeeded Version: 0.0.2 Checkout Source 28m18s 4s Succeeded CI Build and push snapshot 28m14s NotExecuted Build Release 28m14s 56s Succeeded Promote to Environments 27m18s 4m38s Succeeded Promote: staging 26m53s 4m0s Succeeded PullRequest 26m53s 1m4s Succeeded PullRequest: https://github.com/your_GitHub_username/environment-horsehelix-staging/pull/2 Merge SHA: 976bd5ad4172cf9fd79f0c6515f5006553ac6611 Update 25m49s 2m56s Succeeded Status: Success at: http://jenkins.jx.your_IP_address.nip.io/job/your_GitHub_username/job/environment-horsehelix-staging/job/master/3/display/redirect Promoted 25m49s 2m56s Succeeded Application is at: http://rsvpapp.jx-staging.your_IP_address.nip.io Clean up 22m40s 0s Succeeded
Tại đây, bạn đang nhận được hoạt động Jenkins X cho ứng dụng RSVP bằng cách áp dụng bộ lọc với -f rsvpapp
.
Tiếp theo, liệt kê các group đang chạy trong không gian tên jx-staging
bằng lệnh sau:
- kubectl get pod -n jx-staging
Bạn sẽ nhận được kết quả tương tự như sau:
NAME READY STATUS RESTARTS AGE jx-staging-mongodb-replicaset-0 1/1 Running 0 6m jx-staging-mongodb-replicaset-1 1/1 Running 0 6m jx-staging-mongodb-replicaset-2 1/1 Running 0 5m jx-staging-rsvpapp-c864c4844-4fw5z 1/1 Running 0 6m
Kết quả này cho thấy ứng dụng của bạn đang chạy trong không gian tên jx-staging
, cùng với ba group của database MongoDB backend , tuân theo những thay đổi bạn đã thực hiện đối với file YAML trước đó.
Đến đây bạn đã chạy một ứng dụng thử nghiệm thông qua đường ống Jenkins X, bạn có thể thử quảng bá ứng dụng này vào môi trường production .
Bước 6 - Quảng bá ứng dụng thử nghiệm của bạn lên một không gian tên khác
Để kết thúc phần trình diễn này, bạn sẽ hoàn thành quy trình CI / CD bằng cách quảng bá ứng dụng RSVP mẫu vào không gian tên jx-production
của bạn.
Đầu tiên, sử dụng jx promote
trong lệnh sau:
- jx promote rsvpapp --version=0.0.2 --env=production
Điều này sẽ thúc đẩy ứng dụng rsvpapp
đang chạy với version=0.0.2
vào môi trường production . Trong suốt quá trình xây dựng, Jenkins X sẽ nhắc bạn nhập thông tin account GitHub của bạn . Trả lời những dấu nhắc này bằng phản hồi cá nhân của bạn khi chúng xuất hiện.
Sau khi khuyến mãi thành công, kiểm tra danh sách các ứng dụng:
- jx get app
Bạn sẽ nhận được kết quả tương tự như sau:
OutputAPPLICATION STAGING PODS URL PRODUCTION PODS URL rsvpapp 0.0.2 1/1 http://rsvpapp.jx-staging.your_IP_address.nip.io 0.0.2 1/1 http://rsvpapp.jx-production.your_IP_address.nip.io
Với thông tin PRODUCTION
này, bạn có thể xác nhận Jenkins X đã quảng bá rsvpapp
cho môi trường production . Để xác minh thêm, hãy truy cập URL production http://rsvpapp.jx-production. your_IP_address .nip.io
trong trình duyệt của bạn. Bạn sẽ thấy ứng dụng đang hoạt động, bây giờ sắp hết "sản xuất":
Cuối cùng, liệt kê các group của bạn trong không gian tên jx-production
.
- kubectl get pod -n jx-production
Bạn sẽ thấy rằng rsvpapp
và các group backend MongoDB đang chạy trong không gian tên này:
NAME READY STATUS RESTARTS AGE jx-production-mongodb-replicaset-0 1/1 Running 0 1m jx-production-mongodb-replicaset-1 1/1 Running 0 1m jx-production-mongodb-replicaset-2 1/1 Running 0 55s jx-production-rsvpapp-54748d68bd-zjgv7 1/1 Running 0 1m
Điều này cho thấy rằng bạn đã quảng bá thành công ứng dụng mẫu RSVP vào môi trường production của bạn , mô phỏng việc triển khai ứng dụng đã sẵn sàng production ở cuối đường ống CI / CD.
Kết luận
Trong hướng dẫn này, bạn đã sử dụng Helm để quản lý các gói trên một cụm Kubernetes được mô phỏng và tùy chỉnh biểu đồ Helm để đóng gói và triển khai ứng dụng của bạn . Bạn cũng cài đặt môi trường Jenkins X trên cụm Kubernetes của bạn và chạy ứng dụng mẫu thông qua đường dẫn CI / CD từ đầu đến cuối.
Đến đây bạn đã có kinh nghiệm với những công cụ này mà bạn có thể sử dụng khi xây dựng hệ thống CI / CD trên cụm Kubernetes của bạn . Nếu bạn muốn tìm hiểu thêm về Helm, hãy xem phần Giới thiệu về Helm, Trình quản lý gói dành cho Kubernetes và Cách cài đặt phần mềm trên Kubernetes Cluster với các bài viết về Trình quản lý gói Helm . Để khám phá thêm các công cụ CI / CD trên Kubernetes, bạn có thể đọc về lưới dịch vụ Istio trong hướng dẫn tiếp theo của loạt hội thảo trên web này.
Các tin liên quan