脚本一键安装k8s集群
使用kubeadm-ha脚本一键安装K8S前情提示以前安装k8s集群的时候使用的是k8s官网的教程 使用的镜像源都是国外的 速度慢就不说了 还有一些根本就下载不动 导致安装失败 最后在群里小伙伴(蘑菇博客交流群/@你钉钉响了)的建议下使用一个开源的一键安装k8s的脚本就好了起来了 Github地址:https://github.com/TimeBye/kubeadm-ha环境准备官网的安装说明也很
使用kubeadm-ha脚本一键安装K8S
前情提示
以前安装k8s集群的时候使用的是k8s官网的教程 使用的镜像源都是国外的 速度慢就不说了 还有一些根本就下载不动 导致安装失败 最后在群里小伙伴(蘑菇博客交流群/@你钉钉响了)的建议下使用一个开源的一键安装k8s的脚本就好了起来了 Github地址:https://github.com/TimeBye/kubeadm-ha
环境准备
官网的安装说明也很简单但是还有些细节还是没有提到 所以我自己照着官网的教程 补充了一些细节
硬件系统要求
- Master节点:2C4G +
- Worker节点:2C4G +
使用centos7.7安装请按上面配置准备好3台centos,1台作为Master节点,2台Worker节点
本方式为1主2worker的配置
这是我的各个节点的配置
主机名 | ip | 配置 |
---|---|---|
master1 | 192.168.44.155 | 2C4G |
node1 | 192.168.44.156 | 2C2G |
node2 | 192.168.44.157 | 2C2G |
centos准备
在安装之前需要准备一些基础的软件环境用于下载一键安装k8s的脚本和编辑配置
centos网络准备
安装时需要连接互联网下载各种软件 所以需要保证每个节点都可以访问外网
ping baidu.com
建议关闭centos的防火墙
systemctl stop firewalld && systemctl disable firewalld && systemctl status firewalld
同时需要保证各个节点间可以相互ping通
ping 其他节点ip
CentOS软件准备
用 ssh 连接到 Master 节点上安装 Git
yum install git -y
部署k8s前配置
下载部署脚本
在Master节点clone安装脚本 脚本地址
git clone --depth 1 https://github.com/TimeBye/kubeadm-ha
进入到下载的部署脚本的目录
cd kubeadm-ha
安装 Ansible 运行环境
在master1节点安装Ansible环境
sh ansible/install.sh
修改安装的配置文件
集群规划
参考本项目 example
文件夹下的主机清单文件(ansible inventory),修改各机器的访问地址、用户名、密码,并维护好各节点与角色的关系。文件中配置的用户必须是具有 root 权限的用户。项目预定义了6个例子,请完成集群规划后进行修改,生产环境建议一个节点只是一个角色。
- 搭建集群后有以下两种“样式”显示,请自行选择:
-
样式一
NAME STATUS ROLES AGE VERSION 192.168.56.11 Ready control-plane,etcd,master,worker 7m25s v1.20.6 192.168.56.12 Ready control-plane,etcd,master,worker 5m18s v1.20.6 192.168.56.13 Ready control-plane,etcd,master,worker 5m18s v1.20.6 192.168.56.14 Ready worker 4m37s v1.20.6
-
样式二
NAME STATUS ROLES AGE VERSION node1 Ready control-plane,etcd,master,worker 7m25s v1.20.6 node2 Ready control-plane,etcd,master,worker 5m18s v1.20.6 node3 Ready control-plane,etcd,master,worker 5m18s v1.20.6 node4 Ready worker 4m37s v1.20.6
-
节点分配 | 样式一 | 样式二 |
---|---|---|
单节点 | hosts.allinone.ip | hosts.allinone.hostname |
单主多节点 | hosts.s-master.ip | hosts.s-master.hostname |
多主多节点 | hosts.m-master.ip | hosts.m-master.hostname |
三个节点上修改主机名和/etc/hosts
hostnamectl set-hostname <hostname>
cat >> /etc/hosts << EOF
192.168.44.155 master1
192.168.44.156 node1
192.168.44.157 node2
EOF
由于我是一个master两个node的方式构建的centos所以我们需要修改example/hosts.s-master.hostname.ini 文件
vi example/hosts.s-master.hostname.ini
具体要修改的就是ip 和密码 对应节点hosts,对应的其他信息可跟据自己需求修改
我的hosts.s-master.hostname.ini 文件预览
; 将所有节点的信息在这里填写
; 第一个字段 为 kubernetes 节点 nodeName,注意必须由小写字母、数字,“-”或“.”组成,并且必须以小写字母或数字开头和结尾
; 第二个字段 ansible_host 为节点内网IP
; 第三个字段 ansible_port 为节点 sshd 监听端口
; 第四个字段 ansible_user 为节点远程登录用户名
; 第五个字段 ansible_ssh_pass 为节点远程登录用户密码
[all]
master1 ansible_host=192.168.44.155 ansible_port=22 ansible_user="root" ansible_ssh_pass="123456"
node1 ansible_host=192.168.44.156 ansible_port=22 ansible_user="root" ansible_ssh_pass="123456"
node2 ansible_host=192.168.44.157 ansible_port=22 ansible_user="root" ansible_ssh_pass="123456"
; 单 master 节点不需要进行负载均衡,lb节点组留空。
[lb]
; 注意etcd集群必须是1,3,5,7...奇数个节点
[etcd]
master1
node1
node2
[kube-master]
master1
[kube-worker]
node1
node2
; 预留组,后续添加master节点使用
[new-master]
; 预留组,后续添加worker节点使用
[new-worker]
; 预留组,后续添加etcd节点使用
[new-etcd]
; 预留组,后续删除worker角色使用
[del-worker]
; 预留组,后续删除master角色使用
[del-master]
; 预留组,后续删除etcd角色使用
[del-etcd]
; 预留组,后续删除节点使用
[del-node]
;-------------------------------------- 以下为基础信息配置 ------------------------------------;
[all:vars]
; 是否跳过节点物理资源校验,Master节点要求2c2g以上,Worker节点要求2c4g以上 false/true
skip_verify_node=true
; kubernetes版本
kube_version="1.20.6"
; 容器运行时类型,可选项:containerd,docker;默认 containerd
container_manager="docker"
; 负载均衡器
; 有 nginx、openresty、haproxy、envoy 和 slb 可选,默认使用 nginx
; 为什么单 master 集群 apiserver 也使用了负载均衡请参与此讨论: https://github.com/TimeBye/kubeadm-ha/issues/8
lb_mode="haproxy"
; 使用负载均衡后集群 apiserver ip,设置 lb_kube_apiserver_ip 变量,则启用负载均衡器 + keepalived
; lb_kube_apiserver_ip="192.168.56.15"
; 使用负载均衡后集群 apiserver port
lb_kube_apiserver_port="8443"
; 网段选择:pod 和 service 的网段不能与服务器网段重叠,
; 若有重叠请配置 `kube_pod_subnet` 和 `kube_service_subnet` 变量设置 pod 和 service 的网段,示例参考:
; 如果服务器网段为:10.0.0.1/8
; pod 网段可设置为:192.168.0.0/18
; service 网段可设置为 192.168.64.0/18
; 如果服务器网段为:172.16.0.1/12
; pod 网段可设置为:10.244.0.0/18
; service 网段可设置为 10.244.64.0/18
; 如果服务器网段为:192.168.0.1/16
; pod 网段可设置为:10.244.0.0/18
; service 网段可设置为 10.244.64.0/18
; 集群pod ip段,默认掩码位 18 即 16384 个ip
kube_pod_subnet="10.244.0.0/18"
; 集群service ip段
kube_service_subnet="10.244.64.0/18"
; 分配给节点的 pod 子网掩码位,默认为 24 即 256 个ip,故使用这些默认值可以纳管 16384/256=64 个节点。
kube_network_node_prefix="24"
; node节点最大 pod 数。数量与分配给节点的 pod 子网有关,ip 数应大于 pod 数。
; https://cloud.google.com/kubernetes-engine/docs/how-to/flexible-pod-cidr
kube_max_pods="110"
; 集群网络插件,目前支持flannel,calico
network_plugin="flannel"
; 若服务器磁盘分为系统盘与数据盘,请修改以下路径至数据盘自定义的目录。
; Kubelet 根目录
kubelet_root_dir="/var/lib/kubelet"
; docker容器存储目录
docker_storage_dir="/var/lib/docker"
; containerd容器存储目录
containerd_storage_dir="/var/lib/containerd"
; Etcd 数据根目录
etcd_data_dir="/var/lib/etcd"
修改完配置文件后建议升级内核 (可选: 升级内核,默认安装集群是不会升级内核的)
ansible-playbook -i example/hosts.s-master.hostname.ini 00-kernel.yml
内核升级完毕后重启所有节点 在master1 node1 node2上执行
reboot
一句命令拥有一个高可用 kubernetes 集群:
-
-
基本配置执行
ansible-playbook -i example/hosts.s-master.hostname.ini 90-init-cluster.yml
-
高级配置执行,注意: 如果安装集群时使用高级配置则以后所有操作都需将
-e @example/variables.yaml
参数添加在ansible-playbook
命令中ansible-playbook -i example/hosts.s-master.hostname.ini -e @example/variables.yaml 90-init-cluster.yml
- 本项目所有可配置项都在
example/variables.yaml
文件中体现,需自定义配置时删除配置项前注释符即可。 - 若
example/hosts.m-master.ip.ini
文件中与example/variables.yaml
变量值冲突时,example/variables.yaml
文件中的变量值优先级最高。
- 本项目所有可配置项都在
-
开始部署k8s
等待所有的节点重启完成后进入脚本目录
cd kubeadm-ha
执行一键部署命令
ansible-playbook -i example/hosts.s-master.hostname.ini 90-init-cluster.yml
查看节点运行情况
kubectl get nodes
等待所有节点ready 即为创建成功
集群重置
如果部署失败了,想要重置整个集群【包括数据】,执行下面脚本
ansible-playbook -i example/hosts.s-master.hostname.ini 99-reset-cluster.yml
更多推荐
所有评论(0)