当前位置: 首页 > article >正文

kubernetes项目部署

目录

 ​一、容器交付流程

二、k8s平台部署项目流程

三、在K8s平台部署项目


一、容器交付流程


容器交付流程通常分为四个阶:开发阶段、持续集成阶段、应用部署阶段和运维阶段。

开发阶段:开发应用程序,编写Dockerfile;

持续集成阶段:对应用程序编译打包、使用Dockerfile构建镜像,把镜像推送到镜像仓库;

应用部署阶段:基于镜像创建pod,使用deploy控制器暴露服务得到service,使用ingress提供域名访问服务;

运维阶段:对应用程序进行监控和版本升级等;


二、k8s平台部署项目流程


1.制作镜像(通过Dockerfile)

2.推送到镜像仓库中(阿里云镜像、网易镜像)

3.控制器部署镜像(Deployment)

4.对外暴露应用(Service、Ingress)

5.运维(监控、升级)


三、在K8s平台部署项目


部署环境准备

#  可以使用 yum 在线 或离线的下载 安装
yum install java-1.8.0-openjdk maven git -y 

maven 项目 编译

# 代码编译构建
cd  /opt/tomcat-java-demo-master
mvn clean package -Dmaven.test.skip=true 

编译完成的 WAR 包

第一步:制作镜像

cd  /opt/tomcat-java-demo-master
unzip   target/ly-simple-tomcat-0.0.1-SNAPSHOT.war -d  target/ROOT

## Dockerfile
FROM lizhenliang/tomcat 
LABEL maintainer www.ctnrs.com
RUN rm -rf /usr/local/tomcat/webapps/*
ADD target/ROOT /usr/local/tomcat/webapps/ROOT 

## 镜像构建
docker build  -f Dockerfile -t java-demo .


## 在项目中标记镜像
docker tag java-demo  harbor.winneryun.com/demo/java-demo:v1
## 推送镜像到当前项目 docker配置可信任 且登录成功
docker push  harbor.winneryun.com/demo/java-demo:v1

推送到镜像仓库

项目Demo地址:

# 项目地址
https://github.com/lizhenliang/tomcat-java-demo

第二步:使用控制器部署镜像

配置可信任每台节点Node(如果仓库是HTTPS访问不用配置)

[root@k8s-master java-demo]# cat /etc/docker/daemon.json 
{
  "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],
  "insecure-registries": ["harbor.winneryun.com"]
}

将镜像仓库认证凭据保存在K8s Secret中

kubectl create secret docker-registry registry-auth --docker-username=admin --docker-password=Harbor12345 --docker-server=harbor.winneryun.com

configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: java-demo-config
data:
    application.yml: |
        server:
          port: 8080
        spring:
          datasource:
            url: jdbc:mysql://localhost:3306/test?characterEncoding=utf-8
            username: root
            password: 123456789
            driver-class-name: com.mysql.jdbc.Driver
          freemarker:
            allow-request-override: false
            cache: true
            check-template-location: true
            charset: UTF-8
            content-type: text/html; charset=utf-8
            expose-request-attributes: false
            expose-session-attributes: false
            expose-spring-macro-helpers: false
            suffix: .ftl
            template-loader-path:
              - classpath:/templates/

Deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: java-demo
spec:
  replicas: 2
  selector:
    matchLabels:
      project: www
      app: java-demo
  template:
    metadata:
      labels:
        project: www
        app: java-demo
    spec:
      imagePullSecrets:
      - name: registry-auth
      containers:
      - image: harbor.winneryun.com/demo/java-demo:v1
        name: java-demo
        volumeMounts:  ## configMap 挂载
        - name: config
          mountPath: "/usr/local/tomcat/webapps/ROOT/WEB-INF/classes/application.yml"
          subPath: application.yml
        resources:
          requests:
            cpu: 0.5
            memory: 500Mi
          limits: 
            cpu: 1
            memory: 1Gi
        livenessProbe:
          httpGet:
            path: /
            port: 8080
          initialDelaySeconds: 50
          periodSeconds: 10
        readinessProbe:
          httpGet:
            path: /
            port: 8080
          initialDelaySeconds: 50
          periodSeconds: 10
      volumes:
      - name: config
        configMap:
          name: java-demo-config
          items:
          - key: "application.yml"
            path: "application.yml"

第三步:对外暴露应用

service.yaml

apiVersion: v1
kind: Service
metadata:
  name: java-demo 
spec:
  selector:
    project: www
    app: java-demo
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080 

ingress.yaml

apiVersion: networking.k8s.io/v1 
kind: Ingress
metadata: 
  name: java-demo
spec:
  rules:
  - host: example.ctnrs.com 
    http:
      paths:
      - path: / 
        pathType: Prefix 
        backend: 
          service:
            name: java-demo
            port: 
              number: 80

查看部署的服务

访问地址:http://example.ctnrs.com/

第四步:增加公网负载均衡器

安装 nginx , 配置 nginx.conf

yum install epel-release -y
yum install nginx  -y
systemctl start nginx

vim /etc/nginx/nginx.conf
#在server 的上面插入以下代码
    upstream webservers {
        server 192.168.2.118:80;
        server 192.168.2.210:80;
   }
    server{
        listen 80;
        server_name example.ctnrs.com; 
        location / {
          proxy_pass http://java-demo; proxy_set_header Host $Host;
        }
   }
    server {
        listen       80 default_server;
        listen       [::]:80 default_server;  
.....

nginx -s reload

成功访问:


http://www.kler.cn/a/17622.html

相关文章:

  • 单片机设计电流与温度监控python上位机监控平台设计
  • 基于node一键发布到服务器的js脚本
  • 【AutoGen 】简介
  • Elasticsearch基本概念及使用
  • Spring Boot实现文件上传与OSS集成:从基础到应用
  • LeetCode【0035】搜索插入位置
  • Qt之滑动条和进度条(QSlider、QProgressBar)
  • 国产ChatGPT命名图鉴
  • 【Android入门到项目实战-- 9.2】—— 传感器实战使用教程(靠近黑屏和计步器)
  • 【C++】STL标准库之vector
  • macOS Monterey 12.6.5 (21G531) 正式版发布,ISO、IPSW、PKG 下载
  • Servlet原理
  • 由路由守卫引发的Angular DI inject思考
  • 【数据结构】二叉搜索树
  • TortoiseGit提示No supported authentication methods available异常
  • tab widget用法
  • 第一章(四):Django框架的模板(DTL):变量、标签、模板过滤器、模板继承、配置模板文件(staticfiles)
  • B树(B-tree、B-树)理论详解
  • SPSS如何进行方差分析之案例实训?
  • 蓝牙耳机哪款性价比高一些?2023年性价比最高的蓝牙耳机推荐
  • 一、spring Cloud Alibaba概述
  • No.046<软考>《(高项)备考大全》【专项2】《案例分析 - 计算题(中)》
  • API接口的应用
  • 高性能定时器--时间轮/多级时间轮
  • 用于无线传感器网络路由的改进leach协议(Matlab代码实现)
  • 06_Uboot顶层Makefile分析_前期所做内容