一条命令离线安装高可用kubernetes
官方地址:https://www.sealyun.com/
Github地址:https://github.com/fanux/sealos
image.png

要求和建议

  • 最低资源要求
    • 2 vCpu
    • 4G Ram
    • 40G+ 存储
  • 操作系统要求
    • ssh 可以访问各安装节点
    • 各节点主机名不相同,并满足kubernetes的主机名要求。
    • 各节点时间同步
    • 网卡名称如果是不常见的,建议修改成规范的网卡名称, 如(eth.|en.|em.*)
    • kubernetes1.20+ 使用containerd作为cri. 不需要用户安装docker/containerd. sealos会安装1.3.9版本containerd。
    • kubernetes1.19及以下 使用docker作为cri。 也不需要用户安装docker。 sealos会安装1.19.03版本docker
  • 网络和 DNS 要求:
    • 确保 /etc/resolv.conf 中的 DNS 地址可用。否则,可能会导致群集中coredns异常。
    • 如果使用阿里云/华为云主机部署。 默认的pod网段会和阿里云的dns网段冲突, 建议自定义修改pod网段, 在init的时候指定—podcidr 来修改。
    • sealos 默认会关闭防火墙, 如果需要打开防火墙, 建议手动放行相关的端口。
  • 内核要求:
    • cni组件选择cilium时要求内核版本不低于5.4

下载并安装sealos

  1. wget -c https://sealyun.oss-cn-beijing.aliyuncs.com/latest/sealos

设置执行权限

  1. chmod +x sealos && mv sealos /usr/bin

资源包

资源包下载地址:https://www.sealyun.com/goodsDetail?type=cloud_kernel&name=kubernetes
image.png
下载资源包(资源是收费的)

  1. $ wget -c https://sealyun.oss-cn-beijing.aliyuncs.com/2fb10b1396f8c6674355fcc14a8cda7c-v1.20.0/kube1.20.0.tar.gz

注意1.20+版本不在使用使用docker作为cri

安装命令

  1. # 安装一个1master和node的kubernetes集群
  2. $ sealos init --passwd 'baxiang' --master 192.168.145.130 --node 192.168.145.131 --pkg-url /root/kube1.19.12.tar.gz --version v1.19.12

init 命令的主要含义

  1. # sealos init --help
  2. sealos init --master 192.168.0.2 --master 192.168.0.3 --master 192.168.0.4 \
  3. --node 192.168.0.5 --user root --passwd your-server-password \
  4. --version v1.18.0 --pkg-url=/root/kube1.18.0.tar.gz
  5. Usage:
  6. sealos init [flags]
  7. sealos init [command]
  8. Examples:
  9. # init with password with three master one node
  10. sealos init --passwd your-server-password \
  11. --master 192.168.0.2 --master 192.168.0.3 --master 192.168.0.4 \
  12. --node 192.168.0.5 --user root \
  13. --version v1.18.0 --pkg-url=/root/kube1.18.0.tar.gz
  14. # init with pk-file , when your server have different password
  15. sealos init --pk /root/.ssh/id_rsa \
  16. --master 192.168.0.2 --node 192.168.0.5 --user root \
  17. --version v1.18.0 --pkg-url=/root/kube1.18.0.tar.gz
  18. # when use multi network. set a can-reach with --interface
  19. sealos init --interface 192.168.0.254 \
  20. --master 192.168.0.2 --master 192.168.0.3 --master 192.168.0.4 \
  21. --node 192.168.0.5 --user root --passwd your-server-password \
  22. --version v1.18.0 --pkg-url=/root/kube1.18.0.tar.gz
  23. # when your interface is not "eth*|en*|em*" like.
  24. sealos init --interface your-interface-name \
  25. --master 192.168.0.2 --master 192.168.0.3 --master 192.168.0.4 \
  26. --node 192.168.0.5 --user root --passwd your-server-password \
  27. --version v1.18.0 --pkg-url=/root/kube1.18.0.tar.gz
  28. Available Commands:
  29. gen show default sealos init config
  30. Flags:
  31. --apiserver string apiserver domain name (default "apiserver.cluster.local")
  32. --cert-sans strings kubernetes apiServerCertSANs ex. 47.0.0.22 sealyun.com
  33. -h, --help help for init
  34. --interface string name of network interface, when use calico IP_AUTODETECTION_METHOD, set your ipv4 with can-reach=192.168.0.1 (default "eth.*|en.*|em.*")
  35. --ipip ipip mode enable, calico.. (default true)
  36. --kubeadm-config string kubeadm-config.yaml template file
  37. --lvscare-image string lvscare image name (default "fanux/lvscare")
  38. --lvscare-tag string lvscare image tag name (default "latest")
  39. --master strings kubernetes multi-masters ex. 192.168.0.2-192.168.0.4
  40. --mtu string mtu of the ipip mode , calico.. (default "1440")
  41. --network string cni plugin, calico.. (default "calico")
  42. --node strings kubernetes multi-nodes ex. 192.168.0.5-192.168.0.5
  43. --passwd string password for ssh
  44. --pk string private key for ssh (default "/root/.ssh/id_rsa")
  45. --pk-passwd string private key password for ssh
  46. --pkg-url string http://store.lameleg.com/kube1.14.1.tar.gz download offline package url, or file location ex. /root/kube1.14.1.tar.gz
  47. --podcidr string Specify range of IP addresses for the pod network (default "100.64.0.0/10")
  48. --repo string choose a container registry to pull control plane images from (default "k8s.gcr.io")
  49. --svccidr string Use alternative range of IP address for service VIPs (default "10.96.0.0/12")
  50. --user string servers user name for ssh (default "root")
  51. --version string version is kubernetes version
  52. --vip string virtual ip (default "10.103.97.2")
  53. --vlog int kubeadm log level
  54. --without-cni If true we not install cni plugin
  55. Global Flags:
  56. --config string config file (default is $HOME/.sealos/config.yaml)
  57. --info logger ture for Info, false for Debug
  58. Use "sealos init [command] --help" for more information about a command.

参数含义

参数名 含义 示例
passwd 服务器密码 123456
master k8s master节点IP地址 192.168.0.2
node k8s node节点IP地址 192.168.0.3
pkg-url 离线资源包地址,支持下载到本地,或者一个远程地址 /root/kube1.20.0.tar.gz
version 资源包对应的版本 v1.20.0

单机安装

参考https://github.com/fanux/sealos/issues/419
单机安装的话可以设置

  1. sealos init --passwd '123456' \
  2. --master 10.140.122.12 \
  3. --pkg-url /root/kube1.19.12.tar.gz \
  4. --version v1.19.12

去掉主节点的污点

  1. # kubectl get nodes
  2. NAME STATUS ROLES AGE VERSION
  3. i-ag52ooeg Ready master 91s v1.19.12
  4. # kubectl taint nodes --all node-role.kubernetes.io/master-
  5. node/i-ag52ooeg untainted

验证安装

  1. [root@i-ag52ooeg ~]# kubectl create deployment nginx --image=nginx
  2. deployment.apps/nginx created
  3. [root@i-ag52ooeg ~]# kubectl expose deployment nginx --port=80 --type=NodePort
  4. service/nginx exposed
  5. [root@i-ag52ooeg ~]# kubectl get pods,svc
  6. NAME READY STATUS RESTARTS AGE
  7. pod/nginx-6799fc88d8-pqkhz 0/1 ContainerCreating 0 23s
  8. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  9. service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 7m41s
  10. service/nginx NodePort 10.110.167.245 <none> 80:30538/TCP 14s

访问ip:30538
image.png