使用kubeasz工具安装k8s集群

项目github地址https://github.com/easzlab/kubeasz

一、集群规划和安装前准备工作

1. 集群规划

角色 数量 描述
管理节点 1 运行ansible/ezctl脚本,可复用master节点或者单独一台
etcd节点 3 etcd集群,奇数节点
master节点 3 高可用集群至少2台master
node节点 N台 根据需求自行增减节点

2. 各节点时间同步

2.1 第一种同步方法,各节点执行如下命令

1
ntpdate time.windows.com

2.2 第二种是安装chrony
待补充..

3. 内核升级到最新

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 载入公钥
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
yum --disablerepo=\* --enablerepo=elrepo-kernel install -y kernel-lt.x86_64
yum remove kernel-tools-libs.x86_64 kernel-tools.x86_64 -y
yum --disablerepo=\* --enablerepo=elrepo-kernel install -y kernel-lt-tools.x86_64

#查看默认启动顺序
awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg
CentOS Linux (4.4.183-1.el7.elrepo.x86_64) 7 (Core)
CentOS Linux (3.10.0-327.10.1.el7.x86_64) 7 (Core)
CentOS Linux (0-rescue-c52097a1078c403da03b8eddeac5080b) 7 (Core)
#默认启动的顺序是从0开始,新内核是从头插入(目前位置在0,而4.4.4的是在1),所以需要选择0。
grub2-set-default 0
#重启并检查
reboot

4. 管理节点配置

4.1 安装ansible工具

管理节点依赖ansible批量操作工具来管理各节点,所以需要安装ansible

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 注意pip 21.0以后不再支持python2和python3.5,需要如下安装
# To install pip for Python 2.7 install it from https://bootstrap.pypa.io/2.7/ :
# 第一种安装
curl -O https://bootstrap.pypa.io/pip/2.7/get-pip.py
python get-pip.py
#或者第二种安装
yum install -y epel-release
yum install -y python-pip

# 升级pip
python -m pip install --upgrade "pip < 21.0"
pip install -U 'setuptools<45'

# pip安装ansible(国内如果安装太慢可以直接用pip阿里云加速)
pip install ansible -i https://mirrors.aliyun.com/pypi/simple/

4.2 配置各节点免秘钥登录

管理节点需要管理其他节点,方便脚本执行等,配置管理节点可免秘钥登录到其他各节点,包括自身

1
2
3
4
5
6
# 更安全 Ed25519 算法
ssh-keygen -t ed25519 -N '' -f ~/.ssh/id_ed25519
# 或者传统 RSA 算法
ssh-keygen -t rsa -b 2048 -N '' -f ~/.ssh/id_rsa

ssh-copy-id $IPs #$IPs为所有节点地址包括自身,按照提示输入yes 和root密码

4.3 下载准备安装所需软件

下载安装k8s需要的所有文件,文件下载目录/etc/kubeasz

1
2
3
4
5
6
# 下载工具脚本easzup,举例使用kubeasz版本2.0.2
export release=3.0.0
curl -C- -fLO --retry 3 https://github.com/easzlab/kubeasz/releases/download/${release}/ezdown
chmod +x ./ezdown
# 使用工具脚本下载
./ezdown -D

二、 使用kubeasz工具的ezctl命令安装k8s集群

ezctl命令可以创建多个集群,通过不同的集群名称区分不同的集群,现在创建第一个k8s集群,假设集群名k8s-01

生成集群创建配置文件

通过命令生成k8s-01集群创建需要的配置文件,生成的配置文件保存在/etc/kubeasz/clusters/k8s-01/,在目录下我们会看到两个配置文件hostsconfig.yml

1
2
3
# 生成创建集群的配置文件
cd /etc/kubeasz
ezctl new k8s-01

根据集群规划修改配置文件

生成的两个文件是初始配置文件。我们需要根据集群的规划进行自定义修改或调整
hosts文件主要配置的信息是集群各节点的服务器信息
config.yml文件主要配置创建k8s时的一些组件配置信息

开始安装

安装很简单,可以一步一步的安装,也可以通过all参数一次安装完成,具体的安装使用可以通过帮助命令查看

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
./ezctl setup --help
Usage: ezctl setup <cluster> <step>
available steps:
01 prepare to prepare CA/certs & kubeconfig & other system settings
02 etcd to setup the etcd cluster
03 runtime to setup the container runtime(docker or containerd)
04 kube-master to setup the master nodes
05 kube-node to setup the worker nodes
06 network to setup the network plugin
07 cluster-addon to setup other useful plugins
all to run 01~07 all at once

examples: ./ezctl setup test-k8s 01
./ezctl setup test-k8s 02
./ezctl setup test-k8s all

我们要创建k8s-01集群,只需要根据帮助文档进行安装

1
2
3
4
5
6
7
8
9
cd /etc/kubeasz
# 一步到位安装
./ezctl setup k8s-01 all

# 分步安装
./ezctl setup k8s-01 01
./ezctl setup k8s-01 02
...

配置master节点负载均衡

  • 修改host文件,修改ex-lb配置段

  • 执行ex-lb相关的roles任务

    1
    2
    3

    ansible-playbook -i ../clusters/k8s-01/hosts ex-lb.yml

  • 执行成功后修改~/.kube/config文件,将server地址修改成hosts里ex-lb段配置的VIP地址和端口号即可

三、 集群管理常见操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
./ezctl --help
Usage: ezctl COMMAND [args]
-------------------------------------------------------------------------------------
Cluster setups:
list to list all of the managed clusters
checkout <cluster> to switch default kubeconfig of the cluster
new <cluster> to start a new k8s deploy with name 'cluster'
setup <cluster> <step> to setup a cluster, also supporting a step-by-step way
start <cluster> to start all of the k8s services stopped by 'ezctl stop'
stop <cluster> to stop all of the k8s services temporarily
upgrade <cluster> to upgrade the k8s cluster
destroy <cluster> to destroy the k8s cluster
backup <cluster> to backup the cluster state (etcd snapshot)
restore <cluster> to restore the cluster state from backups
start-aio to quickly setup an all-in-one cluster with 'default' settings

Cluster ops:
add-etcd <cluster> <ip> to add a etcd-node to the etcd cluster
add-master <cluster> <ip> to add a master node to the k8s cluster
add-node <cluster> <ip> to add a work node to the k8s cluster
del-etcd <cluster> <ip> to delete a etcd-node from the etcd cluster
del-master <cluster> <ip> to delete a master node from the k8s cluster
del-node <cluster> <ip> to delete a work node from the k8s cluster

Extra operation:
kcfg-adm <cluster> <args> to manage client kubeconfig of the k8s cluster

Use "ezctl help <command>" for more information about a given command.

1. 添加和删除master节点

1.1 添加master节点

1
./ezctl add-master k8s-01 172.16.88.113

1.2 删除master节点

1
./ezctl del-master k8s-01 172.16.88.113

2. 添加和删除node节点

2.1 添加node节点
将172.16.88.115添加到k8s-01集群的node节点

1
./ezctl add-node k8s-01 172.16.88.115

2.2 删除node节点

1
./ezctl del-node k8s-01 172.16.88.115

3. 给节点打标签、删除标签

1
2
3
4
5
6
# 打标签
kubectl label node 172.16.88.205 app=ingress-nginx

# 删除标签
kubectl label node 172.16.88.205 app-