microk8s可以理解为单机版的k8s,能够实现快速部署快速上手。
microk8s的部署基本上可以分为四大部分
- 打包应用:将spring项目打包成docker镜像进行打包发布到虚拟机docker中
- push应用:将docker镜像push到docker hub云端
- 部署应用:利用k8s中的deployment集合之前的docker image进行部署成实际的pod
- 发布服务:利用k8s中的service将deployment包装暴露提供给外界服务
本文将从环境准备开始一步一步将spring 项目实际部署到microk8s当中对外提供服务。
环境准备
安装虚拟机
此处选择安装Vmware最新版,然后破解码进行破解
安装镜像
安装Ubuntu的镜像
官网下载最新的iso镜像即可
docker
安装docker
#由于apt官方库里的docker版本可能比较旧,所以先卸载可能存在的旧版本:
$ sudo apt-get remove docker docker-engine docker-ce docker.io
#更新apt包索引:
sudo apt-get update
#安装以下包以使apt可以通过HTTPS使用存储库(repository):
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
#添加Docker官方的GPG密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
#使用下面的命令来设置stable存储库:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
#再更新一下apt包索引:
sudo apt-get update
#安装最新版本的Docker CE:
sudo apt-get install -y docker-ce
#查看docker服务是否启动:
systemctl status docker
配置docker国内镜像镜像
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
重启docker
systemctl daemon-reload systemctl restart docker
有时候这个镜像地址会有问题
可以更换其他镜像地址
https://registry.docker-cn.com
http://hub-mirror.c.163.com
https://3laho3y3.mirror.aliyuncs.com
http://f1361db2.m.daocloud.io
https://mirror.ccs.tencentyun.com
开启docker远程访问
xinchen.blog.csdn.net/article/det…
idea中远程连接docker
idea中首先安装docker插件
在setting里找到这个插件,安装上去
出现如下字样则表示连接成功
安装MicroK8s
#sudo snap install microk8s --classic
#配置 microk8s命令
#echo "export PATH=$PATH:/snap/bin" >> ~/.bashrc #永久写入
#设置kubectl别名
#snap alias microk8s.kubectl kubectl
pod的sandbox 默认是 k8s.gcr.io/pause:3.1,这个镜像是无法获取的。需要将sandbox修改为国内可以获取的镜像。
修改/var/snap/microk8s/current/args/kubelet。 添加--pod-infra-container-image=s7799653/pause:3.1 修改/var/snap/microk8s/current/args/containerd-template.toml的plugins -> plugins.cri -> sandbox_image为s7799653/pause:3.1
#重启服务
#microk8s.stop
#microk8s.start
#启动dns和dashboard
#microk8s.enable dns dashboard
可以结合文末的安装教程列表综合参考
至此安装完成
idea项目规划
项目结构如下所示
打包应用
dockerfile文件内容
FROM openjdk:8u201-jdk-alpine3.9
#作者
MAINTAINER Lucas <1181370590@qq.com>
#系统编码
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8
RUN mkdir -p /usr/local
#应用构建成功后的jar文件被复制到镜像内,名字也改成了app.jar
ADD target/springboot-k8s-demo-0.0.1-SNAPSHOT.jar /usr/local/app.jar
# 运行容器后执行的第一条命令
ENTRYPOINT ["java","-jar","/usr/local/app.jar"]
#暴露8080端口
EXPOSE 8080
idea设置
编辑设置
添加docker设置
选择DockerFile,然后点击绿色箭头Run
成功之后就能看到部署成功的字样
虚拟机中也能看到所部署的镜像
Push应用
首先修改image的名字让image的名字符合如下规范
docker tag 镜像名称 dockerhub用户名/镜像名称
docker push dockerhub用户名/镜像名称
push 成功之后能够在docker hub当中查看所push的image
部署应用
编写demo-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: springboot-k8s-demo
labels:
app: springboot-k8s-demo
spec:
replicas: 3
selector:
matchLabels:
app: springboot-k8s-demo
template:
metadata:
labels:
app: springboot-k8s-demo
spec:
containers:
- name: springboot-k8s-demo
image: 1181370590/springboot-k8s-demo:latest
ports:
- containerPort: 8080
运行
kubectl create -f demo-deployment.yaml
发布服务
编写demo-service.yml
apiVersion: v1
kind: Service
metadata:
name: springboot-k8s-demo
namespace: default
labels:
app: springboot-k8s-demo
spec:
type: NodePort
ports:
- port: 8080
nodePort: 30090 #service对外开放端口
selector:
app: springboot-k8s-demo
运行
kubectl create -f demo-servicet.yaml
验证
查看pod部署情况
所有pod
#kubectl get pods
可以看到此时pod正在创建,稍等一会儿
此时创建完毕,处于running状态
具体查看某个pod
#kubectl describe pod podname
查看service服务是否正常服务
curl serviceIp:port/路径
注意点
权限问题
命令行应该首先使用root用户来进行操作,否则会出现permission deny
YAML格式问题
网上部分yaml样例格式是有错误的
可以在如下网站检验yaml格式
查看日志
有时候部署deployment的时候会有问题
可以使用命令
kubectl logs -f podsname
来查看具体pod的日志来查看问题