2018-08-03 孙小北

二进制部署k8s集群方案之环境配置及系统初始化

养浩然之气,做博学之人

一、集群机器

准备三台CentOS服务器/虚拟机,可以使用Vimware创建三台虚拟机

服务器环境设置centos7+ 内核3.10+

查看内核:

uname -sr
Linux 3.10.0-514.el7.x86_64
IP
NameNode
192.168.1.110docker110主master、etcd、worker 
192.168.1.111docker111副master、etcd、worker 
192.168.1.112docker112副master、etcd、worker 
192.168.1.113docker113worker 

etcd 集群、master 节点均使用docker110、docker111、docker112,worker 节点在四个Node

二、配置虚拟机网络

虚拟机设置  网络适配器  NAT模式

打开命令窗口:

#查看网络IP
ip a
#
cd /etc/sysconfig/network-scripts
ls
#打开eth0网卡文件
vim ifcfg-eth0

#修改内容如下(没有的增加):

BOOTPROTO=static
IPADDR=192.168.1.110 
GATEWAY=192.168.1.2
NETMASK=255.255.255.0 
DNS1=8.8.8.8
ONBOOT=yes

修改完成,按esc键盘:

:wq
systemctl restart network
# 确保状态是active
systemctl status network
# 确保可以ping通外网和主机
ping www.xiaowangyun.com

所有节点都要确保网络配置成功。

如果没有eth0网卡,参照处理方法:虚拟机配置网络找不到eth0网卡。

三、设置Hostname

添加:HOSTNAME=docker110.localdomain

#追加>>  #覆盖>

#docker110:

echo "HOSTNAME=docker110.localdomain" >> /etc/sysconfig/network
echo "docker110" > /proc/sys/kernel/hostname

#docker111

echo "HOSTNAME=docker111.localdomain" >> /etc/sysconfig/network
echo "docker111" > /proc/sys/kernel/hostname

#docker112

echo "HOSTNAME=docker112.localdomain" >> /etc/sysconfig/network
echo "docker112" > /proc/sys/kernel/hostname

#docker113

echo "HOSTNAME=docker113.localdomain" >> /etc/sysconfig/network
echo "docker113" > /proc/sys/kernel/hostname

#所有节点

echo "192.168.1.110 docker110" >> /etc/hosts
echo "192.168.1.111 docker111" >> /etc/hosts
echo "192.168.1.112 docker112" >> /etc/hosts
echo "192.168.1.113 docker113" >> /etc/hosts
#重启虚拟机
reboot

四、添加k8s和docker账户

sudo useradd -m k8s
# 为 k8s 账户设置密码
sudo sh -c 'echo 123456 | passwd k8s --stdin'
#设置无密码 
sudo:sudo grep '%wheel.*NOPASSWD: ALL' /etc/sudoers
sudo gpasswd -a k8s wheel
#每台机器上添加 docker 账户,将 k8s 账户添加到 docker 组中,同时配置 dockerd 参数
sudo useradd -m docker
sudo gpasswd -a k8s docker

五、配置ssh免密登录(主Master节点)

#生成秘钥
ssh-keygen -t rsa
#连按三个回车
ssh-copy-id root@docker110
ssh-copy-id root@docker111
ssh-copy-id root@docker112
ssh-copy-id root@docker113
#需要输入确认密码
ssh-copy-id k8s@docker110
ssh-copy-id k8s@docker111
ssh-copy-id k8s@docker112
ssh-copy-id k8s@docker113

六、所有节点创建k8s目录

mkdir -p /opt/k8s/bin
chown -R k8s /opt/k8s
mkdir -p /etc/kubernetes/cert
chown -R k8s /etc/kubernetes
mkdir -p /etc/etcd/cert
chown -R k8s /etc/etcd/cert
mkdir -p /var/lib/etcd && chown -R k8s /etc/etcd/cert

七、将可执行文件路径 /opt/k8s/bin 添加到 PATH 变量中(所有节点)

sudo sh -c "echo 'PATH=/opt/k8s/bin:$PATH:$HOME/bin:$JAVA_HOME/bin' >>/root/.bashrc"
echo 'PATH=/opt/k8s/bin:$PATH:$HOME/bin:$JAVA_HOME/bin' >>~/.bashrc

八、配置yum源

系统自动yum源下载工具太慢,建议配置阿里云或者网易163的yum源

九、安装工具和依赖包 所有节点

#安装常用工具
yum -y install vim
yum -y install lrzsz
yum -y install unzip zip
yum -y install ntp
#安装依赖包
yum install -y epel-release
yum install -y conntrack ipvsadm ipset jq sysstat curl iptables libseccomp

十、关闭防火墙和swap 所有节点

#关闭防火墙并禁止自启
systemctl stop firewalld && systemctl disable firewalld
sudo iptables -F && sudo iptables -X && sudo iptables -F -t nat && sudo iptables -X -t nat
sudo sudo iptables -P FORWARD ACCEPT
#关闭Linux 安全内核selinux  
#关闭 SELinux,否则后续 K8S 挂载目录时可能报错 Permission denied
setenforce 0
sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config
#关闭swap
#如果开启了 swap 分区,kubelet 会启动失败(可以通过将参数 --fail-swap-on 设置为 false 来忽略 swap on),故需要在每台机器上关闭 swap 分区
swapoff -a
#为了防止开机自动挂载 swap 分区,可以注释 /etc/fstab 中相应的条目:
sed -i '/ swap / s/^/#/' /etc/fstab
#关闭 dnsmasq
#linux 系统开启了 dnsmasq 后(如 GUI 环境),将系统 DNS Server 设置为 127.0.0.1,这会导致 docker 容器无法解析域名,需要关闭它
sudo systemctl stop dnsmasq 
sudo systemctl disable dnsmasq

十一、同步集群时间

设置系统时区(所有节点)

# 调整系统 TimeZone
sudo timedatectl set-timezone Asia/Shanghai

(1)主Master

systemctl enable ntpd
vim /etc/ntp.conf

#手动添加、#增加时间源:ntp.conf增加内容如下:

#restrict default nomodify notrap nopeer noquery
server 127.127.1.0
fudge 127.127.1.0 stratum

重启ntpd:

systemctl restart ntpd

(2)其他节点

systemctl stop  ntpd
ntpdate 192.168.1.110

设置自动同步时间(每30分钟)

echo "*/30 * * * * root /usr/sbin/ntpdate 192.168.1.110" >> /etc/crontab

十二、设置kubernetes.conf的系统参数  所有节点

cat > /etc/sysctl.d/kubernetes.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
vm.swappiness=0
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_watches=89100
EOF
#sudo cp kubernetes.conf  /etc/sysctl.d/kubernetes.conf
sudo sysctl -p /etc/sysctl.d/kubernetes.conf
sudo mount -t cgroup -o cpu,cpuacct none /sys/fs/cgroup/cpu,cpuacct

十三、分发集群环境变量定义脚本(主Master)

source environment.sh
for node_ip in ${NODE_IPS[@]}
  do
      echo ">>> ${node_ip}"
      scp environment.sh k8s@${node_ip}:/opt/k8s/bin/ 
      ssh k8s@${node_ip} "chmod +x /opt/k8s/bin/*"
  done

先创建environment.sh脚本

# 生成 EncryptionConfig 所需的加密 key
ENCRYPTION_KEY=$(head -c 32 /dev/urandom | base64)


###################  网络配置   #########################################
# 最好使用 当前未用的网段 来定义服务网段和 Pod 网段
# 服务网段,部署前路由不可达,部署后集群内路由可达(kube-proxy 和 ipvs 保证)
SERVICE_CIDR="10.0.0.0/16"

# Pod 网段,建议 /16 段地址,部署前路由不可达,部署后集群内路由可达(flanneld 保证)
CLUSTER_CIDR="192.30.0.0/16"

# 服务端口范围 (NodePort Range)
export NODE_PORT_RANGE="8400-9000"

################## 集群节点配置 ########################################
# 集群各机器 IP 数组
export NODE_IPS=(192.168.1.110 192.168.1.111 192.168.1.112 192.168.1.113)
# 集群各 IP 对应的 主机名数组
export NODE_NAMES=(docker110 docker111 docker112 docker113)

# 集群MASTER机器 IP 数组
export MASTER_IPS=(192.168.1.110 192.168.1.111 192.168.1.112)
# 集群MASTER各 IP 对应的 主机名数组
export MASTER_NAMES=(docker110 docker111 docker112)

# kube-apiserver 的 VIP(HA 组件 keepalived 发布的 IP)
export MASTER_VIP=192.168.1.253
# kube-apiserver VIP 地址(HA 组件 haproxy 监听 8443 端口)
export KUBE_APISERVER="https://${MASTER_VIP}:8443"
# HA 节点,VIP 所在的网络接口名称
export VIP_IF="eth0"

######################  ETCD配置 #######################################
#
export IFACE="eth0"
# ETCD机器 IP 数组
export ETCD_IPS=(192.168.1.110 192.168.1.111 192.168.1.112)
# ETCD各 IP 对应的 主机名数组
export ETCD_NAMES=(docker110 docker111 docker112)
# etcd 集群服务地址列表
export ETCD_ENDPOINTS="https://192.168.1.110:2379,https://192.168.1.111:2379,https://192.168.1.112:2379"
# etcd 集群间通信的 IP 和端口
export ETCD_NODES="docker110=https://192.168.1.110:2380,docker111=https://192.168.1.111:2380,docker112=https://192.168.1.112:2380"

###################  flanneld配置 ###################################
# flanneld 网络配置前缀
export FLANNEL_ETCD_PREFIX="/kubernetes/network"

#####################  kubernetes配置 #################################
# kubernetes 服务 IP (一般是 SERVICE_CIDR 中第一个IP)
export CLUSTER_KUBERNETES_SVC_IP="10.0.0.1"

#####################  DNS配置 ########################################
# 集群 DNS 服务 IP (从 SERVICE_CIDR 中预分配)
export CLUSTER_DNS_SVC_IP="10.0.0.2"

# 集群 DNS 域名
export CLUSTER_DNS_DOMAIN="cluster.local."

#####################  PATH配置 ########################################
# 将二进制目录 /opt/k8s/bin 加到 PATH 中
export PATH=/opt/k8s/bin:$PATH


编辑:孙小北

本文地址: https://www.xiaowangyun.com/wyblog/detail/?id=224

版权归属: www.xiaowangyun.com   转载时请以链接形式注明出处

0 条评论

快来评论

物以类聚

最新评论

2017-10-06

一辈子不长,只有珍惜了,才不至于后悔。

2017-10-06

懂得感恩,才能走得更远。

标签云

归档

取消

感谢您的支持,您的每一次打赏都是一次鼓励!

扫码支持
每一次支持,都是不懈的动力

打开支付宝扫一扫,即可进行扫码打赏哦