KubeKey Kubernetes

基于kubekey部署kubernetes生产级集群

Posted on 2020-10-12,9 min read

kubeykey是KubeSphere基于Go 语言开发的kubernetes集群部署程序。使用 KubeKey,您可以轻松、高效、灵活地单独或整体安装 Kubernetes 和 KubeSphere。

有三种情况可以使用 KubeKey。

  • 仅安装 Kubernetes
  • 使用一个命令安装 Kubernetes 和 KubeSphere
  • 首先安装 Kubernetes,然后使用ks-installer 在其上部署 KubeSphere

重要提示:Kubekey 将会帮您安装 Kubernetes,若已有 Kubernetes 集群请参考 在 Kubernetes 之上安装 KubeSphere

优势

  • 基于 Ansible 的安装程序具有大量软件依赖性,例如 Python。
  • KubeKey 是使用 Go
    语言开发的,可以消除在各种环境中出现的问题,从而提高安装成功率。
    KubeKey 使用 Kubeadm 在节点上尽可能多地并行安装 K8s
    集群,以降低安装复杂性并提高效率。与较早的安装程序相比,它将大大节省安装时间。
    KubeKey 支持将群集从 all-in-one
    扩展到多节点群集甚至 HA 集群。 KubeKey 旨在将群集当作一个对象操作,即 CaaO。

参考:https://github.com/kubesphere/kubekey

kubekey部署kubernetes集群

下载kk部署工具

wget https://github.com/kubesphere/kubekey/releases/download/v1.0.0/kubekey-v1.0.0-linux-amd64.tar.gz
tar -zxvf kubekey-v1.0.0-linux-amd64.tar.gz
mv kk /usr/local/bin/

部署all-in-one单节点

安装依赖(可选)

yum install -y socat conntrack

仅部署kubernetes单节点

kk create cluster

同时部署kubernetes和kubesphere,可指定kubernetes版本或kubesphere版本

kk create cluster --with-kubernetes v1.18.6 --with-kubesphere v3.0.0

部署多节点集群

环境准备,确认节点时间同步即可,无需配置主机名,kubekey会自动纠正主机名。

yum install -y chrony
systemctl enable --now chronyd
timedatectl set-timezone Asia/Shanghai

创建示例配置文件

kk create config

创建示例配置文件,同时部署kubernetes和kubesphere,可指定版本、配置文件名称及保存路径

kk create config --with-kubernetes v1.18.6 --with-kubesphere v3.0.0 -f /root/config-sample.yaml

根据您的环境修改配置文件 config-sample.yaml,以下示例以部署3个master节点和1个node节点为例(不执行kubesphere部署,仅搭建kubernetes集群):

# vim config-sample.yaml
apiVersion: kubekey.kubesphere.io/v1alpha1
kind: Cluster
metadata:
  name: sample
spec:
  hosts:
  - {name: node1, address: 192.168.1.110, internalAddress: 192.168.1.110, user: root, password: 123456}
  - {name: node2, address: 192.168.1.111, internalAddress: 192.168.1.111, user: root, password: 123456}
  - {name: node3, address: 192.168.1.112, internalAddress: 192.168.1.112, user: root, password: 123456}
  - {name: node4, address: 192.168.1.113, internalAddress: 192.168.1.113, user: root, password: 123456}
  roleGroups:
    etcd:
    - node1
    - node2
    - node3
    master: 
    - node1
    - node2
    - node3
    worker:
    - node4
  controlPlaneEndpoint:
    domain: lb.kubesphere.local
    address: ""
    port: "6443"
  kubernetes:
    version: v1.17.9
    imageRepo: kubesphere
    clusterName: cluster.local
  network:
    plugin: calico
    kubePodsCIDR: 10.233.64.0/18
    kubeServiceCIDR: 10.233.0.0/18
  registry:
    registryMirrors: []
    insecureRegistries: []
  addons: []

当指定安装KubeSphere时,要求集群中有可用的持久化存储。默认使用localVolume,如果需要使用其他持久化存储,请参阅addons配置。

使用配置文件创建集群。

kk create cluster -f config-sample.yam

完成后查看集群状态

[root@node1 ~]# kubectl get nodes -o wide
NAME    STATUS   ROLES    AGE     VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION                CONTAINER-RUNTIME
node1   Ready    master   3m55s   v1.17.9   192.168.1.110   <none>        CentOS Linux 7 (Core)   3.10.0-1127.18.2.el7.x86_64   docker://19.3.8
node2   Ready    master   3m20s   v1.17.9   192.168.1.111   <none>        CentOS Linux 7 (Core)   3.10.0-1127.18.2.el7.x86_64   docker://19.3.8
node3   Ready    master   3m13s   v1.17.9   192.168.1.112   <none>        CentOS Linux 7 (Core)   3.10.0-1127.18.2.el7.x86_64   docker://19.3.8
node4   Ready    worker   3m23s   v1.17.9   192.168.1.113   <none>        CentOS Linux 7 (Core)   3.10.0-1127.18.2.el7.x86_64   docker://19.3.8
[root@node1 ~]# 
[root@node1 ~]# 
[root@node1 ~]# kubectl get pods -A
NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE
kube-system   calico-kube-controllers-59d85c5c84-mzfz9   1/1     Running   0          3m31s
kube-system   calico-node-j5gx7                          1/1     Running   0          3m26s
kube-system   calico-node-n4vwj                          1/1     Running   0          3m31s
kube-system   calico-node-tdgrv                          1/1     Running   0          3m24s
kube-system   calico-node-zc27d                          1/1     Running   0          3m17s
kube-system   coredns-74d59cc5c6-kspd4                   1/1     Running   0          3m41s
kube-system   coredns-74d59cc5c6-ll7kt                   1/1     Running   0          3m41s
kube-system   kube-apiserver-node1                       1/1     Running   0          3m53s
kube-system   kube-apiserver-node2                       1/1     Running   0          3m22s
kube-system   kube-apiserver-node3                       1/1     Running   0          2m12s
kube-system   kube-controller-manager-node1              1/1     Running   0          3m53s
kube-system   kube-controller-manager-node2              1/1     Running   0          3m21s
kube-system   kube-controller-manager-node3              1/1     Running   0          115s
kube-system   kube-proxy-hk6c5                           1/1     Running   0          3m41s
kube-system   kube-proxy-k5d8w                           1/1     Running   0          3m17s
kube-system   kube-proxy-lv6wk                           1/1     Running   0          3m27s
kube-system   kube-proxy-pqdgb                           1/1     Running   0          3m24s
kube-system   kube-scheduler-node1                       1/1     Running   0          3m53s
kube-system   kube-scheduler-node2                       1/1     Running   0          3m21s
kube-system   kube-scheduler-node3                       1/1     Running   0          116s
kube-system   nodelocaldns-6kq4c                         1/1     Running   0          3m27s
kube-system   nodelocaldns-7xbc9                         1/1     Running   0          3m24s
kube-system   nodelocaldns-9r7v4                         1/1     Running   0          3m41s
kube-system   nodelocaldns-rkv2d                         1/1     Running   0          3m17s

启用多集群管理

默认情况下,Kubekey 将仅安装一个 Solo 模式的单集群,即未开启 Kubernetes 多集群联邦。如果您希望将 KubeSphere 作为一个支持多集群集中管理的中央面板,您需要在config-example.yaml中设置ClusterRole。关于多集群的使用文档,请参考如何启用多集群

开启可插拔功能组件

KubeSphere 从 2.1.0 版本开始对 Installer 的各功能组件进行了解耦,快速安装将默认仅开启最小化安装(Minimal Installation),Installer 支持在安装前或安装后自定义可插拔的功能组件的安装。使最小化安装更快速轻量且资源占用更少,也方便不同用户按需选择安装不同的功能组件。

KubeSphere 有多个可插拔功能组件,功能组件的介绍可参考配置示例。您可以根据需求,选择开启安装 KubeSphere 的可插拔功能组件。我们非常建议您开启这些功能组件来体验 KubeSphere 完整的功能以及端到端的解决方案。请在安装前确保您的机器有足够的 CPU 与内存资源。开启可插拔功能组件可参考开启可选功能组件

添加节点

将新节点的信息添加到群集配置文件,然后应用更改。

kk add nodes -f config-sample.yaml

删除节点

通过以下命令删除节点,nodename指需要删除的节点名。

kk delete node <nodeName> -f config-sample.yaml

删除集群

如果您以快速入门(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 | --file) 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 | --file) path] [--kubeconfig path]
  • --from-cluster根据已存在集群信息生成配置文件.
  • -f指定生成配置文件路径.
  • --kubeconfig指定集群kubeconfig文件.
  • 由于无法全面获取集群配置,生成配置文件后,请根据集群实际信息补全配置文件

下一篇: 使用easzup 快速部署一个 kubernetes的高可用集群→