1. 部署前端项目
# 定义 Deployment 对象,用于部署前端应用 apiVersion: apps/v1 kind: Deployment metadata: labels: app: xingtu-ui # 应用标签,用于选择器 name: xingtu-ui # 部署的名称 namespace: xingtu-cloud # 指定部署的命名空间 spec: progressDeadlineSeconds: 600 # 设置升级的最长时间限制 replicas: 1 # 设置副本数为1 selector: # 选择器配置,用于匹配模板中的标签 matchLabels: app: xingtu-ui # 匹配模板中的标签为 app: xingtu-ui strategy: rollingUpdate: # 定义滚动升级策略 maxSurge: 50% # 允许的最大扩容比例 maxUnavailable: 50% # 允许的最大不可用比例 type: RollingUpdate # 指定升级类型为 RollingUpdate 逐步替换每个Pod template: metadata: labels: app: xingtu-ui # 模板中的标签,与选择器匹配 spec: volumes: - name: xingtu-mysql-config # 定义一个卷,用于挂载配置文件 configMap: name: xingtu-ui-config # 指定 ConfigMap 的名称,用于存储配置数据 items: - key: nginx.conf # ConfigMap 中的键,表示要挂载的配置文件 path: nginx.conf # 挂载到容器中的路径 defaultMode: 420 # 设置挂载的文件的默认权限(权限值为420对应八进制文件权限0644) imagePullSecrets: - name: horbor-134-160-180-87-secret # 提前在项目中配置访问阿里云的账号密码 containers: - image: $REGISTRY/$DOCKERHUB_NAMESPACE/xingtu-ui:SNAPSHOT-$BUILD_NUMBER # 定义容器使用的镜像,其中 $REGISTRY、$DOCKERHUB_NAMESPACE 和 $BUILD_NUMBER 是变量 imagePullPolicy: Always # 镜像拉取策略为始终拉取最新版本 name: app # 定义容器的名称 ports: - containerPort: 80 # 容器监听的端口号 protocol: TCP # 定义协议为 TCP resources: # 定义容器的资源限制,包括CPU和内存 limits: #定义资源的上限 cpu: 300m # 容器的 CPU 资源限制为300m(300毫核) memory: 600Mi # 容器的内存资源限制为600Mi(600兆字节) terminationMessagePath: /dev/termination-log #定义容器终止时的日志路径 terminationMessagePolicy: File #设置终止消息的策略为 File,表示终止消息将写入到文件中 volumeMounts: #定义容器挂载的卷的配置 - name: xingtu-ui-config #指定要挂载的卷的名称 readOnly: true #设置挂载为只读,确保容器只能读取卷中的内容 mountPath: /etc/nginx/nginx.conf #定义挂载到容器中的路径 subPath: nginx.conf #指定卷中的子路径,即挂载的文件名 dnsPolicy: ClusterFirst #指定 DNS 策略为 ClusterFirst,表示容器将使用 Kubernetes 集群内部的 DNS 解析服务 restartPolicy: Always #定义容器的重启策略为 Always,表示当容器终止时,始终自动重启容器 terminationGracePeriodSeconds: 30 #定义终止容器的优雅期限为30秒 # 定义 Service 对象,用于提供前端应用的访问服务 --- apiVersion: v1 kind: Service metadata: labels: app: xingtu-ui # 为服务添加标签,用于标识该服务 name: xingtu-ui # 定义服务的名称为 xingtu-ui namespace: xingtu-cloud # 指定服务所在的命名空间 spec: ports: - name: http # 定义端口的名称为 http port: 80 # 服务监听的端口号 protocol: TCP # 定义协议为 TCP targetPort: 80 # 将流量转发到 Pod 的 80 端口 selector: app: xingtu-ui # 选择器,用于将服务与特定的 Pod 关联 sessionAffinity: None # 会话亲和性设置为 None,表示没有会话保持 type: ClusterIP # 服务类型为 ClusterIP,适用于集群内部访问
使用教程:
- 创建 ConfigMap YAML 文件,例如 configmap.yaml:
apiVersion: v1 kind: ConfigMap metadata: name: xingtu-ui-config data: nginx.conf: | server { listen 80; # Nginx 监听的端口 server_name your-domain.com; # 填写你的域名或者公共 IP 地址 location / { proxy_pass http://xingtu-ui-service; # 这指定了代理请求的后端服务 proxy_set_header Host $host; #设置一些代理请求的头信息 proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
在这个文件中,我们定义了一个名为 xingtu-ui-config 的 ConfigMap,其中包含了一个键为 nginx.conf 的配置文件。
- 使用 kubectl 应用 ConfigMap:
kubectl apply -f configmap.yaml
- 将此 YAML 文件保存为 deployment.yaml。
- 使用 kubectl apply 命令部署应用:kubectl apply -f deployment.yaml。
- 查看部署状态:kubectl get deployments -n xingtu-cloud。
- 查看服务状态:kubectl get services -n xingtu-cloud。
- 获取服务的 ClusterIP 地址:kubectl get service xingtu-ui -n xingtu-cloud。
- 在浏览器中访问前端应用:http://(使用步骤5中获取的 ClusterIP 地址)。
2.部署后端项目
apiVersion: apps/v1 kind: Deployment metadata: labels: app: xingtu-auth name: xingtu-auth namespace: xingtu-cloud #一定要写名称空间 spec: progressDeadlineSeconds: 600 replicas: 1 selector: matchLabels: app: xingtu-auth strategy: rollingUpdate: maxSurge: 50% maxUnavailable: 50% type: RollingUpdate template: metadata: labels: app: xingtu-auth spec: imagePullSecrets: - name: horbor-134-160-180-87-secret #提前在项目下配置访问阿里云的账号密码 containers: - image: $REGISTRY/$DOCKERHUB_NAMESPACE/xingtu-auth:SNAPSHOT-$BUILD_NUMBER # readinessProbe: #检查容器是否准备好接收流量的设置 # httpGet: #HTTP GET 请求检查容器的健康状态 # path: /actuator/health #检查的路径 # port: 8080 #检查的端口 # timeoutSeconds: 10 #容器健康检查的超时时间 # failureThreshold: 30 #失败次数 # periodSeconds: 5 #间隔时间 imagePullPolicy: Always name: app ports: - containerPort: 8080 protocol: TCP resources: limits: cpu: 300m memory: 600Mi terminationMessagePath: /dev/termination-log terminationMessagePolicy: File dnsPolicy: ClusterFirst restartPolicy: Always terminationGracePeriodSeconds: 30 --- apiVersion: v1 kind: Service metadata: labels: app: xingtu-auth name: xingtu-auth namespace: xingtu-cloud spec: ports: - name: http port: 8080 protocol: TCP targetPort: 8080 selector: #指定该服务将关联到哪些标签匹配的 Pod app: xingtu-auth #关联到具有标签 app: xingtu-auth 的 Pod sessionAffinity: None # 设置会话亲和性。在这里,设置为 None,表示没有会话保持 type: ClusterIP #定义服务的类型。在这里,服务类型为 ClusterIP,该服务只能在 Kubernetes 集群内部访问
- 保存配置文件: 将上述的 YAML 配置保存为一个文件,例如 xingtu-auth-deployment.yaml。
- 应用配置: 使用 kubectl apply 命令将配置文件应用到 Kubernetes 集群。在终端中运行:
kubectl apply -f xingtu-auth-deployment.yaml
这将在指定的命名空间 (xingtu-cloud) 中创建 Deployment 和 Service。
- 检查部署状态: 可以使用以下命令检查部署的状态:
kubectl get deployments -n xingtu-cloud
确保 Deployment 的副本数量为 1,并且可以看到应用正常运行。
- 检查服务状态: 使用以下命令检查服务的状态:
kubectl get services -n xingtu-cloud
获取服务的 ClusterIP 地址。
- 访问应用: 你可以使用获取到的 ClusterIP 地址和服务的端口(在这里是 8080)访问应用。例如,如果 ClusterIP 地址是 10.0.0.1:
curl http://10.0.0.1:8080
如果你是在浏览器中访问,可以打开 http://10.0.0.1:8080。