欢迎关注头条号:老顾聊技术
精品原创技术分享,知识的组装工
前言
现在很多企业已经进入了docker容器化的部署方式,容器化的部署离不开容器编排的工具,现在用的最多的当属K8S的编排工具。那项目从0开始时,一直进入到k8s中,整体流程是什么,以及用到什么工具组件呢?今天老顾就从整体上面来介绍一下。
整体流程
![6e070c6a3822fca29d28eac33fca6656.png](https://i-blog.csdnimg.cn/blog_migrate/7a03935558310b63a5f87dd9718b4649.jpeg)
工作流程
1)开发人员提交代码到Git版本仓库;2)Jenkins人工/定时触发项目构建;3)Jenkins拉取代码、代码编码、打包镜像、推送到测试环境的镜像仓库;4)k8s拉取镜像产生pod中的容器5)测试环境中测试没有问题后,把镜像同步到生产的镜像仓库中6)生产环境K8S部署镜像
git
git现在有的私有仓库,有两种选择gitlab,gogs。
gogs
![9678d57c843a21649d66ce12581dac92.png](https://i-blog.csdnimg.cn/blog_migrate/bf27b238daff0bcbc04fd5683a5ce31d.jpeg)
一开始老顾选择的gogs,因为比较轻量级,消耗服务器的资源也很少。但是gogs现有版本中缺少很重要的功能,就是在web界面上面操作拉取分支的功能,这个功能是平常经常用的,但比较可惜的是gogs现在不支持。
gitlab
![af0ba26c8e1582af8b1ba6a342163d07.png](https://i-blog.csdnimg.cn/blog_migrate/fb0ad5bcc953c8e8fc302a298e1c0e44.jpeg)
gitlab功能还是比较强大的,唯一的缺点就是比较耗服务器资源,最好用4G内存承载,要不然很慢哦
jenkins
![aef40546b90fff0d9b6048a28f143ca1.png](https://i-blog.csdnimg.cn/blog_migrate/b0323a1a591e44ca27ff92fcfb316538.jpeg)
![e986a89808436c2133387142e71650b4.png](https://i-blog.csdnimg.cn/blog_migrate/b504ef47a5a9f0cd3eb484c656fa0236.jpeg)
jenkins应该是持续集成的唯一选择了,功能非常强大,强大的插件功能;不同的团队应用jenkins的方式也不尽相同。
拉取git的插件Git Parameter
动态获取Git仓库Branch、Tag
![21ee55ad09012a6090276052b51cdc78.png](https://i-blog.csdnimg.cn/blog_migrate/d950411fdb91a867f41a963dd872f33f.jpeg)
![60cff8b195fa32e9dbc4727020139ace.png](https://i-blog.csdnimg.cn/blog_migrate/47f4503882c3cddb3e48fe2a81a6d02c.jpeg)
配置好后,在build时,你可以选择不同的分支
![149d9ad77f9b7074b386855b807f11de.png](https://i-blog.csdnimg.cn/blog_migrate/73ccae2532d1b3dd5f8067c54c21a388.jpeg)
利用pom.xml文件构建项目
![63a8e4fc5cbcc6805888f006264f7994.png](https://i-blog.csdnimg.cn/blog_migrate/50a50485afafff36793bf5b0a589c181.jpeg)
在Jenkins本机镜像构建与推送到镜像仓库
![936844390a469bccc006fcb47230ba5a.png](https://i-blog.csdnimg.cn/blog_migrate/2c198c9e316947da2757ea5d77254ac9.jpeg)
REPOSITORY=192.168.110.10/qy-tribe/user-server:${branch}#构建镜像
cat > Dockerfile << EOF
FROM openjdk:8-jdk-alpine
RUN rm -rf /usr/local/qy-tribe
COPY target/*.jar /usr/local/qy-tribe/user-server.jar
ENTRYPOINT java -jar /usr/local/qy-tribe/user-server.jar
EOF
docker build -t $REPOSITORY .
#上传镜像
docker push $REPOSITORY
上面是直接在jenkins的shell中输入了构建镜像脚本。
其实还有一种常用的方式就是在项目工程下新建Dockerfile文件,在可以利用mvn插件
![ab56799e71b0d25e77b1532325b59224.png](https://i-blog.csdnimg.cn/blog_migrate/4142ba86612b015afda399bc355cf9b9.jpeg)
在jenkins中使用shell
mvn dockerfile:build dockerfile:push
这样就更简单一点
注意点:因为我们会对同一个版本会构建多次,镜像images会产生多次,会把上一次的镜像的tag更改为none;我们要记得清除哪些被替换的image,可以使用脚本
注意点:jenkins结点需要安装docker哦,不要忘了
docker images | grep none | awk '{print $3}' | xargs docker rmi
镜像仓库
现在市面上的镜像仓库,不二人选肯定是harbor了,使用起来比较简单,功能也是比较强大的
![66a580ebd402c198b51b14774c1364e3.png](https://i-blog.csdnimg.cn/blog_migrate/7153058aa25eac8185e15607cd5d29bb.jpeg)
harbor的安装推荐使用docker方式安装,比较方便
https://github.com/goharbor/harbor/releases/download
harbor中有个复制管理,即是同步镜像的功能。
很多网上有harbor的高可用,以及集群的架构方案,老顾认为没有必要,应该harbor是在内部使用,高可用的需求不强烈。我们只要保证镜像文件不丢失即可,正好harbor的复制管理即可完成此功能。
所以我们只要架设几个harbor就ok了
k8s
k8s集群安装是比较复杂的,网上介绍的有两种方式kubeadm方式和二进制方式,我们今天介绍更简单的方式,只要几句命令就ok。
利用sealyun工具,利用go语言方式,能够快速搭建k8s集群
结点规划
主机名
IP地址
master01
192.168.0.2
master02
192.168.0.3
master03
192.168.0.4
work01
192.168.0.5
work02
192.168.0.6
注意:
系统支持:centos7.2以上 ubuntu16.04以上 内核推荐4.14以上
推荐配置:centos7.4
注意事项
1)必须同步所有服务器时间
2)所有服务器主机名不能重复
#下载并安装sealos, sealos是个golang的二进制工具,直接下载拷贝到#bin目录即可, release页面也可下载wget -c https://sealyun.oss-cn-beijing.aliyuncs.com/latest/sealos && chmod +x sealos && mv sealos /usr/bin #下载离线资源包wget -c https://sealyun.oss-cn-beijing.aliyuncs.com/d551b0b9e67e0416d0f9dce870a16665-1.18.0/kube1.18.0.tar.gz #安装一个三master的kubernetes集群sealos init --passwd 123456 --master 192.168.0.2 --master 192.168.0.3 --master 192.168.0.4 --node 192.168.0.5 --node 192.168.0.6 --pkg-url /root/kube1.18.0.tar.gz --version v1.18.0
上面就是3条命令,就可以帮我们完成k8s集群的搭建,等待的时长根据自身的网络环境。
注意:上面的passwd 123456,是5个服务器结点的root密码,一定要一样哦
k8s界面控制台
安装好了k8s后,只能用命令方式控制k8s,是很不方便的,所以我们还需要安装一个界面控制台,我们这里选择强大的kuboard
wget https://github.com/sealstore/dashboard/releases/download/v1.0-1/kuboard.tarsealos install --pkg-url kuboard.tar
到这里我们完成了k8s的安装,来看看炫酷的界面
![6336a83c318971e7a677893867fe7585.png](https://i-blog.csdnimg.cn/blog_migrate/91bee174ef90774b0a620158afa04b1c.jpeg)
创建Deployment
![8b12eedc518ea9b3baba14283a47913f.png](https://i-blog.csdnimg.cn/blog_migrate/fec8978bd63b2f29ef62506fcdf6c307.jpeg)
![f04867755097ef8745be25931f189993.png](https://i-blog.csdnimg.cn/blog_migrate/6056f8ea46fd66dddb46b7ba5d76602c.jpeg)
kuboard的优势,可以在逻辑上面区分不同的层级,可以方便的让我们一览系统架构
![aa521c1e779e8ddfbd17138ecd3c7ed9.png](https://i-blog.csdnimg.cn/blog_migrate/8dbd02badea358e47928a347187705dc.jpeg)
ingress安装
为了让集群外可以访问集群里面的访问,需要安装ingress
kubectl apply -f https://kuboard.cn/install-script/v1.16.2/nginx-ingress.yaml
![d424a0d671dc49204fb874ab2bbc0d3b.png](https://i-blog.csdnimg.cn/blog_migrate/a1c24fcc6c647b1cd7fe5b5dee901d60.jpeg)
配置service服务,以及ingress
![83d5cc280fb2803f113ec3cbf173f52b.png](https://i-blog.csdnimg.cn/blog_migrate/1076aa5cd81d39228919e58fa9e463fc.jpeg)
总结
老顾今天整体介绍把一个微服务项目,如何部署到k8s中,经过什么流程,以及需要什么工具,而且推荐了市面上面的主流工具。尤其介绍了k8s集群的搭建的工具,很推荐哦
当然具体工具的使用细节,需要小伙伴们自行搭建,里面会遇到很多的坑,遇到坑就去解决,这样理解起来会更好。
---End---