运维面试题
近期的一些实习面试总结,希望对大家有所帮助,找到心仪工作!!!可能不是特别完美,只总结了好记常见的。
Linux系统命令
一.查看内存使用情况
1.使用free命令
free 命令是Linux系统中最简单和最常用的内存查看命令
$ free -mtotal used free shared buff/cache available
Mem: 7822 321 324 377 7175 6795
Swap: 4096 0 4095$ free -htotal used free shared buff/cache available
Mem: 7.6G 322M 324M 377M 7.0G 6.6G
Swap: 4.0G 724K 4.0G
其中, -m 选项是以MB为单位来展示内存使用信息; -h 选项则是以人类(human)可读的单位来展示。
上面的示例中, Mem: 这一行:
• total 表示总共有 7822MB 的物理内存(RAM),即7.6G。
• used 表示物理内存的使用量,大约是 322M。
• free 表示空闲内存;
• shared 表示共享内存?;
• buff/cache 表示缓存和缓冲内存量; Linux 系统会将很多东西缓存起来以提高性能,这部分内存可以在必要时进行释放,给其他程序使用。
• available 表示可用内存;
输出结果很容易理解。 Swap 这一行表示交换内存,从示例中的数字可以看到,基本上没使用到交换内存。
2.使用 top 命令
top 命令一般用于查看进程的CPU和内存使用情况;当然也会报告内存总量,以及内存使用情况,所以可用来监控物理内存的使用情况。
在输出信息的顶部展示了汇总信息。
top - 15:20:30 up 6:57, 5 users, load average: 0.64, 0.44, 0.33
Tasks: 265 total, 1 running, 263 sleeping, 0 stopped, 1 zombie
%Cpu(s): 7.8 us, 2.4 sy, 0.0 ni, 88.9 id, 0.9 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 8167848 total, 6642360 used, 1525488 free, 1026876 buffers
KiB Swap: 1998844 total, 0 used, 1998844 free, 2138148 cachedPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2986 enlighte 20 0 584m 42m 26m S 14.3 0.5 0:44.27 yakuake 1305 root 20 0 448m 68m 39m S 5.0 0.9 3:33.98 Xorg 7701 enlighte 20 0 424m 17m 10m S 4.0 0.2 0:00.12 kio_thumbnail
各种操作系统提供的参数略有不同,一般来说都可以根据CPU和内存来排序。
例如:
# CentOS
top -o %MEM
top -o %CPU# mac
top -o mem
top -o cpu
碰到不清楚的,请使用 top -h 查看帮助信息。
重点关注顶部的 KiB Mem 和 KiB Swap 这两行。 表示内存的总量、使用量,以及可用量。
buffer 和 cache 部分,和 free 命令展示的差不多。
3.使用ps命令
ps命令可以显示系统中运行的进程的信息,包括进程的内存使用情况。
运行命令”ps aux”可以显示所有进程的详细信息,包括进程的虚拟内存大小、物理内存大小等。
export "PS1=$ "
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 1136 4 ? Ss 07:00 0:00 /sbin/docker-
root 7 20.6 0.1 3557184 171728 ? Rl 07:00 11:42 --CODING GROU
root 27 0.0 0.0 6644 3808 pts/0 Ss+ 07:00 0:00 su codeuser10
4.使用sar命令
sar命令可以用来查看系统的性能统计信息,包括内存使用情况。
运行命令”sar -r”可以显示系统的内存使用情况以及内存交换的情况。
二.Linux测试连通性
1)如何测试虚拟机网络连接:
检查虚拟机配置、使用ping命令、验证DNS解析、测试端口连通性、监控网络流量。其中,使用ping命令是最基础也是最常用的方法。通过ping命令,可以验证虚拟机是否能够与目标主机建立基本的网络连接。具体来说,通过在虚拟机的命令行中输入ping命令并跟随目标主机的IP地址或域名,可以得到目标主机是否可达的反馈信息,包括响应时间和丢包率。
IP地址是网络通信的基础。检查虚拟机是否正确获取了IP地址。可以在虚拟机的命令行中使用ipconfig(Windows)或ifconfig(Linux)命令查看当前的IP地址。
2)网络适配器
虚拟机的网络适配器设置会影响其网络连接情况。常见的网络适配器类型包括桥接模式、NAT模式和仅主机模式。
- 桥接模式:虚拟机的网络适配器直接连接到物理网络,虚拟机会获得与物理机同一网段的IP地址。
- NAT模式:虚拟机通过虚拟网络地址转换 (NAT) 功能与外部网络通信,虚拟机的IP地址由虚拟机管理程序分配。
- 仅主机模式:虚拟机只能与主机通信,不能与外部网络通信。
3)相关指令
1.使用ping命令
ping命令是测试网络连接最基础的方法。通过ping命令,可以验证虚拟机是否能够与目标主机建立基本的网络连接。
2. 使用nslookup命令
在虚拟机的命令行中,输入nslookup命令并跟随域名。例如:
nslookup www.google.com
nslookup命令会显示域名对应的IP地址和DNS服务器的信息。
3.使用telnet命令
telnet 协议是 TCP/IP 协议族中的一员,是 Internet 远程登陆服务的标准协议和主要方式。
它为用户提供了在本地计算机上完成远程主机工作的能力。因此可以使用telnet 来测试远程机器的连通性。
4.使用curl命令
curl 是利用 URL 语法在命令行方式下工作的开源文件传输工具。也可以用来测试端口的连通性。 适合验证第三方提供的地址是否可以连通
5.使用netstat命令
利用 netstat 指令可让你得知整个 Linux 系统的网络情况。
三.Linux磁盘操作:分区、格式化、挂载
1.磁盘分区的基础概念
• 物理磁盘与逻辑分区:物理磁盘(如硬盘 HDD、固态硬盘 SSD)是存储的硬件载体,而分区是在物理磁盘上划分的 “逻辑容器”,每个分区可独立格式化、挂载和使用。
• 分区表:磁盘的第一个扇区(或特定区域)会存储 “分区表”,用于记录分区的数量、位置、大小等信息。操作系统通过分区表识别和管理分区。
2.磁盘分区工具
Linux 提供了多种分区工具,分为命令行和图形化两类,适用于不同操作场景:
1)命令行工具(推荐服务器 / 高效操作)
• fdisk:支持 MBR 和 GPT 分区表,适合小容量磁盘(≤2TB),操作简单。
示例:对sda磁盘分区:fdisk /dev/sda(进入交互模式,可创建、删除、查看分区)。
• parted:支持 MBR 和 GPT,可处理大容量磁盘(>2TB),支持动态调整分区大小(部分文件系统)。
示例:对sda磁盘分区:parted /dev/sda(交互模式,支持更灵活的分区操作)。
• gdisk:专为 GPT 分区表设计,功能类似 fdisk,适合需要 GPT 的场景。
2)图形化工具(推荐桌面用户)
• GParted:跨平台图形化分区工具,支持鼠标操作,直观易用,适合新手。
安装:sudo apt install gparted(Debian/Ubuntu)或yum install gparted(CentOS)。
3.格式化
Linux 格式化即对分区初始化并创建文件系统,使其可被系统使用(会清除数据,务必备份)。
核心工具(按文件系统)
mkfs.ext4
:常用,稳定支持日志(例:sudo mkfs.ext4 /dev/sda1
)mkfs.xfs
:高性能,适合大文件 / 高 I/O(加-f
强制覆盖)mkswap
:初始化交换分区(需用swapon
启用)mkfs.vfat
:跨系统兼容(适合移动设备)
4.分区的挂载与永久生效
分区创建并格式化后,需 “挂载” 到 Linux 目录树的某个目录(称为 “挂载点”)才能使用。
1) 临时挂载
通过mount命令临时挂载分区,重启后失效:
# 将/dev/sda1(分区)挂载到/mnt/mydata(挂载点,需提前创建)
sudo mount/dev/sda1 /mnt/mydata
2)永久挂载
通过/etc/fstab文件配置,实现开机自动挂载。格式如下:
# 设备路径 挂载点 文件系统类型 挂载选项 备份标记 自检顺序
/dev/sda1 /mnt/mydata ext4 defaults
• 设备路径也可用 UUID(分区唯一标识)代替(更稳定,避免设备名变动),UUID 可通过blkid命令查看。
四.Shell脚本
shell 脚本(Shell Script)是一种文本文件,包含一系列 Linux/Unix 命令的集合,由 shell 解释器(如 bash、sh、zsh 等)按顺序执行,用于自动化完成重复性任务、批量处理操作或组合复杂命令。
1.核心特点
• 文本文件:用普通文本编辑器编写,无需编译,直接由 shell 解析执行
• 命令组合:将多个 Linux 命令按逻辑(顺序、条件、循环)组织
• 自动化工具:替代手动输入命令,提高效率,减少人为错误
• 跨平台性:在支持 shell 的系统(Linux、macOS、Unix)上通用
2.基本结构
1. 开头声明解释器(首行):#!/bin/bash(指定用 bash 执行)
2. 注释:以#开头(除首行#!外),说明脚本功能
3. 命令 / 逻辑语句:包括 Linux 命令、变量、条件判断(if)、循环(for/while)等##数据库备份脚本#!/bin/bash# 配置信息(修改为你的数据库信息) DB_USER="root" DB_PASS="密码" DB_NAME="数据库名" BACKUP_DIR="./backups" # 备份存放目录# 创建备份目录 mkdir -p $BACKUP_DIR# 备份文件名(包含日期) FILE="$BACKUP_DIR/${DB_NAME}_$(date +%Y%m%d).sql.gz"# 执行备份 mysqldump -u $DB_USER -p$DB_PASS $DB_NAME | gzip > $FILE# 提示结果 if [ -f $FILE ]; thenecho "备份成功: $FILE" elseecho "备份失败" fi
执行方式
- 赋予执行权限:
chmod +x script.sh
- 运行:
./script.sh
或bash script.sh
shell 脚本广泛用于系统管理、日志处理、自动化部署等场景,是 Linux 运维和开发的基础工具。
3.常用变量
1.自定义变量
name="value"(赋值),$name(使用)
2. 环境变量
$HOME(家目录)、$PWD(当前目录)、$USER(用户名)、$PATH(命令路径)
3. 位置参数
$0(脚本名)、$1-$n(参数 1 到 n)、$#(参数总数)、$*(所有参数)
4. 特殊变量
$?(上条命令结果,0 为成功)、$$(当前进程 ID)、$!(后台进程 ID)
5. 常用技巧
◦ 拼接:$a$b
◦ 命令结果:var=$(命令)
◦ 默认值:${var:-默认值}
五.Nginx详细参数
1.基本命令
nginx -t 检查配置文件是否有语法错误
nginx -s reload 热加载,重新加载配置文件
nginx -s stop 快速关闭
nginx -s quit 等待工作进程处理完成后关闭
复制代码
2.默认配置
Nginx 安装目录下, 我们复制一份`nginx.conf`成
`nginx.conf.default`
作为配置文件备份,然后修改`nginx.conf`
# 工作进程的数量 worker_processes 1; events {worker_connections 1024; # 每个工作进程连接数 }http {include mime.types;default_type application/octet-stream;# 日志格式log_format access '$remote_addr - $remote_user [$time_local] $host "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for" "$clientip"';access_log /srv/log/nginx/access.log access; # 日志输出目录gzip on;sendfile on;# 链接超时时间,自动断开keepalive_timeout 60;# 虚拟主机server {listen 8080;server_name localhost; # 浏览器访问域名charset utf-8;access_log logs/localhost.access.log access;# 路由location / {root www; # 访问根目录index index.html index.htm; # 入口文件}}# 引入其他的配置文件include servers/*; }
3.负载均衡
# 负载均衡配置示例
http {# 1. 定义后端服务器集群upstream backend_servers {# 策略1:轮询(默认,按顺序分发)server 192.168.1.101:8080; # 后端服务器1server 192.168.1.102:8080; # 后端服务器2# 策略2:权重(weight值越高,分配请求越多)# server 192.168.1.101:8080 weight=3;# server 192.168.1.102:8080 weight=1;# 策略3:IP哈希(同一IP固定访问同一服务器,解决会话保持)# ip_hash;# server 192.168.1.101:8080;# server 192.168.1.102:8080;# 可选配置server 192.168.1.103:8080 backup; # 备份服务器(主服务器全宕机时启用)server 192.168.1.104:8080 down; # 标记为不可用}# 2. 配置虚拟主机,将请求转发到集群server {listen 80;server_name example.com; # 负载均衡入口域名location / {proxy_pass http://backend_servers; # 转发到定义的集群# 可选:设置代理头信息(重要,后端服务器可获取真实客户端IP)proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}}
}
六.Docker
1.Docker 常用指令
镜像管理
• docker pull <镜像名:标签>:拉取镜像(如 docker pull nginx:latest)
• docker images:列出本地所有镜像
• docker rmi <镜像ID/名称>:删除镜像(加 -f 强制删除)
• docker build -t <镜像名:标签> <Dockerfile路径>:构建镜像(如 docker build -t myapp:v1 .)
• docker tag <原镜像> <新镜像名:标签>:给镜像打标签
容器管理
• docker run [选项] <镜像>:创建并启动容器
常用选项:
-d 后台运行;-p 主机端口:容器端口 端口映射;-v 主机目录:容器目录 挂载目录;--name 容器名 指定名称
例:docker run -d -p 80:80 --name mynginx nginx
• docker ps:列出运行中的容器(加 -a 显示所有容器)
• docker start/stop/restart <容器ID/名称>:启动 / 停止 / 重启容器
• docker rm <容器ID/名称>:删除容器(加 -f 强制删除运行中的容器)
• docker exec -it <容器ID/名称> <命令>:进入容器执行命令(如 docker exec -it mynginx bash)
• docker logs <容器ID/名称>:查看容器日志(加 -f 实时跟踪)
其他常用
• docker info:查看 Docker 系统信息
• docker system prune:清理无用镜像、容器、网络(加 -a 清理更多)
• docker inspect <容器/镜像ID>:查看详细信息
2.Docker Compose 常用指令
(需在 docker-compose.yml 所在目录执行)
• docker-compose up:创建并启动所有服务(加 -d 后台运行)
• docker-compose down:停止并删除所有服务、网络(加 -v 同时删除挂载卷)
• docker-compose start/stop/restart [服务名]:启动 / 停止 / 重启指定服务(不加服务名则操作所有)
• docker-compose ps:列出所有服务容器状态
• docker-compose logs [服务名]:查看服务日志(加 -f 实时跟踪)
• docker-compose build [服务名]:构建指定服务的镜像(不加服务名则构建所有)
• docker-compose exec <服务名> <命令>:进入指定服务容器执行命令(如 docker-compose exec web bash)
说明
• Docker 指令操作单个容器 / 镜像,Docker Compose 基于配置文件批量管理多个服务
• 大部分指令可通过 -h 查看帮助(如 docker run -h、docker-compose up -h)
七.K8S
Kubernetes(简称 k8s)是用于自动化部署、扩展和管理容器化应用的开源平台,核心目标是实现容器集群的自动化运维。以下是核心知识点梳理(无表格形式):
1.核心概念与作用
- 本质:容器编排平台,解决容器化应用的部署、扩缩容、负载均衡、自愈、滚动更新等问题。
- 核心价值:自动化运维(减少人工操作)、高可用(故障自动恢复)、弹性伸缩(按需调整资源)、跨环境一致性(开发 / 测试 / 生产环境统一)。
2.核心架构组件
k8s 集群由控制平面(Control Plane) 和节点(Node) 组成:
控制平面组件(管理集群状态)
kube-apiserver
:所有操作的统一入口(提供 REST API),负责认证、授权、数据校验,是集群各组件通信的枢纽。etcd
:集群数据的存储中心(分布式键值数据库),保存集群配置、资源状态等关键信息,具有高可用特性。kube-scheduler
:负责 Pod 的调度,根据 Pod 的资源需求、节点负载、亲和性规则等,选择最合适的节点运行 Pod。kube-controller-manager
:运行各种控制器进程,比如节点控制器(监控节点状态,节点故障时标记并处理)、Deployment 控制器(维持 Pod 副本数符合期望)等,确保集群状态与用户定义的 “期望状态” 一致。cloud-controller-manager
:可选组件,用于对接云厂商 API,将集群与云服务(如负载均衡、存储)集成,仅在云环境中使用。
节点组件(运行容器的工作节点)
kubelet
:在每个节点上运行,与 apiserver 通信,确保容器按照 Pod 的定义(如镜像、资源限制)正确运行,并向控制平面汇报节点和 Pod 状态。kube-proxy
:维护节点上的网络规则,实现 Pod 之间、Pod 与外部的通信,以及 Service 的负载均衡(将请求转发到对应的 Pod)。- 容器运行时(如 containerd):负责实际运行容器的软件,是 k8s 的底层依赖,替代了早期的 docker-shim,支持 OCI 标准的容器引擎。
3.核心资源对象(k8s 中 “最小操作单元”)
Pod:
最小部署单元,包含一个或多个紧密关联的容器(共享网络命名空间和存储)。生命周期短暂,重启后 IP 可能变化,因此通常不直接部署 Pod,而是通过控制器管理。Service:
为 Pod 提供稳定的访问入口(固定 IP 或域名),解决 Pod IP 动态变化的问题。通过 Label Selector 与 Pod 关联,自动实现负载均衡(默认轮询),外部可通过 Service 访问背后的 Pod 集群。Deployment:
最常用的控制器,用于管理无状态应用(如 Web 服务)。支持创建 Pod、滚动更新(更新时不中断服务)、回滚到历史版本、手动或自动扩缩容等功能,是部署无状态应用的首选。StatefulSet:
用于管理有状态应用(如数据库、分布式系统),确保 Pod 的名称、网络标识(DNS)、存储持久化(不随重启或重建变化),适合需要稳定身份和存储的场景。Namespace:
资源隔离机制,将集群划分为多个 “虚拟集群”,可用于区分开发、测试、生产等环境,或隔离不同团队的资源,避免命名冲突。ConfigMap/Secret:
用于管理应用配置:ConfigMap 存储明文配置(如应用参数、配置文件),Secret 存储敏感信息(如密码、证书、API 密钥),数据以 Base64 编码存储,两者都可挂载到 Pod 中供应用使用。Volume:
为 Pod 提供持久化存储(容器重启后数据不丢失),支持多种类型,如本地存储(emptyDir、hostPath)、网络存储(NFS、Ceph、云厂商存储服务等),可按需选择。
4.核心操作与命令(kubectl
工具)
查看资源:
kubectl get pods
(查看运行中的 Pod)、kubectl get services
(查看 Service)、kubectl get deployments
(查看 Deployment),加-o wide
可显示更多信息,加-n <命名空间>
指定命名空间。创建资源:
kubectl apply -f xxx.yaml
(通过 YAML 配置文件创建资源,推荐,支持更新);kubectl create deployment <名称> --image=<镜像>
(快速创建 Deployment,适合测试)。查看详情:
kubectl describe pod <Pod名称>
(查看 Pod 详细状态,包括事件、挂载、容器信息等,用于排障);kubectl logs <Pod名称>
(查看 Pod 日志,加-f
实时跟踪)。进入容器:
kubectl exec -it <Pod名称> -- /bin/bash
(进入 Pod 中的容器,若 Pod 有多个容器,加-c <容器名>
指定)。扩缩容:
kubectl scale deployment <Deployment名称> --replicas=3
(将副本数调整为 3,实现扩缩容)。删除资源:
kubectl delete -f xxx.yaml
(通过配置文件删除);kubectl delete pod <Pod名称>
(直接删除 Pod,若由 Deployment 管理,会自动重建)。
5.核心流程:应用部署到 k8s 的过程
- 编写 Deployment 配置文件,定义 Pod 模板(镜像、端口、资源限制等)、副本数、更新策略等。
- 通过
kubectl apply -f deployment.yaml
创建 Deployment,控制器会自动根据配置创建指定数量的 Pod,并确保其正常运行。 - 编写 Service 配置文件,通过 Label Selector 关联 Deployment 管理的 Pod,创建后 Service 会生成固定的访问 IP 或域名。
- 外部通过 Service 的 IP / 域名访问应用,k8s 会自动将请求转发到后端健康的 Pod,实现负载均衡;若 Pod 故障,控制器会自动重建,Service 会更新转发规则,保证服务可用性。
6.进阶概念
- Ingress:管理外部访问集群内服务的规则,支持 HTTP/HTTPS 路由、域名转发、SSL 终止等,需配合 Ingress Controller(如 nginx-ingress)使用,相当于集群的 “入口网关”。
- RBAC:基于角色的访问控制,通过定义 “角色”(Role)和 “角色绑定”(RoleBinding),控制用户或组件对资源的操作权限(如限制开发人员只能操作 dev 命名空间的资源)。
- HPA(Horizontal Pod Autoscaler):根据 CPU 使用率、内存使用率或自定义指标,自动调整 Deployment 的 Pod 副本数,实现弹性伸缩。
- Operator:封装有状态应用的运维逻辑(如数据库备份、升级、故障恢复),通过自定义资源和控制器,将人工运维操作自动化,简化复杂应用的管理。
7.部署K8S(精简)
部署 Kubernetes(k8s)集群的步骤可分为环境准备、安装容器运行时、部署控制平面和节点加入等核心环节。以下是基于
kubeadm
工具的部署流程(单控制平面 + 多节点架构,适合学习和测试环境):一、环境准备(所有节点执行)
1. 服务器要求
操作系统:推荐 Ubuntu 20.04/22.04、CentOS 7/8 或 Rocky Linux
硬件:控制平面至少 2 核 4G 内存,节点至少 1 核 2G 内存
网络:所有节点互通,控制平面需开放 6443 端口,节点开放 10250 等端口
禁用 Swap:
sudo swapoff -a
,并注释/etc/fstab
中的 swap 分区(永久关闭)2. 安装依赖
# 更新系统 sudo apt update && sudo apt upgrade -y # Debian/Ubuntu # 或 sudo yum update -y # CentOS/RHEL# 安装容器依赖 sudo apt install -y apt-transport-https ca-certificates curl software-properties-common # Debian/Ubuntu # 或 sudo yum install -y curl policycoreutils openssh-server # CentOS/RHEL
3. 配置内核参数(让 Linux 支持 k8s 网络)
# 添加内核模块 cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOFsudo modprobe overlay sudo modprobe br_netfilter# 配置网络参数 cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 EOFsudo sysctl --system # 生效配置
二、安装容器运行时(所有节点执行)
k8s 需容器运行时(如 docker),以 docker 为例:
# 1. 安装Docker(已安装可跳过) sudo apt update && sudo apt install -y docker.io # Ubuntu/Debian # 或 sudo yum install -y docker # CentOS/RHEL# 启动Docker并设为开机自启 sudo systemctl start docker sudo systemctl enable docker# 2. 关键配置:让Docker使用systemd作为cgroup驱动(K8s必须) sudo mkdir -p /etc/docker cat <<EOF | sudo tee /etc/docker/daemon.json {"exec-opts": ["native.cgroupdriver=systemd"] } EOF# 3. 重启Docker生效 sudo systemctl daemon-reload sudo systemctl restart docker# 验证配置(输出应为 "Cgroup Driver: systemd") docker info | grep -i "cgroup driver"
三、安装 kubeadm、kubelet、kubectl(所有节点执行)
这三个工具是部署 k8s 的核心组件:
kubeadm
:初始化集群、加入节点的工具
kubelet
:运行在所有节点上,管理容器生命周期
kubectl
:集群命令行工具# 添加k8s镜像源(国内可用阿里云镜像) curl -fsSL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add - # Debian/Ubuntu cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main EOF# 安装组件(指定版本,避免自动升级) sudo apt update sudo apt install -y kubelet=1.26.0-00 kubeadm=1.26.0-00 kubectl=1.26.0-00# 冻结版本(防止意外升级) sudo apt-mark hold kubelet kubeadm kubectl
四、初始化控制平面(仅在控制平面节点执行)
# 初始化集群(指定pod网络网段,后续需与网络插件一致) sudo kubeadm init --pod-network-cidr=10.244.0.0/16 \--image-repository registry.aliyuncs.com/google_containers # 国内镜像源# 配置kubectl权限(当前用户) mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
执行成功后,会输出 “节点加入集群” 的命令(含 token),保存备用。
五、安装网络插件(仅在控制平面执行)
k8s 需要网络插件实现 Pod 间通信,以
flannel
为例:# 下载flannel配置并应用 kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/v0.20.2/Documentation/kube-flannel.yml# 检查节点状态(控制平面应变为Ready) kubectl get nodes
六、添加工作节点(在工作节点执行)
使用初始化控制平面时输出的命令(类似如下,token 和 hash 需替换为实际值):
sudo kubeadm join 192.168.1.100:6443 \--token abcdef.0123456789abcdef \--discovery-token-ca-cert-hash sha256:1234567890abcdef...
若忘记命令,可在控制平面生成新 token:
kubeadm token create --print-join-command # 控制平面执行,生成新的加入命令
七、验证集群
在控制平面执行:
# 查看节点(所有节点状态应为Ready) kubectl get nodes# 查看系统组件(所有Pod应正常运行) kubectl get pods -n kube-system