当我们的项目是集群部署的时候,我们再更新代码部署到机器上的时候是很麻烦的。所以这时候我们需要借助一些工具来帮助我们更便捷的进行更新和发布。
首先我准备了两台机器进行一个环境搭建演示。一台用于安装rancher,一台用来跑微服务。
apt-get update
apt-get install docker.io
docker run -d --restart=unless-stopped \
--name=rancher-server \
-p 80:80 -p 443:443 -p 6443:6443 \
--privileged \
-v /var/server/rancher:/var/lib/rancher \
rancher/rancher:stable
通过浏览器输入服务器的ip地址后,进入rancher界面
我们在服务器上输入下面这条语句来启动密码
docker logs <你的容器id> 2>&1 | grep "Bootstrap Password:"
接下来Rancher需要我们配置一个初始化密码并同意他们的协议
我们选择Set a specific password to use
Server Url配置我们服务器的外网IP,如果你是虚拟机测试,也可以填写虚拟机的地址
1.进入rancher容器
docker exec -it rancher-server /bin/bash
2.暴露k3s.yaml到环境变量中
echo export KUBECONFIG=/etc/rancher/k3s/k3s.yaml>>/etc/profile
source /etc/profile
3.在/var/lib/rancher/k3s/agent/etc/containerd/config.toml.tmpl最后增加以下配置
#
cp /var/lib/rancher/k3s/agent/etc/containerd/config.toml /var/lib/rancher/k3s/agent/etc/containerd/config.toml.tmpl
# 编辑拷贝的文件
vi /var/lib/rancher/k3s/agent/etc/containerd/config.toml.tmpl
在文件中增加一条镜像源的配置
[plugins.cri.registry.mirrors]
[plugins.cri.registry.mirrors."docker.io"]
endpoint = ["https://vcw3fe1o.mirror.aliyuncs.com"] #镜像加速地址
镜像加速地址获取:https://cr.console.aliyun.com/cn-guangzhou/instances/mirrors
4.私有镜像仓库配置
vim /etc/rancher/k3s/registries.yaml
mirrors:
docker.io:
endpoint:
- "registry.cn-guangzhou.aliyuncs.com"
configs:
"registry.cn-guangzhou.aliyuncs.com":
auth:
username: '你的私有仓库用户名'
password: '你的私有仓库密码'
阿里云私有仓库获取地址:
私有仓库和用户名密码在左侧菜单栏中的访问凭证中可以进行配置
docker run --restart always -p 3306 --name mysql -v /data/mysql/logs:/logs -v /data/mysql/db:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
启动起来之后我们进入mysql容器中,设置一下远程访问连接
docker exec -it mysql /bin/bash
mysql -uroot -p
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
flush privileges;
退出mysql容器。
由于我是单台机器内网搭建k3s和mysql,所以我这里通过docker命令查看mysql容器的内网IP地址并记录下来
docker inspect mysql
curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn \
INSTALL_K3S_VERSION='v1.20.4+k3s1' \
sh -s - server \
--disable traefik \
--kubelet-arg eviction-hard='memory.available<200Mi,nodefs.available<2%' \
--datastore-endpoint='mysql://root:123456@tcp(172.17.0.5:3306)/kubernetes' \
--write-kubeconfig-mode 644
记得替换掉endpoint中mysql的连接信息
等待k3s安装完毕后我们就跟之前一样进行一次k3s的配置,当然这次我们没有将k3s安装在docker中,所以我们直接在节点服务器上配置即可。
配置完毕后我们输入下面的命令来重启k3s服务
systemctl restart k3s.service
首先进入进行控制台页面,点击左侧的仓库管理 -> 命名空间进行一个配置
然后我们点击镜像仓库 -> 创建镜像仓库
命名空间选择刚刚创建的,仓库名称和摘要可以随意填写,完毕后点击下一步
选择本地仓库,然后点击创建镜像仓库即可。
Dockerfile
# 基于 java 8构建
FROM registry.cn-shenzhen.aliyuncs.com/quan_center/java:8
# 基于构建上下文 . 进行COPY 文件到 /root目录下
COPY ./target/k8s-spring-demo-0.0.1-SNAPSHOT.jar /root
# 容器启动执行的命令
CMD java -jar -Xms200m -Xmx200m -Dspring.profiles.active=test /root/k8s-spring-demo-0.0.1-SNAPSHOT.jar
manifests.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: ${SERVICE}
spec:
replicas: 1
selector:
matchLabels:
app: ${SERVICE}
template:
metadata:
labels:
app: ${SERVICE}
spec:
containers:
- image: ${IMAGE}
imagePullPolicy: Always
name: ${SERVICE}
# 容器端口暴露 留意服务未指定端口暴露时默认8080
# 因此,暴露8080 是所有服务的默认端口。
ports:
- containerPort: 8080
imagePullSecrets:
- name: dockercfg-192
完毕后提交代码到阿里云codeup上
下拉到最底部,找到空模板
首先我们先来添加流水线
1.添加流水线资源
选择codeup后选择好我们刚刚创建的代码仓库名称和分支后点击添加
2.在阶段1点击空任务后,右侧会弹出一个配置表单,我们对其进行配置
在配置好任务名称后添加一个java构建,这个java构建可以不用更改,直接用它默认的就好。
接下来我们再添加一个步骤
在这里他会显示出来我们之前在阿里云容器镜像服务中配置好的信息。
完毕后我们点击右上角的仅保存。
3.配置发布到k3s集群上
点击新的任务 选择 kubernetes发布
在这里需要配置我们的k3s集群。首先我们先切回rancher
这时候它会有两行命令提示,这时候我们打开刚刚搭建好环境的节点服务器
将这两行命令复制粘贴过去,这时候就会发现我们刚刚创建好的集群已经有一个主机在线了
我们进入到helloworld这个仪表盘
再点击右上角的kubeconfig文件,将里面显示的内容全部复制下来
在阿里云流水线那边点击新建连接,将刚刚复制的内容粘贴过去
然后保存即可。
4.配置服务名称和包名
由于我在manifests.yaml文件中填入了两个变量参数
我们现在需要进行配置,首先配置我们的服务名称
点击添加后,我们选择自定义参数。
然后在添加一个上下游制品,因为需要从我们的阿里云容器仓库中拉去制品
选择公网地址的那个选项
5.修改manifests的文件路径
由于在工程根目录,我们直接填写
./manifests.yaml即可
到这里我们保存完毕后,流水线的配置就已经完毕了。
cat ~/.docker/config.json
kubectl create secret docker-registry dockercfg-192 --docker-server=阿里云私有镜像的公网地址 --docker-username=阿里云私有镜像仓库用户名 --docker-password=阿里云私有镜像仓库密码
其中,dockercfg-192为你的密钥名称,而这个名称应该与manifests.yaml文件中的imagePullSecrets一一对应
至此,我们的配置就都完成了。