Kubernetes学习总结知识点汇总

          Kubernetes 是一个开源的容器编排系统,用于自动化部署、扩展和管理容器化应用程序。它最初由 Google 设计并捐赠给 Cloud Native Computing Foundation(CNCF)来维护。Kubernetes 提供了一个运行分布式系统的框架,能够无缝地扩展和管理跨主机集群的容器应用。

目录

1.Kubernetes 架构

2. Kubernetes 中的 "节点(Node)

3.Kubernetes 中的 "Pods"

4.Kubernetes 中的 服务(Services)

5.Kubernetes 中的 部署(Deployments)

6.Kubernetes 中的 有状态应用(StatefulSets)

7.Kubernetes 中的 存储卷(Volumes)

8.Kubernetes 中的 持久卷(Persistent Volumes)

9.Kubernetes 中的 配置(ConfigMaps)

10.Kubernetes 中的 密钥(Secrets)

11.Kubernetes 中的 命名空间(Namespaces)

12.Kubernetes 中的 资源配额(Resource Quotas)

13.Kubernetes 中的 限制范围(Limit Ranges)

14.Kubernetes 中的 节点选择器(Node Selectors)

15.Kubernetes 中的 亲和性规则(Affinity Rules)

16.Kubernetes 中的 标签(Labels)

17.Kubernetes 中的 注解(Annotations)

18.Kubernetes 中的 命令行工具(kubectl)

19. Kubernetes 中的 集群安全

20.高级调度

21.集群联邦(Federation)

22.自动化测试和部署

23.监控和日志

24.服务网格(Service Mesh)

25.存储和网络插件


      1.Kubernetes 架构
组件 描述 功能
Master 节点 Kubernetes 集群的控制平面 负责整个集群的决策
API Server 提供 Kubernetes API 的接口 所有 Kubernetes 组件之间的通信接口
Scheduler 负责调度决策,将 Pods 调度到合适的节点上 调度器
Controller Manager 运行集群中的各种控制器 负责运行集群中的各种控制器,如节点控制器、副本控制器等
etcd 存储集群状态的分布式键值存储 存储集群状态,如 API 对象的配置数据
Node 节点 集群中的工作节点,运行 Pod 执行 Pod 的运行和管理
Kubelet 负责本节点上的容器生命周期和资源监控 节点上的代理,负责 Pod 的生命周期管理
Kube-proxy 负责 Kubernetes 服务的网络代理 网络代理,负责服务的负载均衡和网络转发
2. Kubernetes 中的 "节点(Node)

节点是 Kubernetes 集群中的工作机器,它们可以是物理机或虚拟机。

属性 描述 示例
Node Name 节点的唯一标识符 node-1worker-node-2
Node Status 节点的当前状态 ReadyNotReadySchedulingDisabled
Node Capacity 节点的资源容量,包括 CPU、内存等 CPU: 4, Memory: 16Gi
Node Allocatable 节点上可分配的资源量 CPU: 3.5, Memory: 14Gi
Node Conditions 节点的健康状况,如磁盘压力、内存压力等 DiskPressure: True, MemoryPressure: False
Node Taints 节点污点,用于控制哪些 Pods 可以调度到该节点上 dedicated=production:NoSchedule
Node Labels 节点的标签,用于选择器匹配 failure-domain.beta.kubernetes.io/zone="us-west-1"
Node Selector 节点选择器,用于控制 Pod 应该调度到哪些节点上 nodeSelector: {"disktype": "ssd"}
Node Affinity 节点亲和性,用于控制 Pod 调度到特定节点的偏好 nodeAffinity: {"requiredDuringSchedulingIgnoredDuringExecution": {"nodeSelectorTerms": [{"matchExpressions": [{"key": "kubernetes.io/e2e-az-name", "operator": "In", "values": ["e2e-az1", "e2e-az2"]}]}]}}
Pod Priority Pod 的优先级,影响节点故障时 Pod 的重启顺序 priorityClassName: high-priority
Node Resource Limits 节点上的资源限制,用于控制 Pod 可以使用的资源量 limits: {"cpu": "2", "memory": "4Gi"}
Node Resource Requests 节点上的资源请求,用于调度时确定 Pod 需要的资源量 requests: {"cpu": "1", "memory": "2Gi"}

这个表格提供了 Kubernetes 节点相关的一些关键概念和属性。每个属性都有其特定的用途和配置方式,这些属性共同定义了节点在 Kubernetes 集群中的角色和行为。

3.Kubernetes 中的 "Pods"

Pods 是 Kubernetes 集群中的基本部署单元,它们是一组(通常是一个)紧密相关的容器,这些容器共享存储和网络资源。

属性 描述 示例
Pod Name Pod 的唯一标识符 my-pod
Pod Status Pod 的当前状态 RunningPendingSucceededFailedUnknown
Pod IP Pod 的网络 IP 地址 10.0.0.1
Restart Policy Pod 的重启策略 AlwaysOnFailureNever
Containers Pod 中的容器列表 [name: "container-1", image: "nginx:latest"]
Volumes Pod 中挂载的存储卷 [name: "my-volume", configMap: {name: "my-config"}]
Init Containers Pod 中的初始化容器,用于执行启动前的任务 [name: "init-container", image: "busybox", command: ["sh", "-c", "echo hello"]]
Pod Labels Pod 的标签,用于选择器匹配和组织 [key: "app", value: "my-app"]
Pod Annotations Pod 的注解,用于存储非标识性信息 [{"key": "description", "value": "My application pod"}]
Pod Affinity Pod 亲和性,用于控制 Pod 调度到特定节点的偏好 {"podAffinity": {"requiredDuringSchedulingIgnoredDuringExecution": [{"labelSelector": {"matchExpressions": [{"key": "app", "operator": "In", "values": ["my-app"]}]}, "topologyKey": "kubernetes.io/hostname"}]}}
Pod Anti-Affinity Pod 反亲和性,用于避免 Pod 被调度到相同节点上 {"podAntiAffinity": {"requiredDuringSchedulingIgnoredDuringExecution": [{"labelSelector": {"matchExpressions": [{"key": "app", "operator": "In", "values": ["my-app"]}]}, "topologyKey": "kubernetes.io/hostname"}]}}
Pod Priority Class Pod 的优先级类,影响 Pod 调度和节点故障时的重启顺序 priorityClassName: high-priority
Resource Requests Pod 请求的资源量,用于调度和保证 Pod 运行的资源 {"requests": {"cpu": "500m", "memory": "256Mi"}}
Resource Limits Pod 限制的资源量,用于限制 Pod 使用的资源量 {"limits": {"cpu": "1", "memory": "512Mi"}}

 这个表格提供了 Kubernetes Pods 的关键属性和配置选项。Pods 是 Kubernetes 集群中运行容器化应用的基础,理解这些属性对于管理和优化 Kubernetes 集群至关重要。

4.Kubernetes 中的 服务(Services)

Kubernetes 中,服务是定义一组 Pod 访问策略的抽象,它允许外部访问集群内的一组相同功能的 Pod。

属性 描述 示例
Service Name 服务的唯一标识符 my-service
Type 服务的类型,决定服务的访问方式 ClusterIPNodePortLoadBalancerExternalName
Selector 选择器,用于选择一组 Pod 来暴露为服务 {"app": "my-app"}
Port 服务端口,定义服务监听的端口号 80 或 {"name": "http", "port": 80, "targetPort": 8080}
Target Port Pod 端口,服务将转发到 Pod 的这个端口 8080
Cluster IP 服务的内部 IP 地址,仅在集群内部可访问 10.0.0.101
Node Port 服务的节点端口,用于从集群外部访问服务 30000
External IP 外部 IP 地址,通常由云服务提供商分配 104.197.1.1
Load Balancer 如果服务类型是 LoadBalancer,这里会显示分配的负载均衡器信息 {"ingress": [{"ip": "123.456.789.0"}]}
Session Affinity 会话亲和性,控制客户端的连接是否总是路由到同一台 Pod ClientIP
External Traffic Policy 外部流量策略,控制是否只路由到本地节点的 Pod LocalCluster
Annotations 服务的注解,用于存储非标识性信息 {"description": "My application service"}

这个表格提供了 Kubernetes 服务的关键属性和配置选项。服务是 Kubernetes 网络模型中的核心概念,它们使得 Pod 组能够被外部访问,并且提供了负载均衡和简单的服务发现机制。

5.Kubernetes 中的 部署(Deployments)

部署是 Kubernetes 中用来声明式地管理无状态应用的生命周期的 API 对象。它负责 Pod 的声明周期,提供声明式的更新能力。

属性 描述 示例
Deployment Name 部署的唯一标识符 my-deployment
Replicas 部署中 Pod 的副本数量 3
Selector 选择器,用于选择一组 Pod 来作为部署的一部分 {"matchLabels": {"app": "my-app"}}
Template Pod 模板,定义了 Pod 的规格和运行的容器 {"metadata": {"labels": {"app": "my-app"}}, "spec": {"containers": [{"name": "my-container", "image": "nginx:latest"}]}}
Strategy 更新策略,定义如何替换旧版本的 Pod {"type": "RollingUpdate", "rollingUpdate": {"maxSurge": "25%", "maxUnavailable": "25%"}}
Min Ready 在更新期间,集群中至少需要有多少个 Pod 处于就绪状态 2
Revisions 部署的修订版本,用于回滚到之前的版本 v1v2, ...
Progress Deadline Seconds 更新超时时间,如果更新没有在指定时间内完成,将被视为失败 600
Available Replicas 当前可用的 Pod 副本数量 2
Conditions 部署的状态条件,如进度死线超时、可用副本不足等 {"type": "Progressing", "status": "True", "reason": "NewReplicaSetAvailable"}
Update Strategy 部署更新时使用的策略,如重新创建还是原地更新 RecreateOnDelete

这个表格提供了 Kubernetes 部署的关键属性和配置选项。部署是 Kubernetes 中管理无状态应用的重要工具,它支持自动化的声明式更新和回滚。

6.Kubernetes 中的 有状态应用(StatefulSets)

StatefulSets 是用来管理有状态应用的 API 对象,它为每个 Pod 提供了持久的唯一标识,并保证 Pod 的顺序性和替换策略。

属性 描述 示例
StatefulSet Name StatefulSet 的唯一标识符 my-statefulset
Replicas StatefulSet 中 Pod 的副本数量 3
Selector 选择器,用于选择 StatefulSet 中的 Pod {"matchLabels": {"app": "my-app"}}
Template Pod 模板,定义了 Pod 的规格和运行的容器 同上
Volume Claim Template 存储卷声明模板,用于为每个 Pod 提供持久化存储 {"metadata": {"name": "my-volume"}, "spec": {"accessModes": ["ReadWriteOnce"], "resources": {"requests": {"storage": "1Gi"}}}}
Service Name 可选,为 StatefulSet 创建的头部服务的名称 my-service
Pod Management Policy Pod 管理策略,决定如何替换 StatefulSet 中的 Pod OrderedReadyParallel
Update Strategy 更新策略,决定如何更新 StatefulSet 中的 Pod RollingUpdateOnDelete
Partitions 将 StatefulSet 分区,只有指定的分区会被更新 0 (表示更新第一个 Pod)
Headless Service 可选,StatefulSet 是否需要创建无头服务 true 或 false
Min Ready 在更新期间,集群中至少需要有多少个 Pod 处于就绪状态 2

这个表格提供了 Kubernetes StatefulSets 的关键属性和配置选项。StatefulSets 适用于需要持久化存储、唯一网络标识和有序部署的应用,例如数据库。

7.Kubernetes 中的 存储卷(Volumes)

在 Kubernetes 中,存储卷是用来持久化数据的机制,它们可以被挂载到 Pod 中,以便容器化应用可以读写数据。

属性 描述 示例
Name 存储卷的唯一标识符 my-volume
Type 存储卷的类型,例如空目录、主机路径、网络存储等 EmptyDirHostPathPersistentVolumeClaim
Access Modes 存储卷的访问模式,例如可读写、只读等 ReadWriteOnceReadOnlyManyReadWriteMany
Storage Class 存储卷的存储类,用于动态供应存储 defaultfastslow
Capacity 存储卷的容量 1Gi10Gi
Persistent Volume Claim 持久卷声明,用于请求持久化存储 {"apiVersion": "v1", "kind": "PersistentVolumeClaim", "metadata": {"name": "my-pvc"}, "spec": {"accessModes": ["ReadWriteOnce"], "resources": {"requests": {"storage": "1Gi"}}}}
Host Path 存储卷使用的主机路径,适用于 HostPath 类型的存储卷 "/path/to/host/directory"
Empty Dir 存储卷使用的临时目录,适用于 EmptyDir 类型的存储卷 无具体示例,通常由系统自动创建并销毁
ConfigMap 配置映射,用于将配置数据存储为键值对并挂载为卷 {"name": "my-configmap"}
Secret 密钥,用于存储敏感信息并挂载为卷 {"name": "my-secret"}
Mount Path 存储卷在 Pod 内的挂载路径 "/var/lib/data"

这个表格提供了 Kubernetes 存储卷的关键属性和配置选项。存储卷是 Kubernetes 中管理数据持久化的核心机制,它们支持多种类型的存储解决方案,以满足不同应用的需求。

8.Kubernetes 中的 持久卷(Persistent Volumes)

持久卷(PV)是集群中的一块存储,已经由管理员预先配置好,可以被 Pod 使用。与存储卷(Volume)不同,PV 是集群资源,而存储卷是 Pod 的一部分。

属性 描述 示例
PV Name 持久卷的唯一标识符 my-pv
Storage Capacity 持久卷的存储容量 10Gi
Access Modes 持久卷支持的访问模式 ["ReadWriteOnce", "ReadOnlyMany", "ReadWriteMany"]
Reclaim Policy 当持久卷声明(PVC)不再使用时,PV 的回收策略 RetainRecycleDelete
Status 持久卷的当前状态 AvailableBoundReleasedFailed
Storage Class 持久卷的存储类,决定如何供应存储 goldsilverbronze
Volume Mode 持久卷的卷模式,决定存储是文件系统还是块设备 FilesystemBlock
Mount Options 挂载选项,用于调整存储卷的挂载行为 hard, nfsvers=4
Node Affinity 节点亲和性,决定 PV 可以被哪些节点挂载 {"requiredDuringSchedulingIgnoredDuringExecution": {"nodeSelectorTerms": [{"matchExpressions": [{"key": "kubernetes.io/hostname", "operator": "In", "values":["node1", "node2"]}]}]}}

这个表格提供了 Kubernetes 持久卷的关键属性和配置选项。持久卷是 Kubernetes 存储系统中的重要组成部分,它们为 Pod 提供了持久化存储的能力。

9.Kubernetes 中的 配置(ConfigMaps)

ConfigMaps 是用来存储配置信息的 API 对象,它们可以用来为 Pod 提供配置数据。

属性 描述 示例
ConfigMap Name ConfigMap 的唯一标识符 my-configmap
Data 存储配置数据的键值对 {"key1": "value1", "key2": "value2"}
BinaryData 存储二进制数据的键值对 {"file1.txt": "SGVsbG8gV29ybGQh"} (这里是 "Hello, World!" 的 Base64 编码)
Volume Mount 将 ConfigMap 挂载到 Pod 中的路径 "mountPath": "/configs"
Env Variables 将 ConfigMap 中的数据作为环境变量注入到容器中 [{"name": "ENV_VAR_NAME", "valueFrom": {"configMapKeyRef": {"name": "my-configmap", "key": "key1"}}}]
Command Line Arguments 将 ConfigMap 中的数据作为命令行参数传递给容器 "args": ["--my-option", "$(MY_CONFIG_MAP_KEY)"]
Items 将 ConfigMap 中的数据项作为文件内容写入到文件中 "path": "/configs/config-file", "key": "key1", "mode": "0644"
Immutable 标记 ConfigMap 是否不可变,不可变 ConfigMap 不能被更新 true 或 false

这个表格提供了 Kubernetes ConfigMaps 的关键属性和配置选项。ConfigMaps 是管理应用配置的一种方式,它们使得配置与应用代码分离,便于管理和更新。

10.Kubernetes 中的 密钥(Secrets)

Secrets 用于存储敏感信息,如密码、OAuth 令牌和 ssh 密钥。与 ConfigMaps 类似,Secrets 也可以被挂载为卷或注入为环境变量,但它们的数据是加密存储的。

属性 描述 示例
Secret Name Secret 的唯一标识符 my-secret
Type Secret 的类型,表明其用途 Opaque (默认,用于存储随机数据)
Data 存储敏感数据的键值对,值是 Base64 编码 {"password": "cGFzc3dvcmQ=", "username": "dXNlcm5hbWU="} (分别是 "password" 和 "username" 的 Base64 编码)
StringData 存储非二进制敏感数据的键值对 {"password": "mypassword", "username": "myuser"}
Volume Mount 将 Secret 挂载到 Pod 中的路径 "mountPath": "/secrets"
Env Variables 将 Secret 中的数据作为环境变量注入到容器中 [{"name": "DB_PASSWORD", "valueFrom": {"secretKeyRef": {"name": "my-secret", "key": "password"}}}]
Command Line Arguments 将 Secret 中的数据作为命令行参数传递给容器 "args": ["--db-password", "$(MY_SECRET_PASSWORD)"]
Items 将 Secret 中的数据项作为文件内容写入到文件中 "path": "/secrets/db-password", "key": "password", "mode": "0400"
Immutable 标记 Secret 是否不可变 true 或 false

这个表格提供了 Kubernetes Secrets 的关键属性和配置选项。Secrets 是 Kubernetes 中管理敏感信息的重要工具,它们确保了敏感数据的安全性。

11.Kubernetes 中的 命名空间(Namespaces)

命名空间是 Kubernetes 中用于隔离集群资源的一种机制,允许多个用户或多个项目共享同一个 Kubernetes 集群。

属性 描述 示例
Namespace Name 命名空间的唯一标识符 my-namespace
Status 命名空间的状态,如 Active 或 Terminating Active
Phase 命名空间的生命周期阶段 ActiveTerminating
Labels 命名空间的标签,用于组织和选择命名空间 {"project": "my-project", "environment": "dev"}
Annotations 命名空间的注解,用于存储非标识性信息 {"description": "Development environment for my project"}
Resource Quotas 命名空间的资源配额,限制命名空间内资源的使用量 {"hard": {"pods": "10", "services": "5", "replicationcontrollers": "20"}}
Limit Ranges 命名空间的资源限制范围,为命名空间内的 Pod 设置资源请求和限制 {"limits": [{"type": "Container", "defaultRequest": {"cpu": "100m", "memory": "200Mi"}}]}
Network Policies 命名空间的网络策略,定义 Pod 间的网络访问规则 {"podSelector": {}, "ingress": [{"from": [{"podSelector": {}}]}]}

这个表格提供了 Kubernetes 命名空间的关键属性和配置选项。命名空间是 Kubernetes 中实现多租户和资源隔离的关键概念。

12.Kubernetes 中的 资源配额(Resource Quotas)

资源配额是一种 API 对象,用于确保在命名空间内对资源的使用量进行限制和配额管理。

属性 描述 示例
Resource Quota Name 资源配额的唯一标识符 my-quota
Namespace 应用资源配额的命名空间 my-namespace
Scopes 资源配额的适用范围,可以是 Terminating, NotTerminating, BestEffort 等 ["Terminating", "NotTerminating"]
Hard Limits 硬性限制,定义了资源配额的最大使用量 {"pods": "10", "services": "5", "persistentvolumeclaims": "2"}
Used 当前已使用的资源量 {"pods": "3", "services": "2"}
Status 资源配额的状态,如保证了配额的遵守 {"used": {"pods": "3"}, "hard": {"pods": "10"}}

这个表格提供了 Kubernetes 资源配额的关键属性和配置选项。资源配额是 Kubernetes 集群资源管理的重要工具,它们帮助管理员控制资源的过度使用和浪费。

13.Kubernetes 中的 限制范围(Limit Ranges)

限制范围是 Kubernetes 中用来设置命名空间内资源默认请求和限制的 API 对象,它确保了 Pod 可以安全地创建,而不会超出资源配额。

属性 描述 示例
Limit Range Name 限制范围的唯一标识符 my-limitrange
Namespace 应用限制范围的命名空间 my-namespace
Type 限制类型,可以是 Container, Pod, or PersistentVolumeClaim Container
Min 每种资源类型的最小限制 {"cpu": "100m", "memory": "50Mi"}
Max 每种资源类型的最大限制 {"cpu": "4", "memory": "1Gi"}
Default 每种资源类型的默认请求和限制,如果没有指定则使用这些值 {"cpu": "500m", "memory": "200Mi"}
DefaultRequest 每种资源类型的默认请求,Pod 未指定请求时使用这些值 {"cpu": "200m", "memory": "100Mi"}
MaxLimitRequestRatio 每种资源类型的最大请求与限制的比率 {"cpu": "2"} (意味着 CPU 请求不能超过限制的一半)

这个表格提供了 Kubernetes 限制范围的关键属性和配置选项。限制范围帮助管理员设置资源使用的默认值和上限,确保 Pod 在命名空间内的资源使用保持合理。

14.Kubernetes 中的 节点选择器(Node Selectors)

节点选择器是标签选择器,用于控制 Pod 应该调度到哪些节点上。它允许用户根据节点的标签来选择调度目标

属性 描述 示例
Pod Spec Pod 配置规范,其中包含节点选择器 {"spec": {"nodeSelector": {"key": "value"}}}
Key 节点标签的键,用于匹配节点 "disktype"
Value 节点标签的值,与键一起定义选择条件 "ssd"
Operator 选择器操作符,用于定义匹配规则 InNotInExistsDoesNotExistGtLt
Effect 污点的效应,决定 Pod 调度行为 NoSchedulePreferNoScheduleNoExecute

示例:使用节点选择器调度Pod

 假设我们有一些带有特定标签的节点,比如标签 "disktype": "ssd",我们可以使用节点选择器来确保 Pod 调度到这些节点上:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: my-image
  nodeSelector:
    disktype: "ssd"  # 节点选择器,确保 Pod 调度到带有 "disktype=ssd" 标签的节点

节点选择器是 Kubernetes 调度策略的重要组成部分,它们使得用户可以根据节点的特征来调度 Pod。

15.Kubernetes 中的 亲和性规则(Affinity Rules)

亲和性规则允许 Pod 指定它们希望被调度到的节点类型,或者它们希望与其他 Pod 保持或避免的相对位置

属性 描述 示例
Pod Affinity Pod 亲和性,指定 Pod 应该调度到具有特定标签的节点上 {"podAffinity": {"requiredDuringSchedulingIgnoredDuringExecution": [{"labelSelector": {"matchExpressions": [{"key": "app", "operator": "In", "values": ["my-app"]}]}, "topologyKey": "kubernetes.io/hostname"}]}}
Pod Anti-Affinity Pod 反亲和性,指定 Pod 不应该调度到具有特定标签的节点上 {"podAntiAffinity": {"requiredDuringSchedulingIgnoredDuringExecution": [{"labelSelector": {"matchExpressions": [{"key": "app", "operator": "In", "values": ["my-app"]}]}, "topologyKey": "kubernetes.io/hostname"}]}}
Node Affinity 节点亲和性,指定 Pod 应该调度到具有特定标签的节点上 {"nodeAffinity": {"requiredDuringSchedulingIgnoredDuringExecution": {"nodeSelectorTerms": [{"matchExpressions": [{"key": "disktype", "operator": "In", "values": ["ssd"]}]}]}}}
Preferred During Scheduling Ignored During Execution 优先亲和性,指定 Pod 优先调度到满足条件的节点上,但如果调度失败,可以忽略 {"podAffinity": {"preferredDuringSchedulingIgnoredDuringExecution": [{"weight": 1, "preference": {"matchExpressions": [{"key": "app", "operator": "In", "values": ["my-app"]}]}}]}}
Topology Key 拓扑键,定义了亲和性规则作用的域,如节点名称或区域 "topologyKey": "kubernetes.io/hostname"

示例:使用亲和性规则调度Pod

 假设我们希望确保属于同一个应用的 Pod 被调度到不同的节点上以提高容错性,可以使用 Pod 反亲和性:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: my-image
  affinity:
    podAntiAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchExpressions:
          - key: app
            operator: In
            values:
            - my-app
        topologyKey: kubernetes.io/hostname

亲和性规则是 Kubernetes 调度策略的重要组成部分,它们提供了灵活的调度选项,帮助用户优化应用的部署结构。

16.Kubernetes 中的 标签(Labels)

标签是附加到 Kubernetes 资源上的键值对,用于组织和选择资源集合。它们是 Kubernetes 中资源选择和分组的一种机制。

属性 描述 示例
Key 标签的键,用于标识资源的分类或属性 "app""environment""tier"
Value 标签的值,与键一起定义资源的特征 "my-app""production""frontend"
Usage 标签的使用场景,如选择器、组织资源等 用于选择特定应用的所有 Pod
Syntax 标签的语法规则,键和值的命名规范 键以字母或数字开头,可包含 -_. 等
Character Limit 标签键和值的字符限制 键最多63个字符,值最多253个字符
Label Selectors 通过标签选择资源的查询语法 {matchLabels: {"app": "my-app"}, matchExpressions: [{key: "environment", operator: "In", values: ["production", "staging"]}}

这个表格提供了 Kubernetes 标签的关键属性和配置选项。标签是 Kubernetes 中资源管理和调度的基础工具,它们允许用户以灵活的方式组织和查询资源。

示例:使用标签选择Pod

假设我们有一个名为 my-app 的应用,我们可以使用标签选择器来选择所有属于这个应用的 Pod:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
  labels:
    app: my-app
    environment: production
spec:
  containers:
  - name: my-container
    image: my-image

 使用标签选择器查询:

fieldSelector: {}
matchLabels:
  app: my-app
matchExpressions:
- {key: environment, operator: In, values: [production]}
17.Kubernetes 中的 注解(Annotations)

注解是附加到 Kubernetes 资源上的键值对,与标签(Labels)不同,注解不用于资源选择,而用于存储可能对外部系统有用的辅助信息。

属性 描述 示例
Key 注解的键,用于标识注解的类型或用途 "kubectl.kubernetes.io/last-applied-configuration"
Value 注解的值,存储与键相关的信息或数据 "{...}" (JSON 格式的配置数据)
Usage 注解的使用场景,如存储额外的元数据、版本控制信息等 存储配置的最后一次应用状态
Syntax 注解的语法规则,键和值的命名规范 键和值都可以包含更广泛的字符集,包括空格和特殊字符
Character Limit 注解键和值的字符限制 键最多63个字符,值没有特定的限制,但应保持合理长度
Purpose 注解的主要目的,如辅助调试、提供额外的上下文信息 用于存储由自动化工具生成的信息,如 Helm 或 kubectl apply

这个表格提供了 Kubernetes 注解的关键属性和配置选项。注解是 Kubernetes 资源的元数据,它们可以被用来存储各种非识别性信息,以供外部工具或系统使用。

示例:使用注解存储配置的最后一次应用状态:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
  annotations:
    "kubectl.kubernetes.io/last-applied-configuration": |
      {
        "apiVersion": "v1",
        "kind": "Pod",
        "metadata": {
          "name": "my-pod"
        },
        "spec": {
          "containers": [
            {
              "name": "my-container",
              "image": "my-image:latest"
            }
          ]
        }
      }
spec:
  containers:
  - name: my-container
    image: my-image:latest
18.Kubernetes 中的 命令行工具(kubectl)

kubectl 是 Kubernetes 集群的命令行接口,用于与集群交互和管理资源。

命令/选项 描述 示例
get 获取资源的列表 kubectl get pods
describe 显示某个资源的详细信息 kubectl describe pod my-pod
create 创建新的资源 kubectl create -f my-pod.yaml
delete 删除资源 kubectl delete pod my-pod
apply 应用配置文件到集群上 kubectl apply -f my-config.yaml
edit 编辑资源的配置 kubectl edit pod my-pod
logs 获取容器的日志 kubectl logs my-pod
exec 在容器中执行命令 kubectl exec my-pod -- ls /
port-forward 将一个或多个本地端口转发到集群中的 Pod kubectl port-forward my-pod 5000:5000
scale 调整 Deployment、StatefulSet 或 ReplicationController 的副本数量 kubectl scale deployment my-deployment --replicas=3
top 显示资源(如 Pod)的资源使用情况 kubectl top pod
autoscale 自动根据 CPU 使用情况调整副本数量 kubectl autoscale deployment my-deployment --min=1 --max=10 --cpu-percent=80
config 修改 kubeconfig 配置文件 kubectl config set-context my-context --cluster=example

这个表格提供了 Kubernetes kubectl 命令行工具的关键命令和选项。kubectl 是与 Kubernetes 集群交互的主要方式,提供了丰富的命令来管理集群资源。

示例:使用kuberctl命令行工具

列出默认命名空间下的所有Pod

 kubectl get pods

 查看名为 my-pod 的 Pod 的详细信息:

kubectl describe pod my-pod

 应用配置文件 my-config.yaml 到集群:

kubectl apply -f my-config.yaml

 编辑名为 my-pod 的 Pod:

kubectl edit pod my-pod

 获取名为 my-pod 的 Pod 的日志:

kubectl logs my-pod

 在 my-pod Pod 中执行 ls / 命令:

kubectl exec my-pod -- ls /

19. Kubernetes 中的 集群安全

集群安全涉及到多个方面,包括网络策略、服务账户、角色绑定、准入控制等,以确保集群的稳定性和安全性。

安全方面 描述 示例
Network Policies 定义 Pod 间的网络访问规则 允许特定命名空间的 Pod 访问特定的端口
Service Accounts 为 Pod 提供的账户,用于与 Kubernetes API 交互 创建默认服务账户或自定义服务账户并限制其权限
Role-Based Access Control (RBAC) 基于角色的访问控制,定义谁可以访问哪些资源和操作 创建角色和角色绑定,限制用户和组的权限
Admission Controllers 准入控制器,控制资源对象的创建和更新 使用 PodSecurityPolicy 或 MutatingAdmissionWebhook 等
Secrets Management 管理敏感信息,如密码和密钥 使用 Kubernetes Secrets 存储加密的敏感数据
Security Contexts Pod 和容器的安全上下文,定义特权和权限 设置 runAsUserrunAsGroupfsGroup 等
Pod Security Policies 定义 Pod 级别的安全策略,如 SELinux 策略、AppArmor 策略等 创建 Pod 安全策略并将其应用于命名空间或 Pod
Resource Quotas 限制命名空间内资源的使用量 设置资源配额以防止资源耗尽
Limit Ranges 设置资源请求和限制的范围 为命名空间内的所有 Pod 设置 CPU 和内存的默认和最大限制
Namespaces Isolation 通过命名空间隔离资源和用户 使用不同的命名空间来隔离开发、测试和生产环境
Audit Logs 审核日志,记录用户和系统操作 开启审核日志功能并定期审查

这个表格提供了 Kubernetes 集群安全的关键方面和配置选项。集群安全是 Kubernetes 管理的重要部分,涉及到集群的方方面面,确保集群的稳定运行和资源的合理使用。

示例:使用网络策略限制Pod访问

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-same-namespace
spec:
  podSelector: {}
  ingress:
  - from:
    - podSelector: {}

这个 YAML 定义了一个网络策略,允许同一命名空间内的 Pod 相互访问。

20.高级调度

Kubernetes 的调度器支持多种高级调度功能,包括节点亲和性、污点和容忍度等。

节点污点(Taints)

属性 描述 示例
Key 污点的键,标识污点的类型 "dedicated"
Value 污点的值,提供更多信息 "for-team-x"
Effect 污点的效应,决定如何处理不容忍该污点的 Pod NoSchedulePreferNoScheduleNoExecute

污点示例:

apiVersion: v1
kind: Node
metadata:
  name: my-node
spec:
  taints:
  - key: "dedicated"
    value: "for-team-x"
    effect: "NoSchedule"
21.集群联邦(Federation)

Kubernetes 集群联邦允许用户在多个集群上运行和管理跨区域的 Kubernetes 应用。

集群联邦组件

组件 描述 示例
Cluster 联邦中的单个集群 clusters.my-federation
Federated Service 跨多个集群提供服务发现的 Service apiVersion: federation/v1beta1 kind: FederatedService
22.自动化测试和部署

Kubernetes 支持自动化测试和部署流程,包括 CI/CD 流程。

CI/CD工具集成

工具 描述 示例
Jenkins 持续集成工具,可以与 Kubernetes 集成实现自动化部署 jenkins-x
Helm 包管理工具,简化 Kubernetes 应用的部署和升级 helm install my-chart
23.监控和日志

Kubernetes 提供了监控和日志收集的机制,以便于集群和应用的性能分析。

监控和日志工具

工具 描述 示例
Prometheus 开源监控系统,用于 Kubernetes 集群的监控 prometheus.io/scrape: "true"
Elasticsearch, Fluentd, and Kibana (EFK) 日志收集和分析堆栈 fluentd 配置以收集 Kubernetes 日志
24.服务网格(Service Mesh)

服务网格提供了微服务间的网络控制、监控和安全性。

服务网格技术

技术 描述 示例
Istio 服务网格框架,提供流量管理、安全策略和可观察性 apiVersion: install.istio.io/v1alpha1 kind: IstioOperator
25.存储和网络插件

Kubernetes 支持多种存储和网络插件,以适应不同的基础设施需求。

存储插件

插件 描述 示例
Rook 为 Kubernetes 提供存储编排的框架 rook/rook:v1.0

网络插件

插件 描述 示例
Calico 为 Kubernetes 提供网络策略的实现 calico/kube-controllers:v3.3

此外Kubernetes 支持多种高级网络特性,如 Ingress 控制器、Egress 选择器等。

Ingress控制器

特性 描述 示例
Ingress 管理外部访问集群内服务的规则 networking.k8s.io/v1beta1
Ingress 控制器 实现 Ingress 规则的控制器 如 Nginx Ingress 控制器

Egress选择器

特性 描述 示例
Egress 选择器 定义 Pod 可以访问的外部网络 使用网络策略的 Egress 规则

学不完根本学不完! 

相关推荐

  1. Kubernetes学习总结知识汇总

    2024-06-11 08:52:01       19 阅读
  2. 有关HTML知识汇总总结

    2024-06-11 08:52:01       35 阅读
  3. Redis知识汇总表格总结

    2024-06-11 08:52:01       19 阅读
  4. Nginx知识汇总表格总结

    2024-06-11 08:52:01       18 阅读
  5. Git知识汇总表格总结

    2024-06-11 08:52:01       16 阅读
  6. Docker知识汇总表格总结

    2024-06-11 08:52:01       14 阅读
  7. Flask知识汇总表格总结

    2024-06-11 08:52:01       12 阅读
  8. 深度学习知识总结

    2024-06-11 08:52:01       45 阅读
  9. 深度学习知识总结

    2024-06-11 08:52:01       18 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-11 08:52:01       5 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-11 08:52:01       5 阅读
  3. 在Django里面运行非项目文件

    2024-06-11 08:52:01       4 阅读
  4. Python语言-面向对象

    2024-06-11 08:52:01       6 阅读

热门阅读

  1. hw meta10 adb back up DCIM

    2024-06-11 08:52:01       20 阅读
  2. 【Spring Boot】过滤敏感词的两种实现

    2024-06-11 08:52:01       14 阅读
  3. 鼠标侧键映射虚拟桌面切换 —— Win11

    2024-06-11 08:52:01       18 阅读
  4. YOLOv5的predict.py逐句讲解(学习笔记)

    2024-06-11 08:52:01       22 阅读
  5. 递归

    递归

    2024-06-11 08:52:01      24 阅读
  6. OpenZeppelin Ownable合约 怎么使用

    2024-06-11 08:52:01       15 阅读