最佳实践
Docs / 文档 / 在 Linux 上安装 KubeSphere / 简介 / 多节点安装,参考 https://kubesphere.io/zh/docs/v3.4/installing-on-linux/introduction/multioverview/ (opens new window)
# 前期准备
- 机器:4C8G * 3
- 系统:Ubuntu Server 20.04 LTS 64bit
- 内网互通(SSH)
- 开放端口:30000-32767(内网开放)
# 所有节点 - 安装依赖
确保所有节点都有 sudo
/ curl
/ openssl
/ tar
命令,没有则自行 install,ubuntu 默认都有。
apt install -y socat
apt install -y conntrack
apt install -y ebtables
apt install -y ipset
# 访问 GitHub/Googleapis 受限的机器执行
export KKZONE=cn
笔记
由于 k8s 在 v1.24 + 默认不再支持 docker 作为容器运行时,而 KubeSphere 目前(3.4)默认仍使用 Docker 作为容器运行时,需要另行安装 containerd
作为容器运行时。
安装 containerd
官方快速开始:containerd/docs/getting-started.md at main · containerd/containerd (opens new window)
提示
containerd 官方的快速开始已经非常清晰,建议直接看官方文档操作。
# 安装 containerd
# 下载 containerd,https://github.com/containerd/containerd/releases
wget https://github.com/containerd/containerd/releases/download/v1.6.24/containerd-1.6.24-linux-amd64.tar.gz
# 解压 到/usr/local
tar Cxzvf /usr/local containerd-1.6.24-linux-amd64.tar.gz
# 下载 https://raw.githubusercontent.com/containerd/containerd/main/containerd.service到 /etc/systemd/system (Ubuntu的systemd,与官方文档不同)
curl -o /etc/systemd/system/containerd.service https://raw.githubusercontent.com/containerd/containerd/main/containerd.service
# 运行
systemctl daemon-reload
systemctl enable --now containerd
# 安装 runc
# 下载 runc,https://github.com/opencontainers/runc/releases
wget https://github.com/opencontainers/runc/releases/download/v1.1.9/runc.amd64
# 安装
install -m 755 runc.amd64 /usr/local/sbin/runc
# 安装 CNI插件
# 下载,https://github.com/containernetworking/plugins/releases
wget https://github.com/containernetworking/plugins/releases/download/v1.3.0/cni-plugins-linux-amd64-v1.3.0.tgz
# 安装
mkdir -p /opt/cni/bin
tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.3.0.tgz
设置 容器运行时
参考:容器运行时 | Kubernetes (opens new window)
# 生成 containerd 默认配置
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
# 重启
systemctl enable containerd && systemctl restart containerd
# 安装 crictl,使得containerd像docker一个使用
# 参考:https://github.com/kubernetes-sigs/cri-tools/blob/master/docs/crictl.md
# 下载:https://github.com/kubernetes-sigs/cri-tools/releases
wget https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.28.0/crictl-v1.28.0-linux-amd64.tar.gz
tar zxvf crictl-$VERSION-linux-amd64.tar.gz -C /usr/local/bin
# 设置 默认连接到containerd
cat > /etc/crictl.yaml << EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 2
debug: false
pull-image-on-create: false
EOF
# 检查,类似于 docker ps的输出
crictl ps
参考:手摸手带你撸没有 docker 的 kubernetes 集群 - KubeSphere 开发者社区 (opens new window)
# 主节点 - 下载 KubeKey
最新版本参考官方文档的「下载 KubeKey」
# 国内镜像似乎限速1MB/s,有条件还是用原版快,
export KKZONE=cn
# VERSION的版本在https://github.com/kubesphere/kubekey/releases找最新的
curl -sfL https://get-kk.kubesphere.io | VERSION=v3.0.10 sh -
chmod +x kk
# 主节点 - 挂载 /var/lib/docker
/var/lib/docker
路径主要用于存储容器数据,在使用和操作过程中数据量会逐渐增加。因此,在生产环境中,建议为 /var/lib/docker
单独挂载一个硬盘。
笔记
可选操作
# 主节点 - 配置文件
# 生成
安装最新版的 kubesphere 和最新(支持)的 Kubernetes,执行后得到 config-sample.yaml
# 生成 最新版的kubesphere和默认的Kubernetes 配置
./kk create config --with-kubesphere
# 生成 最新版的kubesphere和指定版本的Kubernetes
# 查看kubesphere的最新版,https://github.com/kubesphere/kubesphere/releases
./kk version --show-supported-k8s # 先看看支持的最新版本是多少,以及文档中kubesphere的[支持矩阵]
./kk create config --with-kubernetes v1.26.5 --with-kubesphere v3.4.0
# 修改
hosts
:把主、从服务器信息都写上etcd
:主节点主机名control-plane
:主节点主机名worker
:(主、)从节点主机名controlPlaneEndpoint - address
:填上主节点的内网 ip,不填好像 hosts 不会生成(问题原因为 PVE 的 cloud-init 默认会接管 hosts)lb.kubesphere.local
映射,从而导致重启后不可用network
:修改 CIDR 避免与其他集群冲突kubePodsCIDR
:kubeServiceCIDR
# 安装
./kk create cluster -f config-sample.yaml
执行脚本,脚本会连上节点服务器安装相应软件。
# 最小化安装完成
如无意外,至此已成功默认最小化安装的 KubeSphere。
# 扩展
# 应用商店
官方文档路径: Docs / 文档 / 启用可插拔组件 / KubeSphere 应用商店
扩展应用仓库:
https://charts.bitnami.com/bitnami
使用
操作与应用商店类似
# 升级
- 更新 KubeKey
参考:使用 KubeKey 升级 (opens new window)(此地址具有历史局限性,需自行到 kubesphere 官网寻找最新的地址)
通过默认的配置安装后的 Kubernetes 是 v1.23 的,而一些中间件(如 ECK)要求版本在 v1.24-v1.26
因此需要将 Kubernetes
的版本升级。
curl -sfL https://get-kk.kubesphere.io | VERSION=v3.0.13 sh -
# 当前最新VERSION使用https://github.com/kubesphere/kubekey/releases中带Latest标签的版本
注意
确保
kk(KubeKey)
的版本是最新的,否则可能不支持更新到新的 kubesphere值得注意的是,KubeSphere v3.4 支持的 v1.24 + 并不是完美支持,「带星号的版本可能出现边缘节点部分功能不可用的情况。」,如果需要边缘节点,建议不要升级。
v1.24 起移除对 Dockershim 的支持,需要另行安装 cri-dockerd,也是因为这个原因,KubeSphere 推荐的版本是
v1.23.x
- 选择要升级的 kubernetes 版本
由 KubeKey (opens new window) 可知 KubeSphere v3.4
最高支持的 K8S 版本为 v1.26.x
,保守起见,这里我选择更新到 v1.24
。
./kk version --show-supported-k8s
# 这里我选择了v1.24.14
- 选择要升级的 kubesphere 版本
升级 kubesphere 需参考官方文档的升级指南,本段参考文中讲到,升级到 v3.4,需要有一个运行 KubeSphere v3.3.x 的集群。如果您的 KubeSphere 是 v3.2.x 或更早的版本,请先升级至 v3.3.x。
v3.2.x -> v3.3.x
v3.3.x -> v3.4.x
笔记
- 目前已知的一种查看 KubeSphere 的方式是,在 WEB 管理的
/dashboard
页面中的平台版本中查看。 ./kk upgrade
的时候也会提示,只要不Continue
也是一种查看版本号的方式
Upgrade Confirmation:
kubernetes version: v1.26.5 to v1.26.5
kubesphere version: v3.4.1 to v3.4.1
- 升级
# 更新kubernetes的时候 需要指明kubesphere版本,即便不更新也要,否则他默认降级kubesphere
./kk upgrade --with-kubernetes v1.24.14 --with-kubesphere v3.4.0 -f config-sample.yaml
--with-kubernetes
:必填,要升级到 kubernetes 版本,如果不更新也要填当前版本号--with-kubesphere
:必填,要升级到 kubesphere 版本,如果不更新也要填当前版本号config-sample.yaml
:必填,节点配置文件
# 配置镜像加速
提示
并不能直接在 kubesphere 中设置,需修改节点的 docker 配置
# 卸载
./kk delete cluster -f config-sample.yaml