踩坑不断,总结经验!!
准备两台虚拟机一台做master一台为node自己搭着玩的话对cpu和内存要求不高
2core和4G内存
两台虚拟机都需要安装docker
确保两台虚拟机能够通过网络同步时间,不然后面会出错。
yum install ntpdate
ntpdate cn.pool.ntp.org
修改主机名
vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=master
node将master改为node
是主机名生效
/bin/hostname 要修改的主机名
/bin/hostname master
可以执行hostname来查看是否成功
设置ip 使得两台虚拟机可以通过主机名通信
vi /etc/hosts
192.168.1.5 master
192.168.1.6 node
此处ip是你虚拟机ip可执行ipconfig或者ip addr来查看
systemctl stop firewalld
systemctl disable firewalld
关闭Swap
vi /etc/fstab
注释掉包含Swap的哪一行即可永久关闭Swap
关闭selinux
临时关闭
setenforce 0
永久关闭
vi /etc/sysconfig/selinux
将SELINUX的值改为disabled即可
执行完上述操作后必须reboot重启虚拟机使改动生效。至此虚拟机配置完成。
vim /etc/yum.repos.d/kubernetes.repo
在/etc/yum.repos.d/下创建并编辑kubernetes.repo
[kubernetes]
name=Kubernetes Repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
enable=1
编辑完成后:wq
保存退出
然后对yum源进行更新
yum repolist
手动拉取yum-key.gpg和rpm-package-key.gpg
逐条执行下面四条命令
wget https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
rpm --import yum-key.gpg
wget https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
rpm --import rpm-package-key.gpg
完成后安装开始kubeadm
yum install kubeadm kubectl kubelet
选择都选y就可以了
安装完成后在初始化之前查看iptables与ip6tables是否为1
cat /proc/sys/net/bridge/bridge-nf-call-iptables
cat /proc/sys/net/bridge/bridge-nf-call-ip6tables
vi /etc/sysctl.conf
加入
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-arptables = 0
EOF
然后reboot就可以了
修改docker的环境变量
vim /usr/lib/systemd/system/docker.service
加入
Environment="HTTPS_PROXY=http://www.ik8s.io:10080"
Environment="NO_PROXY=127.0.0.0/8,172.20.0.0/16"
保存退出
重启docker
systemctl daemon-reload
systemctl restart docker
然后进行初始化操作
kubeadm init --kubernetes-version=v1.15.2 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12
kubernetes-version根据自己安装的决定
如果遇到error swap
编辑vim /etc/sysconfig/kubele
加入KUBELET_EXTRA_ARGS="--fail-swap-on=false"
使其忽略Swap
然后重新进行kubeadm init操作 在最后加上–ignore-preflight-errors=Swap
kubeadm init --kubernetes-version=v1.15.2 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap
如果遇到ERROR ImagePull错误
这是因为无法从国外网站之上拉取镜像,可以找一个国内的k8s组件的镜像文件,使用docker pull下载下来然后docker tag 对镜像的标签进行修改,改成上图中没有拉下来的镜像就可以继续初始化了。
也可以在网上下载在主机上通过xftp传给虚拟机,然后通过docker load >xxx.tar
命令导入。
镜像下载完成后
继续初始化 初始化成功后
保存好
然后进行如下两条命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
systemctl enable kubelet设置kubelet开机自启动
然后运行
kubectl get nodes
此时master显示为Notready状态,因为没有配置网络插件flannel
下载网络插件flannel如果你的是k8s1.7以上直接运行这条命令自动安装部署
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
但是我遇到了flannel镜像同样无法拉取的问题
运行kubectl get pods --all-namespaces
发现flannel处于ImagePullBackoff
这里同样需要在网上下载对应版本的tar包,通过xftp导入虚拟机后,再通过
docker load --input flannel.tar
导入镜像,这里需要对镜像的标签做改动
docker tag 你导入的镜像名称:版本标签 quay.io/coreos/flannel:v0.11.0-amd64
我这里需要的是v0.11.0版本的flannel
改好之后等一小会,系统会自动识别,然后你就会发现master节点为ready状态了
下面要做的就是将node节点添加进来集群
node同样需要安装docker和kubeadm,所以按上面的教程操作到kubeadm安装完成,这时不需要初始化也就是不需要kubeadm init但是同样需要哪些镜像文件所以需要给node节点导入
镜像文件导入后标签改好后就可以执行join操作了
kubeadm join 192.168.1.5:6443 --token 67lk3m.0x6stlylgrdslrtt --discovery-token-ca-cert-hash sha256:cc31fdd558126685517fea3f27a6253a7ecb198901698eb8f3c5b6edbc39103e --ignore-preflight-errors=Swap
这里就是你保存的哪一行join码了,如果失败则说明你的token失效
执行kubeadm token create --ttl 0
生成一个不会失效的token
将生成的token替换掉上面的失效token
kubeadm join 192.168.1.5:6443 --(token 67lk3m.0x6stlylgrdslrtt)替换部分 --discovery-token-ca-cert-hash sha256:cc31fdd558126685517fea3f27a6253a7ecb198901698eb8f3c5b6edbc39103e --ignore-preflight-errors=Swap