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)来收集和分析日志,监控应用性能和健康状态。
相关推荐
serendipity_hky22 分钟前
【SpringCloud | 第5篇】Seata分布式事务
分布式·后端·spring·spring cloud·seata·openfeign
五阿哥永琪38 分钟前
Spring Boot 中自定义线程池的正确使用姿势:定义、注入与最佳实践
spring boot·后端·python
Victor3561 小时前
Netty(16)Netty的零拷贝机制是什么?它如何提高性能?
后端
Victor3561 小时前
Netty(15)Netty的线程模型是什么?它有哪些线程池类型?
后端
_oP_i2 小时前
Docker 整体架构
docker·容器·架构
C182981825752 小时前
restTemplate/Feign(Spring Cloud)或OKHttp Apache HttpClient 这几个关系与底层实现
spring cloud·okhttp·apache
canonical_entropy2 小时前
Nop入门:增加DSL模型解析器
spring boot·后端·架构
渣娃-小晴晴2 小时前
java集合在并发环境下应用时的注意事项
java·后端
Jaising6662 小时前
PF4J 日志类冲突与 JVM 类加载机制
jvm·后端