K8S安装指南与核心操作命令汇总

在云原生时代,Kubernetes(简称K8S)已成为容器编排的事实标准,无论是企业级应用部署还是个人技术学习,掌握K8S的安装与基础操作都是必备技能。本文将从安装前置准备、具体安装步骤(以主流的kubeadm方式为例),再到日常运维核心命令,一步步带大家上手K8S,全程兼顾实用性与易懂性,新手也能轻松跟随操作。

一、安装前置准备

在开始安装K8S之前,需要先完成环境配置,避免后续出现兼容性问题。以下是单节点(master节点,可兼作worker)和多节点集群的通用前置要求,本次以CentOS 7/8系统为例(Ubuntu系统操作逻辑类似,仅包管理命令不同)。

1. 硬件要求

master2C4G192.168.10.20docker、kubeadm、kubelet、kubectl、flannel
node12C2G192.168.10.21docker、kubeadm、kubelet、kubectl、flannel
node22C2G192.168.10.22docker、kubeadm、kubelet、kubectl、flannel

2. 系统环境配置

登录服务器后,先执行以下命令完成系统初始化配置:

  1. 关闭防火墙(生产环境可按需配置安全规则,新手建议先关闭简化操作):

    # 关闭firewalld systemctl stop firewalld systemctl disable firewalld # 关闭selinux(避免权限限制) setenforce 0 # 临时关闭 sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config (重启生效)
  2. 关闭Swap分区(K8S要求禁用Swap,否则会影响容器调度和性能):

    # 临时关闭 swapoff -a # 永久关闭(注释swap挂载项) sed -ri 's/.*swap.*/#&/' /etc/fstab
  3. 配置主机名与hosts解析(各节点需能通过主机名互通):

    vim /etc/hosts hostnamectl set-hostname master hostnamectl set-hostname node1 hostnamectl set-hostname node2
  4. 配置内核参数(开启IP转发,支持K8S网络插件):

    cat > /etc/sysctl.d/kubernetes.conf << EOF net.bridge.bridge-nf-call-ip6tables=1 net.bridge.bridge-nf-call-iptables=1 net.ipv6.conf.all.disable_ipv6=1 net.ipv4.ip_forward=1 EOF # 生效参数 sysctl --system
  5. 安装Docker(K8S需依赖容器运行时,这里选择主流的Docker或containerd,本次以Docker为例):

    以下所有节点操作 # 所有节点安装docker yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum install -y docker-ce docker-ce-cli containerd.io #配置docker加速器 mkdir /etc/docker cat > /etc/docker/daemon.json <<EOF { "registry-mirrors": ["https://6ijb8ubo.mirror.aliyuncs.com"], "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" } } EOF # 重启docker systemctl daemon-reload systemctl restart docker.service systemctl enable docker.service docker info | grep "Cgroup Driver" Cgroup Driver: systemd

二、K8S安装步骤(kubeadm方式)

kubeadm是K8S官方提供的集群部署工具,简化了安装流程,适合新手快速搭建集群。本次先介绍单节点集群(master节点)安装,后续补充多节点集群的worker节点加入方法。

1. 安装kubeadm、kubelet、kubectl

这三个是K8S的核心组件:kubeadm用于初始化集群,kubelet是节点上的代理组件(管理容器),kubectl是K8S的命令行工具。

所有节点安装kubeadm,kubelet和kubectl #定义源 cat > /etc/yum.repos.d/kubernetes.repo << EOF [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF yum install -y kubelet-1.20.11 kubeadm-1.20.11 kubectl-1.20.11 # 设置为开机自启 systemctl enable kubelet.service

2. 初始化master节点

执行kubeadm init命令初始化集群,核心是拉取K8S核心镜像(apiserver、controller-manager等)并配置集群参数。

//在 master 节点上传 v1.20.11.zip 压缩包至 /opt 目录 unzip v1.20.11.zip -d /opt/k8s cd /opt/k8s/v1.20.11 for i in $(ls *.tar); do docker load -i $i; done //复制镜像和脚本到 node 节点,并在 node 节点上执行脚本加载镜像文件 scp -r /opt/k8s root@node1:/opt scp -r /opt/k8s root@node2:/opt //初始化kubeadm kubeadm init \ --apiserver-advertise-address=192.168.10.19 \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version=v1.20.11 \ --service-cidr=10.96.0.0/16 \ --pod-network-cidr=10.244.0.0/16 \ --token-ttl=0 此方式初始化后需要修改 kube-proxy 的 configmap,开启 ipvs kubectl edit cm kube-proxy -n=kube-system 修改mode: ipvs

初始化成功后,会输出以下关键信息(务必保存,用于后续配置kubectl和添加worker节点):

Your Kubernetes control-plane has initialized successfully! To start using your cluster, you need to run the following as a regular user: mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config Alternatively, if you are the root user, you can run: export KUBECONFIG=/etc/kubernetes/admin.conf You should now deploy a pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: https://kubernetes.io/docs/concepts/cluster-administration/addons/ Then you can join any number of worker nodes by running the following on each as root: #以下为进入集群的指令 kubeadm join 192.168.10.20:6443 --token pdh67c.t59nph91cdssqmvv --discovery-token-ca-cert-hash sha256:a9c5fa1575e0869f7d6b4b226caa8cf94f4203120daca37bfceb530687a13d8e

3. 安装网络插件(关键步骤)

K8S集群初始化后,需要安装网络插件才能让Pod之间互通。这里选择主流的Flannel插件(轻量、易部署):

//安装flannel插件 kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml //在 node 节点上执行 kubeadm join 命令加入群集 kubeadm join 192.168.10.20:6443 --token pdh67c.t59nph91cdssqmvv --discovery-token-ca-cert-hash sha256:a9c5fa1575e0869f7d6b4b226caa8cf94f4203120daca37bfceb530687a13d8e

若出现“ImagePullBackOff”错误,说明拉取Flannel镜像失败,可手动拉取镜像并重新标签:

# 手动拉取阿里云Flannel镜像 docker pull registry.aliyuncs.com/google_containers/flannel:v0.21.5 # 给镜像打标签(符合配置文件中的镜像名称要求) docker tag registry.aliyuncs.com/google_containers/flannel:v0.21.5 quay.io/flannel/flannel:v0.21.5 # 重新应用配置文件 kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/v0.21.5/Documentation/kube-flannel.yml

4. 单节点集群允许master节点调度Pod(可选)

默认情况下,master节点会被打上“污点”,不允许调度Pod(生产环境为了安全,建议单独部署worker节点)。单节点集群需移除污点,让master节点能运行Pod:

# 移除master节点污点 kubectl taint nodes --all node-role.kubernetes.io/control-plane- kubectl taint nodes --all node-role.kubernetes.io/master- # 旧版本K8S使用此命令 # 验证节点状态(STATUS为Ready即正常) kubectl get nodes

5. 添加worker节点(多节点集群)

如果需要搭建多节点集群,在worker节点上完成“一、安装前置准备”和“二、1. 安装kubeadm、kubelet、kubectl”后,执行master节点初始化成功时输出的join命令:若join命令的token过期,可在master节点执行以下命令重新生成:

# 生成新的join token kubeadm token create --print-join-command

在master节点执行以下命令,验证worker节点是否加入成功:

# 若worker节点STATUS为Ready,说明加入成功 kubectl get nodes

三、K8S核心操作命令汇总

安装完成后,通过kubectl命令管理集群。以下是日常运维中最常用的命令,按“集群状态查看”“Pod管理”“服务管理”“命名空间管理”分类整理,方便查询。

1. 集群状态查看

# 查看节点状态 kubectl get nodes kubectl get nodes -o wide # 查看节点详细信息(IP、容器运行时等) # 查看集群组件状态(控制平面组件) kubectl get componentstatuses kubectl get cs # 简写 # 查看命名空间(所有资源都属于某个命名空间,默认有default、kube-system等) kubectl get namespaces kubectl get ns # 简写 # 查看指定命名空间下的所有资源 kubectl get all -n kube-system kubectl get all # 查看默认命名空间(default)下的所有资源

2. Pod管理(Pod是K8S的最小部署单元)

# 查看Pod状态 kubectl get pods kubectl get pods -n kube-system # 查看指定命名空间的Pod kubectl get pods -o wide # 查看Pod详细信息(运行节点、IP等) # 查看Pod日志(调试常用) kubectl logs <pod-name> # 查看指定Pod的日志 kubectl logs -f <pod-name> # 实时跟踪Pod日志 kubectl logs <pod-name> -c <container-name> # 若Pod有多个容器,指定容器查看日志 # 进入Pod内部(类似docker exec) kubectl exec -it <pod-name> -- /bin/bash # 进入Pod的默认容器 kubectl exec -it <pod-name> -c <container-name> -- /bin/bash # 指定容器 # 创建Pod(通过yaml文件,推荐) kubectl apply -f <pod-yaml-file>.yaml # 示例:创建一个nginx Pod的yaml文件(nginx-pod.yaml) cat > nginx-pod.yaml << EOF apiVersion: v1 kind: Pod metadata: name: nginx-pod labels: app: nginx spec: containers: - name: nginx image: nginx:1.21 ports: - containerPort: 80 EOF # 执行创建命令 kubectl apply -f nginx-pod.yaml # 删除Pod kubectl delete pod <pod-name> kubectl delete -f <pod-yaml-file>.yaml # 通过yaml文件删除

3. 服务管理(Service用于暴露Pod,实现负载均衡和服务发现)

# 查看Service kubectl get services kubectl get svc # 简写 # 创建Service(以暴露nginx Pod为例,创建ClusterIP类型的Service) # 编写service yaml文件(nginx-svc.yaml) cat > nginx-svc.yaml << EOF apiVersion: v1 kind: Service metadata: name: nginx-svc spec: selector: app: nginx # 匹配label为app:nginx的Pod ports: - port: 80 # Service暴露的端口 targetPort: 80 # Pod的容器端口 type: ClusterIP # 类型:ClusterIP(仅集群内部访问)、NodePort(节点端口暴露)、LoadBalancer(云厂商负载均衡) EOF # 执行创建命令 kubectl apply -f nginx-svc.yaml # 暴露Pod为Service(快速创建,无需编写yaml) kubectl expose pod <pod-name> --port=80 --target-port=80 --name=<svc-name> # 删除Service kubectl delete svc <svc-name> kubectl delete -f <svc-yaml-file>.yaml

4. 命名空间管理

# 创建命名空间 kubectl create namespace <ns-name> kubectl create ns <ns-name> # 简写 # 在指定命名空间创建资源(示例:在test-ns命名空间创建nginx Pod) kubectl apply -f nginx-pod.yaml -n test-ns # 删除命名空间(会删除命名空间下的所有资源,谨慎操作) kubectl delete ns <ns-name>

5. 其他常用命令

# 查看资源详情(Pod、Service等都可使用) kubectl describe pod <pod-name> kubectl describe svc <svc-name> # 重启Pod(K8S没有直接重启命令,可通过删除Pod实现重启,前提是Pod由Deployment管理) kubectl delete pod <pod-name> # 查看K8S集群信息 kubectl cluster-info # 导出资源yaml文件(方便备份或修改) kubectl get pod <pod-name> -o yaml > <pod-name>-backup.yaml

四、常见问题排查

  1. kubectl get nodes 显示节点NotReady:大概率是网络插件未部署成功或镜像拉取失败,执行kubectl get pods -n kube-system查看flannel或其他网络插件的Pod状态,若为ErrImagePull/ImagePullBackOff,手动拉取镜像并打标签。

  2. 初始化master节点时提示“container runtime is not running”:Docker或containerd未启动,执行systemctl start docker启动容器运行时。

  3. Pod启动后处于Pending状态:可能是节点资源不足(CPU/内存),或没有符合条件的节点(如master节点未移除污点),执行kubectl describe pod <pod-name>查看Events字段,根据提示排查。

五、总结

本文通过“前置准备→安装步骤→核心命令”的流程,带大家完成了K8S集群的搭建和基础操作。重点掌握kubeadm初始化集群、Flannel网络插件安装,以及kubectl的核心命令(查看状态、管理Pod和Service),就能应对日常的基础运维需求。后续可以进一步学习Deployment(Pod的编排管理)、StatefulSet(有状态应用部署)等高级特性,深入掌握K8S的强大功能。

如果在安装过程中遇到问题,欢迎在评论区留言交流~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1131462.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业知识管理新范式:用ChatWiki+大模型实现“一问即答“[必学收藏]

ChatWiki是一款企业级AI知识库构建平台&#xff0c;通过四步简单操作&#xff08;接入AI模型、创建知识库、配置AI机器人、实现智能应答&#xff09;&#xff0c;将分散的企业文档转化为可对话的智能资产。它解决了知识孤岛、更新低效和交互割裂三大痛点&#xff0c;适用于新员…

15_嵌入式C与控制理论入门:控制算法的定点数优化与精度平衡

嵌入式C与控制理论入门:控制算法的定点数优化与精度平衡 做嵌入式控制开发的你,大概率遇到过这种窘境:精心设计的PID、模糊控制算法,在PC上用浮点数仿真时效果拉满,可移植到STM32、TI C2000等MCU后,要么运算速度慢到突破实时控制阈值,要么因MCU缺少浮点运算单元(FPU)导…

新下证美国外观专利:42款亚马逊侵权高危新品,跨境卖家立即自查!

2025 年 12 月 30 日&#xff0c;美国专利局集中公开了一批外观专利授权公告&#xff0c;涵盖家居用品、母婴玩具、宠物用品、电子设备等四大类43款产品。跨境卖家销售同款或近似款产品时&#xff0c;需警惕侵权风险。以下专利均于 2025 年 12 月 30 日正式授权&#xff0c;涵盖…

【毕业设计】python基于CNN深度学习的遥感图片识别沙漠湖泊和森林

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

Mysql 驱动程序

一、MySQL 驱动程序的概念 驱动程序的主要功能包括&#xff1a; 建立连接&#xff1a;驱动程序负责处理应用程序和 MySQL 数据库之间的网络连接。执行 SQL 语句&#xff1a;驱动程序将应用程序中的 SQL 语句发送到数据库服务器&#xff0c;并接收服务器的响应。处理结果集&am…

【值得收藏】Agent-Graph:构建强大多智能体系统的完整教程

Agent-Graph是基于上下文工程的多智能体系统&#xff0c;提供Agent管理、Workflow可视化编排、Subagent任务分解、双层记忆架构、MCP集成等核心功能。支持团队协作&#xff0c;可分享对话并导出为训练数据&#xff0c;适合构建复杂AI工作流。项目开源&#xff0c;提供完整文档和…

ArcGIS汉化不成功的解决方案

很多粉丝朋友在ArcGIS10.X系列安装出现了不能汉化的问题&#xff0c;即使是在装了汉化包的情况下。今天我们来做一个总结&#xff01; &#xff08;ArcGIS Pro汉化不成功查看&#xff1a;ArcGIS Pro或ArcGIS汉化不了&#xff1f;汉化包装不上&#xff1f;&#xff09; ArcGIS的…

港美主流期货 API 接入全指南:TradingView 看盘策略

最近帮朋友搭建港美期货的自动交易系统&#xff0c;踩了不少 API 接入的坑——比如选 API 时没注意费率结构&#xff0c;初期测试没问题&#xff0c;跑实盘才发现手续费比预期高很多&#xff1b;还有接入时忽略了行情延时的问题&#xff0c;导致策略信号滞后。 索性整理一篇全…

【毕业设计】基于python深度学习的印刷体数字和字母识别基于python的印刷体数字和字母识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

一部手机不够玩?鸿蒙如何把多设备变成一个游戏系统(实战解析)

摘要 这两年&#xff0c;跨屏协作在鸿蒙生态里出现得越来越频繁。 从最早的文件互传、多屏办公&#xff0c;到现在的教育课堂、车机联动&#xff0c;设备之间已经不再是“各干各的”。 在游戏领域&#xff0c;这个变化更明显&#xff1a; 一块屏幕已经不够玩玩家希望多设备一起…

.NET开发必备:Redis、IoC、AutoMapper实战指南

1.Redis、Ioc、AutoMapper等常用技术在现代 .NET&#xff08;尤其是 ASP.NET Core&#xff09;开发中&#xff0c;Redis、IoC&#xff08;Inversion of Control&#xff09; 和 AutoMapper 是非常常见且重要的技术/工具。下面分别对它们进行简要介绍&#xff0c;并说明其用途和…

大型C项目的头文件管理:3招解决“重复包含”与“依赖混乱”

大型C项目的头文件管理:3招解决“重复包含”与“依赖混乱” 做过大型C项目开发或维护的你,大概率踩过头文件的“连环坑”:编译时突然弹出一堆“重定义”错误,排查半天发现是同一个头文件被重复包含;项目迭代到中后期,头文件之间形成“闭环依赖”,改一个底层头文件的宏定…

MemR3:给大模型记忆系统装一个“会思考的小脑“,准确率提升5-9%

MemR3是一种解决大模型记忆系统"最后一公里"难题的新技术&#xff0c;通过将检索转变为可自我反思的智能体&#xff0c;实现从"单次盲搜"到"闭环迭代"的突破。该技术包含Router、Evidence-Gap Tracker和LangGraph三大核心组件&#xff0c;通过状…

用 Wireshark 嗅探 ESP32 通信数据,教你看懂“WiFi 的语言”

&#x1f575;️ 用 Wireshark 嗅探 ESP32 通信数据&#xff0c;教你看懂“WiFi 的语言” 很多做 ESP32 的工程师都会遇到一个瓶颈&#xff1a; 代码看起来没问题日志也没有明显报错但 WiFi 连接就是不稳定 / 偶尔失败 / 延迟巨大 这时候&#xff0c;继续“猜”已经没意义了。 …

题解:AT_iroha2019_day3_f 闇のカードゲーム

AT_iroha2019_day3_f 闇のカードゲーム 题目描述 桌上整齐地摆放着 NNN 张卡片&#xff08;NNN 为奇数&#xff09;&#xff0c;每张卡片上有一个正整数。卡片按整数从小到大排列&#xff0c;位于第 iii 张卡片上的整数为 aia_iai​。不同的卡片上不会有相同的整数。 すぬけ君和…

Day60 PythonStudy

浙大疏锦行 import torch import torch.nn as nn import torch.nn.functional as F import torchvision import torchvision.transforms as transforms from torch.utils.data import DataLoader import matplotlib.pyplot as plt import numpy as np# 设置随机种子保证可重复…

【机械臂】基于Sawyer机械臂的多目标 RRT 路径规划 + 轨迹跟踪控制+ 数据生成附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 &#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室 &#x1f447; 关注我领取海量matlab电子书和数学建模资料 &#x1…

AI产品经理VS普通产品经理:AI思维才是核心竞争力,程序员必学技能

文章阐述了AI产品经理与普通产品经理的区别&#xff0c;强调AI思维比算法理解更重要。详细介绍了AI产业链结构&#xff08;基础层、技术层、应用层&#xff09;和AI产品经理四象限分类&#xff08;突破型、创新型、应用型、普及型&#xff09;&#xff0c;并提供能力提升建议。…

【Hadoop+Spark+python毕设】近8年软科中国大学排名数据可视化分析系统、计算机毕业设计、包括数据爬取、数据分析、数据可视化、实战教学

&#x1f393; 作者&#xff1a;计算机毕设小月哥 | 软件开发专家 &#x1f5a5;️ 简介&#xff1a;8年计算机软件程序开发经验。精通Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等技术栈。 &#x1f6e0;️ 专业服务 &#x1f6e0;️ 需求定制化开发源码提…

MySQL--》深入理解视图、存储过程与触发器的强大功能

目录 视图 检查选项 视图更新 存储过程 基本语法 变量操作 条件语句 游标使用 存储函数 触发器 视图 视图&#xff1a;(View)是一种虚拟存在的表&#xff0c;视图中的数据并不在数据库中实际存在&#xff0c;行和列数据来自视图的查询中使用的表&#xff0c;并且是在…