kubekey快速安装高可用k8s集群
Posted 琦彦
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kubekey快速安装高可用k8s集群相关的知识,希望对你有一定的参考价值。
KubeKey
KubeKey(由 Go 语言开发)是一种全新的安装工具,替代了以前使用的基于 ansible 的安装程序。KubeKey 为您提供灵活的安装选择,您可以仅安装 Kubernetes,也可以同时安装 Kubernetes 和 KubeSphere。
KubeKey 的几种使用场景:
- 仅安装 Kubernetes;
- 使用一个命令同时安装 Kubernetes 和 KubeSphere;
- 扩缩集群;
- 升级集群;
- 安装 Kubernetes 相关的插件(Chart 或 YAML)。
项目地址:https://github.com/kubesphere/kubekey
官方文档:https://kubesphere.io/zh/docs/installing-on-linux/introduction/kubekey/
KubeKey 如何运作
下载 KubeKey 之后,您可以使用可执行文件 kk
来进行不同的操作。无论您是使用它来创建,扩缩还是升级集群,都必须事先使用 kk
准备配置文件。此配置文件包含集群的基本参数,例如主机信息、网络配置(CNI 插件以及 Pod 和 Service CIDR)、仓库镜像、插件(YAML 或 Chart)和可插拔组件选项(如果您安装 KubeSphere)。有关更多信息,请参见示例配置文件。
准备好配置文件后,您需要使用 ./kk
命令以及不同的标志来进行不同的操作。这之后,KubeKey 会自动安装 Docker,并拉取所有必要的镜像以进行安装。安装完成后,您还可以检查安装日志。
为什么选择 KubeKey
- **以前基于 ansible 的安装程序依赖于许多软件,例如 Python。**KubeKey 由 Go 语言开发,可以消除在多种环境中出现的问题,确保成功安装。
- KubeKey 支持多种安装选项,例如 All-in-One、多节点安装以及离线安装。
- KubeKey 使用 Kubeadm 在节点上尽可能多地并行安装 Kubernetes 集群,使安装更简便,提高效率。与旧版的安装程序相比,它极大地节省了安装时间。
- KubeKey 提供内置高可用模式,支持一键安装高可用 Kubernetes 集群。
- KubeKey 旨在将集群作为对象来进行安装,即 CaaO。
下载 KubeKey
能正常访问 GitHub/Googleapis
从 GitHub Release Page 下载 KubeKey 或者直接运行以下命令。
curl -sfL https://get-kk.kubesphere.io | VERSION=v2.0.0 sh -
备注
通过以上的命令,可以下载 KubeKey 的最新版本 (v2.0.0)。您可以更改命令中的版本号来下载特定的版本。
访问 GitHub/Googleapis 受限
首先运行以下命令,以确保您从正确的区域下载 KubeKey。
export KKZONE=cn
运行以下命令来下载 KubeKey:
curl -sfL https://get-kk.kubesphere.io | VERSION=v2.0.0 sh -
备注
下载 KubeKey 之后,如果您将其转移到访问 Googleapis 受限的新机器上,请务必再次运行
export KKZONE=cn
,然后继续执行以下步骤。
支持的环境
Linux 发行版
- Ubuntu 16.04, 18.04, 20.04
- Debian Buster, Stretch
- CentOS/RHEL 7
- SUSE Linux Enterprise Server 15
建议使用 Linux Kernel 版本:
4.15 or later
可以通过命令uname -srm
查看 Linux Kernel 版本。
Kubernetes 版本
- v1.17: v1.17.9
- v1.18: v1.18.6
- v1.19: v1.19.8
- v1.20: v1.20.6
- v1.21: v1.21.5 (default)
- v1.22: v1.22.1
查看更多支持的版本点击这里
安装KubeKey
KubeKey 支持多种安装选项,例如 All-in-One、多节点安装以及离线安装。
KubeSphere 为用户提供轻量级安装程序 KubeKey(该程序支持安装 Kubernetes、KubeSphere 及相关插件),安装过程简单而友好。KubeKey 不仅能帮助用户在线创建集群,还能作为离线安装解决方案。
以下是可用的安装选项:
- All-in-One:在单个节点上安装 KubeSphere(仅为让用户快速熟悉 KubeSphere)。
- 多节点安装:在多个节点上安装 KubeSphere(用于测试或开发)。
- 在 Linux 上离线安装:将 KubeSphere 的所有镜像打包(便于在 Linux 上进行离线安装)。
- 高可用安装:安装具有多个节点的高可用 KubeSphere 集群,该集群用于生产环境。
- 最小化安装:仅安装 KubeSphere 所需的最少系统组件。以下是最低资源要求:
- 2 个 CPU
- 4 GB 运行内存
- 40 GB 存储空间
- 全家桶安装:安装 KubeSphere 的所有可用系统组件,例如 DevOps、服务网格、告警等。
要求和建议
- 最低资源要求(仅对于最小安装 KubeSphere):
- 2 核虚拟 CPU
- 4 GB 内存
- 20 GB 储存空间
/var/lib/docker
主要用于存储容器数据,在使用和操作过程中会逐渐增大。对于生产环境,建议/var/lib/docker
单独挂盘。
- 操作系统要求:
SSH
可以访问所有节点。- 所有节点的时间同步。
sudo
/curl
/openssl
应在所有节点使用。docker
可以自己安装,也可以通过 KubeKey 安装。Red Hat
在其Linux
发行版本中包括了SELinux
,建议关闭SELinux或者将SELinux的模式切换为Permissive[宽容]工作模式
- 建议您的操作系统环境足够干净 (不安装任何其他软件),否则可能会发生冲突。
- 如果在从 dockerhub.io 下载镜像时遇到问题,建议准备一个容器镜像仓库 (加速器)。为 Docker 守护程序配置镜像加速。
- 默认情况下,KubeKey 将安装 OpenEBS 来为开发和测试环境配置 LocalPV,这对新用户来说非常方便。对于生产,请使用 NFS/Ceph/GlusterFS 或商业化存储作为持久化存储,并在所有节点中安装相关的客户端 。
- 如果遇到拷贝时报权限问题Permission denied,建议优先考虑查看SELinux的原因。
- 依赖要求:
KubeKey 可以同时安装 Kubernetes 和 KubeSphere。根据 KubeSphere 所安装版本的不同,您所需要安装的依赖可能也不同。请参考以下表格查看您是否需要提前在节点上安装有关的依赖。
Kubernetes 版本 ≥ 1.18 | Kubernetes 版本 < 1.18 | |
---|---|---|
socat | 必须安装 | 可选,但推荐安装 |
conntrack | 必须安装 | 可选,但推荐安装 |
ebtables | 可选,但推荐安装 | 可选,但推荐安装 |
ipset | 可选,但推荐安装 | 可选,但推荐安装 |
ipvsadm | 可选,但推荐安装 | 可选,但推荐安装 |
# 1、环境初始化,在所有节点上安装相关依赖
yum install -y socat conntrack ebtables ipset
# 2、所有节点关闭selinux和firewalld
setenforce 0 && sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
systemctl disable --now firewalld
# 3、所有节点时间同步
yum install -y chrony
systemctl enable --now chronyd
timedatectl set-timezone Asia/Shanghai
- 网络和 DNS 要求:
- 确保
/etc/resolv.conf
中的 DNS 地址可用。否则,可能会导致集群中出现某些 DNS 问题。 - 如果您的网络配置使用防火墙或安全组,则必须确保基础结构组件可以通过特定端口相互通信。建议您关闭防火墙或遵循链接配置:网络访问。
- 确保
开始安装
为 kk
添加可执行权限:
chmod +x kk
查看kubekey版本
./kk version
查看kubekey支持的kubernertes版本
./kk version --show-supported-k8s
[root@master kubekey]# ./kk version --show-supported-k8s
v1.15.12
v1.16.8
v1.16.10
v1.16.12
v1.16.13
v1.17.0
v1.17.4
v1.17.5
v1.17.6
v1.17.7
v1.17.8
v1.17.9
v1.18.3
v1.18.5
v1.18.6
v1.18.8
v1.19.0
v1.19.8
v1.19.9
v1.20.4
v1.20.6
v1.20.10
v1.21.4
v1.21.5
v1.22.1
v1.23.0
在本快速入门教程中,您只需执行一个命令即可进行安装,其模板如下所示:
./kk create cluster [--with-kubernetes version] [--with-kubesphere version]
若要同时安装 Kubernetes 和 KubeSphere,可参考以下示例命令:
./kk create cluster --with-kubernetes v1.21.5 --with-kubesphere v3.2.1
备注
- 安装 KubeSphere 3.2.1 的建议 Kubernetes 版本:1.19.x、1.20.x、1.21.x 或 1.22.x(实验性支持)。如果不指定 Kubernetes 版本,KubeKey 将默认安装 Kubernetes v1.21.5。有关受支持的 Kubernetes 版本的更多信息,请参见支持矩阵。
- 一般来说,对于 All-in-One 安装,您无需更改任何配置。
- 如果您在这一步的命令中不添加标志
--with-kubesphere
,则不会部署 KubeSphere,KubeKey 将只安装 Kubernetes。如果您添加标志--with-kubesphere
时不指定 KubeSphere 版本,则会安装最新版本的 KubeSphere。 - KubeKey 会默认安装 OpenEBS 为开发和测试环境提供 LocalPV 以方便新用户。对于其他存储类型,请参见持久化存储配置。
执行该命令后,KubeKey 将检查您的安装环境,结果显示在一张表格中。有关详细信息,请参见节点要求和依赖项要求。输入 yes
继续安装流程。
验证安装结果
当您看到以下输出时,表明安装已经完成。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n8x2tfKl-1651503171716)(https://kubesphere.io/images/docs/zh-cn/quickstart/all-in-one-on-linux/Installation-complete.png)]
输入以下命令以检查安装结果。
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='.items[0].metadata.name') -f
输出信息会显示 Web 控制台的 IP 地址和端口号,默认的 NodePort 是 30880
。现在,您可以使用默认的帐户和密码 (admin/P@88w0rd
) 通过 <NodeIP>:30880
访问控制台。
#####################################################
### Welcome to KubeSphere! ###
#####################################################
Console: http://192.168.0.2:30880
Account: admin
Password: P@88w0rd
NOTES:
1. After you log into the console, please check the
monitoring status of service components in
"Cluster Management". If any service is not
ready, please wait patiently until all components
are up and running.
2. Please change the default password after login.
#####################################################
https://kubesphere.io 20xx-xx-xx xx:xx:xx
#####################################################
备注
您可能需要配置端口转发规则并在安全组中开放端口,以便外部用户访问控制台。
登录至控制台后,您可以在系统组件中查看各个组件的状态。如果要使用相关服务,您可能需要等待部分组件启动并运行。您也可以使用
kubectl get pod --all-namespaces
来检查 KubeSphere 相关组件的运行状况。
启用可插拔组件(可选)
本指南仅适用于默认的最小化安装。若要在 KubeSphere 中启用其他组件,请参见启用可插拔组件。
Kubernetes 集群配置
当创建 Kubernetes 集群时,您可以使用 KubeKey 去生成含有集群基本信息的配置文件 (config-sample.yaml
)。有关配置文件中的 Kubernetes 相关参数,请参阅以下示例。
kubernetes:
version: v1.21.5
imageRepo: kubesphere
clusterName: cluster.local
masqueradeAll: false
maxPods: 110
nodeCidrMaskSize: 24
proxyMode: ipvs
network:
plugin: calico
calico:
ipipMode: Always
vxlanMode: Never
vethMTU: 1440
kubePodsCIDR: 10.233.64.0/18
kubeServiceCIDR: 10.233.0.0/18
registry:
registryMirrors: []
insecureRegistries: []
privateRegistry: ""
addons: []
以下表格会详细描述上面的参数。
参数 | 描述 |
---|---|
kubernetes | |
version | Kubernetes 安装版本。如未指定 Kubernetes 版本,KubeKey v2.0.0 默认安装 Kubernetes v1.21.5。有关更多信息,请参阅支持矩阵。 |
imageRepo | 用于下载镜像的 Docker Hub 仓库 |
clusterName | Kubernetes 集群名称。 |
masqueradeAll * | 如果使用纯 iptables 代理模式,masqueradeAll 即让 kube-proxy 对所有流量进行源地址转换 (SNAT)。它默认值为 false 。 |
maxPods * | Kubelet 可运行 Pod 的最大数量,默认值为 110 。 |
nodeCidrMaskSize * | 集群中节点 CIDR 的掩码大小,默认值为 24 。 |
proxyMode * | 使用的代理模式,默认为 ipvs 。 |
network | |
plugin | 是否使用 CNI 插件。KubeKey 默认安装 Calico,您也可以指定为 Flannel。请注意,只有使用 Calico 作为 CNI 插件时,才能使用某些功能,例如 Pod IP 池。 |
calico.ipipMode * | 用于集群启动时创建 IPv4 池的 IPIP 模式。如果值设置除 Never 以外的值,则参数 vxlanMode 应该被设置成 Never 。此参数允许设置值 Always ,CrossSubnet 和 Never 。默认值为 Always 。 |
calico.vxlanMode * | 用于集群启动时创建 IPv4 池的 VXLAN 模式。如果该值不设为 Never ,则参数 ipipMode 应该设为 Never 。此参数允许设置值 Always ,CrossSubnet 和 Never 。默认值为 Never 。 |
calico.vethMTU * | 最大传输单元(maximum transmission unit 简称 MTU)设置可以通过网络传输的最大数据包大小。默认值为 1440 。 |
kubePodsCIDR | Kubernetes Pod 子网的有效 CIDR 块。CIDR 块不应与您的节点子网和 Kubernetes 服务子网重叠。 |
kubeServiceCIDR | Kubernetes 服务的有效 CIDR 块。CIDR 块不应与您的节点子网和 Kubernetes Pod 子网重叠。 |
registry | |
registryMirrors | 配置 Docker 仓库镜像以加速下载。有关详细信息,请参阅配置 Docker 守护进程。 |
insecureRegistries | 设置不安全镜像仓库的地址。有关详细信息,请参阅测试不安全仓库。 |
privateRegistry * | 配置私有镜像仓库,用于离线安装(例如,Docker 本地仓库或 Harbor)。有关详细信息,请参阅离线安装。 |
备注
- *默认情况下,KubeKey 不会在配置文件中定义这些参数,您可以手动添加这些参数并自定义其值。
addons
用于安装云原生扩展 (Addon)(YAML 或 Chart)。有关详细信息,请参阅此文件。- 此页面仅列出 KubeKey 创建的配置文件中的部分参数。有关其他参数的详细信息,请参阅此示例文件。
集群运维
创建集群
快速开始
快速入门使用 all-in-one
安装,这是熟悉 KubeSphere 的良好开始。
注意: 由于 Kubernetes 暂不支持大写 NodeName, hostname 中包含大写字母将导致后续安装过程无法正常结束
命令
如果无法访问
https://storage.googleapis.com
, 请先执行export KKZONE=cn
.
./kk create cluster [--with-kubernetes version] [--with-kubesphere version]
例子
-
使用默认版本创建一个纯 Kubernetes 集群
./kk create cluster
-
创建指定一个(支持的版本)的 Kubernetes 集群
./kk create cluster --with-kubernetes v1.19.8
-
创建一个部署了 KubeSphere 的 Kubernetes 集群 (例如
--with-kubesphere v3.1.0
)./kk create cluster --with-kubesphere [version]
-
创建一个指定的 container runtime 的 Kubernetes 集群(docker, crio, containerd and isula)
./kk create cluster --container-manager containerd
高级用法
您可以使用高级安装来控制自定义参数或创建多节点集群。具体来说,通过指定配置文件来创建集群。
如果无法访问
https://storage.googleapis.com
, 请先执行export KKZONE=cn
.
-
首先,创建一个示例配置文件
./kk create config [--with-kubernetes version] [--with-kubesphere version] [(-f | --filename) path]
例子:
-
使用默认配置创建一个示例配置文件。您也可以指定文件名称或文件所在的文件夹。
./kk create config [-f ~/myfolder/config-sample.yaml]
-
同时安装 KubeSphere
./kk create config --with-kubesphere
-
-
根据您的环境修改配置文件 config-sample.yaml
注意: 由于 Kubernetes 暂不支持大写 NodeName, worker 节点名中包含大写字母将导致后续安装过程无法正常结束
当指定安装KubeSphere时,要求集群中有可用的持久化存储。默认使用localVolume,如果需要使用其他持久化存储,请参阅 addons 配置。
-
使用配置文件创建集群。
./kk create cluster -f ~/myfolder/config-sample.yaml
启用多集群管理
默认情况下,Kubekey 将仅安装一个 Solo 模式的单集群,即未开启 Kubernetes 多集群联邦。如果您希望将 KubeSphere 作为一个支持多集群集中管理的中央面板,您需要在 config-example.yaml 中设置 ClusterRole
。关于多集群的使用文档,请参考 如何启用多集群。
开启可插拔功能组件
KubeSphere 从 2.1.0 版本开始对 Installer 的各功能组件进行了解耦,快速安装将默认仅开启最小化安装(Minimal Installation),Installer 支持在安装前或安装后自定义可插拔的功能组件的安装。使最小化安装更快速轻量且资源占用更少,也方便不同用户按需选择安装不同的功能组件。
KubeSphere 有多个可插拔功能组件,功能组件的介绍可参考 配置示例。您可以根据需求,选择开启安装 KubeSphere 的可插拔功能组件。我们非常建议您开启这些功能组件来体验 KubeSphere 完整的功能以及端到端的解决方案。请在安装前确保您的机器有足够的 CPU 与内存资源。开启可插拔功能组件可参考 开启可选功能组件。
添加节点
通过 KubeKey,您可以在安装后增加节点数量,以满足更高的资源需求,尤其是在生产环境中。有关更多信息,请参见添加新节点。
将新节点的信息添加到集群配置文件,然后应用更改。
./kk add nodes -f config-sample.yaml
删除节点
您需要清空节点负载,然后再删除节点。有关更多信息,请参见删除节点。
通过以下命令删除节点,nodename指需要删除的节点名。
./kk delete node <nodeName> -f config-sample.yaml
删除集群
卸载 KubeSphere 意味着将其从您的机器上移除,该操作不可逆,请谨慎操作。
有关更多信息,请参见卸载 KubeSphere 和 Kubernetes。
您可以通过以下命令删除集群:
- 如果您以快速入门(all-in-one)开始:
./kk delete cluster
- 如果从高级安装开始(使用配置文件创建的集群):
./kk delete cluster [-f config-sample.yaml]
集群升级
单节点集群
升级集群到指定版本。
./kk upgrade [--with-kubernetes version] [--with-kubesphere version]
--with-kubernetes
指定kubernetes目标版本。--with-kubesphere
指定kubesphere目标版本。
多节点集群
通过指定配置文件对集群进行升级。
./kk upgrade [--with-kubernetes version] [--with-kubesphere version] [(-f | --filename) path]
--with-kubernetes
指定kubernetes目标版本。--with-kubesphere
指定kubesphere目标版本。-f
指定集群安装时创建的配置文件。
注意: 升级多节点集群需要指定配置文件. 如果集群非kubekey创建,或者创建集群时生成的配置文件丢失,需要重新生成配置文件,或使用以下方法生成。
Getting cluster info and generating kubekey’s configuration file (optional).
./kk create config [--from-cluster] [(-f | --filename) path] [--kubeconfig path]
--from-cluster
根据已存在集群信息生成配置文件.-f
指定生成配置文件路径.--kubeconfig
指定集群kubeconfig文件.- 由于无法全面获取集群配置,生成配置文件后,请根据集群实际信息补全配置文件。
启用 kubectl 自动补全
KubeKey 不会启用 kubectl 自动补全功能。请参阅下面的指南并将其打开:
先决条件:确保已安装 bash-autocompletion
并可以正常工作。
# ubuntu的方式
# 安装 bash-completion
apt-get install bash-completion
# 将 completion 脚本添加到你的 ~/.bashrc 文件
echo 'source <(kubectl completion bash)' >>~/.bashrc
# 将 completion 脚本添加到 /etc/bash_completion.d 目录
kubectl completion bash >/etc/bash_completion.d/kubectl
# centos的方式
yum install -y bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
# 将 completion 脚本添加到你的 ~/.bashrc 文件
echo "source <(kubectl completion bash)" >> ~/.bashrc
建议使用oh-my-zsh,增加对kubectl命令自动补全支持。
修改~/.zshrc
文件,增加如下两行:
source <(kubectl completion zsh)
参考链接:
- https://github.com/kubesphere/kubekey
- https://kubesphere.io/zh/docs/installing-on-linux/introduction/kubekey/
- https://github.com/kubesphere/kubekey/blob/master/README_zh-CN.md
- kubekey All-in-One
- kubekey 多节点安装
- kubekey离线安装
- 在 VMware vSphere 安装 KubeSphere/
/installing-on-linux/introduction/kubekey/
3. https://github.com/kubesphere/kubekey/blob/master/README_zh-CN.md
4. kubekey All-in-One
5. kubekey 多节点安装
6. kubekey离线安装
7. 在 VMware vSphere 安装 KubeSphere/
以上是关于kubekey快速安装高可用k8s集群的主要内容,如果未能解决你的问题,请参考以下文章
(四)从零开始搭建k8s集群—— 使用KubeKey一键式搭建高可用k8s集群
使用 KubeKey 快速离线部署 K8s 与 KubeSphere