All Projects → lework → Kainstall

lework / Kainstall

Licence: mit
Use shell scripts to install kubernetes(k8s) high availability clusters and addon components based on kubeadmin with one click.使用shell脚本基于kubeadmin一键安装kubernetes 高可用集群和addon组件。

Programming Languages

shell
77523 projects
bash
514 projects

Projects that are alternatives of or similar to Kainstall

kainstall-offline
kainstall tools offline file
Stars: ✭ 31 (-84.34%)
Mutual labels:  install, kubernetes-cluster, kubernetes-setup, kubeadm
kubernetes-cluster
Vagrant As Automation Script
Stars: ✭ 34 (-82.83%)
Mutual labels:  kubernetes-cluster, kubernetes-setup, kubeadm
Rak8s
Stand up a Raspberry Pi based Kubernetes cluster with Ansible
Stars: ✭ 354 (+78.79%)
Mutual labels:  kubernetes-cluster, kubernetes-setup, kubeadm
aws-kubernetes
Kubernetes cluster setup in AWS using Terraform and kubeadm
Stars: ✭ 32 (-83.84%)
Mutual labels:  kubernetes-cluster, kubernetes-setup, kubeadm
K8s Digitalocean Terraform
Deploy latest Kubernetes cluster on DigitalOcean using Terraform
Stars: ✭ 33 (-83.33%)
Mutual labels:  install, kubernetes-cluster, kubeadm
rak8s
Stand up a Raspberry Pi based Kubernetes cluster with Ansible
Stars: ✭ 362 (+82.83%)
Mutual labels:  kubernetes-cluster, kubernetes-setup, kubeadm
GPU-Kubernetes-Guide
How to setup a production-grade Kubernetes GPU cluster on Paperspace in 10 minutes for $10
Stars: ✭ 34 (-82.83%)
Mutual labels:  kubernetes-cluster, kubernetes-setup, kubeadm
Terraform Aws Kubernetes
Terraform module for Kubernetes setup on AWS
Stars: ✭ 159 (-19.7%)
Mutual labels:  kubernetes-cluster, kubernetes-setup, kubeadm
Kube Cluster Osx
Local development multi node Kubernetes Cluster for macOS made very simple
Stars: ✭ 294 (+48.48%)
Mutual labels:  kubernetes-cluster, kubernetes-setup
Kubekey
Provides a flexible, rapid and convenient way to install Kubernetes only, both Kubernetes and KubeSphere, and related cloud-native add-ons. It is also an efficient tool to scale and upgrade your cluster.
Stars: ✭ 288 (+45.45%)
Mutual labels:  kubernetes-cluster, kubeadm
Sealos
一条命令离线安装高可用kubernetes,3min装完,700M,100年证书,版本不要太全,生产环境稳如老狗
Stars: ✭ 5,253 (+2553.03%)
Mutual labels:  kubernetes-setup, kubeadm
Eksctl
The official CLI for Amazon EKS
Stars: ✭ 3,550 (+1692.93%)
Mutual labels:  kubernetes-cluster, kubernetes-setup
Kubenow
Deploy Kubernetes. Now!
Stars: ✭ 285 (+43.94%)
Mutual labels:  kubernetes-cluster, kubeadm
Kubernetes Under The Hood
This tutorial is someone planning to install a Kubernetes cluster and wants to understand how everything fits together.
Stars: ✭ 279 (+40.91%)
Mutual labels:  kubernetes-cluster, kubernetes-setup
Kubernix
Single dependency Kubernetes clusters for local testing, experimenting and development
Stars: ✭ 545 (+175.25%)
Mutual labels:  kubernetes-cluster, kubernetes-setup
Kubeadm Ansible
Build a Kubernetes cluster using kubeadm via Ansible.
Stars: ✭ 479 (+141.92%)
Mutual labels:  kubernetes-cluster, kubeadm
terraform-provider-kubeadm
A Terraform provider/provisioner for deploying Kubernetes with kubeadm
Stars: ✭ 60 (-69.7%)
Mutual labels:  kubernetes-cluster, kubeadm
Kurl
Production-grade, airgapped Kubernetes installer combining upstream k8s with overlays and popular components
Stars: ✭ 391 (+97.47%)
Mutual labels:  kubernetes-cluster, kubeadm
Sonobuoy
Sonobuoy is a diagnostic tool that makes it easier to understand the state of a Kubernetes cluster by running a set of Kubernetes conformance tests and other plugins in an accessible and non-destructive manner.
Stars: ✭ 2,442 (+1133.33%)
Mutual labels:  kubernetes-cluster, kubernetes-setup
Raspbernetes
Raspberry Pi Kubernetes Cluster
Stars: ✭ 53 (-73.23%)
Mutual labels:  kubernetes-cluster, kubernetes-setup

kainstall = kubeadm install kubernetes

GitHub Super-Linter

使用 shell 脚本, 基于 kubeadm 一键部署 kubernetes 集群

为什么

为什么要搞这个?Ansible PlayBook 不好么?

因为懒,Ansible PlayBook 编排是非常给力的,不过需要安装 Python 和 Ansible, 且需要下载多个 yaml 文件 。因为懒,我想要个更简单的方式来快速部署一个分布式的 Kubernetes HA 集群, 使用 shell 脚本可以不借助外力直接在服务器上运行,省时省力。 并且 shell 脚本只有一个文件,文件大小100 KB 左右,非常小巧,可以实现一条命令安装集群的超快体验,而且配合离线安装包,可以在不联网的环境下安装集群,这体验真的非常爽啊。

要求

OS: centos 7.x x64 , centos 8.x x64

CPU: 2C

MEM: 4G

认证: 集群节点需统一认证; 使用密码认证时,集群节点需使用同一用户名和密码,使用密钥认证时,集群节点需使用同一个密钥文件登陆。

未指定离线包时,需要连通外网,用于下载 kube 组件和 docker 镜像。

架构

k8s-node-ha

如需按照步骤安装集群,可参考 https://lework.github.io/2019/10/01/kubeadm-install/

功能

  • 服务器初始化。
    • 关闭 selinux
    • 关闭 swap
    • 关闭 firewalld
    • 关闭大内存页
    • 配置 epel
    • 修改 limits
    • 配置内核参数
    • 配置 history 记录
    • 配置 journal 日志
    • 配置 chrony 时间同步
    • 添加 ssh-login-info 信息
    • 配置 audit 审计
    • 安装 ipvs 模块
    • 更新内核
  • 安装docker, kube组件。
  • 初始化kubernetes集群,以及增加或删除节点。
  • 安装ingress组件,可选nginxtraefik
  • 安装network组件,可选flannelcalico
  • 安装monitor组件,可选prometheus
  • 安装log组件,可选elasticsearch
  • 安装storage组件,可选rooklonghorn
  • 安装web ui组件,可选dashboard, kubesphere
  • 安装addon组件,可选metrics-server, nodelocaldns
  • 升级到kubernetes指定版本。
  • 更新集群证书。
  • 添加运维操作,如备份etcd快照。
  • 支持离线部署
  • 支持sudo特权
  • 支持10年证书期限
  • 支持脚本更新。

默认版本

分类 软件 kainstall 默认版本 软件最新版本
common docker-ce latest docker-ce release
common kubernetes latest kubernetes release
network flannel 0.13.0 flannel release
network calico 3.18.0 calico release
addons metrics server 0.4.2 metrics-server release
addons nodelocaldns 1.16.0 1.16.0
ingress ingress nginx controller 0.44.0 ingress-nginx release
ingress traefik 2.4.5 traefik release
monitor kube_prometheus 0.7.0 kube-prometheus release
log elasticsearch 7.11.1 elasticsearch release
storage rook 1.5.7 rook release
storage longhorn 1.1.0 longhorn release
ui kubernetes_dashboard 2.2.0 kubernetes dashboard release
ui kubesphere 3.0.0 kubesphere release

kube组件 版本可以通过参数(--version) 指定外,其他的软件版本需在脚本中指定。

使用

案例使用请见:https://lework.github.io/2020/09/26/kainstall

下载脚本

wget https://cdn.jsdelivr.net/gh/lework/[email protected]/kainstall.sh

帮助信息

# bash kainstall.sh


Install kubernetes cluster using kubeadm.

Usage:
  kainstall.sh [command]

Available Commands:
  init            Init Kubernetes cluster.
  reset           Reset Kubernetes cluster.
  add             Add nodes to the cluster.
  del             Remove node from the cluster.
  renew-cert      Renew all available certificates.
  upgrade         Upgrading kubeadm clusters.
  update          Update script file.

Flag:
  -m,--master          master node, default: ''
  -w,--worker          work node, default: ''
  -u,--user            ssh user, default: root
  -p,--password        ssh password
     --private-key     ssh private key
  -P,--port            ssh port, default: 22
  -v,--version         kube version, default: latest
  -n,--network         cluster network, choose: [flannel,calico], default: flannel
  -i,--ingress         ingress controller, choose: [nginx,traefik], default: nginx
  -ui,--ui             cluster web ui, choose: [dashboard,kubesphere], default: dashboard
  -a,--addon           cluster add-ons, choose: [metrics-server,nodelocaldns], default: metrics-server
  -M,--monitor         cluster monitor, choose: [prometheus]
  -l,--log             cluster log, choose: [elasticsearch]
  -s,--storage         cluster storage, choose: [rook,longhorn]
  -U,--upgrade-kernel  upgrade kernel
  -of,--offline-file   specify the offline package file to load
      --10years        the certificate period is 10 years.
      --sudo           sudo mode
      --sudo-user      sudo user
      --sudo-password  sudo user password

Example:
  [init cluster]
  kainstall.sh init \
  --master 192.168.77.130,192.168.77.131,192.168.77.132 \
  --worker 192.168.77.133,192.168.77.134,192.168.77.135 \
  --user root \
  --password 123456 \
  --version 1.20.4

  [reset cluster]
  kainstall.sh reset \
  --user root \
  --password 123456

  [add node]
  kainstall.sh add \
  --master 192.168.77.140,192.168.77.141 \
  --worker 192.168.77.143,192.168.77.144 \
  --user root \
  --password 123456 \
  --version 1.20.4

  [del node]
  kainstall.sh del \
  --master 192.168.77.140,192.168.77.141 \
  --worker 192.168.77.143,192.168.77.144 \
  --user root \
  --password 123456

  [other]
  kainstall.sh renew-cert --user root --password 123456
  kainstall.sh upgrade --version 1.20.4 --user root --password 123456
  kainstall.sh update
  kainstall.sh add --ingress traefik
  kainstall.sh add --monitor prometheus
  kainstall.sh add --log elasticsearch
  kainstall.sh add --storage rook
  kainstall.sh add --ui dashboard
  kainstall.sh add --addon nodelocaldns

初始化集群

# 使用脚本参数
bash kainstall.sh init \
  --master 192.168.77.130,192.168.77.131,192.168.77.132 \
  --worker 192.168.77.133,192.168.77.134 \
  --user root \
  --password 123456 \
  --port 22 \
  --version 1.20.4

# 使用环境变量
export MASTER_NODES="192.168.77.130,192.168.77.131,192.168.77.132"
export WORKER_NODES="192.168.77.133,192.168.77.134"
export SSH_USER="root"
export SSH_PASSWORD="123456"
export SSH_PORT="22"
export KUBE_VERSION="1.20.4"
bash kainstall.sh init

默认情况下,除了初始化集群外,还会安装 ingress: nginx , ui: dashboard 两个组件。

还可以使用一键安装方式, 连下载都省略了。

bash -c "$(curl -sSL https://cdn.jsdelivr.net/gh/lework/[email protected]/kainstall.sh)"  \
  - init \
  --master 192.168.77.130,192.168.77.131,192.168.77.132 \
  --worker 192.168.77.133,192.168.77.134 \
  --user root \
  --password 123456 \
  --port 22 \
  --version 1.20.4

增加节点

操作需在 k8s master 节点上操作,ssh连接信息非默认时请指定

# 增加单个master节点
bash kainstall.sh add --master 192.168.77.135

# 增加单个worker节点
bash kainstall.sh add --worker 192.168.77.134

# 同时增加
bash kainstall.sh add --master 192.168.77.135,192.168.77.136 --worker 192.168.77.137,192.168.77.138

删除节点

操作需在 k8s master 节点上操作,ssh连接信息非默认时请指定

# 删除单个master节点
bash kainstall.sh del --master 192.168.77.135

# 删除单个worker节点
bash kainstall.sh del --worker 192.168.77.134

# 同时删除
bash kainstall.sh del --master 192.168.77.135,192.168.77.136 --worker 192.168.77.137,192.168.77.138

重置集群

bash kainstall.sh reset \
  --user root \
  --password 123456 \
  --port 22 \

其他操作

操作需在 k8s master 节点上操作,ssh连接信息非默认时请指定 注意: 添加组件时请保持节点的内存和cpu至少为2C4G的空闲。否则会导致节点下线且服务器卡死。

# 添加 nginx ingress
bash kainstall.sh add --ingress nginx

# 添加 prometheus
bash kainstall.sh add --monitor prometheus

# 添加 elasticsearch
bash kainstall.sh add --log elasticsearch

# 添加 rook
bash kainstall.sh add --storage rook

# 添加 nodelocaldns
bash kainstall.sh add --addon nodelocaldns

# 升级版本
bash kainstall.sh upgrade --version 1.20.4

# 重新颁发证书
bash kainstall.sh renew-cert

# debug模式
DEBUG=1 bash kainstall.sh

# 更新脚本
bash kainstall.sh update

默认设置

注意: 以下变量都在脚本文件的environment configuration部分。可根据需要自行修改,或者为变量设置同名的环境变量修改其默认内容。

# 版本
DOCKER_VERSION="${DOCKER_VERSION:-latest}"
KUBE_VERSION="${KUBE_VERSION:-latest}"
FLANNEL_VERSION="${FLANNEL_VERSION:-0.13.0}"
METRICS_SERVER_VERSION="${METRICS_SERVER_VERSION:-0.4.2}"
INGRESS_NGINX="${INGRESS_NGINX:-0.44.0}"
TRAEFIK_VERSION="${TRAEFIK_VERSION:-2.4.5}"
CALICO_VERSION="${CALICO_VERSION:-3.18.0}"
KUBE_PROMETHEUS_VERSION="${KUBE_PROMETHEUS_VERSION:-0.7.0}"
ELASTICSEARCH_VERSION="${ELASTICSEARCH_VERSION:-7.11.1}"
ROOK_VERSION="${ROOK_VERSION:-1.5.7}"
LONGHORN_VERSION="${LONGHORN_VERSION:-1.1.0}"
KUBERNETES_DASHBOARD_VERSION="${KUBERNETES_DASHBOARD_VERSION:-2.2.0}"
KUBESPHERE_VERSION="${KUBESPHERE_VERSION:-3.0.0}" 

# 集群配置
KUBE_DNSDOMAIN="${KUBE_DNSDOMAIN:-cluster.local}"
KUBE_APISERVER="${KUBE_APISERVER:-apiserver.$KUBE_DNSDOMAIN}"
KUBE_POD_SUBNET="${KUBE_POD_SUBNET:-10.244.0.0/16}"
KUBE_SERVICE_SUBNET="${KUBE_SERVICE_SUBNET:-10.96.0.0/16}"
KUBE_IMAGE_REPO="${KUBE_IMAGE_REPO:-registry.aliyuncs.com/k8sxio}"
KUBE_NETWORK="${KUBE_NETWORK:-flannel}"
KUBE_INGRESS="${KUBE_INGRESS:-nginx}"
KUBE_MONITOR="${KUBE_MONITOR:-prometheus}"
KUBE_STORAGE="${KUBE_STORAGE:-rook}"
KUBE_LOG="${KUBE_LOG:-elasticsearch}"
KUBE_UI="${KUBE_UI:-dashboard}"
KUBE_ADDON="${KUBE_ADDON:-metrics-server}"
KUBE_FLANNEL_TYPE="${KUBE_FLANNEL_TYPE:-vxlan}"

# 定义的master和worker节点地址,以逗号分隔
MASTER_NODES="${MASTER_NODES:-}"
WORKER_NODES="${WORKER_NODES:-}"

# 定义在哪个节点上进行设置
MGMT_NODE="${MGMT_NODE:-127.0.0.1}"

# 节点的连接信息
SSH_USER="${SSH_USER:-root}"
SSH_PASSWORD="${SSH_PASSWORD:-}"
SSH_PRIVATE_KEY="${SSH_PRIVATE_KEY:-}"
SSH_PORT="${SSH_PORT:-22}"
SUDO_USER="${SUDO_USER:-root}"

# 节点设置
HOSTNAME_PREFIX="${HOSTNAME_PREFIX:-k8s}"

# 脚本设置
GITHUB_PROXY="${GITHUB_PROXY:-https://gh.lework.workers.dev/}"
GCR_PROXY="${GCR_PROXY:-k8sgcr.lework.workers.dev}"
SKIP_UPGRADE_PLAN=${SKIP_UPGRADE_PLAN:-false}

离线部署

注意, 脚本执行的宿主机上,需要安装 tar 命令,用于解压离线包。 详细部署请见: https://lework.github.io/2020/10/18/kainstall-offline/

  1. 下载指定版本的离线包

    wget http://kainstall.oss-cn-shanghai.aliyuncs.com/1.20.4/centos7.tgz
    

    更多离线包信息,见 kainstall-offline 仓库

  2. 初始化集群

    指定 --offline-file 参数。

    bash kainstall.sh init \
      --master 192.168.77.130,192.168.77.131,192.168.77.132 \
      --worker 192.168.77.133,192.168.77.134 \
      --user root \
      --password 123456 \
      --version 1.20.4 \
      --upgrade-kernel \
      --10years \
      --offline-file centos7.tgz
    
  3. 添加节点

    指定 --offline-file 参数。

    bash kainstall.sh add \
      --master 192.168.77.135 \
      --worker 192.168.77.136 \
      --user root \
      --password 123456 \
      --version 1.20.4 \
      --offline-file centos7.tgz
    

sudo 特权

创建 sudo 用户

useradd test
passwd test --stdin <<< "12345678"
echo 'test    ALL=(ALL)   ALL' >> /etc/sudoers

sudo 参数

  • --sudo 开启 sudo 特权
  • --sudo-user 指定 sudo 用户, 默认是 root
  • --sudo-password 指定 sudo 密码

示例

# 初始化
bash kainstall.sh init \
  --master 192.168.77.130,192.168.77.131,192.168.77.132 \
  --worker 192.168.77.133,192.168.77.134 \
  --user test \
  --password 12345678 \
  --port 22 \
  --version 1.20.4 \
  --sudo \
  --sudo-user root \
  --sudo-password 12345678

# 添加
bash kainstall.sh add \
  --master 192.168.77.135 \
  --worker 192.168.77.136 \
  --user test \
  --password 12345678 \
  --port 22 \
  --version 1.20.4 \
  --sudo \
  --sudo-user root \
  --sudo-password 12345678

# 更新脚本文件
bash kainstall.sh update

10年证书期限

注意: 此操作需要联网下载。

使用 kubeadm-certs 项目编译的 kubeadm 客户端, 其修改了 kubeadm 源码,将 1 年期限修改成 10 年期限,具体信息见仓库介绍。

在初始化或添加时,加上 --10years 参数,就可以使用kubeadm 10 years 的客户端

示例

# 初始化
bash kainstall.sh init \
  --master 192.168.77.130,192.168.77.131,192.168.77.132 \
  --worker 192.168.77.133,192.168.77.134 \
  --user root \
  --password 123456 \
  --port 22 \
  --version 1.20.4 \
  --10years
  
# 添加
bash kainstall.sh add \
  --master 192.168.77.135 \
  --worker 192.168.77.136 \
  --user root \
  --password 123456 \
  --port 22 \
  --version 1.20.4 \
  --10years

联系方式

License

MIT

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].