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.xdnf.cn/news/9049.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Docker + Python

文章目录 一、Docker Hub - 使用搜索 Python二、Python Image 使用1、如何使用此 Image在 Python 应用项目中 创建`Dockerfile`文件运行单个 Python 脚本镜像中的多个 Python 版本2、镜像变体1、`python:<version>`2、`python:<version>-slim`3、`python:<versi…

虚拟机linux7.9下安装mysql遇到的问题

1.提示文件权限不够 解决&#xff1a;chmod -R 777 /usr/local/mysql/ 2.提示硬盘空间不够&#xff0c;mysql初始化失败 解决&#xff1a;更改/etc/my.cnf&#xff0c;将日志文件大小减少&#xff08;innodb_log_file_size&#xff09;&#xff0c;删除/data/mysql目录下的文…

GPU集群上分布式训练大模型

总结一下如何在超算系统上进行预训练大模型的分布式训练 / 微调&#xff0c;文中代码已上传至 github 实验环境 集群1&#xff1a;国家广州超算 星逸A800智能AI集群 GPU&#xff1a;8 * Nvdia Tesla-A800 80G显存 CPU&#xff1a;2 * 28核 Intel Xeon Gold 6348 内存&#xff…

读取excel并且显示进度条

读取excel并且显示进度条 通过C#实现DataGridView加载EXCEL文件&#xff0c;但加载时不能阻塞UI刷新线程&#xff0c;且向UI显示加载进度条。 #region 左上角导入 private async void ToolStripMenuItem_ClickAsync(object sender, EventArgs e) { …

Java | Leetcode Java题解之第552题学生出勤记录II

题目&#xff1a; 题解&#xff1a; class Solution {static final int MOD 1000000007;public int checkRecord(int n) {long[][] mat {{1, 1, 0, 1, 0, 0},{1, 0, 1, 1, 0, 0},{1, 0, 0, 1, 0, 0},{0, 0, 0, 1, 1, 0},{0, 0, 0, 1, 0, 1},{0, 0, 0, 1, 0, 0}};long[][] re…

Oracle OCP认证考试考点详解082系列16

题记&#xff1a; 本系列主要讲解Oracle OCP认证考试考点&#xff08;题目&#xff09;&#xff0c;适用于19C/21C,跟着学OCP考试必过。 76. 第76题&#xff1a; 题目 解析及答案&#xff1a; 以下哪三项活动会被记录在数据库的警报日志中&#xff1f; A. 块损坏错误 数据库…

103、Python并发编程:使用信号量Semaphore实现资源有限的并发场景

引言 在前面几篇文章的基础上&#xff0c;应对并发编程中现成同步的需求场景&#xff1a; 我们可以使用锁&#xff0c;作为多线程同步的几个核心基础&#xff0c;实现对临界资源的保护&#xff0c;确保满足基本的互斥访问逻辑。 使用条件变量Condition&#xff0c;实现有固定…

蛋奶烙饼:美味与温暖的邂逅

食家巷蛋奶烙饼&#xff0c;那金黄的色泽、浓郁的奶香和蛋香&#xff0c;光是看着就让人垂涎欲滴。它的制作过程并不复杂&#xff0c;却充满了生活的烟火气。将面粉、鸡蛋、牛奶等简单的食材混合在一起&#xff0c;搅拌成细腻的面糊。在平底锅中倒入少许油&#xff0c;舀一勺面…

Linux内核中IRQ Domain的结构、操作及映射机制详解

往期内容 本专栏往期内容&#xff0c;interrtupr子系统&#xff1a; 深入解析Linux内核中断管理&#xff1a;从IRQ描述符到irq domain的设计与实现 pinctrl和gpio子系统专栏&#xff1a; 专栏地址&#xff1a;pinctrl和gpio子系统 编写虚拟的GPIO控制器的驱动程序&#xff1a;…

cocos creator 3.8.3物理组件分组的坑

坑&#xff0c;坑的不行的大坑 group用的二进制的左移获取十进制的数值 目前是这样判断的&#xff0c;也不知道对不对&#xff0c;什么get、set Group没找到

如何解决“在ANACONDA prompt可以使用‘conda activate‘,但是在pycharm终端没办法使用该指令“”

一、设置好环境变量 此电脑&#xff08;右键&#xff09;-属性-高级系统设置-环境变量-在系统变量那一筐的PATH双击添加 二、完成后再测试conda activate 笔者测试完后&#xff0c;conda是可以用了&#xff0c;但是conda activate用不了。 显示该错误CommandNotFoundError:…

三菱MR-J4-B系列伺服参数一览

要点 与伺服系统控制器连接后&#xff0c;同服系统控制器的伺服参数的值即被写入各参数中。根据伺服系统控制器的机种和伺服放大器软件版本及MRConfigurator2的软件版本&#xff0c;存在无法设定的参数或范围。详细内容请参照伺服系统控制器的用户手册。请使用MR Configurator2…

Pattern program MPAT 详解

本文为VIP文章,主要介绍Pattern中元素与格式、常用指令、地址&数据产生指令等。 目录 一、pattern概述 二:Pattern构成元素 1、pattern构成元素:MPAT、END 2、pattern构成元素:pattern file name 3、pattern构成元素:SDEF 4、Pattern构成元素:REGISETR 5、Pa…

Qt编译lua库并调用

参考博客&#xff1a; 编译lua库 参考下面文章编译lua库文件 QT5.9学习笔记之QT编译lua库_qtluaintf.h-CSDN博客 https://blog.csdn.net/qq_23345187/article/details/112710677 Qt代码引用lua库文件 打开pro项目文件&#xff0c;右键空白处&#xff0c;点击添加库&#xff…

数据结构:直接插入排序

直接插入排序是数据结构中较为简单的插入排序法&#xff0c;基本思想是&#xff1a;把待排序的记录按照关键码值的大小逐个插入到一个已经排好序的有序序列中&#xff0c;直到所有的记录插完为止&#xff0c;得到一个新的有序序列。 实际上我们玩扑克时&#xff0c;就用了插入排…

Pr 视频过渡:溶解

效果面板/视频过渡/溶解 Video Transitions/Dissolve Adobe Premiere Pro 的视频过渡效果中&#xff0c;溶解 Dissolve效果组提供了多种平滑过渡方式&#xff0c;适用于不同的场景需求&#xff0c;从基础的淡入淡出到复杂的叠加溶解&#xff0c;帮助用户实现更具层次感的视觉过…

使用 Elasticsearch 构建食谱搜索(一)

作者&#xff1a;来自 Elastic Andre Luiz 了解如何使用 Elasticsearch 构建基于语义搜索的食谱搜索。 简介 许多电子商务网站都希望增强其食谱搜索体验。正确使用语义搜索可以让客户根据更自然的查询&#xff08;例如 “something for Valentines Day - 情人节的礼物” 或 “…

prompt资料收集

1. LANGgpt模板 # Role: 知识探索专家 ## Profile: - - 即刻App即刻App&#xff0c;享受探索、表达和创造https://m.okjike.com/originalPosts/649801f1ba47fe581a0da471?seyJ1IjoiNjQyM2IwMDE4NDg5Njk1NGJjYzhkNWU1IiwiZCI6MX0%3D2. 好的prompt的标准 主观的说&#xff1a;…

大数据学习10之Hive高级

1.Hive高级 将大的文件按照某一列属性进行GROUP BY 就是分区&#xff0c;只是默认开窗存储&#xff1b; 分区是按行&#xff0c;如一百行数据&#xff0c;按十位上的数字分区&#xff0c;则有十个分区&#xff0c;每个分区里有十行&#xff1b; 分桶是根据某个字段哈希对桶数取…

前端Nginx的安装与应用

目录 一、前端跨域方式 1.1、CORS(跨域资源共享) 1.2、JSONP(已过时) 1.3、WebSocket 1.4、PostMessage 1.5、Nginx 二、安装 三、应用 四、命令 4.1、基本操作命令 4.2、nginx.conf介绍 4.2.1、location模块 4.2.2、反向代理配置 4.2.3、负载均衡模块 4.2.4、通…