Kubernetes (K8S)讲解存储/网络/运维

一、K8S 基本概念

1.1 什么是 Kubernetes(K8S)?

Kubernetes(通常缩写为 K8S)是一个开源的容器编排平台,旨在自动化容器化应用程序的部署、扩展和管理。K8S 提供了高可用性、弹性扩展以及简化的运维操作,使开发和运维团队能够快速交付应用。

1.2 K8S 的核心组件

K8S 由多个核心组件组成,每个组件都有其独特的功能:

  • API Server:K8S 的前端接口,所有的 K8S 操作(如创建、更新、删除资源)都通过 API Server 进行。它负责处理 REST 请求,并将请求转发到相应的组件。
  • etcd:一个高可用的分布式键值存储,用于存储集群的所有配置信息和状态数据。etcd 是 K8S 的数据持久化存储,确保集群状态的一致性。
  • Controller Manager:负责管理集群的控制循环,包括处理节点状态、Pod 状态等。每个控制器负责监控特定资源的状态并采取行动。
  • Scheduler:负责将新的 Pod 分配到合适的节点上,基于资源需求、硬件约束和其他约定来做出调度决策。
  • Kubelet:运行在每个节点上的代理,负责维护节点的状态和管理 Pod 的生命周期。Kubelet 根据 API Server 的指示来启动和停止容器。
  • Kube-Proxy:处理集群内部的网络通信,提供负载均衡功能,确保流量能够正确路由到运行的 Pods。

二、K8S 资源对象

2.1 Pod 的概念

Pod 是 K8S 的基本调度单位,表示一个或多个容器的集合。Pod 内的容器共享网络和存储,因此它们能够高效地通信和协作。每个 Pod 有一个独立的 IP 地址,所有容器共享同一个网络命名空间。

2.1.1 Pod 的生命周期

Pod 的生命周期包括以下几个阶段:

  • Pending:Pod 被创建但尚未调度到节点上。
  • Running:Pod 已被调度并且至少一个容器正在运行。
  • Succeeded:Pod 中的所有容器均已成功完成。
  • Failed:Pod 中的容器已终止,并且未能成功运行。
  • Unknown:Pod 的状态无法确定,通常是由于网络问题。

2.2 Deployment、StatefulSet 和 DaemonSet 的区别与使用场景

  • Deployment:用于管理无状态应用的部署,支持滚动更新和回滚等功能。适合处理短暂性和可替代的服务。
  • StatefulSet:用于管理有状态应用,确保 Pods 的顺序和持久性。每个 Pod 具有唯一的身份和稳定的存储。适用于数据库等需要持久性存储的应用。
  • DaemonSet:确保所有(或某些)节点上运行特定的 Pod,如日志收集或监控服务。适用于需要在每个节点上运行的守护进程。

2.3 Service 的类型和作用

K8S 中的 Service 提供了稳定的访问方式,用于在 Pod 之间进行通信。常见的 Service 类型包括:

  • ClusterIP:默认类型,提供集群内部的访问,其他 Pod 通过服务名称访问。
  • NodePort:在每个节点上开放一个特定端口,将流量转发到 ClusterIP 服务。适合于外部访问。
  • LoadBalancer:集成云服务提供商的负载均衡器,自动分配一个外部 IP,用于访问服务。

三、K8S 存储

3.1 K8S 中的存储卷(Volume)类型

K8S 支持多种类型的存储卷,常见的包括:

  • EmptyDir:当 Pod 被分配到节点时创建的空目录,存储在节点本地。适合临时数据存储。
  • HostPath:将主机文件系统中的目录挂载到 Pod 中,适合需要访问节点文件系统的应用。
  • PersistentVolumeClaim(PVC):请求存储资源的对象,动态绑定到 Persistent Volume(PV)。

3.2 Persistent Volume(PV)和 Persistent Volume Claim(PVC)的关系和工作原理

PV 是集群中的存储资源,而 PVC 是用户对存储资源的请求。创建 PVC 时,K8S 会根据 PVC 的需求自动选择一个适合的 PV。PV 和 PVC 的创建可以通过 YAML 文件进行管理。

# PersistentVolume 示例
apiVersion: v1
kind: PersistentVolume
metadata:name: my-pv
spec:capacity:storage: 10GiaccessModes:- ReadWriteOncehostPath:path: /mnt/data# PersistentVolumeClaim 示例
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: my-pvc
spec:accessModes:- ReadWriteOnceresources:requests:storage: 5Gi

四、K8S 网络

4.1 K8S 网络模型的基本原理

K8S 的网络模型保证每个 Pod 都有唯一的 IP 地址,并且 Pod 之间能够直接通信,而无需 NAT。这种模型简化了网络配置和服务发现。

4.2 CNI(容器网络接口)插件的了解

CNI 插件为 K8S 提供网络功能,常见的插件包括:

  • Flannel:实现了简单的覆盖网络,适合小型集群。
  • Calico:提供更复杂的网络策略和安全控制,适合大规模集群。

五、K8S 运维与监控

5.1 如何对 K8S 集群进行监控

在 K8S 集群中,监控是确保应用性能和系统稳定性的重要手段。常见的监控工具包括 Prometheus 和 Grafana,它们结合使用能够提供全面的监控解决方案。

5.1.1 Prometheus

Prometheus 是一个开源监控系统和时间序列数据库,专门用于收集和存储指标数据。它通过 HTTP 协议拉取(pull)目标的指标数据,非常适合容器化环境。

安装 Prometheus
  1. 使用 K8S 部署 Prometheus Operator,这是管理 Prometheus 实例的推荐方式。可以通过以下命令快速安装:

    kubectl apply -f https://github.com/prometheus-operator/prometheus-operator/raw/master/bundle.yaml
    
  2. 部署 Prometheus 实例,创建一个 Prometheus CRD(Custom Resource Definition):

    apiVersion: monitoring.coreos.com/v1
    kind: Prometheus
    metadata:name: my-prometheuslabels:app: prometheus
    spec:serviceAccountName: prometheusreplicas: 1resources:requests:memory: 400Mistorage:volumes:- name: prometheus-storageemptyDir: {}volumeClaimTemplate:spec:accessModes: ["ReadWriteOnce"]resources:requests:storage: 10Gi
    
  3. 使用 kubectl apply -f 部署 Prometheus。

配置监控指标
  1. 配置 Prometheus 监控目标,通过创建 ServiceMonitor 对象来指定需要监控的服务:

    apiVersion: monitoring.coreos.com/v1
    kind: ServiceMonitor
    metadata:name: my-service-monitorlabels:app: my-app
    spec:selector:matchLabels:app: my-appendpoints:- port: httpinterval: 30s
    
  2. 在 Prometheus 的配置中添加此 ServiceMonitor,Prometheus 将会自动发现并开始收集这些服务的指标。

5.1.2 Grafana

Grafana 是一个开源的可视化工具,能够从多个数据源(包括 Prometheus)中提取数据并展示在仪表板上。

安装 Grafana
  1. 使用 Helm 来安装 Grafana,首先确保 Helm 已经安装并配置好:

    helm repo add grafana https://grafana.github.io/helm-charts
    helm repo update
    helm install my-grafana grafana/grafana
    
  2. 安装完成后,可以通过以下命令获取 Grafana 的服务 URL:

    kubectl get svc --namespace default -w my-grafana
    
配置 Grafana 连接 Prometheus
  1. 登录 Grafana(默认用户名和密码均为 admin),然后在 Grafana 界面中添加数据源。
  2. 选择 Prometheus 作为数据源,并配置 URL 为 http://:9090
  3. 通过创建仪表板,选择监控指标并进行可视化。

5.2 如何进行 K8S 集群的升级和回滚

在升级 K8S 集群时,确保兼容性和集群状态是至关重要的。以下是进行 K8S 升级和回滚的常见步骤。

5.2.1 升级 K8S 集群

  1. 备份集群状态: 在升级之前,使用 kubectl 或其他工具备份关键数据,特别是 etcd 数据库。

    ETCDCTL_API=3 etcdctl snapshot save <snapshot-file>
    
  2. 使用 kubeadm 进行升级: 运行以下命令来检查可用的升级版本:

    kubeadm upgrade plan
    

    根据输出的信息,选择合适的版本进行升级:

    kubeadm upgrade apply v1.x.x
    
  3. 节点升级后,验证功能: 升级完成后,确保所有节点和 Pods 正常运行。使用以下命令检查节点状态:

    kubectl get nodes
    

5.2.2 回滚操作

如果升级后发现问题,可以通过以下方式回滚:

  1. 使用之前备份的 etcd 数据恢复集群状态:

    ETCDCTL_API=3 etcdctl snapshot restore <snapshot-file>
    
  2. 确保所有组件使用正确的版本,并重启相关的 Pods 和服务。

  3. 再次验证集群状态,确保应用和服务恢复正常。

通过以上步骤,您可以有效地管理 K8S 集群的监控和维护。监控可以确保系统的健康状态,而升级和回滚则是保障系统持续可用的重要手段。

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

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

相关文章

mac 安装 nodemon

在 Mac 上安装 nodemon 有两种主要方法 全局安装 1. 前提条件 确保你已经安装了 Node.js 和 npm。你可以在终端中输入 node -v 和 npm -v 来检查是否已经安装以及查看它们的版本号。 2. 使用命令安装 打开终端&#xff0c;输入以下命令来全局安装 nodemon sudo npm insta…

吴恩达深度学习笔记(11)13.

人脸检校&#xff1a;输入某人的照片以及姓名或ID&#xff0c;判断是不是他所说的那个人 人脸识别&#xff1a; 单样本学习&#xff1a; 大多数人脸识别的问题需要在样本中只有一张照片的情况下认出一个人。 相似性函数&#xff1a;利用神经网络训练一个函数&#xff0c;可…

.Net C# 基于EFCore的DBFirst和CodeFirst

DBFirst和CodeFirst 1 概念介绍 1.1 DBFirst&#xff08;数据库优先&#xff09; 含义&#xff1a;这种模式是先创建数据库架构&#xff0c;包括表、视图、存储过程等数据库对象。然后通过实体框架&#xff08;Entity Framework&#xff09;等工具&#xff0c;根据已有的数据…

链表详解(三)

目录 链表功能实现链表的查找SLNode* SLFind(SLNode* phead, SLNDataType x)代码 链表任意位置前插入void SLInsert(SLNode**pphead&#xff0c;SLNode* pos, SLNDataType x)代码 链表任意位置前删除void SLErase(SLNode**pphead&#xff0c;SLNode* pos)代码 链表任意位置后插…

《C#语法一篇通》,20万字,48小时阅读,持续完善中。。。

本文摘录了C#语法的主要内容&#xff0c;接近20万字。 所有鸡汤的味道都等于马尿&#xff01; 如果你相信任何所谓的鸡汤文章&#xff0c;智商堪忧。 计算机语言没有”好不好“之说&#xff0c;骗子才会告诉你哪个语言好&#xff0c;学好任何一本基础语言&#xff08;C&#…

HarmonyOS开发 - 餐饮APP中多门店多窗口打开实例补充

specified启动模式为指定实例模式&#xff0c;有一些特殊场景&#xff0c;例如多门店应用中每次打开一个门店都希望能新建一个门店实例&#xff0c;而重复打开同一个门店都是同一门店实例。 此篇为餐饮APP中多门店实例的补充内容&#xff0c;以解决同一门店多次点击重复创建新窗…

Lammps动态删除反应产物分子的方法

大家好,我是小马老师。 本文介绍lammps反应势模拟过程中动态删除产物分子的方法。 lammps reaxff反应势可以模拟分子间的化学反应,fix reaxff/species命令可以输出反应过程中的产物信息。 在2022之后的lammps版本中,这个命令新增了delete关键词,使用这个命令,可以动态删除…

【Redis问题】(error) NOAUTH Authentication required.解决方法

问题描述&#xff1a; “(error) NOAUTH Authentication required”&#xff0c;通过ping方法和redis打招呼发现不成功&#xff0c;意思是没有这个权限&#xff08;也就是没有密码&#xff09; 问题解决1&#xff1a; 在命令后面加上密码&#xff08;一般情况下&#xff0c;在…

css 在 hover 子元素时,不要让父元素触发 hover 效果

别人写的没看到一个能好用的&#xff0c;虽然功能简单&#xff0c;但是这个应该还是比较陌生的 希望帮到你&#xff0c;能帮我点个赞 废话不多书&#xff0c;直接出代码 <div class"parent"><div class"child">悬停我</div></div&g…

关于自动化测试用例失败重试的一些思考

自动化测试用例失败重跑有助于提高自动化用例的稳定性&#xff0c;那我们来看一下&#xff0c;python和java生态里都有哪些具体做法&#xff1f; 怎么做 如果是在python生态里&#xff0c;用pytest做测试驱动&#xff0c;那么可以通过pytest的插件pytest-rerunfailures来实现…

Vue Router进阶详解

导航守卫 若依框架登录鉴权详解&#xff08;动态路由&#xff09;_若依鉴权-CSDN博客 完整的导航解析流程 导航被触发&#xff1a; 当用户点击页面中的链接、使用编程式导航&#xff08;如router.push或router.replace&#xff09;或手动输入URL时&#xff0c;导航流程被触发。…

如何把子组件的v-model修改数据,进行接收然后定义数据格式,子传父的实现

在 Vue 中&#xff0c;实现子组件通过 v-model 向父组件传递数据并接收后进行格式化&#xff0c;可以按照以下步骤来封装和实现&#xff1a; 步骤 1: 子组件实现 v-model 子组件需要定义一个 props 来接收 v-model 的值&#xff0c;并通过 emit 方法发出更新事件。 <!-- …

Rust 力扣 - 1984. 学生分数的最小差值

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 原数组 nums 排序&#xff0c;遍历nums中下标为[0, nums.len() - k]的学生分数 假设当前遍历的下标为i则&#xff0c;以 i 下标为最小值的学生分数的最小差值为nums[i k - 1] - nums[i] 取最小差值的最小值即…

distrobox install in ubuntu 22.04 / 在 ubuntu 22.04 上安装 distrobox (***) OK

要点&#xff1a; 本测试实验&#xff0c;采用的是 podman distrobox 在沙盒 snap 中&#xff0c;安装 distrobox 需要使用 --devmode 开发模式&#xff1b;可以避开 distrobox 的版本检查&#xff1f; distrobox 官方文档显示&#xff0c; Installation https://distrobox.i…

【k8s】-运维技巧-1

文章目录 k8s-节点驱逐节点驱逐节点删除批量删除镜像k8sdockerdocker 删除缓存k8s异常Pod清理删除所有命名空间下非Running状态的 Pod强制删除所有命名空间下非Running状态的 Podk8s-节点驱逐 节点驱逐 kubectl cordon k8s-node1 kubectl drain k8s-node1 --delete-local-dat…

开源数据库 - mysql - 基于GTID的主备部署

GTID AUTO_POSITION MODE的主从 搭建主从模式 注意&#xff0c;主备库必须开启GTID并设置好server_id&#xff1a; enforce_gtid_consistency ON # 开启强制GTID一致性&#xff0c;防止非GTID事务复制 gtid_mode ON # 开启GTID server_id 9910 # 主主或者主从配置必须不一…

IA应用加速,让电子供应链更智能高效

在当今数字化浪潮中&#xff0c;电子产品制造行业正经历着前所未有的变革。越来越多的企业开展全球化业务&#xff0c;进行数字化转型&#xff0c;对于网络时延的需求也更高。 客户背景 客户专注于为中小微电子产品制造企业提供产品技术方案开发、电子元器件采购、PCBA生产制造…

git 删除远程不存在本地命令却能看到的分支

要删除远程不存在但本地却能看到的分支&#xff0c;你可以按照以下步骤操作&#xff1a; 删除本地分支&#xff1a; 如果你确定要删除的分支已经没有用处&#xff0c;可以使用以下命令来删除本地分支&#xff1a; git branch -d <branch-name>这里的 <branch-name>…

2024年11月4日Github流行趋势

项目名称&#xff1a;DS4SD / docling 项目维护者&#xff1a;dolfim-ibm, github-actions, vagenas, cau-git, PeterStaar-IBM 项目介绍&#xff1a;让您的文档准备好迎接生成式AI。 项目star数&#xff1a;3,906 项目fork数&#xff1a;221 项目名称&#xff1a;abi / scree…

从模糊搜索到语义搜索的进化之路——探索 Chroma 在大模型中的应用价值

目录 从模糊搜索到语义搜索的进化之路——探索 Chroma 在大模型中的应用价值 一、引言 二、实现语义搜索的数据库 Chroma 1、语义搜索是什么 2、Chroma 语义搜索的原理 三、如何在项目中应用 Chroma 1、Chroma 的实际应用场景 2、安装Chroma&#xff08;python环境&…