Minikube-创建集群
简介
学习和复现一些小练习,从最基础的开始捏。从最基本的使用 K8S 开始,通过使用 Minikube 创建集群。
学习地址链接:https://kubernetes.io/zh-cn/docs/tutorials/kubernetes-basics/create-cluster/cluster-intro/
Kubernetes 集群
Kubernetes 协调一个高可用计算机集群,每个计算机作为独立单元互相连接工作。 Kubernetes 中的抽象允许你将容器化的应用部署到集群,而无需将它们绑定到某个特定的独立计算机。为了使用这种新的部署模型,应用需要以将应用与单个主机分离的方式打包:它们需要被容器化。与过去的那种应用直接以包的方式深度与主机集成的部署模型相比,容器化应用更灵活、更可用。 Kubernetes 以更高效的方式跨集群自动分发和调度应用容器。 Kubernetes 是一个开源平台,并且可应用于生产环境。
一个 Kubernetes 集群包含两种类型的资源:
- Control Plane 调度整个集群
- Nodes 负责运行应用
Control Plane 负责管理整个集群。 Control Plane 协调集群中的所有活动,例如调度应用、维护应用的所需状态、应用扩容以及推出新的更新。
Node 是一个虚拟机或者物理机,它在 Kubernetes 集群中充当工作机器的角色。每个Node都有 Kubelet , 它管理 Node 而且是 Node 与 Control Plane 通信的代理。 Node 还应该具有用于处理容器操作的工具,例如 Docker 或 rkt 。处理生产级流量的 Kubernetes 集群至少应具有三个 Node,因为如果一个 Node 出现故障其对应的 etcd 成员和控制平面实例都会丢失,并且冗余会受到影响。 你可以通过添加更多控制平面节点来降低这种风险 。
Control Plane 管理集群,Node 用于托管正在运行的应用。
在 Kubernetes 上部署应用时,你告诉 Control Plane 启动应用容器。 Control Plane 就编排容器在集群的 Node 上运行。 Node 使用 Control Plane 暴露的 Kubernetes API 与 Control Plane 通信。终端用户也可以使用 Kubernetes API 与集群交互。
Kubernetes 既可以部署在物理机上也可以部署在虚拟机上。你可以使用 Minikube 开始部署 Kubernetes 集群。 Minikube 是一种轻量级的 Kubernetes 实现,可在本地计算机上创建 VM 并部署仅包含一个节点的简单集群。 Minikube 可用于 Linux , macOS 和 Windows 系统。Minikube CLI 提供了用于引导集群工作的多种操作,包括启动、停止、查看状态和删除。
Minikube
- 目标:将一个示例应用部署到 Minikube。运行应用程序。查看应用日志。
- 环境:Ubuntu 20.04,自用笔记本
安装
下载安装 minikube,链接:https://minikube.sigs.k8s.io/docs/start/
1 |
|
安装完成过后,尝试启动一个集群。在 root 权限下执行:
1 |
|
如果不出意外的话,这个时候会出现没有 driver 的报错,这个时候可以按照链接里边儿的说明进行修复。这个地方,我准备采用 docker 来作为底层的 driver。链接:https://minikube.sigs.k8s.io/docs/drivers/docker/
安装 docker
链接:https://docs.docker.com/engine/install/ubuntu/
删除之前存在的一些依赖,包括 containerd、runc 等,执行以下命令:
1 |
|
然后我们使用 apt repo 来进行安装,便于后续的更新。首先安装一些辅助的工具:
1 |
|
添加 docker official GPG key:
1 |
|
添加 docker 仓库:
1 |
|
安装 docker engine,并且运行验证,更新 docker 的时候也使用这些命令。可能会出现下载比较缓慢的情况,最好是有 ipv6,兴许会下载较快。
1 |
|
继续
使用 docker 作为 driver 启动,或者可以设置 docker 作为默认 driver。
1 |
|
然后这个时候,如果在 sudo su 模式下当做 minikube 的 driver,会提示报错;但是如果直接运行,又会使用 unix:///var/run/docker.sock 的权限不够,因此需要将本机的用户添加到 docker 组:
1 |
|
如果不出意外的话,应该是可以运行起来了,而且会下载一些个相关的镜像,我只能说网速是真的慢。
运行
链接:https://minikube.sigs.k8s.io/docs/start/
- 启动集群:
1 |
|
- 集群交互,通过 kubectl 与集群进行交互。
1 |
|
部署应用
通过三种不同的方式来创建和部署应用。
service
创建一个简单的服务,并进行部署,将端口暴露到8080:
1 |
|
稍等一会儿,然后观察部署情况:
1 |
|
可以让 minikube 启动一个浏览器来观察:
1 |
|
可以使用 kubectl 来转发端口:
1 |
|
这个时候,刚刚部署的这个服务,可以在 http://localhost:7080/ 上访问到了。
LoadBalancer
创建一个 LoadBalancer 负载均衡器,并且将其路由到集群外部可访问。
1 |
|
在另外一个 shell 窗口中,开起 tunnel 来为已部署的实例进行负载 IP 的路由。
1 |
|
可以通过下列命令找到,已经可以路由访问的外部 IP 地址。
1 |
|
现在该服务可以在 <external=ip>:8080 中访问到。
Ingress
开起 ingress addon 机制测试。
1 |
|
下边给出一个例子,创建一个 echo-server 服务并且一个 ingress 路由到这个服务。
1 |
|