简介
kubeasz项目致力于提供快速部署高可用k8s集群的工具, 同时也努力成为k8s实践、使用的参考书;基于二进制方式部署和利用ansible-playbook实现自动化;既提供一键安装脚本, 也可以根据安装指南分步执行安装各个组件。
部署结构
角色 | 数量 | 描述 | 配置 |
---|---|---|---|
部署节点 | 1 | 安装kubeasz,部署k8s集群。 | 2C 4G 50GB |
etcd节点 | 3 | 集群的数据库节点,数量为奇数。 | 2C 4G 50GB |
master节点 | 2 | 安装schedule, controller, api-server的管理节点。多台高可用,测试用2台。 | 4C 8G 100GB |
node节点 | 2 | 安装kubelet, kube-proxy的工作节点。数量众多,性能高配。测试用2台。 | 8C 16G 200GB |
安装kubeasz
# 下载shell脚本
export release=3.3.1
wget https://github.com/easzlab/kubeasz/releases/download/${release}/ezdown
chmod +x ./ezdown
# 下载集群相关的bin文件和镜像
./ezdown -D
# 启动一个kubeasz部署容器
./ezdown -S
创建集群
# 创建新集群配置文件 k8s-cluster
docker exec -it kubeasz ezctl new k8s-cluster
cd /etc/kubeasz/clusters/k8s-cluster ; ls
# 安装配置和集群配置
config.yml hosts
集群配置
主要修改集群服务器的IP地址和二进制目录,其它可以默认:
vim /etc/kubeasz/clusters/k8s-cluster/hosts
# 'etcd' cluster should have odd member(s) (1,3,5,...)
[etcd]
192.168.100.151
192.168.100.152
192.168.100.153
# master node(s)
[kube_master]
192.168.100.161
192.168.100.162
# work node(s)
[kube_node]
192.168.100.171
192.168.100.172
# Binaries Directory
bin_dir="/usr/local/bin"
集群免密登录
将上面列出的7台服务器IP和自身192.168.100.150进行免密登录,和python链接。使得ansible得以工作:
# $IP为所有节点地址包括自身,按照提示输入yes 和root密码
# 为每个节点设置python软链接
for IP in {150,151,152,153,161,162,171,172}
do
ssh-copy-id 192.168.100.$IP
ssh 192.168.100.$IP ln -s /usr/bin/python3 /usr/bin/python
done
config配置
可根据需要配置。以下为示例,插件全部关闭,以后自行安装:
vim /etc/kubeasz/clusters/k8s-cluster/config.yml
# k8s 集群 master 节点证书配置,可以添加多个ip和域名(比如增加公网ip和域名)
MASTER_CERT_HOSTS:
# 设置为负载均衡与高可用的VIP
- "192.168.100.145"
- "k8s.easzlab.io"
# node节点最大pod 数
MAX_PODS: 256
# coredns 自动安装
dns_install: "no"
ENABLE_LOCAL_DNS_CACHE: false
# metric server 自动安装
metricsserver_install: "no"
metricsVer: "v0.5.2"
# dashboard 自动安装
dashboard_install: "no"
dashboardVer: "v2.5.1"
部署集群
部署环节可分为7步,需要前一步正确运行完,才可以进行下一步。每步运行前5秒可取消:
01. prepare.yml
02. etcd.yml
03. runtime.yml
04. kube-master.yml
05. kube-node.yml
06. network.yml
07. cluster-addon.yml
第一步,安装前检查。会关闭selinux等环境准备工作:
cd /etc/kubeasz/
./ezctl setup k8s-cluster 01
第二步,安装etcd节点:
./ezctl setup k8s-cluster 02
PLAY RECAP ***********************************
192.168.100.151 : ok=10 changed=9
192.168.100.152 : ok=10 changed=8
192.168.100.153 : ok=10 changed=8
第三步,在master和node安装运行时,在config.yml配置时为containerd:
./ezctl setup k8s-cluster 03
第四步,部署管理节点。这步完成就可以使用kubectl了:
./ezctl setup k8s-cluster 04
kubectl get node
NAME STATUS ROLES AGE VERSION
192.168.100.161 Ready,SchedulingDisabled master 48s v1.24.2
192.168.100.162 Ready,SchedulingDisabled master 48s v1.24.2
第五步,部署工作节点。再次查看node安装状态:
./ezctl setup k8s-cluster 05
kubectl get node
NAME STATUS ROLES AGE VERSION
192.168.100.161 Ready,SchedulingDisabled master 4m28s v1.24.2
192.168.100.162 Ready,SchedulingDisabled master 4m28s v1.24.2
192.168.100.171 Ready node 60s v1.24.2
192.168.100.172 Ready node 60s v1.24.2
第六步,部署集群网络。在config.yml配置时为calico。完成这步可以看到pod了:
注意先在部署节点开放5000端口,因为master与node节点需要从部署节点的registry拉取镜像。
firewall-cmd --permanent --add-port=5000/tcp
firewall-cmd --reload
./ezctl setup k8s-cluster 06
kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-kube-controllers-5c8bb696bb-7rf2m 1/1 Running 0 62m
kube-system calico-node-4xpfz 1/1 Running 0 62m
...
节点添加与删除
添加etcd,master,node节点。首先上线新的服务器,更改好主机名,配置IP网络,拷贝免密登录公钥等基础准备:
./ezctl add-etcd k8s-cluster 192.168.100.154
./ezctl add-master k8s-cluster 192.168.100.163
./ezctl add-node k8s-cluster 192.168.100.173
删除etcd,master,node节点。直接对已有节点进行删除:
./ezctl del-etcd k8s-cluster 192.168.100.151
./ezctl del-master k8s-cluster 192.168.100.161
./ezctl del-node k8s-cluster 192.168.100.171