(干货)如何在k8s部署应用
技术的本质是用来解决问题先赞后看,养成习惯本文章适合对如何在k8s部署应用感兴趣的小伙伴。如果你现在在为如何在k8s部署应用而烦恼,或者是你需要deployment.yaml,service.yaml,ingress.yaml的最简模板,或许往下看你的问题能得到解决。在k8s部署应用分以下几个步骤:1.制作镜像2.配置ingress.yaml3.配置service.yaml4.配置ingress.
技术的本质是用来解决问题
先赞后看,养成习惯
本文章适合对如何在k8s部署应用感兴趣的小伙伴。如果你现在在为如何在k8s部署应用而烦恼,或者是你需要deployment.yaml,service.yaml,ingress.yaml的最简模板,或许往下看你的问题能得到解决。
在k8s部署应用分以下几个步骤:
1.制作镜像
2.配置ingress.yaml
3.配置service.yaml
4.配置ingress.yaml
5.通过域名访问k8s里面的应用
制作镜像
制作镜像需要一些编写DockerFile的奇怪知识,本文不会去一一分组比较Dockerfile常用命令的不同,而是直接给出最常用命令的使用方式,学会这些最常用命令的使用方式,相信能解决80%以上的问题了。
FROM指令
FROM指令指定基础镜像,要加版号,样例:
FROM dockerbase/service-java8:latest
RUN指令
RUN指令相当于在镜像中运行一条命令
RUN ["mkdir","-p","/data/src"] #相当于mkdir -p "/data/src"
ADD指令
ADD指令将容器外的文件,放到容器里面去
ADD ./startUp.sh /data/src/ #将当前路径的startUp.sh 放到容器里面的/data/src路径下
WORKDIR指令
WORKDIR指令的效果是指令当前工作路径,即你exec到容器的目录。
WORKDIR /data/src/ #指定当前所处的路径是/data/src
CMD指令
CMD指令和RUN指令其实差不多,RUN常用来下载软件,创建目录之类的动作,而CMD常用来指定容器启动后默认执行的命令
CMD ./startUp.sh #相当于最后执行./startUp.sh
制作SpringBoot容器的整个Dockfile模板
FROM dockerbase/service-java8:latest
RUN ["mkdir","-p","/data/src"]
ADD ./permission-1.0.0-SNAPSHOT.jar /data/src/
ADD ./startUp.sh /data/src/
WORKDIR /data/src/
RUN chmod +x ./startUp.sh
CMD ./startUp.sh
根据Dockerfile制作镜像
如何根据Dockerfile制作镜像呢,其实很简单。命令如下:
docker build -t dockerhub/devops/cloud_manger:v1.0.0 .
解释一下,-t其实就是-tag,也就是给镜像打tag,这个tag后面用于推送镜像到镜像仓库的时候使用。注意不要露了最后有个.
推送镜像到镜像仓库
一条命令,原谅我有点啰嗦,因为这些命令还真的是容易忘记。
docker commit dockerhub/devops/cloud_manger:v1.0.0
docker会根据你容器的路径推送到指定镜像仓库,如果你还没有登入dockerhub需要先登入dockerhub。
也很简单
docker loggin dockerhub
然后输入账号密码即可。
配置deployment.yaml
首先给出干货,我这边没有啥大道理,一切尽在注释中。
apiVersion: apps/v1 #版本类型,不可随意更改
kind: Deployment #对象类型
metadata:
name: ci-dependence-controller #名称
namespace: devops #名称空间,建议填写,不要随意乱填
labels:
app: ci-dependence-controller #标注,用于service通过selectlabel进行选择,并4层代理
spec:
replicas: 2 #运行容器的副本数,修改这里可以快速修改分布式节点数量
selector:
matchLabels:
app: ci-dependence-controller
template:
metadata:
labels:
app: ci-dependence-controller
spec:
containers: #docker容器的配置
- name: ci-dependence-controller
image: dockerregister.hikops.com/devops/ci_dependence_manager:v1.0.0 # pull镜像的地址 ip:prot/dir/images:tag
imagePullPolicy: IfNotPresent #pull镜像时机,
ports:
- containerPort: 8081 #容器对外开放端口
配置service.yaml
apiVersion: v1 #版本不可随意更改
kind: Service #种类
metadata:
name: ci-dependence-controller
namespace: devops #名称空间,建议要添加
labels:
app: ci-dependence-controller
spec:
type: ClusterIP #service的kind,如果不直接对外暴露服务,建议选择ClusterIP类型
ports:
- port: 8080 #service对外暴露的端口
targetPort: 8081 #pod对外开放端口
name: http
selector:
app: ci-dependence-controller #通过selector选择标签为当前pod去代理
配置ingress.yaml
# test-ingress-myapp.yaml
# ingress规则中,要指定需要绑定暴露的svc名称
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ci-dependence-controller
namespace: devops
annotations:
kubernetes.io/ingress.class: "nginx" #建议不要修改,选择nginx做一个7层代理
spec:
rules:
- host: civil-ci.hikops.com.cn #域名
http:
paths:
- path: /
backend:
serviceName: ci-dependence-controller #service的名字
servicePort: 8080 #service对外暴露的端口
通过域名访问你的应用
我们在ingress里面配置了域名,那么该如何通过域名访问到我们在k8s里面的应用呢?最简单的方式就是直接配置hosts,然后再通过域名访问即可。
以上,不要吝啬你的赞哦,你的赞是对作者最大的支持!
有问题欢迎留言。
更多推荐
所有评论(0)