快速安装 Kubernetes

这篇文档讲述了如何借助 easzup 快速部署一个 Kubernetes 集群: 根据您的场景不同,可以选择下面两种部署模式中的一个:

kubernetes的all-in-one安装方式

下载文件

  • 通过 Rainbond 加速下载工具脚本 easzup 2.1.0版本,easzup 的不同 release 影响可以安装的 kubernetes 版本,具体对应信息可查看easzup版本
  1. wget https://goodrain-pkg.oss-cn-shanghai.aliyuncs.com/pkg/easzup && chmod +x easzup
  • 使用工具脚本下载其他文件,主要包括离线镜像,二进制文件等,保存在/etc/ansible目录中
  1. ./easzup -D

配置免密钥登录

  1. ssh-keygen -t rsa -b 2048 -N '' -f ~/.ssh/id_rsa
  2. ssh-copy-id $IP # $IP 为所有节点地址包括自身,按照提示输入 yes 和 root 密码

在ansible控制端编排k8s安装

  • 容器化运行 kubeasz,详见文档
  1. ./easzup -S
  • 使用默认配置安装 aio 集群
  1. docker exec -it kubeasz easzctl start-aio
  • 完成后复制kubectl工具到/usr/bin/kubectl
  • 需要扩展node节点时,配置对应节点免密钥登录后,执行以下操作添加node节点
  1. docker exec -it kubeasz easzctl add-node $NEW_NODE_IP

验证安装结果

如果提示kubectl: command not found,退出重新ssh登录一下,环境变量生效即可

  1. $ kubectl version # 验证集群版本
  2. $ kubectl get componentstatus # 验证 scheduler/controller-manager/etcd等组件状态
  3. $ kubectl get node # 验证节点就绪 (Ready) 状态
  4. $ kubectl get pod --all-namespaces # 验证集群pod状态,默认已安装网络插件、coredns、metrics-server等
  5. $ kubectl get svc --all-namespaces # 验证集群服务状态

完成Kubernetes的安装,开始Rainbond的安装

kubernetes的高可用安装

高可用集群所需节点配置如下:

角色数量描述
部署节点1运行ansible/easzctl脚本,可以复用master,建议使用独立节点
etcd节点3注意etcd集群需要1,3,5,7…奇数个节点,一般复用master节点
master节点2高可用集群至少2个master节点
node节点3运行应用负载的节点,可根据需要提升机器配置/增加节点数

在各节点安装依赖工具

  • Ubuntu 16.04 请执行以下脚本:
  1. # 文档中脚本默认均以root用户执行
  2. apt-get update && apt-get upgrade -y && apt-get dist-upgrade -y
  3. # 安装python2
  4. apt-get install python2.7
  5. # Ubuntu16.04可能需要配置以下软连接
  6. ln -s /usr/bin/python2.7 /usr/bin/python
  • CentOS 7 请执行以下脚本:
  1. # 文档中脚本默认均以root用户执行
  2. yum update
  3. # 安装python
  4. yum install python -y

配置免密码登录

  • 在部署节点执行以下操作:
  1. ssh-keygen -t rsa -b 2048 -N '' -f ~/.ssh/id_rsa
  2. ssh-copy-id $IPs #$IPs为所有节点地址包括自身,按照提示输入yes 和root密码

在ansible控制端编排k8s安装

  • 通过 Rainbond 加速下载工具脚本 easzup 2.1.0版本
  1. wget https://goodrain-pkg.oss-cn-shanghai.aliyuncs.com/pkg/easzup && chmod +x easzup
  • 使用脚本工具下载离线镜像等文件,文件保存在/etc/ansible目录中
  1. ./easzup -D
  • 配置集群参数
  1. cd /etc/ansible && cp example/hosts.multi-node hosts

将集群配置模版拷贝到指定位置后,必须按照模版格式,依照自己的节点规划修改/etc/ansible/hosts文件,否则无法安装集群,该文件中包括主机列表及部分集群配置

  1. # etcd集群节点数应为1、3、5...等奇数个,不可设置为偶数
  2. # 变量NODE_NAME为etcd节点在etcd集群中的唯一名称,不可相同
  3. # etcd节点主机列表
  4. [etcd]
  5. 192.168.1.1 NODE_NAME=etcd1
  6. 192.168.1.2 NODE_NAME=etcd2
  7. 192.168.1.3 NODE_NAME=etcd3
  8. # kubernetes master节点主机列表
  9. [kube-master]
  10. 192.168.1.1
  11. 192.168.1.2
  12. # kubernetes node节点主机列表
  13. [kube-node]
  14. 192.168.1.3
  15. 192.168.1.4
  16. # [可选] harbor服务,docker 镜像仓库
  17. # 'NEW_INSTALL':设置为 yes 会安装harbor服务;设置为 no 不安装harbor服务
  18. # 'SELF_SIGNED_CERT':设置为 no 你需要将 harbor.pem 和 harbor-key.pem 文件放在 down 目录下
  19. [harbor]
  20. #192.168.1.8 HARBOR_DOMAIN="harbor.yourdomain.com" NEW_INSTALL=no SELF_SIGNED_CERT=yes
  21. # [可选] 外部负载均衡节点主机列表
  22. [ex-lb]
  23. #192.168.1.6 LB_ROLE=backup EX_APISERVER_VIP=192.168.1.250 EX_APISERVER_PORT=8443
  24. #192.168.1.7 LB_ROLE=master EX_APISERVER_VIP=192.168.1.250 EX_APISERVER_PORT=8443
  25. # [可选] 集群ntp服务器列表
  26. [chrony]
  27. #192.168.1.1
  28. [all:vars]
  29. # --------- Main Variables ---------------
  30. # 可以选择的kubernetes集群运行时: docker, containerd
  31. CONTAINER_RUNTIME="docker"
  32. # kubernetes网络插件: calico, flannel, kube-router, cilium, kube-ovn
  33. CLUSTER_NETWORK="flannel"
  34. # kube-proxy服务代理模式: 'iptables' or 'ipvs'
  35. PROXY_MODE="ipvs"
  36. # K8S Service CIDR, 不可与主机网络重叠
  37. SERVICE_CIDR="10.68.0.0/16"
  38. # Cluster CIDR (Pod CIDR), 不可与主机网络重叠
  39. CLUSTER_CIDR="172.20.0.0/16"
  40. # Node端口范围
  41. NODE_PORT_RANGE="20000-40000"
  42. # 集群DNS域名
  43. CLUSTER_DNS_DOMAIN="cluster.local."
  44. # -------- Additional Variables (don't change the default value right now) ---
  45. # 二进制文件目录
  46. bin_dir="/opt/kube/bin"
  47. # 证书文件目录
  48. ca_dir="/etc/kubernetes/ssl"
  49. # 部署目录 (kubeasz工作空间)
  50. base_dir="/etc/ansible"
  • 容器化运行kubeasz
  1. ./easzup -S
  • 使用ansible安装kubernetes集群
  1. docker exec -it kubeasz ansible-playbook /etc/ansible/90.setup.yml
  • 需要扩展node节点时,配置对应节点免密钥登录后,执行以下操作添加node节点
  1. docker exec -it kubeasz easzctl add-node $NEW_NODE_IP

完成Kubernetes的安装,开始Rainbond的安装