技术的本质是用来解决问题
先赞后看,养成习惯

本文章适合对如何在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,然后再通过域名访问即可。

以上,不要吝啬你的赞哦,你的赞是对作者最大的支持!

有问题欢迎留言。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐