章工运维 章工运维
首页
  • linux
  • windows
  • 中间件
  • 监控
  • 网络
  • 存储
  • 安全
  • 防火墙
  • 数据库
  • 系统
  • docker
  • 运维工具
  • other
  • elk
  • K8S
  • ansible
  • Jenkins
  • GitLabCI_CD
  • 随笔
  • 面试
  • 工具
  • 收藏夹
  • Shell
  • python
  • golang
友链
  • 索引

    • 分类
    • 标签
    • 归档
    • 首页 (opens new window)
    • 关于我 (opens new window)
    • 图床 (opens new window)
    • 评论 (opens new window)
    • 导航栏 (opens new window)
周刊
GitHub (opens new window)

章工运维

业精于勤,荒于嬉
首页
  • linux
  • windows
  • 中间件
  • 监控
  • 网络
  • 存储
  • 安全
  • 防火墙
  • 数据库
  • 系统
  • docker
  • 运维工具
  • other
  • elk
  • K8S
  • ansible
  • Jenkins
  • GitLabCI_CD
  • 随笔
  • 面试
  • 工具
  • 收藏夹
  • Shell
  • python
  • golang
友链
  • 索引

    • 分类
    • 标签
    • 归档
    • 首页 (opens new window)
    • 关于我 (opens new window)
    • 图床 (opens new window)
    • 评论 (opens new window)
    • 导航栏 (opens new window)
周刊
GitHub (opens new window)
  • ansible系列文章

  • Kubernetes笔记

    • 安装篇-kubeadm
    • k8s入门
    • k8s安装篇二进制
    • k8s面试题
    • kubernetes(k8s)yaml文件详解
    • k8s报错小结
    • Kubernetes 安装配置ingress controller
    • cka考试真题
    • ingress配置证书
    • cka考试作业
    • k8s部署java项目
      • jenkins脚本式流水线部署k8s项目实例一
      • helm v3安装并创建例子
      • 使用helm将本地部署文件上传到harbor chart上
      • helm公共仓库创建
      • helm适应minio作为私有仓库
      • helm release使用说明
      • kubernetes核心概念
      • kubectl使用技巧
      • kubernetes卷的几种类型
      • kubernetes安全框架
      • 云原生-什么是HPA和PDB、VPA
      • k8s部署php项目示例
      • 配置kubeconfig 文件访问 Kubernetes 集群
      • configmap配置的几种方式
      • k8s配置go服务
      • k8s部署java项目
      • kubernetes部署prometheus监控
      • kubernetes部署elk日志系统
      • kubernetes环境devops流水线
      • kubernetes高阶技能必备的工具
      • deployment中使用configmap、secret的方式
      • 业务pod 飘移pending排查分析
    • elk

    • jenkins

    • GitLabCI_CD

    • 专题
    • Kubernetes笔记
    章工运维
    2023-06-09
    目录

    k8s部署java项目

    # 一、制作镜像

    FROM tomcat 
    LABEL maintainer www.ctnrs.com
    RUN rm -rf /usr/local/tomcat/webapps/*
    ADD target/ROOT /usr/local/tomcat/webapps/ROOT 
    
    1
    2
    3
    4

    1、配置可信任(如果仓库是HTTPS访问不用配置)

    vi /etc/docker/daemon.json

    { "insecure-registries": ["192.168.31.90"] }

    2、将镜像仓库认证凭据保存在k8s secret中

    kubectl create secret docker-registry registry-auth --docker-username=admin --dockerpassword=Harbor12345 --docker-server=192.168.31.90

    3、在yaml中使用这个认证凭据

    imagePullSecrets:
    - name: registry-auth
    
    1
    2

    # 二、使用deployment控制器部署

    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/
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26

    deployment.yaml

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: java-demo
    spec:
      replicas: 1
      selector:
        matchLabels:
          project: www
          app: java-demo
      template:
        metadata:
          labels:
            project: www
            app: java-demo
        spec:
          imagePullSecrets:
          - name: registry-auth
          containers:
          - image: 192.168.31.90/microservice/java-demo:v1 
            name: java-demo
            volumeMounts:
            - 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"
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52

    # 三、对外暴露应用

    apiVersion: v1
    kind: Service
    metadata:
      name: java-demo 
    spec:
      selector:
        project: www
        app: java-demo
      ports:
        - protocol: TCP
          port: 80
          targetPort: 8080 
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12

    # 四、部署数据库

    apiVersion: v1
    kind: Secret
    metadata:
      name: java-demo-db 
      namespace: default
    type: Opaque
    data:
      mysql-root-password: "MTIzNDU2"
      mysql-password: "MTIzNDU2"
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: java-demo-db 
      namespace: default
    spec:
      selector:
        matchLabels:
          project: www
          app: mysql
      template:
        metadata:
          labels:
            project: www
            app: mysql
        spec:
          containers:
          - name: db
            image: mysql:5.7.30
            resources:
              requests:
                cpu: 500m
                memory: 512Mi
              limits: 
                cpu: 500m
                memory: 512Mi
            env:
            - name: MYSQL_ROOT_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: java-demo-db
                  key: mysql-root-password
            - name: MYSQL_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: java-demo-db
                  key: mysql-password
            - name: MYSQL_USER
              value: "aliang"
            - name: MYSQL_DATABASE
              value: "k8s"
            ports:
            - name: mysql
              containerPort: 3306
            livenessProbe:
              exec:
                command:
                - sh
                - -c
                - "mysqladmin ping -u root -p${MYSQL_ROOT_PASSWORD}"
              initialDelaySeconds: 30
              periodSeconds: 10
            readinessProbe:
              exec:
                command:
                - sh
                - -c
                - "mysqladmin ping -u root -p${MYSQL_ROOT_PASSWORD}"
              initialDelaySeconds: 5
              periodSeconds: 10
            volumeMounts:
            - name: data
              mountPath: /var/lib/mysql
            
          volumes:
          - name: data
            persistentVolumeClaim:
              claimName: java-demo-db
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: java-demo-db 
      namespace: default
    spec:
      storageClassName: "managed-nfs-storage"
      accessModes:
        - "ReadWriteOnce"
      resources:
        requests:
          storage: "8Gi"
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: java-demo-db
      namespace: default
    spec:
      type: ClusterIP
      ports:
      - name: mysql
        port: 3306
        targetPort: mysql
      selector:
        project: www
        app: mysql 
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    微信 支付宝
    上次更新: 2023/06/12, 22:07:24

    ← cka考试作业 jenkins脚本式流水线部署k8s项目实例一→

    最近更新
    01
    不花一分钱从0到1建站教程
    04-22
    02
    批量拿取多台服务器的日志文件
    04-21
    03
    高德MCP智能体搞定旅游计划
    04-19
    更多文章>
    Theme by Vdoing | Copyright © 2019-2025 | 点击查看十年之约 | 鄂ICP备2024072800号
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式