首页
学习
活动
专区
圈层
工具
发布
50 篇文章
1
kubernetes与velero的第一次尝试
2
在Kubernetes中如何针对Namespace进行资源限制?
3
kubernetes之metrics-server安装与配置
4
kubernetes部署metrics-server
5
Kubernetes1.20.9摘掉一个master节点再重新加入(ETCD需要注意的)
6
Kubernetes 1.17.17升级到1.18.20
7
Kubernetes 1.18.20升级到1.19.12
8
Kubernetes 1.19.12升级到1.20.9(强调一下selfLink)
9
Kubernetes 1.16.15升级到1.17.17
10
使用 kainstall 工具一键部署 kubernetes 高可用集群
11
附034.Kubernetes_v1.21.0高可用部署架构二
12
附016.Kubernetes_v1.17.4高可用部署
13
附022.Kubernetes_v1.18.3高可用部署架构一
14
附024.Kubernetes_v1.18.3高可用部署架构二
15
使用 StatefulSet 部署 etcd 集群
16
Kubernetes 稳定性保障手册 -- 极简版
17
Linux(centos7)离现安装kubernetes1.19.2和docker——组件部分
18
docker register 私有仓库部署 - http模式
19
KubeSphere 开源 KubeEye:Kubernetes 集群自动巡检工具
20
K8S 中的 CPUThrottlingHigh 到底是个什么鬼?
21
全链路分布式跟踪系统 Apache SkyWalking 入门教程
22
pod Evicted的状态究竟是何人所为
23
使用 ezctl 工具部署和管理 Kubernetes 集群
24
Kubernetes部署策略详解
25
kubernetes容器探针检测
26
使用Spring Boot实现动态健康检查HealthChecks
27
真一文搞定 ingress-nginx 的使用
28
K8S备份、恢复、迁移神器 Velero
29
一次关于k8s kubectl top 和 contained ps 不一致的问题探究
30
kubernetes备份恢复之velero
31
使用 Velero 进行集群备份与迁移
32
TKE集群中nginx-ingress使用实践
33
使用velero进行kubernetes灾备
34
Kubernetes 映射外部服务
35
运维体系建设套路
36
k8s解决pod调度不均衡的问题
37
ingress中虚拟路径解决方案
38
容器下的两地三中心建设
39
k8s集群外的主机访问pod的解决方案
40
k8s基础-健康检查机制
41
k8s基础-标签使用
42
ingress-nginx请求改写
43
nginx ingress server alias 多域名多证书问题
44
JAVA | Java 解决跨域问题 花式解决跨域问题
45
如何通过ingress-nginx实现应用灰度发布?
46
在Kubernetes(k8s)中使用GPU
47
使用 Prometheus-Operator 监控 Calico
48
使用Kubespray部署Kubernetes集群
49
云原生下的CI/CD:Argo CD 详解,手把手教你入门
50
Pod的健康检查机制
清单首页k8s文章详情

使用 kainstall 工具一键部署 kubernetes 高可用集群

kainstall = kubeadm install kubernetes

使用 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 镜像。

架构

功能

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

默认版本

分类

软件

kainstall 默认版本

软件最新版本

common

docker-ce

latest

common

kubernetes

latest

network

flannel

0.13.0

network

calico

3.16.3

addons

metrics server

0.3.7

ingress

ingress nginx controller

0.40.2

ingress

traefik

2.3.2

monitor

kube_prometheus

0.6.0

log

elasticsearch

7.9.2

storage

rook

1.4.6

storage

longhorn

1.0.2

ui

kubernetes_dashboard

2.0.4

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

使用

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

下载脚本

代码语言:javascript
复制
wget https://cdn.jsdelivr.net/gh/lework/kainstall/kainstall.sh

帮助信息

代码语言:javascript
复制
# 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.
  upgrade         Upgrading kubeadm clusters.
  renew-cert      Renew all available certificates.

Flag:
  -m,--master          master node, default: ''
  -w,--worker          work node, default: ''
  -u,--user            ssh user, default: root
  -p,--password        ssh password,default: 123456
  -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], default: dashboard
  -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.19.3

  [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.19.3

  [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.19.3 --user root --password 123456
  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

初始化集群

代码语言:javascript
复制
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.19.3

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

代码语言:javascript
复制
bash -c "$(curl -sSL https://cdn.jsdelivr.net/gh/lework/kainstall/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.19.3

增加节点

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

代码语言:javascript
复制
# 增加单个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连接信息非默认时请指定

代码语言:javascript
复制
# 删除单个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

重置集群

代码语言:javascript
复制
bash kainstall.sh reset \
  --user root \
  --password 123456 \
  --port 22 \

其他操作

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

注意: 添加组件时请保持节点的内存和cpu至少为2C4G的空闲。否则会导致节点下线且服务器卡死。

代码语言:javascript
复制
# 添加 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

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

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

离线部署

注意

脚本执行的宿主机上,需要安装 tar 命令,用于解压离线包。

详细部署请见: https://lework.github.io/2020/10/18/kainstall-offline/

下载指定版本的离线包

代码语言:javascript
复制
wget http://kainstall.oss-cn-shanghai.aliyuncs.com/1.19.3/centos7.tgz

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

初始化集群

指定 --offline-file 参数。

代码语言:javascript
复制
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 \
  --offline-file centos7.tgz 

添加节点

指定 --offline-file 参数。

代码语言:javascript
复制
bash kainstall.sh add \
  --master 192.168.77.135 \
  --worker 192.168.77.136 \
  --offline-file centos7.tgz

sudo 特权

创建 sudo 用户

代码语言:javascript
复制
useradd test
passwd test --stdin <<< "12345678"
echo 'test    ALL=(ALL)   ALL' >> /etc/sudoers

sudo 参数

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

示例

代码语言:javascript
复制
# 初始化
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.19.3 \
  --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.19.3 \
  --sudo \
  --sudo-user root \
  --sudo-password 12345678

10年证书期限

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

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

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

示例

代码语言:javascript
复制
# 初始化
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.19.3 \
  --10years
  
# 添加
bash kainstall.sh add \
  --master 192.168.77.135 \
  --worker 192.168.77.136 \
  --user root \
  --password 123456 \
  --port 22 \
  --version 1.19.3 \
  --10years

下一篇: Centos7 优化→

下一篇
举报
领券