Kubernetes(K8s)核心定义
Kubernetes(简称 K8s)是 Google 开源的容器编排平台,核心是对大规模容器化应用的全生命周期进行自动化管理,小到本地单节点(如 minikube)、大到云环境上千节点集群,都能通过 K8s 统一管控容器的部署、运行、维护和扩展。
Kubernetes(K8s)核心作用
- 自动化管理容器生命周期:替代手动操作,搞定容器 "在哪里跑、跑多少个、挂了怎么处理",比如 Deployment 能自动重建挂掉的 Nginx Pod,保证服务不中断;
- 解决容器管理痛点 :
- 自愈能力:Pod / 容器故障时自动重建,保障服务可用性;
- 服务发现:通过 Service 为动态变化的 Pod 提供固定访问入口,避免因 Pod IP 变动导致访问失败;
- 弹性伸缩:按业务负载自动增减 Pod 数量,适配高峰期 / 低峰期需求;
- 滚动更新:升级容器时先启动新 Pod、再删除旧 Pod,全程不中断服务;
- 统一管控集群资源:将多台服务器(Node)组成的集群视为整体,智能调度 Pod 到空闲节点,最大化利用硬件资源。
搭建简单的单点k8s集群
一.安装docker
如果wget下载不了可以参考官方文档:https://docs.docker.com/engine/install/centos/
1.下载repo文件到本地
bash
wget -O /etc/yum.repos.d/docker.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2.安装docker-ce
bash
yum -y install docker-ce
3.启动docker服务并设置开机自启
bash
systemctl start docker
systemctl enable docker
配置镜像加速
1.创建加速配置文件:
bash
vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://1ms.run",
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn",
"https://iju9kaj2.mirror.aliyuncs.com",
"http://hub-mirror.c.163.com",
"https://cr.console.aliyun.com",
"https://hub.docker.com",
"http://mirrors.ustc.edu.cn"
]
}
2.重新加载镜像加速,并重启docker服务
bash
systemctl daemon-reload
systemctl restart docker
二.安装kubectl
Kubernetes 命令行工具 kubectl, 让你可以对 Kubernetes 集群运行命令。 你可以使用 kubectl 来部署应用、监测和管理集群资源以及查看日志。
如果需要其他版本或者使用原生包安装,访问官方文档:https://kubernetes.io/zh-cn/docs/tasks/tools/install-kubectl-linux/
用 curl 在 Linux 系统中安装 kubectl
bash
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
安装 kubectl:
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
查看版本
bash
kubectl version --client
三.安装minikube
它是用来在本地快速搭建单节点 Kubernetes 集群的工具,非常适合学习和开发测试
官方网站,多种下载方式:https://minikube.sigs.k8s.io/docs/start/?arch=%2Flinux%2Fx86-64%2Fstable%2Frpm+package
下载minikube包
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-latest.x86_64.rpm
rpm安装
bash
rpm -Uvh minikube-latest.x86_64.rpm
查看版本并启动
bash
minikube version
minikube start --memory=2048mb
用kubectl 命令简单部署 Nginx
- 创建 Nginx Deployment
bash
kubectl create deployment nginx-deploy --image=nginx:alpine
# 查看 Deployment 状态(确认创建成功)
kubectl get deployments
- 暴露 Nginx 为 NodePort 服务
bash
# 暴露服务,端口 80,类型 NodePort
kubectl expose deployment nginx-deploy --port=80 --type=NodePort
# 查看 Service 信息(获取自动分配的 NodePort 端口,如 31234)
kubectl get services nginx-deploy
- 访问 Nginx 服务
bash
minikube service nginx-deploy
- 扩缩容 Nginx 副本数
bash
# 扩为 3 个副本
kubectl scale deployment nginx --replicas=3
# 验证副本数
kubectl get pods
- 删除部署的 Nginx
不想用了可以一键删除:
bash
# 删除 Service
kubectl delete svc nginx
# 删除 Deployment(会自动删除 Pod)
kubectl delete deployment nginx
kubectl高频命令
1.集群状态查看
kubectl get <资源类型>
kubectl get pods(查看所有 Pod)
kubectl get deployments(查看所有 Deployment)
kubectl get services(查看所有 Service)
kubectl get nodes(查看集群节点)
2. 应用部署与管理(部署 / 更新 / 删除)
kubectl create deployment <名称> --image=<镜像>
--快速创建 Deployment
kubectl expose deployment <名称> --port=<端口> --type=<类型>
--暴露 Service(对外访问)
创建名为 nginx-service 的 ClusterIP Service,关联 app=nginx 的 Pod
kubectl create service clusterip nginx-service --tcp=80:80
删除 Service
kubectl delete svc nginx
删除 Deployment(会自动删除 Pod)
kubectl delete deployment nginx
3. 故障排查与调试(定位问题核心)
kubectl exec -it <Pod名称> -- <命令>
进入 Pod 内部(调试)
kubectl exec -it nginx-deploy-7f979d87c8-9x78z -- /bin/bash
为什么要创建deploy而不是pod?
Pod 是 "一次性容器实例",无自愈、无管理能力;Deployment 是 Pod 的 "生命周期管家",能解决 Pod 裸跑的所有致命问题。
- Pod 的本质局限:Pod 是 K8s 最小的运行单元,但属于 "一次性、无自愈能力" 的裸奔实例 ------Pod 挂了 / 被删了不会自动重建,也无法一键扩容、无版本管理能力,仅适合临时测试 / 调试,完全无法满足长期运行服务的稳定性需求。
- Deployment 的核心价值 :作为 Pod 的 "生命周期管家",Deployment 会通过 ReplicaSet 管理 Pod,核心提供三大关键能力:
- 自愈:确保始终有指定数量的 Pod 运行,Pod 挂了 / 被删了自动重建,保障服务不中断;
- 弹性伸缩:一键扩容 / 缩容 Pod 数量(如
kubectl scale),适配业务流量变化; - 无损更新:支持滚动更新(先启新 Pod 再删旧 Pod)和版本回滚,升级服务时不中断业务。
什么情况下创建pod
总结
- 直接创建 Pod 的唯一场景:临时测试镜像、集群调试排查问题、执行一次性批处理任务(均为短期、非核心场景);
- 核心禁忌:长期运行的服务、生产环境服务、需要高可用 / 扩容 / 更新的服务,绝对不能直接创建 Pod;
- 底层逻辑:K8s 设计 Pod 为 "易失单元",控制器(Deployment)才是保障服务稳定性的核心,直接创建 Pod 等于放弃 K8s 的核心能力。
简单说:直接创建 Pod 是 "临时用一下就扔",用 Deployment 是 "长期养着并保障不出问题"。
这是我的个人学习笔记,主要用于记录自己对知识点的理解和梳理。由于目前仍在学习探索阶段,内容中难免存在理解偏差或表述疏漏,恳请各位大佬不吝赐教,多提宝贵意见~ 若有不同看法,欢迎理性交流探讨,感谢包容与指正!