-
Notifications
You must be signed in to change notification settings - Fork 201
Before deploy
zhangguanzhang edited this page Aug 3, 2020
·
22 revisions
如果是个人笔记本虚拟化出虚机可能会性能损耗导致卡,apiserver会刷错误,或者pod工作不正常,建议单独的机器去虚拟化,配置建议最少4c8g。下面是我部署的配置,单台master也可以部署。另外这里是每个node上都有kubelet,因为为以后的kind:APIService
准备的
IP | Hostname | CPU | Memory |
---|---|---|---|
172.16.1.3 | k8s-m1 | 2 | 4G |
172.16.1.4 | k8s-m2 | 2 | 4G |
172.16.1.5 | k8s-m3 | 2 | 4G |
172.16.1.6 | k8s-n1 | 2 | 4G |
172.16.1.7 | k8s-n1 | 2 | 4G |
- 机器都配置好静态ip,而不是用dhcp
-
/etc/resolv.conf
改成内网的dns或者不是纯内网环境则使用公网的,确保/etc/resolv.conf
里没有nameserver 127.0.0.x
和search
的行 - 如果纯内网则准备一个ntp server,因为集群是tls的时间误差会认证失败
在单独一台机器或者k8s-m1上使用git
下载剧本,-b后面的分支对应github页面的分支,下载v1.14就改成-b v1.14
每次更新基本就是换下二进制文件,配置文件只会优化并且同一个大版本内是完全向后兼容的,各个分支的版本见页面README里的说明,master为最新版本
yum install -y git && \
git clone --recurse-submodules https://github.com/zhangguanzhang/Kubernetes-ansible.git \
-b v1.16
进入剧本目录
cd Kubernetes-ansible
-
inventory
目录存放了简单的example可以参考下,这里介绍下一些其他场景。 - 如果master的机器网卡名不一样可以下面这样写
INTERFACE_NAME
-
[etcd]
不写的话默认在master的每个成员上部署,clusterName
为etcd的集群名字 - 如果机器系统准备好的时候就设置了hostname则删掉
hostname=xxx
的部分
[master]
172.16.1.3 hostname=k8s-m1 nodename=172.16.1.3 clusterName=etcd-001 INTERFACE_NAME=ens33
172.16.1.4 hostname=k8s-m2 nodename=172.16.1.4 clusterName=etcd-002 INTERFACE_NAME=ens37
172.16.1.5 hostname=k8s-m3 nodename=172.16.1.5 clusterName=etcd-003 INTERFACE_NAME=enp61s0f3
如果每台机器密码不一样参照inventory/hosts
最下面那样写
这里介绍一些可能需要修改的字段
-
ansible_ssh_pass
为ansible基于ssh的密码 -
VIP
为HA的vip,这里我看到很多人VIP瞎写缺少基本的网络知识,我部署的环境网络掩码是24位,网关是172.16.1.254
,也就是说VIP只可能在172.16.1.x里取。不会算的在网上找个在线cidr计算下,这里不要乱写ip。这里我环境的VIP是172.16.1.240,可以在一个机器上使用ip addr add $VIP/$MASK dev $interface
手动添加vip后另一个机器ping下看看能不能通,能就代表能使用,测试完后把add改为del删除vip。 -
certSANs
是证书里的域名和预留ip,默认的不要动,只能新加 -
nodeStatusUpdate
见 https://github.com/zhangguanzhang/Kubernetes-ansible/wiki/nodeStatusUpdate -
KUBE_VERSION
和ETCD_version
是给ds的yaml用,二进制需要改版本的话改下载脚本而不是这里,以及这俩变量用来判断渲染一些yaml文件 -
flanneld.type
如果不是云上而是在自己的机房或者虚拟化虚机跑, 可以把vxlan
模式改成host-gw
模式 - 如果未来会部署多套集群,pod和svc的cidr最好要提前分配下不要整成默认的10.96和10.244,可能未来会把两个集群的pod整成互通,关于cidr不要乱写,例如
10.95.0.0/12
实际上是在10.80.0.0/12
的范围里,不会确定可以在线找个cidr计算下 - 某些用户例如三台机器都是master+node,没有纯node,想在ipvs模式下从VIP:nodePort去访问集群暴露的服务的话, 记得
VIP_NETMASK
改成32,原因见 https://github.com/kubernetes/kubernetes/issues/75443 ,不改掩码的话也可以配置roles/CoreAddons/templates/kube-proxy.conf.j2
指定bind范围
nodePortAddresses:
- 172.16.1.0/24 #根据实际cidr写
bash scripts/Install-ansible.sh
离线安装ansible的话可以在页面找最新版本 https://releases.ansible.com/ansible/rpm/release/epel-7-x86_64/, 把rpm包先下载下来用yum解决依赖
yum install wget -y 1 > /dev/null
wget https://releases.ansible.com/ansible/rpm/release/epel-7-x86_64/ansible-2.8.5-1.el7.ans.noarch.rpm
yum localinstall ansible-2.8.5-1.el7.ans.noarch.rpm -y
ansible all -m ping