Kubernetes 入门到实践:搭建 K3s 集群初体验
实践环境
- Ubuntu 22.04
- Docker 20.10.13
- K3s v1.23.13+k3s1
本文将使用 Ubuntu 系统,如选择 Centos 系统,亦可作为参考,其步骤与命令大同小异,万变不离其宗。
安装 Docker
K3s 包含并默认为 containerd, 一个行业标准的容器运行时。本文将使用 Docker 作为容器运行时,需要提前安装 Docker 环境。
# 更新软件源 |
后续启动 K3s 时使用--docker
选项激活。参考使用 Docker 作为容器运行时文档。
安装 K3s
K3s 是一个高可用的、经过 CNCF 认证的轻量级 Kubernetes 发行版,专为物联网及边缘计算设计。
k3s
将安装 Kubernetes 所需的一切打包进仅有 60MB
大小的二进制文件中,并且完全实现了 Kubernetes API。为了减少运行 Kubernetes 所需的内存,k3s
删除了很多不必要的驱动程序,并用附加组件对其进行替换。由于它只需要极低的资源就可以运行,因此它能够在任何 512MB
内存以上的设备上运行集群。
我们先从简单的 K3s 上手,体验下 K8s 的一半 K3s。待 K3s 大法修炼成功后,我们再采用 kubeadm 进行部署高可用 Kubernetes 集群,其部署架构几乎一样,只是个别核心组件的变化,万变不离其宗,可依葫芦画瓢。
方案一:一键安装(官方源,需外网)
因 K3s 的核心组件镜像需从 gcr.io 拉取(国内网络不通),所以需具备外网访问的环境,适用于服务器均在国外的环境选用,简单粗暴一键安装。
# 一键默认安装 |
方案二:一键安装(国内源)推荐
国内用户,可以使用以下方法加速安装,内置阿里云镜像源:
# 指定 K3s 版本 |
方案三:离线安装
前提条件
- 在安装 K3s 之前,完成上面的部署私有镜像仓库或手动部署镜像,导入安装 K3s 所需要的镜像。本小节将演示手动部署镜像的方式。
- 从 K3s GitHub Release 页面下载 K3s v1.23.13+k3s1 二进制文件,K3s 二进制文件需要与离线镜像的版本匹配。将二进制文件放在每个离线节点的
/usr/local/bin
中,并确保这个二进制文件是可执行的。 - 下载 K3s 安装脚本,将安装脚本放在每个离线节点的任意地方,并命名为
install.sh
。
当使用 INSTALL_K3S_SKIP_DOWNLOAD
环境变量运行 K3s 脚本时,K3s 将使用本地的脚本和二进制。
手动部署镜像
假设您已经在离线/国内环境中创建了节点。这种方法需要您手动将必要的镜像部署到每个节点,适用于运行无法部署镜像仓库的边缘部署场景。参考官方手动部署镜像文档。
从 K3s GitHub Release 页面获取需安装的 K3s v1.23.13+k3s1 的镜像 tar 文件。
将 tar 文件放在
images
目录下,例如:# 为每个节点创建离线镜像的存储文件夹
sudo mkdir -p /var/lib/rancher/k3s/agent/images/
# $ARCH 是当前服务器的 CPU 架构
sudo cp ./k3s-airgap-images-$ARCH.tar /var/lib/rancher/k3s/agent/images/需手动将镜像部署到每个节点,在每个节点执行上述操作。
下载 K3s v1.23.13+k3s1 二进制文件
从 K3s GitHub Release 页面下载 K3s v1.23.13+k3s1 二进制文件,K3s 二进制文件需要与离线镜像的版本匹配。将二进制文件放在每个离线节点的 /usr/local/bin
中,并确保这个二进制文件是可执行的。
使用脚本安装
安装脚本可从下面任一地址下载:
脚本地址 | 说明 |
---|---|
https://get.k3s.io/ | 官方地址,需要外网环境 |
https://rancher-mirror.oss-cn-beijing.aliyuncs.com/k3s/k3s-install.sh | 阿里源,内置阿里云镜像源 |
https://raw.githubusercontent.com/k3s-io/k3s/master/install.sh | GitHub 地址,同官方源 |
# 下载脚本 |
验证 K3s
检查集群
# 查看集群的运行情况 |
牛刀小试
启动 whoami 服务
# 快速部署 whoami 应用,指定副本为 2,默认副本为 1 |
请求链路说明
让我们尝试着理解下 k8s 的请求链路:
request public-ip -> node-port -> svc-port -> pod-port -> container |
通过 Service 暴露给集群内部访问
默认为 NodePort 模式,会在每个节点监听
kubectl expose deploy whoami --port=80 |
通过 Service 暴露给集群外网访问
指定 LoadBalancer 模式并指定公网 IP
# 自行替换 <PUBLIC_IP> 为当前节点的公网 IP |
快速清理实验环境
kubectl delete all --all |
卸载 K3s
# 一键卸载 server |
参考链接
- https://www.k3s.io/
- https://docs.rancher.cn/k3s/
- http://zxc0328.github.io/2019/06/04/k3s-setup/
- https://icloudnative.io/posts/deploy-k3s-cross-public-cloud/
- https://b23.tv/iGpYZQn