[Updating...]

怎么会是呢

似乎工作内容有涉及到 Kubernetes,所以先开始看一下

在网上大致了解了一下,似乎学习 Kubernetes 的最佳方式是通过实践。反正万事开头难,先简单入门一下,以后看情况具体深入学习

1. Kubernetes 是什么

Kubernetes 是一个开源的容器编排引擎,它可以自动化地部署、扩展和操作容器化应用程序(例如 Docker 容器)。Kubernetes 是由 Google 设计并捐赠给 Cloud Native Computing Foundation(CNCF)管理的。

2. Kubernetes 组件

Kubernetes 由一组核心组件构成

  • node:集群中的一个节点,可以是物理机,也可以是虚拟机
  • pod:是 Kubernetes 的最小工作单元,是一个或多个容器的集合,创建了容易的运行环境,共享网络和存储资源

其中一个 node 上可以有多个 pod,一个 pod 里可以有多个容器(但通常只有一个,除非 pod 之间高度耦合)。

在 node 中,每一个 pod 都有一个 IP 地址,但 IP 地址不固定,当 pod 重启或者被重新调度时,IP 地址会发生变化。

  • service (svc):是一个抽象概念,定义了一个逻辑服务,通常指后端的一组 pod。在 node 内部提供统一的访问入口,可以通过 service 的 IP 和端口访问后端的 pod。
  • Ingress:是对服务的外部访问入口,将外部请求转发到内部。可以通过 Ingress 控制流量的访问规则,实现负载均衡、SSL 终结等功能。
  • ConfigMap:用来存储配置信息(类似环境变量)
  • secret:用来存储敏感信息,如密码、token 等,但只是 base64 编码,不是加密
  • volume (vol):用来持久化存储数据,包括本地存储、网络存储等

高可用性:Kubernetes 通过多副本的方式保证服务的高可用性,当某个 pod 发生故障时,Kubernetes 会自动重启 pod,或者将 pod 调度到其他 node 上。

  • Deployment (deploy):用来定义 pod 的副本数量和更新策略,当 pod 发生故障时,Deployment 会自动重启 pod,或者将 pod 调度到其他 node 上。
  • StatefulSet (sts):类似 Deployment,用来定义有状态的 pod(例如数据库之间的一致性问题)

3. Kubernetes 架构

Kubernetes 采用了 master-worker 的架构,master 负责集群的管理,worker 负责容器的运行。

在每个 worker node 上通常有三个组件:

  • kubelet:管理 node 上的 pod,确保 pod 运行正常,与 master node 的 kube-apiserver 通信
  • kube-proxy(可选):负责 pod 之间的代理、网络通信,实现负载均衡
  • container runtime:容器运行时,例如 Docker 等

接下来是 master node,通常称为控制平面(Control plane),包含以下组件:

  • kube-apiserver:提供 API 服务,用来管理集群的资源
  • kube-scheduler:调度器,负责 pod 的调度
  • kube-controller-manager:运行控制器,确保集群的状态符合预期
  • etcd:高可用 key-value 存储,用来存储集群的状态信息
  • cloud-controller-manager(可选):用来管理云服务提供商的资源
Control plane

4. 环境搭建

minikube 是一个在本地运行 Kubernetes 集群的工具,可以用来学习和开发 Kubernetes 应用

minikube 是一个单节点的 Kubernetes 集群

Arch Linux 安装 minikube(使用 paru):

1
paru -S minikube

注意可能需要先安装 docker 并启用。在 wsl 中使用 docker 时,直接在 Windows 中安装 docker desktop 即可。

  • minikube version:查看 minikube 版本
  • minikube start:启动 minikube 集群
  • minikube status:查看 minikube 集群状态
  • minikube stop:停止 minikube 集群
  • minikube delete:删除 minikube 集群

minikube 启动后,可以使用 kubectl 命令来进行交互。

  • kubectl get nodes:查看集群中的节点

同样我们也可以使用 multipass(虚拟机管理) + k3s 来搭建一个本地的 Kubernetes 多节点集群

其它的还有一些在线网站提供的环境,如

5. kubectl 部分常用命令

  • kubectl get nodes:查看集群中的节点
  • kubectl get pods:查看 pod
  • kubectl get svc:查看 service
  • kubectl get all:查看所有资源
  • kubectl run:创建一个 pod
  • kubectl create:创建资源
  • kubectl edit:编辑资源
  • kubectl logs pod-name:查看 pod 的日志
  • kubectl exec -it pod-name -- /bin/bash:进入 pod 的 shell
  • kubectl delete:删除资源

此外,也可以利用可视化工具来管理 Kubernetes 集群,如 Portainer