Kubernetes高可用部署之环境初始化

举报
长风舞魂 发表于 2018/12/24 05:52:10 2018/12/24
【摘要】 前面我们已经讲过各组件的作用,这一节我们说说K8S的环境初始化,大家知道K8S对系统是有初始要求的,此次部署我们要全手动完成,借助第三方工具也可以比如kuberadmin、rancher等。但这样做坏处也是多多,一个不方便和我们理解K8S的运作原理,另一个这些方便本身也会占用系统资源,并不适用于生产环境。再一个虽然自动部署有效率,但是往往我们还是修改配置。与其这样,不如我们从...

        前面我们已经讲过各组件的作用,这一节我们说说K8S的环境初始化,大家知道K8S对系统是有初始要求的,此次部署我们要全手动完成,借助第三方工具也可以比如kuberadmin、rancher等。但这样做坏处也是多多,一个不方便和我们理解K8S的运作原理,另一个这些方便本身也会占用系统资源,并不适用于生产环境。再一个虽然自动部署有效率,但是往往我们还是修改配置。与其这样,不如我们从头做起。

        我默认大家做K8S的理论知道有所掌握,现在做的只是让你更深刻理解K8S及其插件。Master至少1核心2G内存。推荐2核心4G内存。Node至少1核心2G内存,我也推荐2核心4G内存,其实Node要根据运行的APP来匹配的。为了方便建议2核心4GB内存。系统环境要求类Unix_64位版本,这里我使用的是CentOS7.564位。我是采用本机win7(E3-1231V3CPU+16G)虚拟机Vmare。使用其他虚拟方案一样的,不影响。如vagrant,Esxi,VboX等。

        虚拟机三台:分别node1:192.168.99.110

                                   node2:192.168.99.111

                                   node3:192.168.99.112

        三台机器相互备份,都是master,都是node,任意一台服务宕机,另外两台重新Leader选举。有人说可以做到POD里面,对此我不敢苟同,三台机器做高可用,当然要地位平等,而且维护起来也方便。网络配置大家按自己要求喜欢。

设置hostname并把这些写到每台机器的/etc/hosts文件里面。然后增加K8s运行账户,这个你随意我写的k8s,最好再建个Docker运行账户,并把K8S账户加进去。LINUX基础指令就不写了,自行搜索吧。如果增加账户和加入group都不会,这文章其实不用看了。^_^    

        安装依赖,以Centos(我默认你root账户登录)为例:

                        yum install -y epel-release(为什么要安装,因为如果你这个不安装,那么在安装docker后,使用kubectl createPOD的时候,会让pod一直处于CreatingContainer状态。很多网文没有重点说明这一项。)

                        yum install -y conntrack ipvsadm ipset jq sysstat curl iptables libseccomp(这是IPVS)

          关闭防火墙、swap和selinux:

            #systemctl stop firewalld; systemctl disable firewalld; iptables -F && sudo iptables -X && sudo iptables -F -t nat && sudo iptables -X -t nat; iptables -P FORWARD ACCEPT; swapoff -a; sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab; setenforce 0; grep SELINUX /etc/selinux/config

        重新加载内核模块心如防万一:

        #modprobe br_netfilter; modprobe ip_vs

           设置系统参数:

vim k8s.conf

net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0
vm.swappiness=0
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_watches=89100
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=2310720

复制:

cp kubernetes.conf  /etc/sysctl.d/k8s.conf; sysctl -p /etc/sysctl.d/k8s.conf; mount -t cgroup -o cpu,cpuacct none /sys/fs/cgroup/cpu,cpuacct

 解释:tcp_tw_recycle 和 K8S 的 NAT 冲突,否则会导致服务不通 ,另外关闭IPV6,我们用netstat -tpln | grep XXX在监听端口的时候,常常看到ipv6的端口,而看不到IPV4的端口,那是因为ipv6兼容于ipv4,所以看不到。但为了防止很多莫名奇妙的BUG,我们这里关闭掉IPV6。

同步时区: 用timedatectl 然后重启,更新时间ntpdate xxx.com(这里的用的阿里的时间服务器)

因为我们要做三台高可用,相互备份,所以我们统一在每台机器上放二进制文件运行目录,我放的/opt/k8s/bin,没有自己建;再建个放证书的目录。/我放在/etc/k8s/cert(数据库etcd证书也放在这里不堪一击)

环境检查:

#curl https://raw.githubusercontent.com/docker/docker/master/contrib/check-config.sh > check-config.sh

# bash ./check-config.sh

更新一下yum -y update

这样,我们初始化环境就算完成了。保持一个干净的系统


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。