K8s学习笔记——资源组件篇

引言

前一篇文章我们介绍了K8s的概念理解和常用命令,这篇我们重点介绍K8s的资源组件和相关配置使用。

1. Node & Pod

Node:

是 Pod 真正运行的主机,可以是物理机,也可以是虚拟机。为了管理 Pod,每个 Node 节点上至少要运行 container runtime(比如 docker, rkt, containerd)、kubelet 和 kube-proxy 服务。

Pod:

是一组紧密关联的容器集合(也可以是单个容器),它们共享 IPC(进程间通信) , Network namespace 和 文件存储(需挂载到容器),是 Kubernetes 调度的基本单位。

Node和Pod的关系如下图所示:
在这里插入图片描述
上图中的Node中共有4个Pod,分别为:
在这里插入图片描述

2. Namespaces

是对一组资源和对象的抽象集合,相当于给k8s系统内部的对象划分一些命名空间。常见的 pods, services, replication controllers 和 deployments 等都是属于某一个 namespace 的(默认是 default)。

创建命名空间的配置示例:

apiVersion: v1
kind: Namespace  # 表示要创建的资源类型为命名空间
metadata:
  name: test     # 命名空间名称为test

命名空间的使用则是通过Pod或Service中的metadata.namespace字段来声明。

3. Service

是应用服务的抽象,为应用提供负载均衡和服务发现。它通过将多个 Pod IP 和端口列表组成 endpoints,由 kube-proxy 负责将服务 IP 负载均衡到这些 endpoints 上。

每个 Service 都会自动分配一个 cluster IP(仅在集群内部可访问的虚拟地址)和 DNS 名,其他容器可以通过该地址或 DNS 来访问服务,而不需要了解后端容器的运行。

Service模型如下所示:
在这里插入图片描述
创建Service的配置:

kind: Service               # 创建的资源类型为服务
apiVersion: v1
metadata:                   # 资源的元数据
  name: {{name}}            # 服务名称
  namespace: {{namespace}}  # 所属namespace
spec:                       # 指定服务的规格,包括选择器和端口
  selector:                 # 用于指定服务所选择的Pod的标签
    k8s-app: {{name}}       # 选择具有标签k8s-app且值为占位符{{name}}的Pod
  ports:                    # 指定服务的端口映射规则
  - name: serviceport       # 定义了一个名为serviceport的端口映射,将容器内的8081端口映射到服务的端口8081上
    protocol: TCP
    port: 8081              # 服务对外开放的访问端口
    targetPort: 8081        # 容器内端口

4. Ingress

为进入集群的请求提供路由规则的集合,类似于反向代理Nginx的作用,它可以按规则将请求路由到具体的Service上。

Ingress模型如下图示例:
在这里插入图片描述
创建Ingress的配置规则:

apiVersion: extensions/v1beta1
kind: Ingress              # 创建的资源类型为Ingress
metadata:
  name: test
spec:                      # 指定Ingress的规格,包括规则(rules)
  rules:
  - host: foo.bar.com      # 请求的主机名,会用于Request中的Host头过滤
    http:                  # 使用http协议
      paths:               # 请求路径配置
      - backend:           # 指定要请求的后端服务
          serviceName: s1  # 后端服务名称
          servicePort: 80  # 后端服务端口
  - host: bar.foo.com
    http:
      paths:
      - backend:
          serviceName: s2
          servicePort: 80

5. Deployment

用于无状态 Pod 部署声明,这些Pod对部署顺序没有要求(如nginx),可以定义 Pod 的副本数量,调度策略等,是最常用的一种部署方式,一般将 Pod 的定义内置在 Deployment 中。

Deployment的配置规则示例:

apiVersion: apps/v1
kind: Deployment          # 创建的资源类型为Deployment
metadata:
  name: {{name}}
  namespace: {{namespace}}
spec:                     # Deployment的规格,包括副本数(replicas)、选择器(selector)、模板(template)等。
  replicas: 2             # 创建2个pod副本
  selector:               # 选择Pod的条件配置 
    matchLabels:
      k8s-app: {{name}}   # 选择具有标签k8s-app且值为占位符{{name}}的Pod
  template:               # 用于定义Pod的模板
    metadata:
      labels:             # 设置Pod的标签
        k8s-app: {{name}}
    spec:
      terminationGracePeriodSeconds: 10  # Pod的优雅终止期限为10秒
      nodeSelector:
        k8s-meeting: true # 按需调整
      volumes:    # 定义了两个存储卷log和conf
      - name: log
        hostPath: # 使用主机磁盘路径/var/log/quanshi/{{name}}进行挂载, 类型为目录或创建目录
          path: /var/log/quanshi/{{name}}
          type: DirectoryOrCreate
      - name: conf
        configMap:        # 使用名称为{{name}}的ConfigMap配置数据进行挂载
          name: {{name}}
      containers:         # 容器定义,名称和镜像均使用占位符表示
      - name: {{name}}    # 容器名称
        image: {{image}}  # 容器使用的镜像名称
        env:              # 注入到系统的环境变量,程序能读到,每个Pod可以不同                 
        - name: NODE_IP
          valueFrom:
            fieldRef:
              fieldPath: status.hostIP
        - name: POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: POD_IP
          valueFrom:
            fieldRef:
              fieldPath: status.podIP
        resources:
          limits:      # 指定容器可以使用的最大资源空间
            cpu: 2000m      # 2个CPU核心
            memory: 4000Mi  # 4000Mi=4GB
          requests:    # 表示容器部署需要的最小资源
            cpu: 100m       # 占用一个CPU核心的1/10, 1C=1000m
            memory: 150Mi   # 150MB
        securityContext:    # 容器特权配置,有一些特殊的场景需要配置,例如syslog
          privileged: false
        volumeMounts:       # 指定容器中的挂载卷和挂载路径
        - name: log         # 卷log(上面有指定)挂载到容器的/var/log/quanshi目录下
          mountPath: /var/log/quanshi
        - name: conf        # 卷conf(上面有指定)挂载到容器的/mnt/conf目录下
          mountPath: /mnt/conf

6. StatefulSet

为了解决有状态服务的部署问题,能做到有序部署,有序扩展,即 Pod 是有顺序的。在部署或者扩展的时候要依据定义的顺序依次依序进行(即从 0 到 N-1,在下一个 Pod 运行之前所有之前的 Pod 必须都是 Running 和 Ready 状态)。

典型场景有:

  • 数据库部署(如MySQL),每个Pod都有一个稳定的网络标识和唯一的持久化存储卷,可以确保数据的持久性和一致性;
  • 消息队列(如Kafka)每个Pod都有一个唯一的网络标识和持久化存储卷,确保消息的可靠性和持久化存储;
  • 分布式缓存(如Redis),每个Pod都有一个唯一的网络标识和持久化存储卷,可以确保缓存数据的可靠性和一致性。

创建StatefulSet的配置示例:

apiVersion: v1
kind: Service            # 先定义一个Service,供下文的StatefulSet使用
metadata:
  name: nginx
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None  # None表示不分配集群IP
  selector:        # 选择具有标签app: nginx的Pod与该Service关联
    app: nginx
---
apiVersion: apps/v1
kind: StatefulSet         # 创建的资源类型为StatefulSet
metadata:
  name: web
spec:
  serviceName: "nginx"    # 指定StatefulSet关联的Service名称为nginx
  replicas: 2             # StatefulSet的副本数为2,即创建2个Pod。
  selector:               
    matchLabels:          # 通过标签选择器来选择要关联的Pod。
      app: nginx
  template:               # StatefulSet创建Pod时的模板   
    metadata:
      labels:             # 设置Pod的标签为app: nginx
        app: nginx
    spec:
      containers:         # 定义Pod中的容器名称和镜像名称
      - name: nginx
        image: nginx

7. DaemonSet

保证在每台 Node 上都运行一个容器实例,供主机上的所有Pod共用。常用来部署一些集群的日志、监控或者其他系统管理应用,如syslog-ng, filebeat等。

apiVersion: apps/v1
kind: DaemonSet

8. ConfigMap

用于保存配置数据的键值对,可以用来保存单个属性,也可以用来保存配置文件。

典型使用场景:

  1. 配置注入:将应用程序的配置信息注入到容器中。通过将ConfigMap挂载到容器的文件系统中,应用程序可以读取ConfigMap中的配置数据并应用到运行时环境中。
  2. 动态配置更新:当应用程序的配置信息发生更改时,可以通过更新ConfigMap来实现动态配置更新。这样,无需重新构建和重新部署应用程序,就可以更新应用程序的配置。
  3. 环境变量注入:通过将ConfigMap的值设置为环境变量,可以将配置信息传递给应用程序作为环境变量。
  4. 共享配置:多个应用程序可以共享同一个ConfigMap,以便它们可以使用相同的配置信息。

创建ConfigMap的配置示例:

apiVersion: v1
kind: ConfigMap             # 创建的资源类型为ConfigMap
metadata:
  name: special-config      # ConfigMap的名称为special-config
  namespace: default        # ConfigMap所属的命名空间为default
data:
  special.how: very         # 定义了一个键值对,键为special.how,值为very
  special.type: charm       # 定义了一个键值对,键为special.type,值为charm。
  game.properties: |        # 定义了一个键值对,键为game.properties,值为多行文本。
    enemies=aliens          # game.properties内部定义一个配置项,键为enemies,值为aliens
    lives=3
    secret.code.allowed=true
    secret.code.lives=30   
  ui.properties: |           # 定义了一个键值对,键为ui.properties,值为多行文本。
    color.good=purple
    color.bad=yellow
    allow.textmode=true
    how.nice.to.look=fairlyNice

9. HPA

全称为Horizontal Pod Autoscaling,可以根据 CPU 使用率或应用自定义 metrics 自动扩展 Pod 数量。

CA(Cluster AutoScaler)用于提供Node级扩容,支持更高效的扩缩容。

CA可以和 HPA配合使用:
在这里插入图片描述

参考阅读:

  • k8s学习笔记之认识理解篇:https://blog.csdn.net/xiaojia1001/article/details/134221854
  • autoscaler: https://github.com/kubernetes/autoscaler

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

军用机场信息化数字孪生监测平台助力企业运营

随着直升机的不断发展,其在军用和民用领域得到越来越广泛的应用,在民用领域直升机广泛用于客货运输、紧急救援、农林作业、地质勘探、油气开发、公安巡逻等。直升机相关经营数据也逐渐被重视起来,数字孪生公司深圳华锐视点通过web3d开发构建虚…

XR Interaction ToolKit

一、简介 XR Interaction Toolkit是unity官方的XR交互工具包。 官方XRI示例地址:https://github.com/Unity-Technologies/XR-Interaction-Toolkit-Examples 2023.3.14官方博客,XRIT v2.3 https://blog.unity.com/engine-platform/whats-new-in-xr-int…

8-3、T型加减速单片机程序【51单片机控制步进电机-TB6600系列】

摘要:根据前两节内容,已完成所有计算工作,本节内容介绍具体单片机程序流程及代码 一、程序流程图 根据前两节文章内容可知,T型加减速的关键内容是运动类型的判断以及定时器初值的计算,在输出运动参数后即可判断出运动…

新闻稿的写作注意事项!纯干货

新闻稿是企业、机构、政府等组织向公众传递信息的重要途径之一,也是媒体获取新闻素材的主要来源。一篇优质的新聞稿不仅可以吸引读者的注意力,还可以提高组织的形象和声誉。因此写好新闻稿至关重要。下面伯乐网络传媒来给大家探讨一些新闻稿写作的注意事…

人工智能AI 全栈体系(十二)

第二章 计算机是如何学会下棋的 下棋一直被认为是人类的高智商游戏,从人工智能诞生的那一天开始,研究者就开始研究计算机如何下棋。著名人工智能学者、图灵奖获得者约翰麦卡锡在 50 年代就开始从事计算机下棋方面的研究工作,并提出了著名的 …

如何使用Node.js快速创建HTTP服务器并实现公网访问本地Server

文章目录 前言1.安装Node.js环境2.创建node.js服务3. 访问node.js 服务4.内网穿透4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5.固定公网地址 前言 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation&#xff0…

哪一波最容易亏钱,昂首资本这样讲

有交易者咨询anzo capital昂首资本,按照波浪理论最容易亏钱是在第几波,通过调查得知80%的错误发生在第四波。所以对哪一波最容易亏钱,很有可能就是第四波。当然了如果能准确的判断第四波时,也可能获得相当丰厚的利润。 第四波通…

❤️ React的安装和使用(实战篇)

React的安装和使用 一、React的安装和使用 reactJs警告提示: This version of tar is no longer supported, and will not receive security updates. Please upgrade asap 翻译:tar2.2.2:此版本的tar不再受支持,将不会收到安全…

CentOS 7使用RPM包安装MySQL5.7

目标 本文目标是简单介绍如何在CentOS 7上使用RPM包安装MySQL 5.7,然后描述如何调整存储路径datadir。 环境准备 操作系统 —— CentOS 7MySQL版本 —— MySQL 5.7.44 获取MySQL-rpm包 官网下载地址:https://dev.mysql.com/downloads/mysql/5.7.htm…

如何安装Wnmp并结合内网穿透实现外网访问内网Wnmp服务

文章目录 前言1.Wnmp下载安装2.Wnmp设置3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 前言 WNMP是Windows系统下的绿色NginxMysqlPHP环境集成套件包,安装完成后即可得到一个Nginx MyS…

VSIX:C#项目 重命名所有标识符(Visual Studio扩展开发)

出于某种目的(合法的,真的合法的,合同上明确指出可以这样做),我准备了一个重命名所有标识符的VS扩展,用来把一个C#库改头换面,在简单的测试项目上工作很满意,所有标识符都被准确替换…

浅述边缘计算场景下的云边端协同融合架构的应用场景示例

云计算正在向一种更加全局化的分布式节点组合形态进阶,而边缘计算是云计算能力向边缘侧分布式拓展的新触角。随着城市建设进程加快,海量设备产生的数据,若上传到云端进行处理,会对云端造成巨大压力。如果利用边缘计算来让云端的能…

第九周实验记录

1、安装Nerfstudio 环境配置 首先需要创建环境python3.8,接着需要安装cuda11.7或11.3 这里安装cuda11.7 pip uninstall torch torchvision functorchpip install torch1.13.1 torchvision functorch --extra-index-url https://download.pytorch.org/whl/cu117安…

Hive从入门到大牛【Hive 学习笔记】

文章目录 什么是HiveHive的数据存储Hive的系统架构MetastoreHive VS Mysql数据库 VS 数据仓库 Hive安装部署Hive的使用方式命令行方式JDBC方式 Set命令的使用Hive的日志配置Hive中数据库的操作Hive中表的操作 Hive中的数据类型基本数据类型复合数据类型ArrayMapStructStruct和M…

简述PyQt5布局管理

PyQt5的布局管理方法主要包括以下几种: 水平布局(QHBoxLayout):可以将所添加的控件在水平方向上依次排列。垂直布局(QVBoxLayout):可以将所添加的空间在垂直方向上依次排列。网格布局&#xff…

web3 dapp React项目引入 antd 对 balance 用户token信息组件进行样式改造

好 上文 web3 React dapp中编写balance组件从redux取出并展示用户资产 我们简单处理了用户资产的展示 那么 我们继续 先启动 ganache 环境 终端输入 ganache -d然后 打开我们的项目 将合约发布到区块链上 truffle migrate --reset然后 我们启动项目 确认一切正常 还原到上文…

day2 ARM基础

.text .globl _start _start:mov r0,#0 mov r1,#0 addfunc:add r0,r0,#1 r0自增1adds r1,r1,r0 R1实现1~100累加cmp r0,#100 判断r0是否到100bleq loop r0等于100 进入死循环 blne addfunc r0等于100跳转至循环累加 loop:b loopstop:b stop.end 【汇编…

淘宝婴儿用品购买情况分析报告

一.分析背景和目的 随着购物网站的发展,人们的网络购物行为占比也快速增加。为了能够获取更多的用户,提升商家的销售量,需要从产品和用户不同的角度进行分析,进而得到有价值的信息,指导商家进行获客和营销。本文就以淘…

NOIP2023模拟12联测33 D. 滈葕

NOIP2023模拟12联测33 D. 滈葕 文章目录 NOIP2023模拟12联测33 D. 滈葕题目大意思路code 题目大意 思路 放一段题解的材料 ABO 血型系统是血型系统的一种,把血液分为 A,B,AB,O 四种血型。血液由红细胞和血清等组成,红细胞表面 有凝集原,血清…

R语言环境下使用curl库做的爬虫代码示例

curl库是一个用于传输数据的工具和库,它支持多种协议,包括HTTP、FTP、SMTP等。在爬虫中,curl库可以用来获取网页内容,从而实现爬取网页的功能。通过设置curl的选项,可以实现对网页的请求、响应、重定向等操作。在使用c…