Kubernetes笔记本基础.md 8.2 KB


notion-id: 4244264d-b882-4ae7-9a0f-cc467923a9

![[Notion/技术支持/Kubernetes/attachments/Untitled.png]]

[!note]+ ## HostNetwork 创建POD的时候开启hostNetwork这个POD就会只用NODE主机的IP地址。

Kubernetes 本身设计为单一集群。Kubernetes的工作方式是基于声明式配置 一个Kubernetes集群由一个或多个工作节点(物理或虚拟机)和一个控制面板节点组成。每个节点都会运行Pod,这些Pod是在它们之间进行调度的。你不能在单一的Kubernetes部署中创建多个集群。

另一种方法是使用一种称为多集群管理的模式,这涉及到将多个Kubernetes集群联合在一起,并使用一种集中式的工具或框架(比如Rancher,Google Anthos或者AWS EKS Anywhere)来管理它们。这样可以更好地扩展和管理跨多个地域或云的工作负载,同时仍然保持每个集群的独立性和隔离性。

此外,Kubernetes项目还在开发一种名为Cluster API的项目,这是一个能够以声明式的方式创建、配置和管理Kubernetes集群的API。这样可以使得Kubernetes集群的管理和扩展变得更加容易,同时也为跨多个集群的工作负载管理提供了可能性。

所以,总的来说,你不能在一个Kubernetes集群中创建多个集群,但你可以部署多个独立的Kubernetes集群,并有可能通过某些工具或技术来联合管理这些集群。


三个概念的层次关系:

  • Kubernetes集群(Cluster):最顶层,代表了所有的节点和这些节点上运行的Pod。
  • 节点(Node):集群中的单个服务器,可以运行一个或多个Pod。
    • 创建NodePort Service并不是针对某一个节点做配置,而是在整个集群层面上对外提供访问的方式。在集群的所有节点上打开这个端口。
  • Pod:在节点上运行的最小单元,包含一个或多个容器。一个Pod内的容器共享网络和存储资源。
    • 节点(Node)上可以运行的Pod数量和每个Pod中可以运行的容器数量取决于你的应用程序的需求和你的Kubernetes配置,基本只配置一个容器。

因此,你可以把Kubernetes看作是一个多级系统,它允许你在多个服务器上以容器化的方式运行和管理应用程序。


容器之间和Pod之间都可以相互通信,通信方式和机制有所不同。

节点存在污点(taint) , pod可以配置污点容忍度(tolerations)

不同的kind:StatefulSet、Deployment

  1. 状态管理:如前所述,StatefulSet 是为了管理有状态的应用设计的,例如数据库。每个 StatefulSet 中的 Pod 都有一个稳定的、持久的标识符,这使得它们能够维持在重启和重新调度的情况下的状态和网络位置。相比之下,Deployment 控制的 Pod 是相互交换的,没有持久的标识符。
  2. 更新策略:StatefulSet 支持有序的、一次一个的更新和回滚。这对于需要保持数据一致性的有状态应用来说非常重要。相比之下,Deployment 在更新时默认会尽可能快地进行,可以同时更新多个 Pod。
  3. 存储:StatefulSet 通过 Persistent Volume Claim(PVC)模板为每个 Pod 创建独立的 Persistent Volume(PV)。这意味着每个 Pod 都有自己的存储,这对于许多有状态的应用来说是必要的。而 Deployment 通常不会为每个 Pod 创建独立的存储。
  4. StatefulSet 其中的Service.clusterIP为none,并且会创建出序号。
  5. ![[Notion/技术支持/Kubernetes/attachments/Untitled 1.png]]

存储PV和PVC 之前必须有一个相同的类

  1. 创建持久卷声明(Persistent Volume Claim,PVC)之前,需要确保有一个合适的存储类(StorageClass)可用,以便PVC可以绑定到正确的持久卷(Persistent Volume,PV)上。
  2. 创建一个持久卷(Persistent Volume,PV):这是一个Kubernetes集群中的存储资源,它可以独立于Pod而存在。您可以通过定义PV规格来指定存储容量、访问模式以及存储的位置等信息。
  3. 创建一个持久卷声明(Persistent Volume Claim,PVC):这是一个用于请求特定存储资源的对象。PVC定义了Pod对存储资源的需求,包括容量和访问模式等。Kubernetes会根据PVC的需求来动态地绑定到合适的PV上。和POD的YAML一起声明的
  4. 创建一个Pod:在Pod的定义中,您可以指定所需的容器镜像和其他配置信息。在Pod中,您需要将PVC挂载到Pod中的容器,以便容器可以访问PV提供的存储。

动态存储供应程序(Dynamic Storage Provisioners)与非动态存储供应的主要区别是:

  • 动态存储供应
    • 当请求一个PersistentVolumeClaim (PVC)时,系统自动为你创建对应的PersistentVolume (PV)。
    • 无需管理员预先创建PV。系统根据PVC请求和指定的StorageClass自动进行供应。
  • 非动态存储供应
    • 管理员必须手动预先创建PV。
    • 当请求PVC时,系统尝试与现有的、未被使用的PV进行绑定。

简而言之,动态存储供应自动为你创建PV,而非动态存储需要你手动创建PV。

POD部署Node选择的规则

配置Pod时没有显式地定义**Node Selector**、亲和性(**Affinity**)、反亲和性(**Anti-Affinity**)等参数时,Kubernetes调度器会自动选择适合的Node节点来部署Pod。

Pod和Controller是通过Lable标签绑定的

apiVersion: v1
kind: Service
metadata:
  name: mysql-service 
  labels:
    app: mysql     #控制器名称
spec:
# type: NodePort                                     
  type: LoadBalancer                                 
  ports:
    - port: 3306
      nodePort: 30001
    # - port: 3307
    #   nodePort: 30002
  selector:        #选择控制器
    app: mysql     #控制器名称

修改nodePort范围

调整API服务器配置:

如果您使用kubeadm部署Kubernetes,通常API服务器的置是位于
/etc/kubernetes/manifests/kube-apiserver.yaml。
您需要在此文件中找到spec.containers.command部分
并为kube-apiserver容器添加或修改--service-node-port-range参数。

例如,要允许1000-32767的端口范围,添加以下内容:

--service-node-port-range=1000-32767

自动重启API服务器:
当您编辑/etc/kubernetes/manifests/kube-apiserver.yaml文件时,
kubelet会注意到这个更改并重新启动API服务器容器。

重新创建或更新服务:

现在您应该可以使用所需的端口范围创建NodePort服务了。您可以指定nodePort为4040。

请注意,打开这样的端口范围可能会有安全隐患。确保您的防火墙和其他安全措施已经配置,以防止不必要的访问。

DaemonSet的作用

DaemonSet 是 Kubernetes 中的一个控制器(Controller),用于确保在集群中的每个节点上都运行一个副本(Pod)的实例。它通常用于在集群中的每个节点上部署守护进程,例如监控代理、日志收集器等。 DaemonSet 的特点和用途如下:

  1. 在每个节点上运行:DaemonSet 会自动在每个节点上创建一个 Pod 的副本,确保每个节点都运行指定的 Pod。
  2. 一直运行:与其他控制器(如 Deployment)不同,DaemonSet 的目标是持续运行,并在新节点加入集群时自动调度 Pod。
  3. 节点动态变化:当节点加入或离开集群时,DaemonSet 会自动地在新节点上创建 Pod 或者在节点离开时删除 Pod,从而保持每个节点上都有一个 Pod 实例。
  4. 部署守护进程:由于每个节点都运行一个 Pod,因此 DaemonSet 经常用于部署守护进程,如监控代理(例如 Prometheus Node Exporter)、日志收集器(例如 Fluentd 或 Filebeat)等。
  5. 节点标签选择:您可以使用节点的标签来选择在哪些节点上运行 DaemonSet 创建的 Pod。这使得您可以有选择地在特定节点上运行守护进程。

使用 DaemonSet 可以确保在整个集群中每个节点上运行相同的 Pod 副本,从而实现集群范围的服务或守护进程的部署。无论您的集群规模是大还是小,DaemonSet 都可以保证每个节点上都有相应的 Pod 运行,从而满足特定的应用场景和需求。

一次性任务job和定时任务cronjob