一、K8s 镜像仓库使用
1、启动镜像仓库
cd/usr/local/harbor
./install.sh
2、配置镜像仓库地址
在 master 节点和 slaver 节点上,需要配置 Docker 的镜像仓库地址,以便能够访问本地的镜像仓库。编辑 Docker 的配置文件 vi /etc/docker/daemon.json(如果不存在则创建),添加以下内容:
{
"registry-mirrors": [
"https://docker.211678.top",
"https://docker.1panel.live",
"https://hub.rat.dev",
"https://docker.m.daocloud.io",
"https://do.nark.eu.org",
"https://dockerpull.com",
"https://dockerproxy.cn",
"https://docker.awsl9527.cn"],
"insecure-registries":["192.168.142.168"]
}
保存文件后,重启 Docker 服务:
systemctl restart docker
3、K8s 登录镜像仓库
# 1、登录【创建秘钥】
kubectl create secret docker-registry rigistry --docker-server=192.168.142.168--docker-username=admin --docker-password=Harbor12345
# 2、设置仓库免秘钥【全局设置】
kubectl patch serviceaccount default-p '{"imagePullSecrets": [{"name": "rigistry"}]}'
如果镜像仓库不需要认证,可以省略用户名、密码和邮箱参数。
4、K8s 使用镜像仓库
部署webapi项目
# 1、运行
kubectl run harborwebapi --image=192.168.142.168/ydt_harbor/harborwebapi:latest
# 2、暴露【service】
kubectl expose pod harborwebapi --port=80 --target-port=80 --type=NodePort
部署nginx项目
# 1、运行
kubectl run customnginx --image=192.168.142.168/ydt_harbor/customnginx:latest
# 2、暴露【service】
kubectl expose pod customnginx --port=80 --target-port=80 --type=NodePort
二、K8s 应用
(一)Pod
基本作用
最小部署单元: K8s 不直接管理容器,而是通过 Pod 管理一个或多个容器,是资源调度的最小单位。
资源共享: Pod 内的容器共享网络命名空间(IP / 端口)、存储卷(Volume),实现高效协同运行。
原子性调度: 确保多个关联容器始终部署在同一节点,保障应用的一致性和完整性。
Pod 与容器的关系
一个 Pod 通常包含1 个主容器(承载核心应用),也可包含多个辅助容器(如日志收集、配置代理等 Sidecar 容器)。
容器在 Pod 内通过localhost直接通信,共享存储卷实现数据交互。
为什么使用 Pod?
简化管理: 将多个容器抽象为一个逻辑单元,避免单独管理每个容器的复杂操作。
原子性需求: 部分应用需要多个容器紧密协作(如前端 + 后端 + 缓存),Pod 确保它们同生共死,部署在同一节点。
K8s 调度要求: K8s 以 Pod 为单位进行调度,而非单个容器,Pod 提供了比容器更高层次的抽象。
如何使用 Pod?
命令行快速创建:
kubectl run nginx-pod --image=nginx:1.21 --port=80
YAML 文件定义(推荐生产环境使用):
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx
spec:
containers:
- name: nginx-container
image: nginx:1.21
ports:
- containerPort: 80
protocol: TCP
# 可选:添加存储卷、环境变量等配置
volumes:
- name: data-volume
hostPath:
path: /data/nginx
type: DirectoryOrCreate
查看与管理:
kubectl get pods -o wide # 查看所有Pod及所在节点
kubectl describe pod nginx-pod # 查看详细状态和事件
kubectl delete pod nginx-pod # 删除Pod(K8s会自动重建,如需彻底删除需删除控制器)
(二)Service
基本作用
服务发现: 为一组 Pod 提供固定访问入口,解决 Pod IP 动态变化问题(Pod 重启后 IP 会改变,Service 提供稳定的访问地址)。
负载均衡: 将客户端请求均匀分发到多个 Pod 实例,避免单个 Pod 过载,提高应用可用性。
跨 Namespace 通信: 通过 Service 域名(如webapi-service.default.svc.cluster.local)实现集群内服务间的透明调用。
访问原理
ClusterIP(默认类型): 在集群内部分配一个虚拟 IP,仅集群内节点和 Pod 可通过该 IP 访问服务,用于内部微服务通信。
NodePort: 在每个节点上开放一个端口(30000-32767 范围),外部可通过节点IP:NodePort访问服务,适用于没有负载均衡器的环境。
LoadBalancer(云环境): 调用云服务商的负载均衡器(如 AWS ELB、阿里云 SLB),自动分配公网 IP,适用于对外暴露服务。
与 Pod 的关系
标签选择器(Selector): Service 通过 Pod 的标签(如app: nginx)匹配目标 Pod,建立映射关系。
端点控制器(Endpoints): K8s 自动维护与 Service 匹配的 Pod IP 列表,当 Pod 创建或删除时,Endpoints 会动态更新,确保流量始终路由到健康的 Pod。
示例:创建 ClusterIP 类型 Service
apiVersion: v1
kind: Service
metadata:
name: webapi-service
spec:
type: ClusterIP
ports:
- name: http
port: 8080 # Service自身端口(集群内访问)
targetPort: 80 # Pod容器端口
selector:
app: webapi # 匹配具有该标签的Pod
(三)Deployment
作用
副本管理: 确保指定数量的 Pod 副本始终运行,支持自动故障恢复(如 Pod 意外删除时自动重建)。
滚动更新: 通过声明式配置实现应用版本的平滑升级,支持分批次替换旧 Pod,确保服务不中断。
版本回滚: 如果更新过程中出现问题,可快速回滚到之前的任意历史版本,降低发布风险。
状态监控: 实时显示部署状态(如当前运行副本数、更新进度、失败原因等),方便运维排查问题。
基本使用
创建 Deployment(通过 YAML 文件):
apiVersion: apps/v1
kind: Deployment
metadata:
name: webapi-deployment
spec:
replicas: 3 # 期望运行的Pod副本数
selector:
matchLabels:
app: webapi # 匹配Pod的标签
template:
metadata:
labels:
app: webapi # Pod的标签
spec:
containers:
- name: webapi-container
image: 192.168.142.129:5000/webapi-app:v1 # 镜像地址
ports:
- containerPort: 80 # 容器端口
resources: # 资源限制(可选)
requests:
cpu: 100m # 最小CPU资源(100m=0.1核)
memory: 128Mi # 最小内存
limits:
cpu: 200m # 最大CPU资源
memory: 256Mi # 最大内存
应用配置:
kubectl apply -f deployment-webapi.yaml
扩缩容操作:
kubectl scale deployment webapi-deployment --replicas=5 # 扩展到5个副本
kubectl scale deployment webapi-deployment --replicas=1 # 收缩到1个副本
更新镜像版本:
kubectl set image deployment webapi-deployment webapi-container=192.168.142.129:5000/webapi-app:v2 # 滚动更新镜像
kubectl rollout status deployment webapi-deployment # 查看更新进度
查看日志与事件
查看 Pod 日志:
kubectl logs <pod-name> # 查看单个Pod的最新日志
kubectl logs -f <pod-name> # 实时跟踪日志输出(类似tail -f)
查看 Deployment 事件:
kubectl describe deployment webapi-deployment # 显示部署的详细信息,包括副本状态、更新历史、错误原因等
版本回滚
# 查看历史版本(显示revision号)
kubectl rollout history deployment webapi-deployment
# 回滚到指定版本(例如revision 2)
kubectl rollout undo deployment webapi-deployment --to-revision=2
# 回滚到上一个版本(无需指定revision)
kubectl rollout undo deployment webapi-deployment
暂无评论内容