📅  最后修改于: 2023-12-03 14:43:43.325000             🧑  作者: Mango
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 的单体架构有以下特点:
以下是部署 Kubernetes 单体架构的示例。
安装 Docker 和 Kubernetes。
创建一个 Kubernetes 的单节点集群。可以使用 kubeadm
工具来完成,在安装 Kubernetes 后,执行如下命令即可:
kubeadm init --pod-network-cidr=10.244.0.0/16
--pod-network-cidr
选项是网络插件 flannel
所需要的 CIDR 子网,请确保不要与本地网络子网冲突。
安装 kubectl
工具,以便可以访问 Kubernetes API 服务。
运行以下命令,查看 Kubernetes 集群的状态:
kubectl get nodes
如果一切顺利,应该会看到集群中只有一个节点。
部署一个 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
的持久化存储卷。
部署一个 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 的功能,并且具有可扩展性和弹性。