通過K8S+docker部署一個springboot+spring cloud項目

前提條件:

1.安裝K8S,參考:使用kubeadm安裝kubernetes_v1.18.x

2.安裝了NFS服務器:參考: 搭建NFS Server

  1. 配置好docker本地私有倉庫,假設當前的docker私倉地址為192.168.10.240:8050
# 可直接通過 docker-compose 創建一個本地私有倉庫
# 將此文件命名為 registry.yaml 運行 docker-compose -f registry.yaml up 啟動
# 啟動完成后,將生成的auth/passwd文件內容改成如下文本,去掉#號,即聲明賬號和密碼為 docker 和 123456
# docker:$2y$05$9lG7QFC/hSCj/s.c4769K.4mSsqWF5OwTPv2UP6.itFGlWCV/HwVS
version: '2.1'
services:
  registry:
    image: registry
    container_name: my_registry
    volumes:
      - ./registry:/var/lib/registry
      - ./auth:/auth
    environment:
      - REGISTRY_AUTH=htpasswd
      - REGISTRY_AUTH_HTPASSWD_REALM=Registry_Realm
      - REGISTRY_AUTH_HTPASSWD_PATH=/auth/passwd
    restart: always
    privileged: true
    ports:
      - "8050:5000"

然后將私倉的地址配置到docker的daemon配置文件中.Linux環境叫daemon.json,docker安裝后默認沒有daemon.json這個配置文件,需要進行手動創建。配置文件的默認路徑:/etc/docker/daemon.json。windows配置如下:


image.png
  1. 下載demo應用程序JAR包 鏈接:https://pan.baidu.com/s/1eG1qXjPhOYqK80k65LX8Aw
    提取碼:kmcb
  2. 下載相關配置文件,https://github.com/sun449036002/k8s-springboot-springcloud-consul.git,并把之前下載的兩個jar包,復制到此項目中的根目錄(k8s-springboot-springcloud-consul目錄)

打包鏡像并上傳到本地私有倉庫

  1. 先登錄本地倉庫,按提示輸入賬號和密碼
docker login 192.168.10.240:8050 
  1. 在根目錄,根據Dockerfile build 鏡像,打上標簽并push到私有倉庫, 注意build時末尾的點號
docker build -t shop-api .
docker tag shop-api 192.168.10.240:8050/sym/shop-api
docker push 192.168.10.240:8050/sym/shop-api

docker build -t shop-user-center -f Dockerfile4UserCenter .
docker tag shop-user-center 192.168.10.240:8050/sym/shop-user-center
docker push 192.168.10.240:8050/sym/shop-user-center
  1. 創建k8s中docker pull 時需要使用到的認證名稱,賬號密碼換成自己的搭建時設置的值
kubectl create secret docker-registry regsecret --docker-server=192.168.10.240:8050 --docker-username=docker --docker-password=123456 --docker-email=5566@qq.com

k8s.yaml配置文件描述:

  1. user api 配置說明:
    image.png
  2. mysql、redis 配置說明
    mysql的配置文件通過將數據映射到掛載在本地的NFS對應的目錄中,

    mysql的數據內容直接映射到主機的本地硬盤中
    image.png

    程序中通過K8S配置的Service名稱來連接mysql,故這里的服務名稱不能變,同理,redis類似。
    image.png

    image.png
  3. consul 配置說明
    image.png

啟動應用

進入到 k8s-springboot-springcloud-consul目錄,執行啟動各服務

kubectl apply -f k8s.yaml

執行后,查看運行狀態,

kubectl get svc,pod -o wide
image.png

通過上面的端口加本機IP訪問 consul后臺UI界面


image.png

若都是Running說明啟動成功, 若有沒有在Running狀態的,可執行以下命令查看錯誤原因及日志

kubectl describe pod/user-api-55f444446c-mmlf6
image.png
# 或者查看 pod中的日志,看是否有具體的報錯信息
kubectl logs pod/user-api-55f444446c-mmlf6
image.png

當查看 pod/user-center-xxxxx的log日志時,發現shop數據庫沒有創建時,可通過mysql工具連接到mysql,創建名為shop的數據,并導入項目根目錄中sql.sql中的數據,

# 連接數據的信息
host: 127.0.0.1
port: 31233
user:root
password:123456

并重啟pod即可,通過kubuctl delete 刪除pod,使控制器自動啟動一個新的pod

#刪除容器,使之重啟一個
kubectl delete pod/user-center-xxxxxx

后續數據準備,并驗證接口

  1. 先通過映射出來的端口,連接redis 并往redis插入一條數據token對應的openid oIBgo45C6N1kW8u2ZF1,假如指定token為abvdefg
# 連接redis信息
# host: 127.0.0.1
# port: 31238
# password:123456
SET user:openid:abvdefg "oIBgo45C6N1kW8u2ZF1"
  1. postman post 請求updateuserinfo接口存入redis,或者直接命令行中curl請求
curl --location --request POST 'http://127.0.0.1:31234/updateInfo?token=abvdefg' \
--form 'nickName=abc' \
--form 'avatarUrl=abc123456789' \
--form 'city=上海' \
--form 'gener=1' \
--form 'country=中國' \
--form 'province=上海' \
--form 'language=1'
image.png

3.最后訪問接口查看是否正常獲取到用戶信息
http://127.0.0.1:31234/user/detail?token=abvdefg

image.png

本人學習時網上搜羅記錄以此, 歡迎騷擾、留言、and 噴我

外加效果圖 (微信小程序,掃碼查看):

image.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。