使用 Docker 快速搭建单机版的 Kubernetes 集群
随着容器化、微服务、服务网格、服务编排、DevOps 等云原生技术的流行,我们也要跟上时代的步伐,那么我们需要怎么上车呢?此时就需要一个易于在本地运行且 Kubernetes 的工具,可在你的笔记本电脑上的虚拟机内轻松创建单机版 Kubernetes 集群,便于我们使用 Kubernetes 进行日常开发与学习。那么接下让我们轻松地搭建一个更贴近真实的 K8s 环境。
工具推荐
对于本地实验,还可以使用各种 Kubernetes 实现以运行 Kubernetes 群集,如
- Kind (https://kind.sigs.k8s.io/)
- Minikube (https://minikube.sigs.k8s.io/docs/)
- MicroK8s (https://microk8s.io/)
- 在线体验 K8s (https://labs.play-with-k8s.com/)
- Dockerized (https://github.com/y0ngb1n/dockerized) 推荐我的个人项目,欢迎 Star
使用上面任一工具的目标都能快速运行一个本地学习的 Kubernetes 群集,其中我个人最喜欢的是 Kind。
搭建 K8s 集群
下面分别尝试 Kind 与 Minikube 创建单机版 Kubernetes 集群。
先安装 kubectl
无论使用哪个工具,都需要先正确安装 kubectl
Kubernetes 命令行工具,否则安装完 Kind、Minikube 等环境后无法执行 kubectl
命令。
使用 Kind 创建 K8s 集群
kind is a tool for running local Kubernetes clusters using Docker container “nodes”.
安装 kind
Kind 提供了多种安装方式,支持以下方式:
- On macOS via Homebrew
- On macOS via MacPorts
- On Windows via Chocolatey
- Installing From Release Binaries
- Installing From Source
这里将在 Linux 环境下以 Installing From Release Binaries 方式进行安装:
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.11.1/kind-linux-amd64 |
创建 K8s 集群
kind create cluster |
检验安装环境
🐋️ ~ kind get clusters |
使用 Minikube 创建 K8s 集群
安装 minikube
选择不同环境下的安装方式,参考 https://minikube.sigs.k8s.io/docs/start/
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 |
国内网络环境,使用如下命令将自动使用阿里云服务来支持 minikube
的环境配置,参考 https://developer.aliyun.com/article/221687
minikube start --image-mirror-country='cn' |
检验安装环境
🐋️ ~ minikube status |
启动 K8s 控制台,参考 https://minikube.sigs.k8s.io/docs/handbook/dashboard/
minikube dashboard |
查看 minikube
支持的扩展列表,参考 https://minikube.sigs.k8s.io/docs/handbook/deploying/
minikube addons list |
检验 K8s 集群
🐋️ ~ kubectl version |
K8s 初体验
快速尝鲜
# 启动单实例 nginx |
小试牛刀
nginx-pod.yml
apiVersion: v1 |
nginx-svc.yml
apiVersion: v1 |
执行命令:
# 一键发布,启动实例 |
注意事项
- 需要先正确安装
kubectl
- 通过 Port-Forward 可本机访问 Pod,仅限本地调试环境,如
curl 127.0.0.1:8080
- 通过 Service 反向代理时,需要使用 K8s 集群的 IP 进行访问,使用
kubectl get nodes -o wide
查看 K8s 集群的 IP - Service 是 K8s 提供反向代理的机制,负责反向路由+负载均衡
- NodePort 是 Service 的一种类型,可将 Service 暴露给外网
- NodePort 范围
30000~32767
- Label 是 K8s 的种打标签机制
- Selector 是 K8s 中的路由选择定位机制
- 使用 Kind 或 Minikube 部署的 K8s 集群,node 基于容器运行而不是宿主机,使用 Service 反向代理时,只在 node 节点容器中 kube-proxy 生效,使用
docker exec -it kind-control-plane bash
验证这一点,而不是直接映射在宿主机上
K8s 故障排查指南
参考链接
- https://kubernetes.io/zh/docs/tasks/tools/
- https://kind.sigs.k8s.io/docs/user/quick-start/
- https://developer.aliyun.com/article/221687
- https://learnk8s.io/troubleshooting-deployments
- https://b23.tv/2yDbtP9
- https://youtube.com/playlist?list=PLy7NrYWoggjziYQIDorlXjTvvwweTYoNC