1 2 24-08-25 初始记录 24-09-10 更换 k8s 为 minikube
什么是 CI /CD
在深入研究 CI / CD 自动化工具之前,我们首先需要了解这个概念。正如我们所提到的,持续集成和持续部署通常与敏捷开发环境齐头并进,在这种环境中,团队希望在完成后立即将不同的代码段部署到生产环境中。
使用 CI / CD 工具可自动完成构建,测试和部署新代码的过程。每个团队成员都可以立即获得有关其代码生产准备情况的反馈,即使他们只更改了一行或一个字符。这样,每个团队成员都可以将他们的代码推送到生产中,而构建,测试和部署的过程则自动完成,以便他们可以继续处理应用程序的下一部分。
Kubernetes(minikube)
安装minikube
1 2 curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 sudo install minikube-linux-amd64 /usr/local/bin/minikube && rm minikube-linux-amd64
启动集群
1 2 3 4 minikube start --force --driver=docker # 直接使用 minikube start 可能会出现以下报错 Exiting due to DRV_AS_ROOT: The "docker" driver should not be used with root privileges.
访问集群
1 2 3 4 5 6 7 kubectl get po -A # 或者使用minikube下载使用 minikube kubectl -- get po -A # 可以添加以下命令简化 alias kubectl="minikube kubectl --"
Kubernetes 仪表板
Jenkins
docker 安装命令:
1 docker run -p 8080:8080 -p 50000:50000 jenkins/jenkins:lts-jdk11
自定义 yaml
文件安装 jenkins
由于 jenkins 需要持久化数据,所以我们需要创建 PVC
,建议使用 storageClass
动态创建 PVC
,在 minikube
中有一个默认的 storageClass
,名称是:standard
,可以使用下面的命令查看:
1 2 # 第一次会进行下载,需要时间较长 kubectl get sc
创建 jenkins-deploy.yaml
文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: jenkins-data-pvc namespace: default spec: accessModes: - ReadWriteMany storageClassName: "standard" resources: requests: storage: 10Gi --- apiVersion: v1 kind: ServiceAccount metadata: name: jenkins-admin namespace: default labels: name: jenkins --- kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: jenkins-admin labels: name: jenkins subjects: - kind: ServiceAccount name: jenkins-admin namespace: default roleRef: kind: ClusterRole name: cluster-admin apiGroup: rbac.authorization.k8s.io --- apiVersion: apps/v1 kind: Deployment metadata: name: jenkins namespace: default spec: replicas: 1 selector: matchLabels: app: jenkins template: metadata: labels: app: jenkins spec: terminationGracePeriodSeconds: 10 serviceAccount: jenkins-admin containers: - name: jenkins image: jenkins/jenkins:lts-jdk11 imagePullPolicy: IfNotPresent env: - name: JAVA_OPTS value: -Duser.timezone=Asia/Shanghai ports: - containerPort: 8080 name: web protocol: TCP - containerPort: 50000 name: agent protocol: TCP resources: limits: cpu: 1000m memory: 1Gi requests: cpu: 500m memory: 512Mi livenessProbe: httpGet: path: /login port: 8080 initialDelaySeconds: 60 timeoutSeconds: 5 failureThreshold: 12 readinessProbe: httpGet: path: /login port: 8080 initialDelaySeconds: 60 timeoutSeconds: 5 failureThreshold: 12 volumeMounts: - name: jenkinshome mountPath: /var/jenkins_home volumes: - name: jenkinshome persistentVolumeClaim: claimName: jenkins-data-pvc --- apiVersion: v1 kind: Service metadata: name: jenkins namespace: default labels: app: jenkins spec: selector: app: jenkins type: ClusterIP ports: - name: web port: 8080 targetPort: 8080 --- apiVersion: v1 kind: Service metadata: name: jenkins-agent namespace: default labels: app: jenkins spec: selector: app: jenkins type: ClusterIP ports: - name: agent port: 50000 targetPort: 50000
部署 jenkins
1 kubectl apply -f jenkins-deploy.yaml
临时暴露服务端口(只能通过内网访问)
1 kubectl port-forward service/jenkins 8080:8080 -n default
外部网络访问 Jenkins 服务
使用 NodePort
使用 LoadBalancer
设置 Ingress (这里选用这种)
Ingress 是一种暴露服务到外部网络的方法,通常与 Ingress 控制器(如 Nginx)一起使用。
1 2 # 基本上成功不了 minikube addons enable ingress
国内的互联网环境。。。
1 2 # 下载yaml配置文件 wget https://cdn.jsdelivr.net/gh/jasonkayzk/kubernetes-learn@book-learn/chapter5/ingress-nginx/deploy.yaml
使用 helm 安装
// todo