kubernetes系列02-本地安装kubernetes、部署springboot服务

本章我们在本地快速搭建一个kubernetes集群并且在上面部署一个springboot服务。

kubernetes组件介绍

kuberntes组件分为两部分,control plane(控制面)和worker node(工作节点)。

control plane从名字可以看出负责控制整个系统。Control plane里面注意包含controller manager,scheduler, api server和etcd。etcd是存放kubernetes数据信息的存储系统,是一个分布式的一致性存储服务。api server提供了对kubernetes中各类资源的读写操作接口,内部实现是与etcd交互读写。controller manager中包含多种控制器,例如DeploymentController负责管理容器服务的部署。scheduler负责为新创建的pod分配部署的机器资源,pod是kubernetes中部署服务的抽象描述,一般一个pod中只包含一个容器。

每个worker node表示一个机器节点,worker node和control plane连接,接受control plane的指令,启动、关闭pod。每个worker node中包含一个container runtime,例如docker引擎,container runtime负责容器的创建、关闭等。kubelet负责与control plane的api server通信。kube proxy是网络代理,负责与其他的pod通信。

安装kubernetes

今天我们在本地部署一个kubernetes,并且在上面部署一个springboot服务。为此需要安装docker, 安装kubectl(操作kubernetes集群的命令行工具),安装kubernetes(minikube),创建一个springboot工程。

Docker安装使用

Docker和kubernetes的关系

kubernetes是管理容器的系统,Docker是容器技术的一种实现,也是目前用的比较多的容器技术。

Docker安装

Get Docker这里有不同的环境下的安装教程。

例如mac系统下载docker for mac,下载好后拖动到Applications文件夹,再双击Docker启动启动即可。

了解Dockerfile、Docker部署springboot服务

Dockerfile文件是Docker中定义一个容器镜像的描述,描述了一个镜像的构建过程。

我们通过idea创建一个普通的springboot项目,在项目的根目录下创建一个Dockerfile文件。我们使用的镜像基于openjdk:11,jdk11版本。构建镜像时,会把target文件夹下的jar包复制到镜像中,容器的启动命令是java -jar app.jar。注意jdk只能运行版本等于或低于自己版本的jdk编译出来的class文件,所以本地的java需要是jdk11或以下。springboot-demo-0.0.1-SNAPSHOT.jar是我们打包的包名的名称,默认是项目的名称加上版本号,这里改成自己的。

FROM openjdk:11MAINTAINER liuzhengyang.github.ioCOPY target/springboot-demo-0.0.1-SNAPSHOT.jar app.jarENTRYPOINT ["java","-jar","/app.jar"]

定义好Dockerfile后,下一步是构建docker image也就是镜像。下面的命令通过docker build创建出一个名字是springboot-demo的镜像

docker build -t springboot-demo:latest . 

然后通过docker run命令运行刚才的镜像 -p 8080:8080表示把容器内的8080端口映射到当前宿主机器上的8080端口。:前面的是宿主机的端口,后面的是容器内的端口。

docker run -p 8080:8080 springboot-demo

测试接口

curl http://localhost:8080/

下一步我们push到Docker镜像仓库,在docker hub注册一个个人账号,然后就可以push镜像到公共仓库了,类似发布jar包到maven中央仓库。因为docker默认使用docker官方仓库,所以我们要把镜像push到docker官方仓库

# 给我们本地的镜像加一个tag别名,名字为自己的docker hub的名字/springboot-demodocker tag springboot-demo liuzhengyang/springboot-demo# push镜像docker push liuzhengyang/springboot-demo

其他参考资料

kubernetes安装使用

安装好docker后,我们需要安装kubernetes。

kubernetes安装(minikube)

本地开发时,使用minikube比较方便

# 安装minkkube, mac版本,其他版本可以参考官方文档curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64sudo install minikube-darwin-amd64 /usr/local/bin/minikube# 启动minikubeminikube start --image-mirror-country='cn'# 可以开启一个web管理页面 minikube dashboard# 安装kubectl 和kubernetes集群交互的客户端curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/amd64/kubectl"# 运行kubectl 命令测试集群状态kubectl cluster-info# 小技巧# 在~/.bashrc或~/.zash中给kubectl加一个alias别名,比如alias k="kubectl"可以让输入命令更方便,tab可以有命令提示(mac zsh)

用kubenetes部署springboot

在前面我们用Docker启动springboot项目有一些缺点,比如如果容器挂掉,我们需要通过报警发现再人工去启动新的镜像。而kubernetes能够在容器挂掉后自动创建新的容器替补上。

在kubernetes中,我们可以用Deployment yaml文件来定义部署一个服务。

kubernetes-deployment.yml

apiVersion: apps/v1kind: Deploymentmetadata:  name: springboot-demospec:  replicas: 1  selector:    matchLabels:      app: springboot-demo  template:    metadata:      labels:        app: springboot-demo    spec:      containers:        - image: liuzhengyang/springboot-demo          name: springboot-demo

这个yaml文件中的内容可以想不用了解我们后面章节会介绍。然后我们用kubectl apply -f kubernetes-deployment.yml来应用deployment

apply之后kubernetes内部就会部署springboot服务(第一次部署可能会稍慢,要下载镜像)

我们可以通过kubectl get pods命令查看pod状态

NAME                               READY   STATUS              RESTARTS   AGEspringboot-demo-6865d48f85-fslc9   0/1     ContainerCreating   0          7s

通过kubectl describe pods可以查看pods的详细状态

Events:  Type    Reason     Age   From               Message  ----    ------     ----  ----               -------  Normal  Scheduled  95s   default-scheduler  Successfully assigned default/springboot-demo-6865d48f85-fslc9 to minikube  Normal  Pulling    94s   kubelet            Pulling image "liuzhengyang/springboot-demo"  Normal  Pulled     44s   kubelet            Successfully pulled image "liuzhengyang/springboot-demo" in 50.297270315s  Normal  Created    44s   kubelet            Created container springboot-demo  Normal  Started    44s   kubelet            Started container springboot-demo

不断执行kubectl get pods,最终可以看到pods状态变成running

NAME                               READY   STATUS    RESTARTS   AGEspringboot-demo-6865d48f85-fslc9   1/1     Running   0          2m17s

登录到k8s容器中

后面的章节我们会介绍怎么在容器外部访问这个服务。现在我们看下如何登录到容器中。

通过上面的kubectl get pods命令我们可以看到我们的pod name是springboot-demo-6865d48f85-fslc9

现在我们登录到这个机器上

kubectl exec -it springboot-demo-6865d48f85-fslc9 -- sh

登录上去之后,就可以执行jps等命令观察我们的服务了。

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

推荐阅读更多精彩内容