Skip to content

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.xsearch的行
  • 如果纯内网则准备一个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/hosts

  • 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最下面那样写

修改group_vars/all.yml

这里介绍一些可能需要修改的字段

  • 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,默认的不要动,只能新加
  • nodeStatusUpdatehttps://github.com/zhangguanzhang/Kubernetes-ansible/wiki/nodeStatusUpdate
  • KUBE_VERSIONETCD_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写

安装ansible

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是否可达机器

ansible all -m ping

下一步--部署