K8s学习与实践

一、Kubernetes 核心原理

1. Kubernetes 设计哲学

Kubernetes(k8s)是一个开源的容器编排平台,旨在自动化容器化应用的部署、扩展和管理。其核心设计围绕以下目标:

  • 声明式配置:用户描述期望状态(如 YAML 文件),系统自动驱动实际状态匹配期望状态。
  • 自愈能力:自动重启故障容器、替换不可用节点、动态扩展副本等。
  • 松耦合架构:组件模块化,通过 API 交互,支持灵活扩展。

2. Kubernetes 架构概览

Kubernetes 集群由 Master 节点(控制平面)和 Worker 节点(计算节点)组成:

二、Master 节点组件原理

1. API Server

  • 功能:Kubernetes 的前端接口,接收并处理所有 REST 请求(如 kubectl 命令)。
  • 原理
    • 验证请求合法性(Authentication)。
    • 鉴权(Authorization)与准入控制(Admission Control)。
    • 将资源状态持久化到 etcd。
  • 高可用:多实例部署,通过负载均衡对外服务。

2. etcd

  • 功能:分布式键值存储,保存集群所有配置数据(如 Pod、Service 状态)。
  • 原理
    • 基于 Raft 算法实现强一致性。
    • 监听机制(Watch)支持组件实时感知状态变更。
  • 优化:定期备份数据,分离 Kubernetes 数据与其他业务数据。

3. Scheduler

  • 功能:将未调度的 Pod 分配到合适的 Worker 节点。
  • 调度流程
    1. 过滤(Predicate):排除不满足条件的节点(如资源不足)。
    2. 打分(Priority):对剩余节点评分(如 CPU 空闲率最高者优先)。
  • 扩展性:支持自定义调度策略(如 GPU 亲和性)。

4. Controller Manager

  • 功能:运行控制器循环,确保系统实际状态匹配期望状态。
  • 核心控制器
    • Deployment Controller:管理 ReplicaSet 的副本数。
    • Node Controller:监控节点状态,驱逐不可用节点上的 Pod。
    • Service Controller:为 Service 配置负载均衡器(如 AWS ELB)。

三、Worker 节点组件原理

1. kubelet

  • 功能:节点代理,管理 Pod 生命周期(创建/销毁容器)。
  • 核心职责
    • 监听 API Server 分配的 Pod 清单。
    • 调用容器运行时(如 Docker、Containerd)启动容器。
    • 定期上报节点状态(CPU、内存使用率)到 API Server。

2. kube-proxy

  • 功能:实现 Service 的负载均衡和网络规则。
  • 实现模式
    • iptables(默认):为每个 Service 生成 iptables 规则。
    • IPVS:基于内核级负载均衡,性能更优。
  • 原理:将访问 Service VIP 的流量转发到后端 Pod。

3. 容器运行时

  • 功能:执行容器生命周期操作(如 Docker、Containerd、CRI-O)。
  • CRI(Container Runtime Interface):Kubernetes 定义的容器运行时标准接口。

四、核心对象与资源模型

1. Pod

  • 最小调度单元:包含一个或多个共享网络/存储的容器。
  • 生命周期:Pending → Running → Succeeded/Failed。
  • 设计模式
    • Sidecar:辅助容器(如日志收集)。
    • Init Container:在主容器前运行初始化任务。

2. Deployment

  • 功能:管理 Pod 副本集,支持滚动更新和回滚。
  • 示例 YAML
    apiVersion: apps/v1
    kind: Deployment
    metadata:name: nginx-deployment
    spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.19ports:- containerPort: 80
    

3. Service

  • 功能:为一组 Pod 提供稳定的访问入口(VIP 或 DNS)。
  • 类型
    • ClusterIP(默认):集群内部访问。
    • NodePort:通过节点端口暴露服务。
    • LoadBalancer:云平台负载均衡器集成。

五、实践指南:从零部署应用

1. 环境准备

安装 Minikube(本地单节点集群)
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
minikube start --driver=docker
验证集群状态
kubectl get nodes
kubectl cluster-info

2. 部署 Nginx 应用

创建 Deployment
kubectl create deployment nginx --image=nginx:1.19
kubectl get pods -l app=nginx
暴露 Service
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get svc nginx
访问应用
minikube service nginx --url  # 获取访问URL
curl http://<NodeIP>:<NodePort>

3. 应用扩展与更新

水平扩展副本
kubectl scale deployment nginx --replicas=5
kubectl get pods -l app=nginx
滚动更新版本
kubectl set image deployment/nginx nginx=nginx:1.21
kubectl rollout status deployment/nginx
回滚到旧版本
kubectl rollout undo deployment/nginx

六、高级实践:持久化存储与配置管理

1. PersistentVolume (PV) 与 PersistentVolumeClaim (PVC)

创建 PV 和 PVC
# pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:name: my-pv
spec:capacity:storage: 5GiaccessModes:- ReadWriteOncehostPath:path: /data/pv
---
# pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: my-pvc
spec:accessModes:- ReadWriteOnceresources:requests:storage: 3Gi
挂载到 Pod
apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:containers:- name: appimage: nginxvolumeMounts:- name: datamountPath: /usr/share/nginx/htmlvolumes:- name: datapersistentVolumeClaim:claimName: my-pvc

2. ConfigMap 与 Secret

管理配置
# 创建 ConfigMap
kubectl create configmap app-config --from-file=config.properties# 创建 Secret
kubectl create secret generic db-secret --from-literal=username=admin --from-literal=password=123456
在 Pod 中使用
apiVersion: v1
kind: Pod
metadata:name: config-demo
spec:containers:- name: appimage: busyboxcommand: ["/bin/sh", "-c", "env"]envFrom:- configMapRef:name: app-config- secretRef:name: db-secret

七、监控与日志

1. 部署 Prometheus + Grafana

安装监控组件
kubectl create namespace monitoring
kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/main/manifests/setup/prometheus-operator-0servicemonitorCustomResourceDefinition.yaml
kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/main/manifests/
访问 Grafana
kubectl port-forward -n monitoring svc/grafana 3000:3000

访问 http://localhost:3000,使用默认账号 admin/admin

2. 集中日志(EFK 栈)

部署 Elasticsearch、Fluentd、Kibana
kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/fluentd-elasticsearch/

八、总结与最佳实践

1. 核心原则

  • 声明式配置:所有资源通过 YAML 文件管理,纳入版本控制。
  • 资源限制:为 Pod 设置 CPU/内存请求与上限(requests/limits)。
  • 滚动更新策略:配置 maxUnavailablemaxSurge 确保服务可用性。

2. 生产环境建议

  • 集群高可用:多 Master 节点 + 负载均衡。
  • 网络策略:使用 Calico 或 Cilium 实现网络隔离。
  • 安全加固:启用 RBAC、Pod 安全策略(PSP)。

通过掌握 Kubernetes 的核心原理与实践技巧,您将能够构建高效、稳定的容器化应用平台,应对从开发到生产的全流程挑战。

扩展阅读

  • Kubernetes 官方文档
  • Kubernetes 网络模型详解
  • 生产环境 Kubernetes 集群设计指南

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

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

相关文章

Umi-OCR项目(1)

最近接触到了一个项目&#xff0c;我在想能不能做出点东西出来。 目标&#xff1a;识别一张带表格的图片&#xff0c;要求非表格内容和表格内容都要识别得很好&#xff0c;并且可视化输出为word文档。 下面是第一步的测试代码&#xff0c;测试是否能够调用ocr能力。 import re…

Mioty|采用报文分割(Telegram Splitting)以提高抗干扰能力的无线通信技术【无线通信小百科】

1、什么是Mioty 在物联网&#xff08;IoT&#xff09;快速发展的背景下&#xff0c;低功耗广域网&#xff08;LPWAN&#xff09;技术成为连接海量设备的关键。LPWAN具有低功耗、低成本、广覆盖和强抗干扰能力等特点&#xff0c;使其特别适用于大规模、远距离、低数据速率的IoT…

TCP三次握手、四次挥手+多线程并发处理

目录 一、三次握手建立连接 1.1 标记位 1.2 三次握手的过程 二、四次挥手断开连接 三、模拟服务器和客户端收发数据 四、多线程并发处理 五、TCP粘包问题 5.1 什么是TCP粘包&#xff1f; 5.2 TCP粘包会有什么问题&#xff1f; 5.3 TCP粘包的解决方法&#xff1f; 一、三…

使用HunyuanVideo搭建文本生视频大模型

1.摘要 HunyuanVideo是一个全新的开源视频基础模型&#xff0c;其视频生成性能堪比领先的闭源模型&#xff0c;甚至超越它们。我们采用了多项模型学习的关键技术&#xff0c;通过有效的模型架构和数据集扩展策略&#xff0c;我们成功训练了一个拥有超过 130 亿个参数的视频生成…

LabVIEW圆锥滚子视觉检测系统

基于LabVIEW平台的视觉检测系统提高圆锥滚子内组件的生产质量和效率。通过集成高分辨率摄像头和先进的图像处理算法&#xff0c;系统能够自动识别和分类产品缺陷&#xff0c;从而减少人工检查需求&#xff0c;提高检测的准确性和速度。 ​​ ​ 项目背景 随着制造业对产品质…

mac 基于Docker安装minio服务器

在 macOS 上基于 Docker 安装 MinIO 是一个高效且灵活的方案&#xff0c;尤其适合本地开发或测试环境。以下是详细的安装与配置步骤&#xff0c;结合了最佳实践和常见问题的解决方案&#xff1a; 一、安装 Docker Desktop 下载安装包 访问 Docker 官网&#xff0c;下载适用于 …

EchoMimicV2 部署记录

在这里插入代码片# 虚拟环境配置 pip install pip -U pip install torch2.5.1 torchvision0.20.1 torchaudio2.5.1 xformers0.0.28.post3 --index-url https://download.pytorch.org/whl/cu124 pip install torchao --index-url https://download.pytorch.org/whl/nightly/cu1…

数据升降级:医疗数据的“时空穿梭“系统工程(分析与架构篇)

一、核心挑战与量化分析 1. 版本演化困境的深度解析 (1) 格式断层的结构化危机 数据转换黑洞:某医疗信息平台(2021-2023)统计显示: 数据类型CDA R1→R2转换失败率R2→FHIR转换失败率关键失败点诊断记录28.4%19.7%ICD编码版本冲突(18.7%)用药记录15.2%12.3%剂量单位标准化…

个人开发免费好用

聊一聊 现在输入法非常多&#xff0c;有时候都不知道哪个更好用。 其实&#xff0c;只有多尝试&#xff0c;才能找到适合自己的。 今天给大家分享一款输入法&#xff0c;用起来比较顺手&#xff0c;大家可以试试。 软件介绍 BL输入法 这是一款绿色纯净&#xff0c;安全放心…

Windows查看和修改IP,IP互相ping通

Windows系统 查看IP地址 winr 输入cmd 打开终端使用 ipconfig 或 ipconfig -all 命令查看当前网络 IPV4地址 Windows系统 修改IP地址 自动获取IP&#xff08;DHCP&#xff09;&#xff1a; 打开 控制面板&#xff0c;点击 网络和Internet。点击 网络和共享中心。选择 更改适配…

【IP101】图像处理基础:从零开始学习颜色操作(RGB、灰度化、二值化、HSV变换)

&#x1f3a8; 颜色操作详解 &#x1f31f; 在图像处理的世界里&#xff0c;颜色操作就像是一个魔术师的基本功。今天&#xff0c;让我们一起来解锁这些有趣又实用的"魔法"吧&#xff01; &#x1f4da; 目录 通道替换 - RGB与BGR的"调包"游戏灰度化 - 让…

windows系统搭建自己的ftp服务器,保姆级教程(用户验证+无验证)

前言 最近在搭建环境时&#xff0c;我发现每次都需要在网上下载依赖包和软件&#xff0c;这不仅耗时&#xff0c;而且有时还会遇到网络不稳定的问题&#xff0c;导致下载速度慢或者中断&#xff0c;实在不太方便。于是&#xff0c;我产生了搭建一个FTP服务器的想法。通过搭建FT…

蓝桥杯 7. 晚会节目单

晚会节目单 原题目链接 题目描述 小明要组织一台晚会&#xff0c;总共准备了 n 个节目。然而晚会时间有限&#xff0c;他只能从中选择 m 个节目。 这 n 个节目是按照小明设想的顺序给定的&#xff0c;顺序不能改变。 小明发现观众对于晚会的喜欢程度与前几个节目的好看程度…

JavaScript如何实现类型判断?

判断一个数据的类型&#xff0c;常用的方法有以下几种&#xff1a; typeofinstanceofObject.prototype.toString.call(xxx) 下面来分别分析一下这三种方法各自的优缺点 typeof typeof的本意是用来判断一个数据的数据类型&#xff0c;所以返回的也是一个数据类型。但是会遇到下…

哈希表笔记(四)Redis对比Java总结

文章目录 一、基础结构对比数据结构定义Java HashMapRedis字典 主要区别与设计思路 二、关键操作API对比初始化Java HashMapRedis字典 添加元素Java HashMapRedis字典 查找元素Java HashMapRedis字典 删除元素Java HashMapRedis字典 扩容/重哈希操作Java HashMapRedis字典 三、…

docker拉取国内镜像

1. 场景 最近整了一个tencent云服务器&#xff0c;想要玩一下docker&#xff0c;结果发现拉不下来&#xff0c;镜像根本拉不下来。 2. 原因 1.云服务器无法访问外网&#xff1b; 2. 国内的很多公有镜像仓库都被封了&#xff1b; 3. 推荐 https://zhuanlan.zhihu.com/p/713…

Codeforces Round 1008 (Div. 2) C

C 构造 题意&#xff1a;a的数据范围大&#xff0c;b的数据范围小&#xff0c;要求所有的a不同&#xff0c;考虑让丢失的那个a最大即可。问题变成&#xff1a;构造一个最大的a[i] 思路&#xff1a;令a2是最大的,将a1,a3,a5....a2*n1&#xff0c;置为最大的b&#xff0c;将a4,a…

STM32 HAL库实现USB虚拟串口

1. 引言 在嵌入式系统开发中&#xff0c;USB 虚拟串口是一种非常实用的功能。它允许 STM32 微控制器通过 USB 接口与计算机进行通信&#xff0c;就像使用传统的串口一样。这种方式不仅简化了硬件设计&#xff0c;还提高了通信的灵活性和稳定性。STM32F407 系列微控制器具有强大…

JAVA EE_网络原理_UDP与TCP

人海中未遇见时&#xff0c;我将独自前行... ----------陳長生. 1.UDP协议 1.1.UDP协议端格式 UDP&#xff08;用户数据报协议&#xff09;是由 源端口&#xff0c;目标端口&#xff0c;长度&#xff0c;校验和&#xff0c;数据 5种结构组成。16位是UDP报文中字段的长度&#…

【免费】1992-2021年各省GDP数据/各省地区生产总值数据

1992-2021年各省GDP数据/各省地区生产总值数据 1、时间&#xff1a;1992-2021年 2、来源&#xff1a;国家统计局、统计年鉴 3、指标&#xff1a;GDP/地区生产总值 4、范围&#xff1a;31省 5、指标说明:国内生产总值&#xff08;GDP&#xff09;是一个国家或地区在一定时期…