洞悉 Kubernetes 高阶奥秘:掌控资源、网络、存储,玩转容器化应用!

news2025/6/18 0:29:16

昨天我们已经入门了K8S,今天带大家学习一下资源、网络、存储这几个进阶的知识点模块内容。这几天陆陆续续会把K8S从头到尾讲一遍,最后会带大家实战一下,下面就开始今天的学习吧。

高级资源和控制器

Kubernetes 提供了一系列高级资源和控制器,用于满足更复杂的需求。本指南将深入探讨 StatefulSet、DaemonSet、Job 等高级资源的使用,以及自定义控制器的概念和创建,帮助您全面掌握 Kubernetes 的高级功能,并构建更强大的应用。

1. 高级资源详解

1.1 StatefulSet:

StatefulSet 用于部署和管理有状态应用,例如数据库、缓存等。它可以为每个 Pod 提供持久化存储,并保证 Pod 的顺序启动和终止。

示例:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: my-db
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-db
  template:
    metadata:
      labels:
        app: my-db
    spec:
      containers:
      - name: my-db
        image: mysql:latest
        volumeMounts:
        - name: db-data
          mountPath: /var/lib/mysql
      volumes:
      - name: db-data
        persistentVolumeClaim:
          claimName: my-db-pvc

1.2 DaemonSet:

DaemonSet 确保每个 Node 上都运行一个 Pod。它常用于部署守护进程,例如日志收集、监控等。

示例:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: my-logger
spec:
  selector:
    matchLabels:
      app: my-logger
  template:
    metadata:
      labels:
        app: my-logger
    spec:
      containers:
      - name: my-logger
        image: my-logger:latest
        volumeMounts:
        - name: log-data
          mountPath: /var/log
      volumes:
      - name: log-data
        emptyDir: {}

1.3 Job:

Job 用于运行一次性任务,例如批量处理、数据导入等。它完成后会自动清理所有 Pod。

示例:

apiVersion: batch/v1
kind: Job
metadata:
  name: my-job
spec:
  template:
    metadata:
      labels:
        app: my-job
    spec:
      containers:
      - name: my-job
        image: my-job:latest
        command: ["/bin/sh", "-c", "echo 'Hello, world!'"]

2. 自定义控制器:扩展 Kubernetes 功能

2.1 概念解析:

自定义控制器是一种扩展 Kubernetes 功能的机制。它可以监视自定义资源,并根据资源的状态执行相应的操作。

2.2 创建步骤:

  1. 定义自定义资源类型 (CRD)。

  2. 创建控制器代码。

  3. 部署控制器。

示例:

定义CRD:

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: webhooks.example.com
spec:
  group: example.com
  version: v1
  names:
    kind: Webhook
    plural: webhooks
  scope: Namespaced

创建控制器代码:

package main

import (
  "fmt"
  "k8s.io/apimachinery/pkg/api/errors"
  metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
  "k8s.io/apimachinery/pkg/runtime"
  "k8s.io/apimachinery/pkg/watch"
  "k8s.io/client-go/kubernetes"
  "k8s.io/client-go/tools/cache"
)

func main() {
  // 创建 Kubernetes 客户端
  client, err := kubernetes.NewForConfig(nil)
  if err != nil {
    fmt.Println(err)
    return
  }

  // 创建 Webhook 资源的 informer
  informer := cache.NewSharedInformerFactory(client, 0, nil).Apps().V1().Webhooks().Informer()

  // 添加事件处理函数
  informer.AddEventHandler(cache.ResourceEventHandlerFuncs{
    // 处理新增事件
    AddFunc: func(obj interface{}) {
      webhook := obj.(*example.com/v1.Webhook)
      fmt.Println("Webhook added:", webhook.Name)
    },
    // 处理更新事件
    UpdateFunc: func(oldObj, newObj interface{}) {
      oldWebhook := oldObj.(*example.com/v1.Webhook)
      newWebhook := newObj.(*example.com/v1.Webhook)
      fmt.Println("Webhook updated:", oldWebhook.Name, newWebhook.Name)
    },
    // 处理删除事件
    DeleteFunc: func(obj interface{}) {
      webhook := obj.(*example.com/v1.Webhook)
      fmt.Println("Webhook deleted:", webhook.Name)
    },
  })

  // 启动 informer
  informer.Run(nil)

  // 等待控制器退出
  select {}
}

部署控制器:

kubectl apply -f controller.yaml

测试控制器:

kubectl create -f webhook.yaml

结果

Webhook added: my-webhook

 

高级网络和服务发现

Network Policies:精细化流量控制

a.1 概念解析:

Network Policy 是一种基于 Pod 的网络控制机制,用于限制 Pod 之间的流量。它可以帮助您提高应用安全性,并防止网络攻击。

a.2 使用步骤:

  1. 定义 Network Policy 资源。

  2. 应用 Network Policy 到 Pod。

a.3 扩展知识点:

  • Network Policy 支持多种协议,包括 TCP、UDP、ICMP 等。

  • Network Policy 可以使用标签选择器来匹配 Pod。

  • Network Policy 可以使用优先级来控制多个策略的应用顺序。

示例:

1. 定义 Network Policy 资源:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-web-traffic
spec:
  podSelector:
    matchLabels:
      app: web
  ingress:
  - ports:
    - protocol: TCP
      port: 80
    from:
    - podSelector:
        matchLabels:
          app: frontend
  egress:
  - to:
    - podSelector:
        matchLabels:
          app: database
    ports:
    - protocol: TCP
      port: 5432

2. 应用 Network Policy 到 Pod:

kubectl apply -f network-policy.yaml

Service Mesh:服务治理新范式

b.1 概念解析:

Service Mesh 是一种用于控制服务间通信的专用网络。它可以提供流量路由、负载均衡、故障转移、安全认证等功能,帮助您构建更可靠、更高效的服务架构。

b.2 Istio 简介:

Istio 是最流行的 Service Mesh 之一。它提供了丰富的功能,可以帮助您轻松管理和治理服务。

b.3 Istio 基本使用:

  1. 安装 Istio。

  2. 部署 Istio 代理。

  3. 配置 Istio 路由规则。

b.4 扩展知识点:

  • Istio 支持多种流量路由策略,例如轮询、哈希、随机等。

  • Istio 可以使用负载均衡来分发流量到多个 Pod 实例。

  • Istio 可以使用故障转移来确保服务始终可用。

  • Istio 可以使用安全认证来控制服务之间的访问。

示例:

1. 安装 Istio:

kubectl apply -f istio-install.yaml

2. 部署 Istio 代理:

kubectl apply -f istio-deployment.yaml

3. 配置 Istio 路由规则:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: my-service
spec:
  hosts:
  - my-service.example.com
  gateways:
  - my-gateway
  http:
  - match:
    - uri:
        prefix: /
    route:
    - destination:
        host: my-service
        port: 80
  - match:
    - uri:
        prefix: /api
    route:
    - destination:
        host: my-api
        port: 8080

其他高级网络和服务发现功能

  • DNS 服务: Kubernetes 提供了一个内置的 DNS 服务,可以用于将服务名称解析为 IP 地址。

  • 负载均衡: Kubernetes 可以使用多种负载均衡器来分发流量到多个 Pod 实例。

  • 服务发现: Kubernetes 提供了多种服务发现机制,例如 Service 和 Endpoints,帮助 Pod 找到其他服务。

Kubernetes 持久化存储

Kubernetes 提供了多种持久化存储机制,用于存储 Pod 的数据,即使 Pod 重新启动或终止,数据也能持久存在。下面来带兄弟们了解一下Persistent Volumes (PV) 和 Persistent Volume Claims (PVC) ,以及动态存储和 Storage Classes 的概念,帮助你们全面掌握 Kubernetes 持久化存储的精髓,并根据应用需求选择合适的存储方案。

图片

Persistent Volumes 和 Persistent Volume Claims

a.1 概念解析:

  • Persistent Volume (PV): 由管理员预先配置的存储资源,可以被 Pod 使用。

    • 回收策略

      • retain:保留策略,当删除pvc的时候,保留pv与外部存储资源。

      • delete:删除策略,当与pv绑定的pvc被删除的时候,会从k8s集群中删除pv对象,并执行外部存储资源的删除操作。

      • resycle(已废弃)

    • pv状态迁移

      • available --> bound --> released

    • 特点:

      • 容量:存储空间大小,例如 1Gi。

      • 访问模式:Pod 如何访问 PV,例如 ReadWriteOnce(读写一次)或 ReadOnlyMany(只读多)。

      • 存储类型:本地磁盘、网络存储、云存储等。

      • 绑定状态:PV 可以处于未绑定或已绑定状态。

  • Persistent Volume Claim (PVC): Pod 对存储资源的请求,可以绑定到 PV 上。

    • 特点:

      • 存储类:定义 PV 的类型和特性,例如性能、可用性等。

        • 资源需求:Pod 所需的存储空间大小,例如 1Gi。

    • 绑定状态:PVC 可以处于未绑定、绑定或正在绑定状态。

a.2 使用步骤:

  1. 创建 PV。

  2. 创建 PVC。

  3. 将 PVC 绑定到 Pod。

a.3 完整示例:

1. 创建 PV:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
  - ReadWriteOnce
  hostPath:
    path: /data

2. 创建 PVC:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  storageClassName: my-storage-class
  resources:
    requests:
      storage: 1Gi

3. 将 PVC 绑定到 Pod:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-app
    image: my-app:latest
    volumeMounts:
    - name: my-data
      mountPath: /data
  volumes:
  - name: my-data
    persistentVolumeClaim:
      claimName: my-pvc

动态存储和 Storage Classes

b.1 概念解析:

  • 动态存储: Kubernetes 可以自动创建和管理 PV,无需管理员手动配置。

    • 实现: 使用存储供应器(Provisioner)来创建 PV,例如 Kubernetes 本身的 GCE PD 供应器或其他第三方供应器。

    • 优势: 简化 PV 管理,提高运维效率。

  • Storage Class: 用于定义存储资源的类型和特性,例如性能、可用性等。

    • 作用: 为 PVC 提供选择依据,让 Pod 可以根据需求选择合适的存储类型。

    • 参数: 不同存储类型支持不同的参数,例如本地磁盘的类型、云存储的区域等。

b.2 使用步骤:

  1. 创建 Storage Class。

  2. 在 PVC 中指定 Storage Class。

b.3 完整示例:

1. 创建 Storage Class:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: my-storage-class
provisioner: kubernetes.io/gce-pd
parameters:
  type: pd-standard
  zone: us-central1-a

2. 在 PVC 中指定 Storage Class:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  storageClassName: my-storage-class
  resources:
    requests:
      storage: 1Gi

VolumeAttachment

VolumeAttachment 记录了pv的相关挂载信息,如挂载到哪个node节点,由哪个volume plugin来挂载等。

AD Controller 创建一个 VolumeAttachment,而 External-attacher 则通过观察该 VolumeAttachment,根据其状态属性来进行存储的挂载和卸载操作。

apiVersion: storage.k8s.io/v1
kind: VolumeAttachment
metadata:
  name: csi-123456
spec:
  attacher: cephfs.csi.ceph.com
  nodeName: 192.168.1.10
  source:
    persistentVolumeName: pvc-123456
status:
  attached: true

 

CSINode

CSINode 记录了csi plugin的相关信息(如nodeId、driverName、拓扑信息等)。

当Node Driver Registrar向kubelet注册一个csi plugin后,会创建(或更新)一个CSINode对象,记录csi plugin的相关信息。

apiVersion: storage.k8s.io/v1
kind: CSINode
metadata:
  name: 192.168.1.10
spec:
  drivers:
  - name: cephfs.csi.ceph.com
    nodeID: 192.168.1.10
    topologyKeys: null
  - name: rbd.csi.ceph.com
    nodeID: 192.168.1.10
    topologyKeys: null

其他持久化存储选项

  • Local Persistent Volumes: 使用本地磁盘作为存储。

  • Network Storage: 使用 NFS、GlusterFS 等网络存储系统。

  • Cloud Storage: 使用 AWS EBS、Azure Disk 等云存储服务


今天深入探讨了 K8S 高级资源和控制器、高级网络和服务发现、持久化存储等功能的使用,并提供了详细的示例,帮助兄弟们进一步的全面掌握 Kubernetes 的高级功能。

关注我,让我们一起继续深入讨论K8S。

想要了解更多技术文章请关注公众号“职谷智享”,关注后回复关键字【秒杀】可以领取秒杀系统学习资料

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

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

相关文章

Toyota Programming Contest 2024#3(AtCoder Beginner Contest 344)(A~C)

A - Spoiler 竖线里面的不要输出&#xff0c;竖线只有一对&#xff0c;且出现一次。 #include <bits/stdc.h> //#define int long long #define per(i,j,k) for(int (i)(j);(i)<(k);(i)) #define rep(i,j,k) for(int (i)(j);(i)>(k);--(i)) #define debug(a) cou…

【自动化】PyoutuGUI操作键鼠

自动化之PyoutuGUI操作键鼠 文章目录 自动化之PyoutuGUI操作键鼠  &#x1f449;引言&#x1f48e;一、初始化环境二、键盘鼠标事件三、消息框功能四、案例实战自动登录WPS 五、问题解决 &#x1f449;引言&#x1f48e; 学习的最大理由是想摆脱平庸&#xff0c;早一天就多一…

CSS基础知识

font-family: "Trebuchet MS", Verdana, sans-serif; 字体栈&#xff0c;浏览器会一个一个试过去看下哪个可以用 font-size16px; font-size1em; font-size100%;//相对于16px 字体大小&#xff0c;需要进行单位换算16px1em font-weightnormal;//400font-weight属性…

STM32CubeMX学习笔记17--- FSMC

1.1 TFTLCD简介 TFT-LCD&#xff08;thin film transistor-liquid crystal display&#xff09;即薄膜晶体管液晶显示器。液晶显示屏的每一个像素上都设置有一个薄膜晶体管&#xff08;TFT&#xff09;&#xff0c;每个像素都可以通过点脉冲直接控制&#xff0c;因而每个节点都…

2024年3月10日 十二生肖 今日运势

小运播报&#xff1a;2024年3月10日&#xff0c;星期日&#xff0c;农历二月初一 &#xff08;甲辰年丁卯月癸酉日&#xff09;&#xff0c;法定节假日。 红榜生肖&#xff1a;龙、牛、蛇 需要注意&#xff1a;鸡、狗、兔 喜神方位&#xff1a;东南方 财神方位&#xff1a;…

Linux——文件重定向

目录 前言 一、重定向 二、重定向的运用 三、dup2 四、命令行中的重定向 五、为什么要有标准错误 前言 在之前我们学习了文件标识符&#xff0c;直到close可以使用文件标识符进行关闭&#xff0c;但是当我们关闭1号&#xff08;stdout&#xff09;时&#xff0c;无法往显…

基于springboot实现图书推荐系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现图书馆推荐系统演示 摘要 时代的变化速度实在超出人类的所料&#xff0c;21世纪&#xff0c;计算机已经发展到各行各业&#xff0c;各个地区&#xff0c;它的载体媒介-计算机&#xff0c;大众称之为的电脑&#xff0c;是一种特高速的科学仪器&#xff0c;比…

软件测试自学和报班学习的区别,各有各的优势和缺点,大家看完之后自己选择喔

时代在进步&#xff0c;人们汲取知识的方式不再是单一的在书本上面&#xff0c;现在网络发达&#xff0c;只需要上网就能找到相关的好多知识&#xff0c;慢慢的大家越来越觉得有了这些知识&#xff0c;只要自己有自制力就完全能够自学到一定的程度。 在自学氛围的影响下&#…

深度学习+感知机

深度学习感知机 1感知机总结 2多层感知机1XOR2激活函数3多类分类总结 3代码实现 1感知机 是个很简单的模型,是个二分类的问题。 感知机&#xff08;perceptron&#xff09;是Frank Rosenblatt在1957年提出的一种人工神经网络&#xff0c;被视为一种最简单形式的前馈神经网络&…

could not publish server configuration for tomcat at localhost

1&#xff0c;报错信息如图&#xff1a; 2&#xff0c;找到servers双击&#xff0c;选择Modules&#xff0c;如果有两个webModules ,remove一个&#xff0c; 3&#xff0c;如果重启还是报错&#xff0c;干脆两个都remove&#xff0c;双击tomcat服务add And Remove重新添加

【算法沉淀】最长回文子串

&#x1f389;&#x1f389;欢迎光临&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;特别推荐给大家我的最新专栏《数据结构与算法&#xff1a;初学者入门指南》&#x1f4d8;&am…

mxxWechatBot流程与原理

大家伙&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。 免责声明&#xff1a;该工具仅供学习使用&#xff0c;禁止使用该工具从事违法活动&#xff0c;否则永久拉黑封禁账号&#xff01;&#xff01;&#xff01;本人不对任何工具的使用负责&am…

【NR 定位】3GPP NR Positioning 5G定位标准解读(九)-增强的小区ID定位

前言 3GPP NR Positioning 5G定位标准&#xff1a;3GPP TS 38.305 V18 3GPP 标准网址&#xff1a;Directory Listing /ftp/ 【NR 定位】3GPP NR Positioning 5G定位标准解读&#xff08;一&#xff09;-CSDN博客 【NR 定位】3GPP NR Positioning 5G定位标准解读&#xff08;…

【学习笔记】Vue3源码解析:第二部分-实现响应式(5)

课程地址&#xff1a;【已完结】全网最详细Vue3源码解析&#xff01;&#xff08;一行行带你手写Vue3源码&#xff09; 第二部分-实现响应式&#xff08;5&#xff09;&#xff1a;&#xff08;对应课程的第18-21节&#xff09; 第18节&#xff1a;《创建ref实例》 vue3中 re…

机器学习--循环神经网络(RNN)1

一、简介 循环神经网络&#xff08;Recurrent Neural Network&#xff09;是深度学习领域中一种非常经典的网络结构&#xff0c;在现实生活中有着广泛的应用。以槽填充&#xff08;slot filling&#xff09;为例&#xff0c;如下图所示&#xff0c;假设订票系统听到用户说&…

【数据分享】2013-2022年全国范围逐月CO栅格数据(免费获取)

空气质量数据是在我们日常研究中经常使用的数据&#xff01;之前我们给大家分享了2000-2022年全国范围逐月的PM2.5栅格数据和2013-2022年全国范围逐月SO2栅格数据&#xff08;可查看之前的文章获悉详情&#xff09;。 本次我们给大家带来的是2013-2022年全国范围的逐月的CO栅格…

ubuntu22.01安装及配置

前言 本次安装基于VMware Pro 16进行安装。 ubuntu版本&#xff1a;ubuntu-22.04.3-live-server-amd64.iso 1、下载 1.1官网下载 https://ubuntu.com/download 1.2、清华大学镜像网站下载 https://mirrors.tuna.tsinghua.edu.cn/ 进入网站后搜索ubuntu&#xff0c;选择ubu…

基于PSO粒子群算法的三角形采集堆轨道优化matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 假设一个收集轨道&#xff0c;上面有5个采集堆&#xff0c;这5个采集堆分别被看作一个4*20的矩阵&#xff08;下面只有4*10&#xff09;&#xff0c;每个模块&…

RabbitMQ发布确认高级版

1.前言 在生产环境中由于一些不明原因&#xff0c;导致 RabbitMQ 重启&#xff0c;在 RabbitMQ 重启期间生产者消息投递失败&#xff0c; 导致消息丢失&#xff0c;需要手动处理和恢复。于是&#xff0c;我们开始思考&#xff0c;如何才能进行 RabbitMQ 的消息可靠投递呢&…

Java学习笔记NO.18

T1.理工超市 &#xff08;1&#xff09;题目描述 编写一个程序&#xff0c;设计理工超市功能菜单并完成注册和登录功能的实现。显示完菜单后&#xff0c;提示用户输入菜单项序号。当用户输入<注册>和<登录>菜单序号时模拟完成注册和登录功能&#xff0c;最后提示…