云原生:Kubernetes下的Java应用部署实战详解

3 篇文章 0 订阅
3 篇文章 0 订阅

        

目录

一、准备工作

        1.1 Docker 及 Kubenetes 安装

        1.2 Java应用准备

二、构建 Docker 镜像 

        2.1 本地Docker Registry搭建

        2.2 推送镜像到本地Docker Registry       

三、使用 kubenetes 部署

四、Kubenetes常用命令


        随着云原生技术的蓬勃发展,Kubernetes 已成为容器编排领域的事实标准,为微服务架构提供了强大的支撑。对于 Java 开发者而言,掌握在 Kubernetes 上部署和管理 Java 应用的技能变得尤为重要。本文将手把手带你完成一次 Java 应用从零到部署上 Kubernetes 的全过程,涵盖关键步骤、最佳实践及实用技巧。

一、准备工作

        1.1 Docker 及 Kubenetes 安装

        首先确保你的电脑上已经安装了 Docker 和 kubectl。Docker 的安装可以直接安装 Docker Desktop 即可,然后在 Docker Desktop 中直接启用 Kubenetes,如图所示:

        Mac 上安装 kubectl 可直接通过 brew install kubectl 进行安装,安装完成后执行 kubectl cluster-info 命令进行查看,会返回如下内容

Kubernetes control plane is running at https://kubernetes.docker.internal:6443
CoreDNS is running at https://kubernetes.docker.internal:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

        1.2 Java应用准备

        这一步比较简单,直接在 SpringBoot 中写一个简单的接口即可,接口如下:

@RestController
public class TestController {

    @GetMapping("/test")
    public String test() {
        return "ok";
    }
}

二、构建 Docker 镜像 

        在刚才 Java 应用的基础上编写 Dockerfile,指定基础镜像为 openjdk,复制应用代码,并定义启动命令,Dockerfile 详细内容如下:

# 基础镜像
FROM openjdk:8-jdk-alpine
# 将本地文件夹挂载到容器中
VOLUME /tmp
# 复制文件到容器,我的jar包文件名为 k8s-demo-1.0-SNAPSHOT.jar
ADD target/k8s-demo-1.0-SNAPSHOT.jar app.jar
# 启动命令,这里也已指定堆内存大小,垃圾回收器,运行环境等
ENTRYPOINT java -jar app.jar

        Dockerfile 文件编写好后就可以构建 Java 应用的镜像并推送至 Docker registry,由于注册 Docker Hub 相对来说比较麻烦,这里在本地搭建 Docker Registry。

        2.1 本地Docker Registry搭建

具体的步骤如下:

        首先要从 Docker 拉取 Registry 镜像

docker pull registry:2

        然后运行 registry,指定其映射端口为 5000,这里并未设置用户名密码,无需相关认证操作

docker run -d -p 5000:5000 --name registry registry:2

        2.2 推送镜像到本地Docker Registry       

        首先需要给镜像添加新标签,指向本地 Registry

docker tag k8s-demo:latest localhost:5000/k8s-demo:latest

        然后就可以将镜像推送到本地 Registry 

docker push localhost:5000/k8s-demo:latest

        到 Docker Desktop 中查看镜像是否推送成功

三、使用 kubenetes 部署

        Kubenetes 通过配置文件来定义各种资源,主要用于定义和管理集群内的各个资源对象,如 Pods、Services、Deployments、ConfigMaps、Secrets等。这些配置文件通常采用YAML格式编写,因其简洁明了且易于阅读和编辑而被广泛使用。如下为 Deployment 资源文件内容:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: k8s-demo-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: k8s-demo
  template:
    metadata:
      labels:
        app: k8s-demo
    spec:
      containers:
        - name: k8s-demo
          image: localhost:5000/k8s-demo:latest # 指定本地registry 获取镜像
          ports:
            - containerPort: 8080

        service 资源文件定义

apiVersion: v1
kind: Service
metadata:
  name: k8s-demo-service
spec:
  type: NodePort
  selector:
    app: k8s-demo # 与Deployment中定义的label匹配
  ports:
    - port: 80 # Service监听的端口
      targetPort: 8080 # Pod中的容器端口
      nodePort: 30081 # 指定在节点上开放的端口,可选,如果不指定,Kubernetes会自动分配一个可用端口

        使用 kubectl 命令来部署应用,部署的命令如下

kubectl applay -f app-deployment.yaml
kubectl apply -f app-service.yaml

        分别执行部署命令后可以通过相应的命令查看,查看命令为

kubectl get deployments
kubectl get services
kubectl get pods

                                

        从命令返回的状态可以看出,是 Running 状态,到这里就可以正常访问你的Java应用了,查看自己的电脑的IP,在浏览器直接访问,访问结果如图

        是不是感觉很简单呢,这这是单机的实现,如果在生产环境部署要复杂的多。

四、Kubenetes常用命令

         以下是一些 Kubernetes (`kubectl`) 常用命令的总结,这些命令对于管理和操作 Kubernetes 集群非常关键

命令含义
kubectl get pods查看当前命名空间下的所有Pod

kubectl get pods -o wide

查看Pod详情,包括节点信息
kubectl get all查看所有资源,包括Pod、deployment、service、replicaset
kubectl apply -f deployment.yaml/service.yanl部署应用
kubectl create -f <file>根据YAML或JSON文件创建资源
kubectl run <name> --image=<image>快速运行一个容器
kubectl delete -f <file>根据文件删除资源
kubectl logs <pod-name>查看Pod的日志
kubectl cluster-info显示集群基本信息
kubectl autoscale deployment <deployment-name> --min=<min-replicas> --max=<max-replicas> --cpu-percent=<target-cpu>设置Deployment的自动扩缩容
kubectl scale deployment <deployment-name> --replicas=<number>调整Deployment副本数量
kubectl top 显示资源(CPU、内存、存储)的使用情况。如 kubectl top pods,可以指定排序,通过 --sort-by=cpu来设置

        其他常用的命令可以参考中文官方网站:命令行工具 (kubectl) | Kubernetes

往期经典推荐

云原生基石:解码Docker镜像分层-CSDN博客

Kubernetes: 从零开始理解K8s架构-CSDN博客

从0开始理解云原生架构-CSDN博客

高并发架构设计模板-CSDN博客

如何熟悉一个陌生的业务系统-CSDN博客

  • 12
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超越不平凡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值