准备工作
- Linux操作系统
- Ubuntu、Debian、CentOS、Fedora、RHEL、openSUSE/SLES 等主流Linux发行版
- Fedora CoreOS、VMware Photon OS等“容器专用”OS
- 足够的RAM和存储:物理机部署时推荐只运行K8s相关程序
- Internet连接,或能够访问特定registry(需要提前搭好registry并在registry中添加K8s组件镜像)
- 物理机之间的网络联通(Worker访问Control的API、Worker与Worker之间的网络甚至存储共享)
- 安装好部署工具 见下文
- 安装好CRI-O标准兼容的容器工具,docker、podman、containerd等均可
- podman:绝对开源,无服务(无daemon),很适用于Rootless Container模式(低权限),仅支持Linux容器
- docker:最主流,有商业版,传统daemon模式(需要root/管理员权限),支持Linux容器和Windows容器
- containerd:最基础,绝对开源,最标准,是K8s、K3s等默认的CRI-O容器工具,支持Linux容器和Windows容器
- 可以使用带GUI的容器工具
- Podman Desktop
- Docker Desktop
- Rancher Desktop
该选哪种部署方式?
- 大型生产环境:完整的K8s集群
- 使用 kubeadm 工具进行部署
- 有两种节点类型:Control Plane(控制平面,也叫Master)和Worker
- 适合物理机部署
- 需要高配置(稳定运行最好2thread+8GB)
- 最好多个物理机(Control Plane和Worker隔离,应用容器只部署在Worker上),最好3台以上(1 Control + 2 Worker)
- 小型生产环境:K3s
- 由rancher公司开发维护
- 直接使用k3s工具进行部署
- 有两种节点类型Server和Agent,默认单节点Server
- 裸机部署和虚拟机部署均可
- 配置需求低(1thread+512MB足够)
- 本地测试环境:minikube
- 由K8s官方维护
- 不建议暴露在公网 很多默认配置都是以localhost或内网为基础的
- 默认是单节点 可以扩展为多节点
- 其他:Microk8s,Canonical公司开发与维护,使用snap部署
部署K3s
如果需要关闭已有的K3s集群:
k3s-killall.sh
安装
- 主节点(Server)
curl -sfL https://get.k3s.io | sh -
- 默认安装的selinux规则太旧 手动安装新的。以CoreOS为例:
sudo rpm-ostree install https://github.com/k3s-io/k3s-selinux/releases/download/v1.2.stable.2/k3s-selinux-1.2-2.el8.noarch.rpm
- 子节点(Agent)
- 要先找主节点的token,再记录主节点的ip地址
sudo cat /var/lib/rancher/k3s/server/node-token
ip addr
- 然后使用安装命令,加入特殊变量
curl -sfL https://get.k3s.io | K3S_TOKEN="<主节点token值>" K3S_URL="https://<主节点ip地址>:6443" sh -
- 要先找主节点的token,再记录主节点的ip地址
- 主节点(Server)
systemd service文件位置
- 主节点:
/etc/systemd/system/k3s.service
- 子节点:
/etc/systemd/system/k3s-agent.service
- 主节点:
升级
- 依然使用curl在线获取升级脚本,版本号可去 Releases · k3s-io/k3s 查看,使用环境变量
INSTALL_K3S_VERSION
指定新版本 - 主节点
curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=<版本号> sh -
- 子节点
curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=<版本号> K3S_TOKEN="<主节点token值>" K3S_URL="https://<主节点ip地址>:6443" sh -
- 依然使用curl在线获取升级脚本,版本号可去 Releases · k3s-io/k3s 查看,使用环境变量
部署Minikube
- 如果要删掉已有的Minikube集群
- 停止:
minikube stop
- 删除:
minikube delete --all
- 停止:
- 借助containerd和podman,启动新集群
minikube start --driver=podman --container-runtime=containerd --listen-address=0.0.0.0