在 Linux 上安装 Kubernetes 和 KubeSphere
本节介绍如何安装 Kubernetes 和 KubeSphere。
安装过程中将用到开源工具 KubeKey。有关 KubeKey 的更多信息,请访问 GitHub KubeKey 仓库。
说明 |
---|
您也可以直接运行安装 KubeSphere 的命令将 KubeSphere v4.1.1 升级到 v4.1.2。 |
前提条件
您需要准备至少 1 台 Linux 服务器作为集群节点。在生产环境中,为确保集群具备高可用性,建议准备至少 5 台 Linux 服务器,其中 3 台作为控制平面节点,另外 2 台作为工作节点。如果您在多台 Linux 服务器上安装 KubeSphere,请确保所有服务器属于同一子网。
集群节点的操作系统和版本须为 Ubuntu 16.04、Ubuntu 18.04、Ubuntu 20.04、Ubuntu 22.04、Debian 9、Debian 10、CentOS 7、CentOS Stream、RHEL 7、RHEL 8、SLES 15 或 openSUSE Leap 15。多台服务器的操作系统可以不同。关于其它操作系统和版本支持,请联系 KubeSphere 技术支持。
在生产环境中,为确保集群具有足够的计算和存储资源,建议每台集群节点配置至少 8 个 CPU 核心、16 GB 内存和 200 GB 磁盘空间。除此之外,建议在每台集群节点的 /var/lib/docker(对于 Docker)或 /var/lib/containerd(对于 containerd) 目录额外挂载至少 200 GB 磁盘空间用于存储容器运行时数据。
在生产环境中,建议提前为 KubeSphere 集群配置高可用性以避免单个控制平面节点出现故障时集群服务中断。有关更多信息,请参阅配置高可用性。
说明 如果您规划了多个控制平面节点,请务必提前为集群配置高可用性。
默认情况下,KubeSphere 使用集群节点的本地磁盘空间作为持久化存储。在生产环境中,建议提前配置外部存储系统作为持久化存储。有关更多信息,请参阅配置外部持久化存储。
如果集群节点未安装容器运行时,安装工具 KubeKey 将在安装过程中自动为每个集群节点安装 Docker 作为容器运行时。您也可以提前手动安装 containerd、CRI-O 或 iSula 作为容器运行时。
说明 CRI-O 和 iSula 与 KubeSphere 的兼容性尚未经过充分测试,可能存在未知问题。
请确保所有集群节点上 /etc/resolv.conf 文件中配置的 DNS 服务器地址可用。否则,KubeSphere 集群可能会出现域名解析问题。
请确保在所有集群节点上都可以使用 sudo、curl 和 openssl 命令。
请确保所有集群节点时间同步。
配置防火墙规则
KubeSphere 需要特定端口和协议用于服务之间的通信。如果您的基础设施环境已启用防火墙,您需要在防火墙设置中放行所需的端口和协议。如果您的基础设施环境未启用防火墙,您可以跳过此步骤。
下表列出需要在防火墙中放行的端口和协议。
服务 | 协议 | 起始端口 | 结束端口 | 备注 |
---|---|---|---|---|
ssh | TCP | 22 | ||
etcd | TCP | 2379 | 2380 | |
apiserver | TCP | 6443 | ||
calico | TCP | 9099 | 9100 | |
bgp | TCP | 179 | ||
nodeport | TCP | 30000 | 32767 | |
master | TCP | 10250 | 10258 | |
dns | TCP | 53 | ||
dns | UDP | 53 | ||
metrics-server | TCP | 8443 | ||
local-registry | TCP | 5000 | 离线环境需要 | |
local-apt | TCP | 5080 | 离线环境需要 | |
rpcbind | TCP | 111 | 使用 NFS 作为持久化存储时需要 | |
ipip | IPENCAP/IPIP | 使用 Calico 时需要 |
安装依赖项
您需要为所有集群节点安装 socat、conntrack、ebtables 和 ipset。如果上述依赖项在各集群节点上已存在,您可以跳过此步骤。
在 Ubuntu 操作系统上,执行以下命令为服务器安装依赖项:
sudo apt install socat conntrack ebtables ipset -y
如果集群节点使用其他操作系统,请将 apt 替换为操作系统对应的软件包管理工具。
创建 Kubernetes 集群
如果您访问 GitHub/Googleapis 受限,请登录任意集群节点,执行以下命令设置下载区域:
export KKZONE=cn
执行以下命令下载 KubeKey 最新版本:
curl -sfL https://get-kk.kubesphere.io | sh -
下载完成后当前目录下将生成 KubeKey 二进制文件 kk。
执行以下命令为 KubeKey 二进制文件 kk 添加执行权限:
sudo chmod +x kk
执行以下命令创建安装配置文件 config-sample.yaml:
./kk create config --with-kubernetes <Kubernetes version>
将 <Kubernetes version> 替换为实际需要的版本,例如 v1.27.4。KubeSphere 默认支持 Kubernetes v1.21~1.28。
命令执行完毕后将生成安装配置文件 config-sample.yaml。
说明 安装完成后,请勿删除安装配置文件 config-sample.yaml,后续进行节点添加等操作时仍需要使用该文件。如果该文件丢失,您需要重新创建安装配置文件。
执行以下命令编辑安装配置文件 config-sample.yaml:
vi config-sample.yaml
以下为部分示例配置文件,如需了解完整示例,请参阅此文件。
apiVersion: kubekey.kubesphere.io/v1alpha2 kind: Cluster metadata: name: sample spec: hosts: - {name: controlplane1, address: 192.168.0.2, internalAddress: 192.168.0.2, port: 23, user: ubuntu, password: Testing123, arch: arm64} # arm64 节点注意添加参数 arch: arm64 - {name: controlplane2, address: 192.168.0.3, internalAddress: 192.168.0.3, user: ubuntu, privateKeyPath: "~/.ssh/id_rsa"} - {name: worker1, address: 192.168.0.4, internalAddress: 192.168.0.4, user: ubuntu, password: Testing123} - {name: worker2, address: 192.168.0.5, internalAddress: 192.168.0.5, user: ubuntu, password: Testing123} - {name: registry, address: 192.168.0.6, internalAddress: 192.168.0.6, user: ubuntu, password: Testing123} roleGroups: etcd: - controlplane1 - controlplane2 control-plane: - controlplane1 - controlplane2 worker: - worker1 - worker2 # 如需使用 kk 自动部署镜像仓库,请设置 registry(建议镜像仓库与集群节点分离部署,减少相互影响) registry: - registry controlPlaneEndpoint: internalLoadbalancer: haproxy # 如需部署⾼可⽤集群,且⽆负载均衡器可⽤,可开启该参数,做集群内部负载均衡 domain: lb.kubesphere.local address: "" port: 6443 kubernetes: version: v1.23.15 clusterName: cluster.local network: plugin: calico kubePodsCIDR: 10.233.64.0/18 kubeServiceCIDR: 10.233.0.0/18 ## multus support. https://github.com/k8snetworkplumbingwg/multus-cni enableMultusCNI: false registry: # 如需使用 kk 部署 harbor,可将该参数设置为 harbor,不设置该参数且需使用 kk 部署容器镜像仓库,将默认部署 docker registry。 # harbor 不支持 arm64,arm64 环境部署时,可不配置该参数。 type: harbor # 如使用 kk 部署的 harbor 或其他需要登录的仓库,需设置对应仓库的 auths,如使用 kk 部署默认的 docker registry 仓库,则无需配置 auths 参数。 # 注意:如使用 kk 部署 harbor,auths 参数请于创建 harbor 项目之后设置。 auths: "dockerhub.kubekey.local": username: admin # harbor 默认用户名 password: Harbor12345 # harbor 默认密码 plainHTTP: false # 如果仓库使用 http,请将该参数设置为 true privateRegistry: "dockerhub.kubekey.local/kse" # 设置集群部署时使用的私有仓库地址 registryMirrors: [] insecureRegistries: [] addons: []
在 config-sample.yaml 配置文件的 spec:hosts 参数下设置各服务器的信息。
参数 描述 name
用户自定义的服务器名称。
address
服务器的 SSH 登录 IP 地址。
internalAddress
服务器在子网内部的 IP 地址。
port
服务器的 SSH 端口号。如果使用默认端口 22 可不设置此参数。
user
服务器的 SSH 登录用户名,该用户必须为 root 用户或其他具有 sudo 命令执行权限的用户。如果使用 root 用户可不设置此参数。
password
服务器的 SSH 登录密码。如果已经设置 privateKeyPath 可不设置此参数。
privateKeyPath
服务器的 SSH 登录密钥的路径。如果已经设置 password 可不设置此参数。
arch
服务器的硬件架构。如果服务器的硬件架构为 Arm64,请将此参数设置为 arm64,否则请勿设置此参数。安装包默认仅支持所有集群节点都为 x86_64 或 arm64 架构的场景。如果各集群节点的硬件架构不完全相同,请联系 KubeSphere 技术支持团队。
在 config-sample.yaml 配置文件的 spec:roleGroups 参数下设置服务器的角色:
参数 描述 etcd
安装 etcd 数据库的节点。请在此参数下设置集群控制平面节点。
control-plane
集群控制平面节点。如果您已经为集群配置了高可用性,您可以设置多个控制平面节点。
worker
集群工作节点。
registry
用于创建私有镜像服务的服务器。该服务器不会用作集群节点。 安装、升级 KubeSphere 时,如果集群节点无法连接互联网,需要在此参数下设置用于创建私有镜像服务的服务器。其他情况下请将此参数注释掉。
如果您规划了多个控制平面节点,在 config-sample.yaml 配置文件的 spec:controlPlaneEndpoint 参数下设置高可用性信息。
参数 描述 internalLoadbalancer
本地负载均衡器的类型。如果使用本地负载均衡配置,请将此参数设置为 haproxy。否则,请将此参数注释掉。
domain
负载均衡器的内部访问域名。请将此参数设置为 lb.kubesphere.local。
address
负载均衡器的 IP 地址。如果使用本地负载均衡配置,请将此参数留空;如果使用专用负载均衡器,请将此参数设置为负载均衡器的 IP 地址;如果使用通用服务器作为负载均衡器,请将此参数设置为负载均衡器的浮动 IP 地址。
port
负载均衡器监听的端口号,即 apiserver 服务的端口号。请将此参数设置为 6443。
如果您需要使用外部持久化存储,在 config-sample.yaml 配置文件的 spec:addons 参数下设置外部持久化存储信息。
如果使用云上存储设备,在 spec:addons 下设置以下参数(将 <configuration file path> 替换为存储插件配置文件的实际路径):
- name: csi-qingcloud namespace: kube-system sources: chart: name: csi-qingcloud repo: https://charts.kubesphere.io/test valuesFile: <configuration file path>
如果使用 NeonSAN 存储设备,在 spec:addons 下设置以下参数(将 <configuration file path> 替换为存储插件配置文件的实际路径):
- name: csi-neonsan namespace: kube-system sources: chart: name: csi-neonsan repo: https://charts.kubesphere.io/test valuesFile: <configuration file path>
如果使用 NFS 存储系统,在 spec:addons 下设置以下参数(将 <configuration file path> 替换为存储插件配置文件的实际路径):
- name: nfs-client namespace: kube-system sources: chart: name: nfs-client-provisioner repo: https://charts.kubesphere.io/main valuesFile: <configuration file path>
执行以下命令创建 Kubernetes 集群:
./kk create cluster -f config-sample.yaml
说明 如需使用 openebs localpv,可在命令后添加参数 --with-local-storage。如需对接其他存储,可在配置文件 addons 中添加配置相关存储插件,或 Kubernetes 集群部署完成后自行安装。
如果显示如下信息,则表明 Kubernetes 集群创建成功。
Pipeline[CreateclusterPipeline] execute successfully
安装 KubeSphere
KubeSphere Core (ks-core) 是 KubeSphere 的核心组件,为扩展组件提供基础的运行环境。KubeSphere Core 安装完成后,即可访问 KubeSphere Web 控制台。
您需要提前安装 Helm。
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
在集群节点,执行以下命令安装 KubeSphere Core。
helm upgrade --install -n kubesphere-system --create-namespace ks-core https://charts.kubesphere.io/main/ks-core-1.1.2.tgz --debug --wait
说明 如果您访问 Docker Hub 受限,请在命令后添加如下配置,修改默认的镜像拉取地址。
--set global.imageRegistry=swr.cn-southwest-2.myhuaweicloud.com/ks
--set extension.imageRegistry=swr.cn-southwest-2.myhuaweicloud.com/ks
如果显示如下信息,则表明 ks-core 安装成功:
NOTES: Thank you for choosing KubeSphere Helm Chart. Please be patient and wait for several seconds for the KubeSphere deployment to complete. 1. Wait for Deployment Completion Confirm that all KubeSphere components are running by executing the following command: kubectl get pods -n kubesphere-system 2. Access the KubeSphere Console Once the deployment is complete, you can access the KubeSphere console using the following URL: http://192.168.6.10:30880 3. Login to KubeSphere Console Use the following credentials to log in: Account: admin Password: P@88w0rd NOTE: It is highly recommended to change the default password immediately after the first login. For additional information and details, please visit https://kubesphere.io.
从成功信息中的 Console、Account 和 Password 参数分别获取 KubeSphere Web 控制台的 IP 地址、管理员用户名和管理员密码,并使用网页浏览器登录 KubeSphere Web 控制台。
说明 取决于您的网络环境,您可能需要配置流量转发规则并在防火墙中放行 30880 端口。
反馈
这篇文章对您有帮助吗?
通过邮件接收 KubeSphere 最新的技术博客与产品更新的通知
感谢您的反馈。如果您有关于如何使用 KubeSphere 的具体问题,请在 Slack 上提问。如果您想报告问题或提出改进建议,请在 GitHub 存储库中打开问题。