📜  Kubernetes——Kubernetes 的单体架构(1)

📅  最后修改于: 2023-12-03 14:43:43.325000             🧑  作者: Mango

Kubernetes——Kubernetes 的单体架构

简介

Kubernetes 是一款开源的容器编排系统,它提供了一组用于自动化、部署、扩展和管理容器化应用程序的工具。它能够管理运行在大规模集群中的容器化应用,并提供了可扩展、弹性、高可用和高效的集群管理方式。

Kubernetes 的单体架构是其中的一种架构模式,这种模式通常用于小型集群或一个虚拟机上运行的 Kubernetes。在这种架构中,所有组件都运行在同一个进程中,共用同一个 API 服务,可以是 kube-apiserver 或是 etcd

以下是 Kubernetes 单体架构的组件:

  • kube-apiserver:提供 Kubernetes API 服务。
  • etcd:提供一个分布式键值存储服务,用于 K8s 资源对象的持久化存储。
  • kube-scheduler:调度器,负责把 Pod 调度到可用的节点上。
  • kube-controller-manager:控制器管理器,负责处理 Kubernetes 的控制器,如 ReplicaSet、Deployment、DaemonSet 等。
  • kubelet:代理程序,运行在 Kubernetes Node 上,负责管理和运行 Pod。
  • kube-proxy:网络代理,为 Kubernetes Service 提供网络代理和负载均衡功能。
架构特点

Kubernetes 的单体架构有以下特点:

  • 所有组件运行在同一个进程中,共用同一个 API 服务。
  • 架构简单、部署方便,适合小规模集群和评估、测试环境使用。
  • 相比于集群方式,单体架构的性能更高,且不受网络延迟等因素影响。
部署示例

以下是部署 Kubernetes 单体架构的示例。

  1. 安装 Docker 和 Kubernetes。

  2. 创建一个 Kubernetes 的单节点集群。可以使用 kubeadm 工具来完成,在安装 Kubernetes 后,执行如下命令即可:

    kubeadm init --pod-network-cidr=10.244.0.0/16
    

    --pod-network-cidr 选项是网络插件 flannel 所需要的 CIDR 子网,请确保不要与本地网络子网冲突。

  3. 安装 kubectl 工具,以便可以访问 Kubernetes API 服务。

  4. 运行以下命令,查看 Kubernetes 集群的状态:

    kubectl get nodes
    

    如果一切顺利,应该会看到集群中只有一个节点。

  5. 部署一个 StatefulSet:

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: web
    spec:
      serviceName: "web"
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.7.9
            ports:
            - containerPort: 80
              name: web
            volumeMounts:
            - name: www
              mountPath: /usr/share/nginx/html
      volumeClaimTemplates:
      - metadata:
          name: www
        spec:
          accessModes: [ "ReadWriteOnce" ]
          resources:
            requests:
              storage: 2Gi
    

    这个 YAML 文件定义了一个名为 web 的 StatefulSet,使用了一个名为 nginx 的容器镜像。其中,replicas 指定为 3,表示我们要部署 3 个 Nginx 容器。volumeClaimTemplates 声明了一个名为 www 的持久化存储卷。

  6. 部署一个 Service:

    apiVersion: v1
    kind: Service
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      type: NodePort
      selector:
        app: nginx
      ports:
      - name: web
        port: 80
        targetPort: web
    

    这个 YAML 文件定义了一个名为 nginx 的 Service,使用了 NodePort 的类型。selector 字段指定了要选择哪些 Pod。

总结

Kubernetes 的单体架构是一种简单、高性能的部署方式,适合小规模集群或者测试、评估环境使用。这种架构虽然相对简单,但是它也允许我们使用所有 Kubernetes 的功能,并且具有可扩展性和弹性。