Gemini永久会员 containerd部署java项目 kubernetes集群

使用 containerd 作为容器运行时在 Kubernetes 集群中部署 Java 项目,需完成环境准备、项目容器化、集群部署及配置管理等一系列步骤。以下是详细流程:

一、环境准备

  1. 节点要求

    • 确保所有节点(Master 和 Worker)操作系统兼容(如 CentOS 7/8 或 Ubuntu)。
    • 每台节点至少具备 2GB 内存、2 个 CPU 核心和 30GB 硬盘空间。
    • 集群内所有节点网络互通,且能够访问外网以下载镜像和依赖。
  2. 关闭 Swap

    • 执行 swapoff -a 命令临时关闭 Swap。
    • 编辑 /etc/fstab 文件,注释掉所有 Swap 相关行以永久禁用。
  3. 配置防火墙和 SELinux

    • 关闭防火墙:systemctl stop firewalld && systemctl disable firewalld
    • 将 SELinux 设置为 permissive 模式:setenforce 0,并编辑 /etc/selinux/config 文件设置 SELINUX=permissive
  4. 配置桥接流量

    • 加载 br_netfilter 模块:modprobe br_netfilter
    • 创建 /etc/sysctl.d/k8s.conf 文件,添加以下内容:
    bash 复制代码
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    • 执行 sysctl -p /etc/sysctl.d/k8s.conf 使配置生效。

二、安装和配置 containerd

  1. 安装 containerd

    • 下载 containerd 安装包(如 cri-containerd-cni-<VERSION>-linux-amd64.tar.gz)。
    • 解压安装包到根目录:tar -C / -xzf cri-containerd-cni-<VERSION>-linux-amd64.tar.gz
  2. 配置 containerd

    • 创建 /etc/containerd/config.toml 文件:containerd config default | sudo tee /etc/containerd/config.toml
    • 编辑配置文件,设置 SystemdCgroup = true 以使用 systemd cgroup 驱动。
  3. 启动 containerd

    • 执行 systemctl daemon-reload
    • 启动 containerd:systemctl enable --now containerd

三、使用 kubeadm 部署 Kubernetes 集群

  1. 安装 kubeadm、kubelet 和 kubectl

    • 添加 Kubernetes yum 源(如阿里云镜像源)。
    • 安装指定版本的 kubeadm、kubelet 和 kubectl:yum install -y kubelet-<VERSION> kubeadm-<VERSION> kubectl-<VERSION>
    • 启动 kubelet 并设置开机自启:systemctl enable --now kubelet
  2. 初始化 Master 节点

    • 执行 kubeadm init --pod-network-cidr=<CIDR>(如 10.244.0.0/16)初始化集群。
    • 根据提示配置 kubectl,以便在 Master 节点上管理集群。
  3. 加入 Worker 节点

    • 在 Master 节点上执行 kubeadm token create --print-join-command 获取加入集群的命令。
    • 在每个 Worker 节点上执行该命令以加入集群。

四、部署 Java 项目

  1. 容器化 Java 项目

    • 编写 Dockerfile 文件,定义如何构建 Java 应用的镜像。例如:
    dockerfile 复制代码
    FROM openjdk:11-jre-slim
    WORKDIR /app
    COPY target/my-java-app.jar /app/my-java-app.jar
    ENTRYPOINT ["java", "-jar", "/app/my-java-app.jar"]
    • 构建镜像:docker build -t my-java-app:latest .
  2. 推送镜像到镜像仓库(可选)

    • 如果集群节点无法直接访问构建镜像的节点,可以将镜像推送到镜像仓库(如 Docker Hub、阿里云容器镜像服务等)。
    • 推送镜像:docker push <镜像仓库地址>/my-java-app:latest
  3. 创建 Kubernetes 部署配置文件

    • 编写 Deployment YAML 文件(如 deployment.yaml),定义如何部署 Java 应用。例如:
    yaml 复制代码
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-java-app
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: my-java-app
      template:
        metadata:
          labels:
            app: my-java-app
        spec:
          containers:
          - name: my-java-app
            image: my-java-app:latest  # 如果使用镜像仓库,则替换为镜像仓库地址
            ports:
            - containerPort: 8080
  4. 创建 Kubernetes 服务配置文件

    • 编写 Service YAML 文件(如 service.yaml),定义如何暴露 Java 应用。例如:
    yaml 复制代码
    apiVersion: v1
    kind: Service
    metadata:
      name: my-java-app-service
    spec:
      selector:
        app: my-java-app
      type: LoadBalancer
      ports:
      - protocol: TCP
        port: 80
        targetPort: 8080
  5. 部署 Java 应用

    • 执行 kubectl apply -f deployment.yaml 部署 Java 应用。
    • 执行 kubectl apply -f service.yaml 暴露 Java 应用。

五、验证和管理

  1. 验证部署

    • 执行 kubectl get pods 查看 Pod 状态。
    • 执行 kubectl get services 查看服务状态和外部访问地址。
  2. 访问 Java 应用

    • 根据 Service 类型(如 LoadBalancer)和外部访问地址访问 Java 应用。
  3. 管理 Java 应用

    • 使用 kubectl 命令进行滚动更新、扩缩容等操作。
    • 集成日志收集工具(如 Fluentd)和监控系统(如 Prometheus)来收集和分析日志,监控应用性能和健康状态。
相关推荐
江湖十年17 分钟前
Go 还是 Golang?可能你一直都搞错了!
后端·面试·go
计算机毕设定制辅导-无忧学长25 分钟前
《基于SpringBoot的庭院玫瑰栽培养护知识交互式科普平台设计与实现》
java·spring boot·后端·毕业设计·个性化推荐·协同过滤算法·庭院玫瑰栽培养护知识科普平台
骇客野人27 分钟前
SpringBoot数十Jar包批量生产部署落地实施方案(Shell+Systemd完整版)
spring boot·后端·jar
A-刘晨阳29 分钟前
K8s集群中的数据库新范式:KES-Operator解锁部署、扩缩容、备份全链路自动化
运维·数据库·云原生·kubernetes·自动化
江畔柳前堤33 分钟前
云原生 × AI 全景图谱:从 Kubernetes 到 Agent 基础设施的一次认知跃迁
人工智能·分布式·gpt·云原生·kubernetes·原型模式·agi
Json____1 小时前
从零构建家政服务平台:一套全栈架构如何打通管理端与移动端-java-springboot
java·spring boot·后端·架构·毕设·wwwoop.com
天机玄正1 小时前
云运维高阶二:CLI 调用 API (白名单追随)
windows·云原生
leeyi1 小时前
命令行里的平台:df_cli 都会什么(第108篇)
后端·aigc·agent
云雀衔光2 小时前
Java Spring AI MCP:在 Spring 里把 AI 接上你的业务系统
java·开发语言·人工智能·后端·测试工具·spring
苏渡苇2 小时前
Spring Insight 里如何对 Span 进行清洗
java·spring boot·后端·spring·系统监控