Nói nhiều 1 chút: các bạn cũng biết trước dây chúng ta cài hệ thống k8s điều đầu tiên chúng ta sẽ cài docker.
Nhưng ở thời điển hiện tại thì Kubernetes is deprecating Docker as a container runtime after v1.20 nên việc chúng ta tận dụng các server k8s để build docker cũng đã ít đi dần.
Cài k8s thì ko cần cài docker nữa vì cài K0s dễ vl
1) Jenkins
1.1) install k8s
Và để tận dụng resource K8s để build container thì chúng ta đã có kaniko
giờ action thôi
Cài jenkins
https://www.jenkins.io/doc/book/installing/kubernetes/
helm repo add jenkinsci https://charts.jenkins.io
helm search repo jenkinsci
>>>>output
NAME CHART VERSION APP VERSION DESCRIPTION
jenkinsci/jenkins 3.8.4 2.303.2 Jenkins - Build great things at any scale! The ...
helm show values jenkinsci/jenkins > jenkins.yaml
>>> các bạn tao 1 ns nhé
kubectl create ns jenkins
Các bạn thấy các bài hướng dẫn của mình khi cài bằng helm thì mình ít gõ câu lệnh lý do vì mình deploy đa số các app bằng argocd
Bạn có thể tìm hiểu ở link dưới nhé.
https://notes.nimtechnology.com/2021/06/21/argocdhuong-dan-cau-hinh-argocd-deploy-k8s-bang-helm/
Bạn có thể sử dụng câu lệnh này để lấy value helm jenkins
Giờ chúng ta đi tìm các plugin để đưa file value
Nếu bạn không muốn cấu hình thì tìm persistence và set như dưới.
persistence:
enabled: false
Giờ file value hoàn chỉnh
controller:
adminUser: "admin"
adminPassword: "mật khẩu hihi"
serviceType: NodePort
nodePort: 32323
installPlugins:
- kubernetes:1.30.1
- workflow-aggregator:2.6
- git:4.11.0
- configuration-as-code:1429.v09b_044a_c93de
- blueocean:1.24.8
- ansicolor:1.0.0
tolerations:
- key: "node"
operator: "Equal"
value: "storage-ssd"
effect: "NoSchedule"
nodeSelector:
node: "storage-ssd"
persistence:
enabled: true
storageClass: longhorn-normal
Sau khi install thì truy cập jenkins thôi
sau khi login thành công thì tạo credential
Links Jenkins file ở ảnh trên.
https://github.com/mrnim94/playjenkins/blob/kaniko/Jenkinsfile
create secret trên k8s
kubectl create -n jenkins secret \
docker-registry regcred \
--docker-server=https://docker.nimtechnology.com \
--docker-username='robot$kaniko+kaniko' \
--docker-password='mật khẩu ahihi' \
--docker-email=mr.nim94@gmail.com
git của mình:
https://github.com/mrnim94/playjenkins
trong pod có container nào
image được đẩy lên harbor
ý da deploy lên k8s rồi mà lỗi không pull được images, tạo secret cho ns pipeline-demo
kubectl create -n pipeline-demo secret \
docker-registry. \
--docker-server=https://docker.nimtechnology.com \
--docker-username='robot$kaniko+kaniko' \
--docker-password='mật khẩu ahihi' \
--docker-email=mr.nim94@gmail.com
sửa file yaml
apiVersion: v1
kind: Pod
metadata:
name: private-reg
spec:
containers:
- name: private-reg-container
image: <your-private-image>
imagePullSecrets:
- name: regcred
Video của Anh Ấn độ, Anh em ủng hộ ảnh nhé
2) Jenkins Controller(master) create few pods and slowly on Kubernetes!
mình gặp case như sau. khi mình đã create jenkins controller trên k8s. Mình thấy các job chạy rất ít, job waiting in queue nhiều hoặc các pod trên jenkins agent trên k8s chuyển từ offline -> running(online rất là chậm)
Bạn cần tăng concurrency limit nhiều, jenkins master tạo càng nhiều pod agent đồng thời và đương nhiên là sẽ chiếm nhiều resouce!!!
3) Increase heap size of the jenkins on kubernetes.
containers: - name: jenkins image: "jenkins/jenkins:2.319.1-jdk11" imagePullPolicy: "Always" securityContext: allowPrivilegeEscalation: false readOnlyRootFilesystem: true runAsGroup: 1000 runAsUser: 1000 args: [ "--httpPort=8080"] env: - name: POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: JAVA_OPTS value: >- -Dcasc.reload.token=$(POD_NAME) -Xms8000m -Xmx8000m - name: JENKINS_OPTS value: >- --webroot=/var/jenkins_cache/war - name: JENKINS_SLAVE_AGENT_PORT value: "50000" - name: CASC_JENKINS_CONFIG value: /var/jenkins_home/casc_configs
Bạn cần tăng như ảnh nhé!