30分钟无痛上云--springboot项目部署到kubernetes​

封面图.jpg

最近学习kubernetes,看书千言,不如一行。还是直接上手把一个项目迁移过去操作一下感觉深刻一点。废话少说,言归正传。

一、环境准备

  1. 操作系统版本 mac Mojove 10.14.5。

  2. docker-desktop版本2.1.0.3,对应docker ce版本为19.03.2

    这里下载最新的 [dockerCE]: https://store.docker.com/search?type=edition&offering=community

  3. 注意:请执行以下操作之前,检查之前本机是否有kubernetes环境,如果有不完整的,建议最好清除。请看我的 踩坑记录

二、docker-desktop开启kubernetes

  1. 为 Docker daemon 配置镜像加速,依次点击docker的小鲸鱼图标,preferences->daemon->registry mirrors下添加中科大的镜像源:
 https://docker.mirrors.ustc.edu.cn

从github上获取阿里提供的k8s-for-docker-desktop并安装依赖,可以简化kubernetes的安装。(前半部分的安装文档参考于此)

git clone https://github.com/AliyunContainerService/k8s-for-docker-desktop
cd k8s-for-docker-desktop
./load_images.sh

镜像安装完成之后,开启 Kubernetes,apply,并等待 Kubernetes 开始运行。

image-20190926100523288.png

TIPS:如果在Kubernetes部署的过程中出现问题,可以通过docker desktop应用日志获得实时日志信息:

pred='process matches ".*(ocker|vpnkit).*"
  || (process in {"taskgated-helper", "launchservicesd", "kernel"} && eventMessage contains[c] "docker")'
/usr/bin/log stream --style syslog --level=debug --color=always --predicate "$pred"

踩坑记录:我在这一步卡住了。。勾选enable kubernetes后,右下角的状态一直为: kubernetes is starting.上面的日志信息显示的是:

localhost com.docker.driver.amd64-linux[60050]: (libsystem_info.dylib) [com.apple.network.libinfo:getaddrinfo] nat64_v4_requires_synthesis(127.0.0.1) == false

多方查证后,发现是我本机之前安装了minikube,存在了配置文件信息。清除之后重新执行就好了。

rm -rf ~/.kube
rm -rf ~/.minikube
rm -rf /usr/local/bin/minikube

这样kubernetes应该就安装好了,我们可以打开dashboard看看。在k8s-for-docker-desktop目录下执行:

kubectl create -f kubernetes-dashboard.yaml

开启 API Server 访问代理

kubectl proxy

好了,可以访问dashboard了

http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login

这里会要求你输入配置文件或者token。我这里用的token。先得生成一下~~

kubectl -n kube-system describe secret default| awk '$1=="token:"{print $2}'

复制结果粘贴上去,点击登录,就可以看到页面了~~

另外一种是指定config文件:

TOKEN=$(kubectl -n kube-system describe secret default| awk '$1=="token:"{print $2}')
kubectl config set-credentials docker-for-desktop --token="${TOKEN}"

然后页面上选择配置文件路径: ~/.kube/config就可以了。

安装到此结束。下面进入迁移过程。

三、制作springboot服务镜像

这里只做示范,所以新建了一个最简单的工程, 名为kubedemo。就一个controller

@RestController
public class Hello {

    @GetMapping(value = "/hello")
    public String hello() {
        return "hello world";
    }
}
  1. 接下来打包, 然后新建一个Dockerfile:
mvn clean install -Dmaven.test.skip=true
mkdir docker
cp target/kubedemo-0.0.1-SNAPSHOT.jar ./docker
cp src/main/resources/application.properties ./docker
cd docker 
touch Dockerfile

Dockerfile 内容如下:

FROM anapsix/alpine-java

COPY . /

CMD java -Xmx1024m -Xms128m  -jar kubedemo-0.0.1-SNAPSHOT.jar
  1. 然后创建docker image
docker image build -t skycsky/kubedemo .
# 查看镜像
docker images

执行以下语句启动,浏览器打开http://localhost:8080/hello试试,返回 “hello world”,正常~~

docker run -p 8080:8080 -it skycsky/kubedemo
  1. 接下来把镜像推到仓库,我这里直接推到hub.docker.com,自己的项目的话最好用私有仓库。
docker image push skycsky/kubedemo

四、部署到kubernetes

有关kubernetes的相关概念,这里就不展开了,我们简单粗暴的直接把流程走通先~

1.新建一个kubernetes的部署配置文件,我这里取名叫deploy.yaml 内容如下:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: kubedemo-deployment
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: kubedemo
    spec:  
      containers:
        - name: kubedemo
          image: skycsky/kubedemo
          ports:
            - containerPort: 8080

---
apiVersion: v1
kind: Service
metadata:
  name: kubedemo-service
spec:
  selector:
    app: kubedemo
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 8080            
  1. 正式发布,过程相当简单。
kubectl apply -f ./deploy.yaml

显示结果:

deployment.extensions/kubedemo-deployment created
service/kubedemo-service created

现在可以去dashboard上检查状态了,到处点点看看吧~·

一切顺利的话,应该状态都是正常的,然后容器日志应该已经显示服务正常启动了。

那么接下来是一个灵魂拷问~整了这么多,我怎么访问这服务?原来localhost:8080的地址访问不了了啊!

大兄弟,你很有潜力哇,都会抢答了~~

3.端口转发

就跟docker一样,服务跑在容器内,端口是需要跟本机端口做个映射的,让我们来操作一下~

先获得已经部署的容器:

kubectl get pods

显示如下:

➜  kubedemo kubectl get pods
NAME                                  READY   STATUS    RESTARTS   AGE
kubedemo-deployment-7bc687c89-nhm9h   1/1     Running   0          15m

然后执行端口转发:

kubectl port-forward kubedemo-deployment-7bc687c89-nhm9h 8080:8080

看到下面的显示就说明成功了:

Forwarding from 127.0.0.1:8080 -> 8080
Forwarding from [::1]:8080 -> 8080

好了,现在端口转发成功,我们可以再试试访问http://localhost:8080 ,又可以看到熟悉的 hello world 了~

写在最后

到此,最简单的将springboot服务部署到kubernetes的步骤就写完了,我知道,你一定在嘀咕,整了半天,你这跟docker上跑有什么区别?绕个弯放到kubernetes上好玩呢?

嗯.....你说得好像有道理,我竟无法反驳。于是我决定再看看书,研究出下一篇文章来回答。

to be continued...

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容