k8s 最简单的一主二从本地集群部署 并部署镜像(4、k8s部署springboot项目)

k8s 最简单的一主二从本地集群部署 并部署镜像(4、k8s部署springboot项目)

准备

首先准备一个最简单的一个demo,一个rest接口。我们的目的是将这个demo部署到k8s集群中,并访问到。这里暴露的端口是8080
在这里插入图片描述

在这里插入图片描述

本地运行jar包
在这里插入图片描述

本地访问
在这里插入图片描述

镜像打包

  1. 先将jar包上传至master上的一个文件夹内

    在这里插入图片描述

  2. 编写Dockerfile

     #创建文件
     vim Dockerfile
     ##内容
     FROM java:8
     COPY demo.jar app.jar
     EXPOSE 8080
     ENTRYPOINT ["java","-jar","/app.jar"]
    
  3. 构建镜像(注意最后还有一个点)

     docker build -t k8s_demo:1.0 .
    

    可以看到一个名为k8s_demo:1.0的镜像现在已经构建好了
    在这里插入图片描述

  4. 部署镜像仓库(两个仓库二选一,一般采用harbor)

    1.Docker Registry

     docker run -d -v /etc/images/registry:/var/lib/registry -p 5000:5000 --restart=always --name my-registry registry
    
     docker ps
    

    在这里插入图片描述

     #查看本地仓库镜像
     #通过ip
     curl http://192.168.101.100:5000/v2/_catalog
     #通过域名
     curl http://k8s.master:5000/v2/_catalog
    

    在这里插入图片描述
    可以发现是空的,空的就对了,我们还没有上传我们的镜像

    2.Harbor

    安装docker-compose

     #下载指定版本的docker-compose
     curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
     #对二进制文件赋可执行权限
     chmod +x /usr/local/bin/docker-compose
     #验证docker-compose安装是否成功
     docker-compose --version
    

    下载harbor安装包
    harbor各个发行版的github地址:https://github.com/goharbor/harbor/releases,可以自己去下载各个版本的harbor,最后上传到你的服务器,或者直接在服务器上面拉取,我用的v2.4.1这个harbor版本,仓库版本不重要,只要能用就行

在这里插入图片描述

tar -zxvf harbor-online-installer-v2.4.1.tgz

在这里插入图片描述

cd harbor

在这里插入图片描述

这里需要做两个步骤,copy一份安装用的yml,进行修改

cp harbor.yml.tmpl harbor.yml
vim harbor.yml

在这里插入图片描述
修改后
在这里插入图片描述
运行install.sh

./install.sh

第一次会拉很多相关的镜像,需要等待一会儿。

在这里插入图片描述
至此harbor安装运行成功,此时会多出一个docker-compose.yml的文件,下次启动的时候直接执行以下命令启动

docker-compose -f docker-compose.yml up -d

需要停止harbor,进入你的yaml目录下面执行:

docker-compose -f docker-compose.yml down
  1. 上传镜像
    为了让客户端服务器能够快速地访问刚刚在服务端搭建的镜像仓库(默认情况下是需要配置HTTPS证书的),这里简单在客户端配置一下私有仓库的可信任设置让我们可以通过HTTP直接访问:# vim /etc/docker/daemon.json,以下操作根据自己安装的仓库进行配置

Docker Registry 配置
以下操作需要在每台节点上运行,每台节点都必须能够访问到镜像仓库

   vim /etc/docker/daemon.json
   # 添加如下内容
   "insecure-registries": ["192.168.101.100:5000"]
   #或者使用域名
   #"insecure-registries": ["http://k8s.master"]
   #重启docker
   systemctl restart docker

Harbor配置
以下操作需要在每台节点上运行,每台节点都必须能够访问到镜像仓库

vim /etc/docker/daemon.json
# 添加如下内容
"insecure-registries": ["192.168.101.100"]
#或者使用域名
#"insecure-registries": ["http://k8s.master"]
#重启docker
systemctl restart docker

harbor账号配置可以自己去找一找

这里要看自己master的ip,还有一定要把自己的防火墙关了(自己玩玩可以),修改完配置文件一定要重启docker

上传镜像至私有仓库,这里只描述采用harbor仓库的情况:

登录harbor仓库
浏览器输入harbor所在主机ip即可(默认80端口)。admin默认密码Harbor12345,若要修改admin或者新增harbor用户的话,可以自己去配置,这里就不多说这个问题了。
创建项目
在这里插入图片描述

修改镜像名称为 仓库地址/仓库名称/镜像名称:TAG
注意,这里打tag的仓库地址要和insecure-registries当时配置的仓库地址一致,配置的ip就写ip,配置的域名就写域名
push的时候报unauthorized,没有权限的话需要先登录(用户名和密码和登录harbor客户端一样)
在这里插入图片描述
#镜像打Tag(docker tag 镜像名称:tag 仓库地址/镜像名称:tag)
docker tag k8s_demo:1.0 192.168.101.100/k8s_test/k8s_demo:1.0
#可信任设置配置的是域名的话仓库地址需要为域名
#docker tag k8s_demo:1.0 k8s.master/k8s_test/k8s_demo:1.0
#docker push 镜像仓库地址/镜像名称:标签(版本)
docker push 192.168.101.100/k8s_test/k8s_demo:1.0
#docker push k8s.master/k8s_test/k8s_demo:1.0
在这里插入图片描述
这里可信配置我是配置的域名,这个得看自己各自的配置修改镜像名称
push过后可以在仓库上面看到自己推上去的镜像
在这里插入图片描述

至此镜像制作完成

部署

这里我在另一个文件夹中执行创建pod的操作
在这里插入图片描述

  1. 创建demo应用的deployment编排文件(deploy维护的是pod,k8s容器最基本的运行单位)

     vim demo_deploy.yaml
    
     apiVersion: apps/v1
     kind: Deployment
     metadata:
       name: k8s-demo
       labels:
         app: k8s-demo
     spec:
       replicas: 2
       selector:
         matchLabels:
           app: k8s-demo
       template:
         metadata:
           labels:
             app: k8s-demo
         spec:
           containers: 
           - name: k8s-demo
             image: k8s.master/k8s_test/k8s_demo:1.0 
             imagePullPolicy: IfNotPresent
             ports:
             - containerPort: 8080
    

注意
镜像的仓库地址为自己的镜像的地址
编排文件里面name,labels标签的值不能带有下划线,不然会报错

  1. 运行deployment

     kubectl apply -f demo_deploy.yaml
     #查看运行
     kubectl get deploy
     kubectl get pod -o wide
    

在这里插入图片描述

这是我们刚刚创建的deploy应用。一个k8s-demo的应用有两个副本。依次检查各个pod的运行情况

kubectl describe pod k8s-demo-99b8765bf-9rwsk
kubectl describe pod k8s-demo-99b8765bf-nrvzj

在这里插入图片描述
在这里插入图片描述
发现两个副本被分别运行在node1,node2节点(这里因为后续网络的问题,集群节点换了ip)。

分别去两个节点去看docker运行情况,可以发现两台节点分别运行了一个docker容器,跑的就是我们的k8s_demo
在这里插入图片描述在这里插入图片描述
但是我们发现ports并没有暴露,因为k8s的访问策略默认为clusterIp,这种模式下,只能集群内部进行访问,而不会暴露给外部,如下:

在这里插入图片描述
分别在node1和node2上面去curl 对方的测试接口
在这里插入图片描述
在这里插入图片描述
ClusterIP集群内部直接请求时可以的,通过宿主机是不行的
下一章节部署Service和ingress,实现通过NodePort和ingress的方式访问应用

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值