养浩然之气,做博学之人
准备三台CentOS服务器/虚拟机,可以使用Vimware创建三台虚拟机
服务器环境设置centos7+ 内核3.10+
查看内核:
uname -sr Linux 3.10.0-514.el7.x86_64
IP | Name | Node |
192.168.1.110 | docker110 | 主master、etcd、worker |
192.168.1.111 | docker111 | 副master、etcd、worker |
192.168.1.112 | docker112 | 副master、etcd、worker |
192.168.1.113 | docker113 | worker |
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=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
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-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
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
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源下载工具太慢,建议配置阿里云或者网易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
#关闭防火墙并禁止自启 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
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
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 条评论