01 k8s核心minikube搭建单点集群,kubectl高频命令

Kubernetes(K8s)核心定义

Kubernetes(简称 K8s)是 Google 开源的容器编排平台,核心是对大规模容器化应用的全生命周期进行自动化管理,小到本地单节点(如 minikube)、大到云环境上千节点集群,都能通过 K8s 统一管控容器的部署、运行、维护和扩展。

Kubernetes(K8s)核心作用

  1. 自动化管理容器生命周期:替代手动操作,搞定容器 "在哪里跑、跑多少个、挂了怎么处理",比如 Deployment 能自动重建挂掉的 Nginx Pod,保证服务不中断;
  2. 解决容器管理痛点
    • 自愈能力:Pod / 容器故障时自动重建,保障服务可用性;
    • 服务发现:通过 Service 为动态变化的 Pod 提供固定访问入口,避免因 Pod IP 变动导致访问失败;
    • 弹性伸缩:按业务负载自动增减 Pod 数量,适配高峰期 / 低峰期需求;
    • 滚动更新:升级容器时先启动新 Pod、再删除旧 Pod,全程不中断服务;
  3. 统一管控集群资源:将多台服务器(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

  1. 创建 Nginx Deployment
bash 复制代码
kubectl create deployment nginx-deploy --image=nginx:alpine

# 查看 Deployment 状态(确认创建成功)
kubectl get deployments
  1. 暴露 Nginx 为 NodePort 服务
bash 复制代码
# 暴露服务,端口 80,类型 NodePort
kubectl expose deployment nginx-deploy --port=80 --type=NodePort

# 查看 Service 信息(获取自动分配的 NodePort 端口,如 31234)
kubectl get services nginx-deploy
  1. 访问 Nginx 服务
bash 复制代码
minikube service nginx-deploy
  1. 扩缩容 Nginx 副本数
bash 复制代码
# 扩为 3 个副本
kubectl scale deployment nginx --replicas=3
# 验证副本数
kubectl get pods
  1. 删除部署的 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 裸跑的所有致命问题

  1. Pod 的本质局限:Pod 是 K8s 最小的运行单元,但属于 "一次性、无自愈能力" 的裸奔实例 ------Pod 挂了 / 被删了不会自动重建,也无法一键扩容、无版本管理能力,仅适合临时测试 / 调试,完全无法满足长期运行服务的稳定性需求。
  2. Deployment 的核心价值 :作为 Pod 的 "生命周期管家",Deployment 会通过 ReplicaSet 管理 Pod,核心提供三大关键能力:
    • 自愈:确保始终有指定数量的 Pod 运行,Pod 挂了 / 被删了自动重建,保障服务不中断;
    • 弹性伸缩:一键扩容 / 缩容 Pod 数量(如 kubectl scale),适配业务流量变化;
    • 无损更新:支持滚动更新(先启新 Pod 再删旧 Pod)和版本回滚,升级服务时不中断业务。

什么情况下创建pod

总结

  1. 直接创建 Pod 的唯一场景:临时测试镜像、集群调试排查问题、执行一次性批处理任务(均为短期、非核心场景);
  2. 核心禁忌:长期运行的服务、生产环境服务、需要高可用 / 扩容 / 更新的服务,绝对不能直接创建 Pod;
  3. 底层逻辑:K8s 设计 Pod 为 "易失单元",控制器(Deployment)才是保障服务稳定性的核心,直接创建 Pod 等于放弃 K8s 的核心能力。

简单说:直接创建 Pod 是 "临时用一下就扔",用 Deployment 是 "长期养着并保障不出问题"。

这是我的个人学习笔记,主要用于记录自己对知识点的理解和梳理。由于目前仍在学习探索阶段,内容中难免存在理解偏差或表述疏漏,恳请各位大佬不吝赐教,多提宝贵意见~ 若有不同看法,欢迎理性交流探讨,感谢包容与指正!

相关推荐
DARLING Zero two♡2 小时前
从数据中心到边缘:基于 openEuler 24.03 LTS SP2 的 K3s 轻量化云原生实战评测
华为·云原生
LSL666_2 小时前
docker概述
运维·docker·容器
一条懒鱼6664 小时前
K8S-Configmap资源
云原生·容器·kubernetes
路边草随风4 小时前
使用SparkLauncher发布k8s作业
云原生·容器·spark·kubernetes
哦你看看4 小时前
K8S-Service资源对象
云原生·容器·kubernetes
pp-周子晗(努力赶上课程进度版)4 小时前
Docker入门学习笔记
spring cloud·docker·容器
听风吟丶5 小时前
云原生 APM 实战:Prometheus Operator+K8s 构建容器化微服务监控体系
云原生·kubernetes·prometheus
壹米饭5 小时前
Kubernetes 节点 DNS 解析异常问题排查与解决方案
后端·kubernetes