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

【云原生】CentOS安装Kubernetes+Jenkins

【云原生】CentOS安装Kubernetes+Jenkins

  • 一、软件概述
    • 1. Kubernetes
    • 2. Docker
    • 3. Jenkins
  • 二、主机配置
  • 三、安装 Kubernetes
    • 1. 安装 Docker
    • 2. 安装 kubeadm、kubelet、kubectl
    • 3. 系统配置
    • 4. 安装 cri-docker
    • 5. 初始化 Master 节点
    • 6. 初始化 Slave 节点
    • 7. 安装 CNI 网络插件
    • 8. 安装 Dashboard
    • 9. Dashboard 登录和免密登录
  • 四、安装 Jenkins
    • 1. 下载 Helm
    • 2. 安装 Jenkins
    • 3. 配置持久卷
    • 4. 配置端口
  • 五、参考文章

一、软件概述

1. Kubernetes

  • Kubernetes,简称 K8s(“K”与“s”间8个字符缩写),是CNCF托管的开源容器编排平台,核心作用是自动化管理大规模容器化应用——无论是部署、扩缩容、故障自愈,还是版本更新,都能通过它实现“无需手动干预”的集群管理,让成百上千个容器像“一个整体”般高效运行,解决了微服务架构下容器数量激增后的管理难题。
  • 它的集群由控制平面(负责决策,如调度、监控)和工作节点(负责运行容器)两部分组成,关键组件分工明确,确保集群稳定运转。
    组件类别核心组件核心作用
    控制平面(决策)kube-apiserver集群唯一入口,所有操作(部署/查询)均通过其REST API执行
    etcd集群“数据库”,存储所有配置和状态数据(如容器部署信息)
    kube-scheduler调度容器到合适的工作节点(如按CPU/内存需求分配)
    工作节点(执行)kubelet确保容器按配置在节点上运行,实时向控制平面汇报状态
    Container Runtime实际运行容器的引擎(如containerd),是K8s与容器的“连接层”
  • Kubernetes 集群部署与运维的核心工具 kubeadm、kubectl、kubelet,分工明确且协同工作 —— kubeadm 负责 “搭建集群”,kubelet 负责 “运行容器”,kubectl 负责 “操作集群”,共同支撑 K8s 集群从创建到日常管理的全流程。
    工具名称核心定位关键作用使用场景举例
    kubeadmK8s 集群“搭建工具”自动化初始化控制平面(如创建 etcd、kube-apiserver)、添加工作节点、升级集群,简化集群部署流程(避免手动配置复杂组件)。1. 初始化 Master 节点(kubeadm init);
    2. 将 Node 节点加入集群(kubeadm join);
    3. 升级 K8s 版本(kubeadm upgrade)。
    kubectlK8s 集群“命令行客户端”作为用户与集群的交互入口,通过调用 kube-apiserver 的 API,实现对集群资源(Pod、Deployment、Service 等)的创建、查询、更新、删除。1. 查看 Pod 状态(kubectl get pods);
    2. 部署应用(kubectl apply -f 配置文件.yaml);
    3. 查看集群事件(kubectl get events)。
    kubelet工作节点“容器管家”运行在每一个工作节点(Node) 上,监听 kube-apiserver 的指令,确保节点上的容器按配置(如资源需求、健康检查)正常运行,并实时向控制平面汇报节点/容器状态。1. 启动 Pod 中的容器;
    2. 监控容器健康状态,重启崩溃的容器;
    3. 上报节点的 CPU、内存使用情况。

2. Docker

  • Docker 是开源的容器化平台,核心是通过 “容器” 技术将应用及其依赖(如库、配置文件)打包成标准化的 “Docker 镜像”,确保应用在任何支持 Docker 的环境中(开发机、服务器、云平台)都能 “一次打包,到处运行”,解决了传统应用 “在我这能跑,到你那跑不起来” 的环境一致性问题。
  • 目前 Kubernetes 推出了统一的容器运行时接口(CRI),要求容器运行时必须符合该标准才能接入。而 Docker 本身不直接支持 CRI,需通过 cri-dockerd 中间件适配;同时,更轻量、更贴合 CRI 标准的 containerd(原是 Docker 内部组件,后独立)、CRI-O 等逐渐成为主流,Docker 作为 Kubernetes 容器运行时的场景已减少,但 Docker 构建的镜像仍可在 Kubernetes 中正常使用(镜像格式是通用标准)。
  • Docker 是“打包和运行单个容器”的工具,Kubernetes 是“管理大规模容器集群”的平台——前者解决“容器怎么跑”,后者解决“大量容器怎么管”,两者曾深度协同,如今虽在运行时层面适配方式变化,但 Docker 镜像仍能与 Kubernetes 兼容。

3. Jenkins

  • Jenkins 是一款开源的自动化工具,主要用于实现软件开发生命周期中的持续集成(CI)和持续部署(CD)。
  • 它通过可视化界面和丰富的插件生态,能够 自动化完成代码编译、测试、构建、部署等一系列流程。例如,当开发者向代码仓库提交代码后,Jenkins 可以自动触发构建流程,运行单元测试,生成可部署的软件包,甚至自动将其部署到测试或生产环境,从而减少人工操作,提高开发效率,缩短交付周期。
  • Jenkins 支持与 Git、Docker、Kubernetes 等众多工具集成,广泛应用于各种规模的软件开发团队中。

二、主机配置

  • 三台虚拟机,分别配置为(注意 IP 有点奇怪)

    名称操作系统核 内存 硬盘IP
    masterCentOS7.9.2009_x642C 4G 20G192.168.111.129
    slave1CentOS7.9.2009_x642C 4G 20G192.168.111.128
    slave2CentOS7.9.2009_x642C 4G 20G192.168.111.130
  • 感觉性能优点吃紧,建议多加一些核心和内存。

三、安装 Kubernetes

1. 安装 Docker

  • 所有节点都要安装并启动!!!
  • Kubernetes 需要容器运行时,推荐用 containerd 或 Docker。CentOS 7 默认没有 Docker,需要自己装。

  1. 卸载旧版本(如果有)

    sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
    
  2. 安装必要依赖

    sudo yum install -y yum-utils device-mapper-persistent-data lvm2
    
  3. 添加 Docker 官方源

    sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    
  4. 安装 Docker CE

    sudo yum install -y docker-ce docker-ce-cli containerd.io
    
  5. 配置 Docker 的镜像加速源和 cgroup 驱动

    cat > /etc/docker/daemon.json << EOF
    {"registry-mirrors": ["https://docker.ketches.cn","https://docker.1ms.run","https://hub1.nat.tf"],"exec-opts": ["native.cgroupdriver=systemd"]
    }
    EOF
    
  6. 启动并设置开机启动

    systemctl start docker && systemctl enable docker
    
  7. 验证,显示版本信息为安装成功

    docker --version
    

    在这里插入图片描述

2. 安装 kubeadm、kubelet、kubectl

  • 所有节点必须执行!!!
  • Kubernetes 官方源默认被墙,我们用阿里云镜像仓库。
  1. 添加 K8s 阿里云 repo
    cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.32/rpm/
    enabled=1
    gpgcheck=1
    gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.32/rpm/repodata/repomd.xml.key
    EOF
    
  2. 安装 kubeadm、kubelet、kubectl
    sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
    
  3. kubeadm 和 kubectl 仅是一个集群搭建工具和管理工具,不涉及启动。而 kubelet 是一个守护进程程序,由 kubeadm 在搭建过程中自动启动,这里仅设置开机启动即可
    sudo systemctl enable kubelet
    

3. 系统配置

  • 所有节点必须执行!!!
  • k8s 要求,不然容易报错
  1. 关闭防火墙

    sudo systemctl stop firewalld
    sudo systemctl disable firewalld
    
  2. 关闭 SELinux,SELinux是Linux的一个安全机制,但使用复杂和存在兼容性问题,通常选择关闭它。

    sudo setenforce 0
    sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
    
  3. 关闭 Swap,Swap是一种虚拟内存技术,它允许系统将部分内存数据写到硬盘上的特定分区,从而释放更多物理内存。由于硬盘读写性能相比物理内存低,因此使用Swap会影响系统处理性能。并且Kubelet组件默认要求关闭Swap,以提高系统的稳定性和可靠性。

    sudo swapoff -a
    sudo sed -i '/ swap / s/^/#/' /etc/fstab
    
  4. 设置主机名

    hostnamectl set-hostname  xxx
    
  5. 添加 hosts,可以在每个节点中都添加上,方便后面使用

    cat >> /etc/hosts << EOF
    192.168.111.129 master
    192.168.111.128 slave1
    192.168.111.130 slave2
    EOF
    
  6. 配置内核参数

    cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
    br_netfilter
    EOFsudo modprobe br_netfilter
    
  7. 配置 iptables 转发

    cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
    net.bridge.bridge-nf-call-iptables  = 1
    net.ipv4.ip_forward                 = 1
    net.bridge.bridge-nf-call-ip6tables = 1
    EOFsudo sysctl --system
    
  8. 时间同步(避免节点时间不一致)

    sudo yum install -y chrony
    sudo systemctl start chronyd && sudo systemctl enable chronyd
    

4. 安装 cri-docker

  • 所有节点必须安装!!!
  • 前面提到过 docker 和 k8s 的关系,所以这个是必须安装的,否则跑不起来。
  1. 下载安装包:github / Mirantis / cri-dockerd,我下载的 0.3.14,版本过高容易报莫名其妙的错误

  2. 下载好后,拖到虚拟机中

    在这里插入图片描述

  3. 安装,跳转目录就不说了

    rpm -ivh cri-dockerd-0.3.14-3.el7.x86_64.rpm
    
  4. 安装完成后,修改Systemd服务文件指定依赖的Pause镜像为国内镜像地址

    vi /usr/lib/systemd/system/cri-docker.service
    

    复制进去

    ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9
    

    在这里插入图片描述

  5. 刷新配置和启动服务

    systemctl daemon-reload
    systemctl start cri-docker && systemctl enable cri-docker
    

5. 初始化 Master 节点

  • 也就是只在 master 执行!
  1. 在 Master 节点执行以下命令初始化 Kubernetes 管理节点,注意 apiserver-advertise-address填上自己电脑的管理节点 IP 地址pod-network-cidr 是一个很重要的参数整个集群只此一个:
    kubeadm init \--apiserver-advertise-address=192.168.111.129 \--image-repository=registry.aliyuncs.com/google_containers \--kubernetes-version=v1.32.0 \--pod-network-cidr=10.244.0.0/16 \--service-cidr=10.96.0.0/12 \--cri-socket=unix:///var/run/cri-dockerd.sock \--ignore-preflight-errors=all
    
  2. 安装完成会有 successfully 标记,以及后续需要执行的操作,上面的是在 master 执行的,下面的是在 slave 执行的(记住就行,复制到一边),我在安装的时候没截图,这里用的别人的图
    在这里插入图片描述
  3. 配置 kubectl
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
  4. 验证
    kubectl get nodes
    

6. 初始化 Slave 节点

  • 也就是只在 Slave 执行!
  1. 在两台工作节点执行上述返回的 kubeadm join 命令,并添加 --cri-socket 参数,以将这些工作节点加入到集群中,如果报错再添加 --ignore-preflight-errors
    kubeadm join 192.168.111.129:6443 --token 4if29v.5fx0jcx9kqtumz1e --discovery-token-ca-cert-hash sha256:f80f75157bddd6e1d2894bd93a4b36f6a99484fad0f562608f524e7bcb52920f --cri-socket=unix:///var/run/cri-dockerd.sock --ignore-preflight-errors=all
    
  2. 验证
    kubectl get nodes
    

7. 安装 CNI 网络插件

  • 本操作只需要在 master 执行!!!
  • 完成上述操作后,节点状态显示为“NotReady”,表示节点尚未准备就绪,这是由于kubelet服务未发现网络插件导致的。因此需要安装网络插件。
  • 常见的网络插件包括Calico、Flannel、Cilium 等,这里用 Calico
  1. 下载 calico.yaml,访问不了就科学上网,下载完然后复制到虚拟机
  2. 安装Calico网络插件,跳转目录就不说了
    kubectl apply -f calico.yaml
    
  3. 排错:如果一直下载不好,或者报错,可以试试下面的方法
    • 查看单个容器情况
      kubectl describe pod <pod-name> -n <name-space>
      
    • 更改 cidr,然后重新 apply
      # 编辑部署文件
      vim calico.yaml# 找到 CALICO_IPV4POOL_CIDR 配置,修改为你的 Pod 网段
      # 例如:
      - name: CALICO_IPV4POOL_CIDRvalue: "10.244.0.0/16"  # 与 kubeadm init 时的 --pod-network-cidr 一致
      
    • 换国内镜像源,然后重新 apply
      # 在 calico.yaml 中替换所有镜像地址
      sed -i 's#docker.io/calico/#registry.cn-hangzhou.aliyuncs.com/calico-oss/#g' calico.yaml
      
  4. 可能要等很久,验证是否安装成功
    kubectl get pods -n kube-system
    
    状态全是 Running 就是成功
    在这里插入图片描述

8. 安装 Dashboard

  • 本操作只需要在 master 执行!!!
  • Dashboard是官方开发的一个Web管理系统,通过它可以管理集群资源、查看应用概览、查看容器日志和进入容器等操作。
  1. 下载 recommended.yaml,访问不了就科学上网,下载完然后复制到虚拟机

  2. 将Service的类型设置为“NodePort”类型并指定访问端口,以便将其暴露到集群外部访问,新增两行:

    vim recommended.yaml
    

    在这里插入图片描述

  3. 安装面板插件,依旧是要等很长一段时间

    kubectl apply -f recommended.yaml
    
  4. 验证,查看 Pod 对象,全部 Running 时为安装成功

    kubectl get pods -n kubernetes-dashboard
    

    在这里插入图片描述
    然后访问 https://<节点IP地址>:30001 就能看到登录页面
    在这里插入图片描述

9. Dashboard 登录和免密登录

  • 本操作只需要在 master 执行!!!

  • 先说安全登录:
  1. 创建一个服务账号并授予集群管理员权限:

    kubectl create serviceaccount admin-user -n kubernetes-dashboard
    kubectl create clusterrolebinding admin-user --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:admin-user
    
  2. 根据服务账号创建Token:

    kubectl create token admin-user -n kubernetes-dashboard
    
  3. 把 Token 复制到文本框中点击登录
    在这里插入图片描述


  • 免密登录:
  1. 编辑 dashboard 的 Deployment

    kubectl -n kubernetes-dashboard edit deployment kubernetes-dashboard
    

    添加参数 --enable-skip-login,配置文件比较长,建议搜索附近文字
    在这里插入图片描述

  2. 给 Dashboard 管理员权限,否则看不到配置。这时刷新 Dashboard 页面就可以看到 “跳过” 按钮

    kubectl create clusterrolebinding kubernetes-dashboard \--clusterrole=cluster-admin \--serviceaccount=kubernetes-dashboard:kubernetes-dashboard
    
  3. 如果报错就删掉原来的,然后重新执行第 2 步

    kubectl delete clusterrolebinding kubernetes-dashboard
    

四、安装 Jenkins

  • 本操作只需要在 master 执行!!!

1. 下载 Helm

  • Helm 是 Kubernetes 的包管理工具,被称为 “Kubernetes 的 apt/yum”,用于简化 Kubernetes 应用的部署、升级、回滚和管理。它的核心作用是将 Kubernetes 应用的一系列资源(如 Deployment、Service、ConfigMap 等 YAML 配置文件)打包成一个称为 “Chart” 的标准化单元,使得应用分发和部署更加便捷。
  1. 下载 Helm 二进制文件(推荐 v3 版本,无 Tiller 依赖)

    # 1. 定义要安装的 Helm 版本(以 v3.14.0 为例,可替换为最新版,查看最新版:https://github.com/helm/helm/releases)
    HELM_VERSION="v3.14.0"# 2. 下载对应系统架构的二进制包(x86_64 架构)
    wget https://get.helm.sh/helm-${HELM_VERSION}-linux-amd64.tar.gz# 3. 解压压缩包
    tar -zxvf helm-${HELM_VERSION}-linux-amd64.tar.gz
    
  2. 安装 Helm 到系统目录,将解压后的 helm 二进制文件移动到 /usr/local/bin(系统可执行路径),确保全局可调用:

    # 移动二进制文件
    sudo mv linux-amd64/helm /usr/local/bin/# 验证安装(查看 Helm 版本,出现版本信息即安装成功)
    helm version
    

    在这里插入图片描述

  3. 配置 Helm 国内镜像源(加速仓库访问)

    # 添加阿里云 Helm 镜像源
    helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts# 更新 Helm 仓库索引(确保获取最新的 Chart 信息)
    helm repo update
    
  4. 验证仓库是否添加成功

    helm repo list
    

2. 安装 Jenkins

  1. 添加 Jenkins Helm 仓库

    helm repo add jenkinsci https://charts.jenkins.io
    helm repo update
    
  2. 创建命名空间

    kubectl create namespace jenkins
    
  3. 下载并安装

    helm install jenkins jenkinsci/jenkins -n jenkins
    

    如果报错,就手动下载然后安装

    # 手动下载到本地
    wget https://github.com/jenkinsci/helm-charts/releases/download/jenkins-5.8.83/jenkins-5.8.83.tgz# 然后用本地包安装
    helm install jenkins ./jenkins-5.8.83.tgz -n jenkins
    

3. 配置持久卷

  1. 这里用 Local Path Provisioner

    kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/master/deploy/local-path-storage.yaml
    

    如果报错,就自己下载后 local-path-storage.yaml 复制到虚拟机中

    kubectl apply -f local-path-storage.yaml
    
  2. 设置默认 StorageClass

    kubectl patch storageclass local-path -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
    

4. 配置端口

  1. 验证:完成上述操作后,验证是否安装成功,一样的,Running 就是正常的。

    kubectl get pods -n jenkins
    
  2. 查看 Jenkins Service

    kubectl -n jenkins get svc
    

    在这里插入图片描述
    ClusterIP 只能在集群内部访问,外部访问不到。NodePort 外部可以访问。

  3. 改成 NodePort

    kubectl patch svc jenkins -n jenkins -p '{"spec": {"type": "NodePort"}}'
    

    然后执行第 2 步获取端口

  4. 获取登录密码,账号默认是 admin

    kubectl -n jenkins get secret jenkins -o jsonpath="{.data.jenkins-admin-password}" | base64 --decode
    
  5. 访问测试

    http://<任意节点IP>:<外部端口>
    用户名:admin
    密码:上面命令输出的密码
    

五、参考文章

  • 快速部署一套K8s集群(V1.32)
http://www.xdnf.cn/news/1367677.html

相关文章:

  • 【语法】【C+V】本身常用图表类型用法快查【CSDN不支持,VSCODE可用】
  • 云计算学习笔记——Linux硬盘、硬盘划分、交换空间、自动挂载篇
  • CentOS 7服务器初始化全攻略:从基础配置到安全加固
  • Redis ZSET 深度剖析:从命令、原理到实战
  • 几种方式实现文件自动上传到服务器共享文件夹
  • NVIDIA GPU 中的 L2 Cache
  • 【Linux】Socket编程——TCP版
  • 深入OpenHarmony后台任务“黑匣子”:BackgroundTaskMgr框架全栈解析与实战避坑指南
  • Thingsboard 租户管理员权限,增加租户普通用户权限
  • 三、显示3D文字
  • PLC通讯中遇到的实际场景
  • Mamba-HoME:面向3D医学影像分割的层次化专家混合新框架
  • 自然处理语言NLP: 基于双分支 LSTM 的酒店评论情感分析模型构建与实现
  • 透视光合组织大会:算力生态重构金融AI落地新实践
  • C语言 指针
  • 【设计模式】 面向对象基础
  • 打破技术壁垒的先进制造框架的智慧工业开源了
  • 如何利用ArcGIS探究环境与生态因子对水体、土壤、大气污染物的影响?
  • Mac安装mitmproxy及操作对监控的请求
  • Android Glide常见问题解决方案:从图片加载到内存优化
  • 使用 Docker、Jenkins、Harbor 和 GitLab 构建 CI/CD 流水线
  • Linux文件系统深入解析:从原理到实践
  • 通义灵码插件——AI 重构表单开发!半小时搭建可视化拖拽系统,效率碾压传统模式
  • 面试:Spring
  • MySQL 面试题系列(三)
  • week5-[循环结构]听歌
  • cuda编程笔记(16)--使用 cuDNN 实现卷积、激活、池化等反向操作
  • 淘宝/天猫商品详情API数据解析【附代码】
  • AP8105 PFM升压芯片数据手册
  • 支持向量机(SVM)学习笔记