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 PriorityPod 的优先级,影响节点故障时 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 NamePod 的唯一标识符my-pod
Pod StatusPod 的当前状态RunningPendingSucceededFailedUnknown
Pod IPPod 的网络 IP 地址10.0.0.1
Restart PolicyPod 的重启策略AlwaysOnFailureNever
ContainersPod 中的容器列表[name: "container-1", image: "nginx:latest"]
VolumesPod 中挂载的存储卷[name: "my-volume", configMap: {name: "my-config"}]
Init ContainersPod 中的初始化容器,用于执行启动前的任务[name: "init-container", image: "busybox", command: ["sh", "-c", "echo hello"]]
Pod LabelsPod 的标签,用于选择器匹配和组织[key: "app", value: "my-app"]
Pod AnnotationsPod 的注解,用于存储非标识性信息[{"key": "description", "value": "My application pod"}]
Pod AffinityPod 亲和性,用于控制 Pod 调度到特定节点的偏好{"podAffinity": {"requiredDuringSchedulingIgnoredDuringExecution": [{"labelSelector": {"matchExpressions": [{"key": "app", "operator": "In", "values": ["my-app"]}]}, "topologyKey": "kubernetes.io/hostname"}]}}
Pod Anti-AffinityPod 反亲和性,用于避免 Pod 被调度到相同节点上{"podAntiAffinity": {"requiredDuringSchedulingIgnoredDuringExecution": [{"labelSelector": {"matchExpressions": [{"key": "app", "operator": "In", "values": ["my-app"]}]}, "topologyKey": "kubernetes.io/hostname"}]}}
Pod Priority ClassPod 的优先级类,影响 Pod 调度和节点故障时的重启顺序priorityClassName: high-priority
Resource RequestsPod 请求的资源量,用于调度和保证 Pod 运行的资源{"requests": {"cpu": "500m", "memory": "256Mi"}}
Resource LimitsPod 限制的资源量,用于限制 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 PortPod 端口,服务将转发到 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会话亲和性,控制客户端的连接是否总是路由到同一台 PodClientIP
External Traffic Policy外部流量策略,控制是否只路由到本地节点的 PodLocalCluster
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"}}
TemplatePod 模板,定义了 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 NameStatefulSet 的唯一标识符my-statefulset
ReplicasStatefulSet 中 Pod 的副本数量3
Selector选择器,用于选择 StatefulSet 中的 Pod{"matchLabels": {"app": "my-app"}}
TemplatePod 模板,定义了 Pod 的规格和运行的容器同上
Volume Claim Template存储卷声明模板,用于为每个 Pod 提供持久化存储{"metadata": {"name": "my-volume"}, "spec": {"accessModes": ["ReadWriteOnce"], "resources": {"requests": {"storage": "1Gi"}}}}
Service Name可选,为 StatefulSet 创建的头部服务的名称my-service
Pod Management PolicyPod 管理策略,决定如何替换 StatefulSet 中的 PodOrderedReadyParallel
Update Strategy更新策略,决定如何更新 StatefulSet 中的 PodRollingUpdateOnDelete
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 NameConfigMap 的唯一标识符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 NameSecret 的唯一标识符my-secret
TypeSecret 的类型,表明其用途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 或 TerminatingActive
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 PersistentVolumeClaimContainer
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 SpecPod 配置规范,其中包含节点选择器{"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 AffinityPod 亲和性,指定 Pod 应该调度到具有特定标签的节点上{"podAffinity": {"requiredDuringSchedulingIgnoredDuringExecution": [{"labelSelector": {"matchExpressions": [{"key": "app", "operator": "In", "values": ["my-app"]}]}, "topologyKey": "kubernetes.io/hostname"}]}}
Pod Anti-AffinityPod 反亲和性,指定 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将一个或多个本地端口转发到集群中的 Podkubectl 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 ContextsPod 和容器的安全上下文,定义特权和权限设置 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污点的效应,决定如何处理不容忍该污点的 PodNoSchedulePreferNoScheduleNoExecute

污点示例:

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跨多个集群提供服务发现的 ServiceapiVersion: 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 规则

学不完根本学不完! 

  • 20
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值