网站维护难做公关公司是做什么的
2026/3/28 2:08:54 网站建设 项目流程
网站维护难做,公关公司是做什么的,营销策划公司职位,重庆建设厂k3s 核心概念指南K3s高可用-3台K3s控制节点部署外挂pgsql数据库,随着Kubernetes技术的发展#xff0c;越来越多的开发者和运维人员开始接触和使用Kubernetes。但对于资源受限的环境#xff0c;传统的Kubernetes部署显得过于复杂和资源密集。K3s#xff0c;作为一个轻量级的K…k3s 核心概念指南K3s高可用-3台K3s控制节点部署外挂pgsql数据库,随着Kubernetes技术的发展越来越多的开发者和运维人员开始接触和使用Kubernetes。但对于资源受限的环境传统的Kubernetes部署显得过于复杂和资源密集。K3s作为一个轻量级的Kubernetes发行版为这些场景提供了完美的解决方案。本教程将带领K3s新手一步步搭建自己的Kubernetes集群。K3s是Rancher Labs开发的轻量级Kubernetes发行版专为边缘计算、IoT和小型部署环境设计。它通过减少资源消耗和简化安装流程使得在单机或少数几台机器上快速部署Kubernetes成为可能。一、k3s 与 Docker 的核心区别Docker 与 k3s 的定位不同前者聚焦“单节点容器运行”后者聚焦“多节点容器集群管理”核心差异可概括为Docker像「单个快递员」仅负责在单台机器上打包、运行容器如 Nginx、MySQL 容器无法跨机器管理。k3s像「快递公司调度系统」可管理多台机器节点 上的容器负责任务分配、故障重启、高可用保障让多容器协同工作并保持稳定。二、k3s 关键概念对比 Dockerk3s 基于 Kubernetes 精简而来核心概念围绕“集群管理”设计与 Docker 的单节点逻辑差异显著1. 容器ContainerDocker 中容器是独立运行的应用打包单元通过 docker run nginx 直接启动是 Docker 的核心操作对象。k3s 中容器仍是应用运行载体但不允许直接管理必须封装到“Pod”中才能部署类比Docker 直接指挥“快递员”k3s 先把“快递员”编为“小组”再指挥。2. Pod豆荚k3s 核心概念k3s 最小部署单元可包含 1 个或多个“关系紧密”的容器如“应用容器 日志收集容器”。同一 Pod 内的容器共享网络和存储类比小组共用一张办公桌和电话。对比 DockerDocker 直接运行单个容器docker runk3s 必须通过 Pod 部署容器示例Docker 启动 Nginxdocker run nginxk3s 启动 Nginx先定义 Pod 配置文件如 pod.yaml再执行 k3s kubectl apply -f pod.yaml。3. Node节点k3s 核心概念运行容器的“物理机/虚拟机”k3s 集群由两类节点组成Server 节点集群“大脑”负责管理集群调度 Pod、监控状态、存储配置。Agent 节点集群“工人”负责实际运行 Pod 中的容器。对比 DockerDocker 仅能在“单台机器”运行容器该机器相当于“孤立节点”k3s 可将多台机器组成集群统一管理。4. Deployment部署k3s 核心概念Pod 的“自动化管理工具”确保 Pod 按预期运行核心能力包括维持指定数量的 Pod 副本如“始终运行 3 个 Nginx Pod”。一键更新容器版本如将 Nginx 从 1.21 升级到 1.25。故障自动回滚升级失败时恢复到上一稳定版本。对比 DockerDocker 需手动执行 docker run 多次创建多副本容器挂了需手动重启k3s 可通过 Deployment 全自动管理。5. Service服务k3s 核心概念Pod 的“稳定访问入口”。因 Pod 可能重启IP 变化或被调度到其他节点IP 变化直接访问 Pod IP 不稳定。Service 类似“固定前台电话”无论 Pod 如何变动都能通过 Service 找到目标 Pod。对比 DockerDocker 通过 docker run -p 8080:80 nginx 映射端口容器重启后需重新配置k3s Service 自动跟踪 Pod 变化访问入口始终可用。6. Namespace命名空间k3s 核心概念集群内的“资源隔离工具”可将集群划分为多个“虚拟子集群”示例dev 命名空间存放开发环境的 Pod/Service。prod 命名空间存放生产环境的 Pod/Service。不同命名空间的资源互不干扰便于权限管理和环境隔离。对比 DockerDocker 无类似功能所有容器共享单节点资源需手动通过网络/存储隔离操作复杂。7. k3s 服务管理systemctl 命令k3s 中k3s 以系统服务形式运行Server/Agent 节点的服务名不同Server 节点服务名 k3s如 systemctl start k3s。Agent 节点服务名 k3s-agent如 systemctl start k3s-agent。对比 Docker与 Docker 服务管理逻辑一致Docker 服务名通常为 docker如 systemctl start docker。k3s是轻量级 Kubernetes 发行版核心差异在于为边缘计算、小集群场景做了极致简化而k8s是完整版面向企业级大规模生产环境。1. 目标场景与定位两者的设计初衷完全不同这是所有差异的根源。k3s聚焦轻量化场景如边缘计算设备路由器、物联网设备、单机/小集群3-5节点、开发测试环境、CI/CD流水线。k8s标准Kubernetes面向企业级生产环境用于大规模集群数十到数千节点、复杂业务部署微服务、高并发应用追求功能全面性和稳定性。2. 架构与组件简化k3s通过合并、替换组件大幅降低复杂度k8s则组件独立且完整。对比维度 k3s k8s标准版核心组件合并 控制平面组件API Server、Controller Manager等打包成单个二进制文件减少进程数量 控制平面组件独立部署多进程需单独维护默认存储 用轻量级的SQLite作为默认存储无需额外部署etcd 依赖etcd需单独部署需3/5节点保证高可用附加工具整合 内置容器网络Flannel、IngressTraefik、CSI存储开箱即用 需手动部署或集成第三方网络、Ingress、存储插件节点通信 支持通过“server-agent”模式简化节点注册无需手动配置证书 需手动配置节点与控制平面的证书、网络通信3. 资源占用与部署难度k3s对硬件要求极低部署速度远快于k8s。k3s最低资源需求1核CPU 512MB内存单机部署适合低配置设备。部署方式单条命令curl -sfL https://get.k3s.io | sh -即可完成服务器部署5分钟内可启动集群。k8s最低资源需求控制平面建议2核CPU 4GB内存节点建议1核CPU 2GB内存资源占用高。部署方式需手动配置etcd、证书、网络等或依赖工具如kubeadm、kops部署流程复杂耗时较长。4. 功能完整性k3s默认移除部分不常用功能以简化k8s功能全面无删减。k3s默认禁用或移除部分企业级功能如PodSecurityPolicy已废弃、NodeRestriction、部分alpha/beta特性需手动开启。k8s包含全部官方功能支持alpha/beta特性需配置、完整的RBAC权限控制、节点亲和性/反亲和性等复杂调度策略满足生产环境的复杂需求。选择建议选k3s如果你需要在边缘设备部署、搭建小型测试集群或追求快速部署、低资源占用。选k8s如果你需要搭建企业级生产集群、运行大规模复杂业务或依赖k8s的完整功能如高级调度、全量权限控制。三、k3s 常用命令分类整理k3s 兼容 Kubernetes 核心命令同时新增自身服务管理命令按“服务管理、安装卸载、集群操作”分类如下1. k3s 服务管理Server/Agent 节点通过 systemctl 管理 k3s 服务生命周期适用于启动、停止、查看状态等操作命令 用途 备注sudo systemctl start k3s 启动 k3s Server 服务 仅 Server 节点使用sudo systemctl stop k3s 停止 k3s Server 服务 仅 Server 节点使用sudo systemctl restart k3s 重启 k3s Server 服务 仅 Server 节点使用sudo systemctl status k3s 查看 k3s Server 运行状态 可查看是否正常启动、报错信息sudo systemctl enable k3s 设置 k3s Server 开机自启 避免重启机器后手动启动sudo systemctl disable k3s 关闭 k3s Server 开机自启 仅需临时使用时配置sudo systemctl start k3s-agent 启动 k3s Agent 服务 仅 Agent 节点使用替换 k3s 为 k3s-agent 即可2. k3s 安装与卸载1安装命令Server 节点初始化集群基础安装默认配置curl -sfL https://get.k3s.io | sh -自定义配置如禁用 Traefik、指定数据目录curl -sfL https://get.k3s.io | sh -s - \--disabletraefik \ # 禁用内置的Traefik ingress控制器--data-dir /var/lib/my-k3s # 指定k3s数据存储目录Agent 节点加入集群需先获取 Server 节点的 K3S_URLAPI 地址和 K3S_TOKEN集群令牌# 1. 在Server节点获取令牌cat /var/lib/rancher/k3s/server/node-token# 2. 替换server-ip和token后执行curl -sfL https://get.k3s.io | \K3S_URLhttps://server-ip:6443 \K3S_TOKENtoken \sh -返回示例rootubuntu:~# cat /var/lib/rancher/k3s/server/node-tokenK102a28c38a37cc242058eaa774d061968b4c59416e3c5e418402bef590e78e568a::server:144b7cb8304c99d03d246b56c3a6ea522卸载命令Server 节点/usr/local/bin/k3s-uninstall.shAgent 节点/usr/local/bin/k3s-agent-uninstall.sh3. 集群与资源操作兼容 kubectlk3s 内置 kubectl 工具可通过 k3s kubectl 操作集群配置环境变量后可简化为 kubectl核心命令如下1集群基础信息命令 用途k3s kubectl cluster-info 查看集群基本信息API 地址、核心组件状态k3s kubectl get nodes 查看集群节点列表状态、角色、版本k3s kubectl get nodes -o wide 查看节点详细信息IP、容器运行时、内核版本k3s kubectl describe node 节点名 查看单个节点详情资源使用、标签、污点2Pod 操作命令 用途k3s kubectl get pods 查看当前命名空间的 Pod 列表默认 default 命名空间k3s kubectl get pods -n 命名空间 查看指定命名空间的 Pod如 -n kube-system 查看系统组件k3s kubectl get pods --all-namespaces 查看所有命名空间的 Podk3s kubectl describe pod Pod名 查看单个 Pod 详情事件、容器配置、挂载存储k3s kubectl logs Pod名 查看 Pod 日志默认查看第一个容器k3s kubectl logs Pod名 -f 实时跟踪 Pod 日志类似 tail -fk3s kubectl delete pod Pod名 删除指定 PodDeployment 管理的 Pod 会自动重建3Service 操作命令 用途k3s kubectl get svc 查看当前命名空间的 Service 列表k3s kubectl get svc -n 命名空间 查看指定命名空间的 Servicek3s kubectl describe svc Service名 查看 Service 详情端口映射、后端 Pod 列表k3s kubectl expose deployment 部署名 --typeNodePort --port80 --target-port80 --nameService名 从 Deployment 创建 NodePort 类型的 Service暴露端口供外部访问4Deployment 操作命令 用途k3s kubectl get deploy 查看当前命名空间的 Deployment 列表k3s kubectl get deploy -n 命名空间 查看指定命名空间的 Deploymentk3s kubectl apply -f YAML文件 通过 YAML 文件创建/更新 Deployment如 nginx-deployment.yamlk3s kubectl delete -f YAML文件 通过 YAML 文件删除 Deploymentk3s kubectl scale deploy 部署名 --replicas数量 调整 Deployment 的 Pod 副本数如 --replicas3 扩容到 3 个副本5其他常用操作命令 用途k3s kubectl get ns 查看所有命名空间k3s kubectl create ns 命名空间名 创建新命名空间如 kubectl create ns devk3s kubectl get configmaps 查看当前命名空间的 ConfigMap存储配置信息k3s kubectl get secrets 查看当前命名空间的 Secret存储敏感信息如密码k3s kubectl top nodes 查看节点资源使用情况CPU/内存使用率k3s kubectl top pods 查看 Pod 资源使用情况CPU/内存使用率4. 配置文件相关k3s 集群配置文件默认路径/etc/rancher/k3s/k3s.yaml若需通过本地 kubectl 连接远程 k3s 集群操作步骤将远程 Server 节点的 k3s.yaml 复制到本地 ~/.kube/config。修改配置文件中的 server: https://127.0.0.1:6443 为远程 Server 节点的 IP如 https://192.168.1.100:6443。执行 kubectl cluster-info 验证连接。四、k3s 实操安装与 Nginx 测试1. 系统要求确保 Linux 服务器满足以下基础条件硬件至少 1GB 内存、1 个 CPU 核心生产环境建议 2GB 内存、2 核 CPU。架构支持 x86_64、ARMv7 或 ARM64如树莓派 4B 可安装 ARM64 版本。环境未占用容器运行时k3s 内置轻量级运行时无需提前安装 Docker若需用 Docker 需额外配置。2. 环境准备以 Debian/Ubuntu 为例先更新系统包确保依赖完整apt update apt upgrade -y # CentOS/RHEL 替换为 yum update -y3. 安装 k3sServer 节点国内加速使用国内镜像源安装避免网络问题同时指定 Docker 为容器运行时可选curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | \INSTALL_K3S_MIRRORcn \sh -s - \--docker3.1 验证安装查看 k3s 核心组件状态所有组件状态为 Running 即安装成功kubectl get pods -n kube-system图1查看kube-system命名空间下核心组件状态4. 配置 kubectl可选简化命令默认需通过 k3s kubectl 执行命令配置后可直接用 kubectl# 1. 创建kubectl配置目录mkdir -p $HOME/.kube# 2. 复制k3s配置文件到用户目录sudo cp /etc/rancher/k3s/k3s.yaml $HOME/.kube/config# 3. 赋予文件读写权限避免权限报错sudo chown $(id -u):$(id -g) $HOME/.kube/config5. 部署 Nginx 测试通过 Deployment 部署 Nginx并暴露端口供外部访问。5.1 创建 Deployment 配置文件5.1.1 常见的资源类型资源名称Resource 核心用途 关键特点 典型场景StatefulSet 部署有状态应用 1. Pod有固定名称和网络标识DNS重建后不变2. 支持稳定持久化存储每个Pod对应独立存储卷3. 按顺序部署/删除Pod保证状态一致 MySQL主从集群、ZooKeeper、ElasticsearchDaemonSet 确保指定节点运行相同Pod 1. 所有目标节点或指定节点必运行一个Pod2. 新增节点自动创建Pod删除节点自动清理Pod 日志收集Fluentd、Logstash、监控代理Prometheus Node Exporter、网络插件Calico、Flannel节点代理Job 运行一次性任务 1. 任务完成后Pod自动终止状态变为Completed2. 支持配置失败重试次数 数据备份、批量计算CronJob 定时执行周期性任务 1. 基于Job扩展支持类似Linux cron的时间规则2. 按预设时间重复执行任务 定时数据备份、日志清理、周期性报表生成ReplicaSet 维护指定数量的Pod副本 1. 确保集群中始终有N个Pod运行2. 是Deployment的底层依赖通常不直接使用 配合Deployment管理无状态应用副本不单独使用Pod 容器的基础封装单位 1. K8s最小资源单位可包含多个容器2. 直接创建的Pod重启后可能换节点IP会变化 临时测试场景不推荐用于正式业务需通过工作负载间接管理ReplicationController 早期管理Pod副本的资源 1. 功能类似ReplicaSet用于维护Pod副本数量2. 现已被ReplicaSet替代功能更弱 legacy旧集群兼容场景建议优先用ReplicaSet或Deployment新建 nginx-deployment.yaml 文件内容如下含详细注释apiVersion: apps/v1 # API版本Deployment属于apps组v1版本kind: Deployment # 资源类型Deploymentmetadata:name: nginx # Deployment名称spec:replicas: 2 # 运行2个Pod副本高可用selector:matchLabels: # 选择器匹配标签为「app: nginx」的Podapp: nginxtemplate:metadata:labels: # Pod标签与selector.matchLabels对应app: nginxspec:containers: # 容器配置- name: nginx # 容器名称image: nginx:latest # 容器镜像使用最新版Nginxports:- containerPort: 80 # 容器内部端口Nginx默认端口5.2 部署 Nginx执行配置文件创建 Deploymentkubectl apply -f nginx-deployment.yaml图2通过YAML文件部署Nginx Deployment5.3 暴露 Nginx 服务NodePort 类型通过 Service 暴露 Nginx 端口让外部可访问kubectl expose deployment nginx \--typeNodePort \ # 服务类型NodePort通过节点IP端口访问--port80 \ # Service端口--target-port80 \ # 映射到容器的端口与containerPort一致--namenginx-service # Service名称图3创建NodePort类型的Nginx Service5.4 查看 Pod 与 Service 状态查看 Nginx Pod 状态确保 STATUS 为 Runningkubectl get pods -l appnginx # -l 按标签筛选Pod图4查看Nginx Pod运行状态查看 Service 暴露的端口重点看 PORT(S) 列的“节点端口”如 80:30567/TCP 中的 30567kubectl get svc nginx-service图5查看Nginx Service暴露的端口5.5 访问 Nginx 测试在浏览器中输入 http://节点IP:节点端口如 http://192.168.87.152:30112看到 Nginx 欢迎页即成功。图6浏览器访问Nginx测试结果7. 部署 apache2 测试apiVersion: apps/v1kind: Deploymentmetadata:name: apache2spec:replicas: 2selector:matchLabels:app: apache2template:metadata:labels:app: apache2spec:containers:- name: apache2image: httpd:latestports:- containerPort: 80申请创建容器kubectl apply -f apache.deployment.yaml8.1 查看 Pod 状态kubectl get pods -l appapache2创建暴露端口kubectl expose deployment apache2 --typeNodePort --target-port80 --nameapache2查看暴露端口kubectl get svc apache2访问测试7. 部署 MySQL 8.0 测试apiVersion: apps/v1kind: StatefulSet # MySQL为有状态应用用StatefulSet部署metadata:name: mysqlspec:serviceName: mysql # 关联的Service名称replicas: 1selector:matchLabels:app: mysqltemplate:metadata:labels:app: mysqlspec:containers:- name: mysqlimage: mysql:8.0.28-debianports:- containerPort: 3306env:- name: MYSQL_ROOT_PASSWORDvalue: 202019- name: MYSQL_DATABASEvalue: k3s # 初始数据库名volumeMounts:- name: mysql-datamountPath: /var/lib/mysqlargs:- --default-authentication-pluginmysql_native_password # 兼容旧客户端- --bind-address0.0.0.0 # 允许所有IP连接volumeClaimTemplates:- metadata:name: mysql-dataspec:accessModes: [ ReadWriteOnce ]resources:requests:storage: 10Gi---apiVersion: v1kind: Servicemetadata:name: mysqlspec:selector:app: mysqlports:- port: 3306targetPort: 3306nodePort: 30306type: NodePort7.1 查看 Pod 状态kubectl get pods -l appmysql7.2 查看服务状态kubectl get svc mysql远程连接成功8.0 部署集群服务器 IP 角色Ubuntu 22.0.4 192.168.87.163 ControllerUbuntu 22.0.4 192.168.87.165 Worker在此之前确保我们的主机名不同或是重命名服务器vim /etc/hosts添加以下内容127.0.0.1 ubuntu-agent查看主节点token我们需要凭借token加入集群sudo cat /var/lib/rancher/k3s/server/node-token计算节点执行curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | \INSTALL_K3S_MIRRORcn \INSTALL_K3S_VERSIONv1.33.5k3s1 \K3S_URLhttps://192.168.87.163:6443 \K3S_TOKENK102a28c38a37cc242058eaa774d061968b4c59416e3c5e418402bef590e78e568a::server:144b7cb8304c99d03d246b56c3a6ea52 \K3S_SKIP_TLS_SAN_VERIFYtrue \K3S_NODE_NAMEubuntu-agent \sh -s -

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询