一、準備工作:
三臺虛擬機:centos7系統(tǒng)

二、開始安裝:
1.設置主機名:

2.修改hosts

3.安裝依賴包
yum install -y conntrack ntpdatentp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git
4.設置防火墻為Iptables并設置空規(guī)則
systemctl stop firewalld?
systemctl disable firewalld
yum -y install iptables-services?
systemctl start iptables?
systemctl enable iptables?
service iptables save
5.關閉SELINUX,關閉swap
setenforce? 0?&&? sed? -i?'s/^SELINUX=.*/SELINUX=disabled/'?/etc/selinux/config
swapoff? -a?&&? sed? -i? '/? swap?/? s/^\(.*\)$/#\1/g'? /etc/fstab
6.調(diào)整內(nèi)核參數(shù),對于K8S
cat? >? kubernetes.conf? <
net.bridge.bridge-nf-call-iptables=1 #重要 開啟網(wǎng)格模式
net.bridge.bridge-nf-call-ip6tables=1 #重要
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0
vm.swappiness=0? #禁止使用swap空間,只有當系統(tǒng)OOM時才允許使用它
vm.overcommit_memory=1? #不檢查物理內(nèi)存是否夠用
vm.panic_on_oom=0? #開啟OOM
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1 #重要,關閉ipv6協(xié)議
net.netfilter.nf_conntrack_max=2310720
EOF
cp? kubernetes.conf??? /etc/sysctl.d/kubernetes.conf
sysctl? -p? /etc/sysctl.d/kubernetes.conf #刷新
刷新時候可能會提示文件不存在,不用管:

7.設置rsyslogd 和system-journald
mkdir?/var/log/journal? #? 持久化保存日志的目錄
mkdir? /etc/systemd/journald.conf.d
cat? >?/etc/systemd/journald.conf.d/99-prophet.conf? <
[Journal]
# 持久化保存到磁盤
Storage=persistent
# 壓縮歷史日志
Compress=yes
SyncIntervalSec=5m
RateLimitInterval=30s
RateLimitBurst=1000
# 最大占用空間10G
SystemMaxUse=10G
# 單日志文件最大200M
SystemMaxFileSize=200M
# 日志保存時間2 周
MaxRetentionSec=2week
#? 不將日志轉(zhuǎn)發(fā)到? syslog
ForwardToSyslog=no?
EOF
?systemctl? restart?systemd-journald
8.升級系統(tǒng)內(nèi)核為4.44
rpm?-Uvh? http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
yum?--enablerepo=elrepo-kernel?install? -y? kernel-lt
?#設置開機從新內(nèi)核啟動
grub2-set-default? 'CentOS?Linux?(4.4.189-1.el7.elrepo.x86_64)?7? (Core)'
完成后?reboot 重啟
uname -a 查看內(nèi)核版本
9.kube-proxy開啟ipvs的前置條件
modprobe?br_netfilter
cat?>?/etc/sysconfig/modules/ipvs.modules?<
#!/bin/bash
modprobe?--? ip_vs
modprobe?--? ip_vs_rr
modprobe?--? ip_vs_wrr
modprobe?--? ip_vs_sh
modprobe?--? nf_conntrack_ipv4
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules&&
bash? /etc/sysconfig/modules/ipvs.modules &&
lsmod? |?grep? -e? ip_vs?-e? nf_conntrack_ipv4
10.安裝docker軟件
yum? install? -y?yum-utils?device-mapper-persistent-data?lvm2
yum-config-manager --add-repo??http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo?
yum? update? -y?&&? yum install docker-ce-18.09.9-3.el7docker-ce-cli-18.09.9-3.el7 containerd.io
注意:Docker請使用18.09, k8s暫不支持Docker最新版19.x
11.創(chuàng)建?/etc/docker? 目錄并配置daemon.json
cat?>? /etc/docker/daemon.json? <
{
"registry-mirrors": ["https://xxxxxxxx.mirror.aliyuncs.com"],
"exec-opts":? ["native.cgroupdriver=systemd"],
"log-driver":? "json-file",
"log-opts":? {
????"max-size":? "100m"
????}
}
EOF
mkdir?-p?/etc/systemd/system/docker.service.d
其中https://xxxxxxxx.mirror.aliyuncs.com為阿里云鏡像加速地址,?xxxxxxxx需要替換為自己賬戶中的地址,也可以為其他鏡像地址,沒有賬戶的整個刪掉不填
12.重啟docker服務設置docker開機自啟
systemctl?daemon-reload? &&? systemctl?restart? docker? &&?systemctl? enable? docker
13.安裝 Kubeadm?
cat?<? /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpghttp://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
yum -y install kubeadm kubectl kubelet
systemctl enable? kubelet.service
以上為主從節(jié)點都需要完成的
14.初始化主節(jié)點
kubeadm?config? print? init-defaults?>? kubeadm-init.yaml
將advertiseAddress修改為自己ip,imageRepository修改為阿里云鏡像倉庫,運行以下命令
kubeadm?init? --config=kubeadm-init.yaml? |?tee? kubeadm-init.log
成功后如下圖:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
15.部署主節(jié)點網(wǎng)絡
這里使用calico,giuhub下載 calico.yaml
kubectl apply?-f??calico.yaml
成功后用:kubectl get pod -n kube-system 查看狀態(tài)

kubectl get node?列出節(jié)點狀態(tài)信息:

16.從節(jié)點加入集群
運行在主節(jié)點初始化成功后,輸出的信息最后面兩句

最后結(jié)果:

三、遇到問題
1.couldn’t validate the identity ofthe API Server: abort connecting to API servers after timeout of 5m0s
解決:在master節(jié)點上運行 kubeadm token create,得到新的token
2.no route to host

解決: 在主節(jié)點上運行? iptables -F
3.cpu核心數(shù)沒有達到要求

解決:?加