Kubernetes从入门到精通 集群安装
kubernetes集群安装
一 准备集群镜像
从阿里云镜像仓库拉镜像 标签改名
从阿里云镜像仓库拉镜像 标签改名
# 在安装kubernetes集群之前,必须要提前准备好集群需要的镜像,所需镜像可以通过下面命令查看 [root@master ~]# kubeadm config images list # 下载镜像 # 此镜像kubernetes的仓库中,由于网络原因,无法连接,下面提供了一种替换方案 images=( kube-apiserver:v1.17.4 kube-controller-manager:v1.17.4 kube-scheduler:v1.17.4 kube-proxy:v1.17.4 pause:3.1 etcd:3.4.3-0 coredns:1.6.5 ) for imageName in ${images[@]};do docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName done
二 集群初始化
1 下面的操作只需要在master节点上执行即可
# 创建集群 [root@master ~]# kubeadm init \ --apiserver-advertise-address=192.168.117.100 \ --kubernetes-version=v1.17.4 \ --service-cidr=10.96.0.0/12 \ --pod-network-cidr=10.244.0.0/16 # 创建必要文件 [root@master ~]# mkdir -p $HOME/.kube [root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config [root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubernetes-version k8s 版本
pod-network-cidr pod网络
service-cidr service网络
apiserver-advertise-address master节点的ip地址
2 node节点上执行
kubeadm join 192.168.117.100:6443 --token ijk3en.o8u3d1omlyh8oxao --discovery-token-ca-cert-hash sha256:e6b0e0e3585fd9d36a3f7df681626792e52ead98530a93f96a3979a308c92a15
注意上面的命令是在master节点上 kubeadm 初始完成打印出来的!!!!
3 在master上查看节点信息
[root@master ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION master NotReady master 6m v1.17.4 node1 NotReady <none> 22s v1.17.4 node2 NotReady <none> 19s v1.17.4
三 网络插件安装
kubernetes支持多种网络插件,比如flannel、calico、canal等等,任选一种使用即可,本次选择flannel
1 安装网络插件,只在master节点操作即可
1) 安装kube-flannel.yml我这里采用的是kx上网的方式直接安装 当然也可以去网上直接下
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
2) 修改kube-flannel.yml里面的镜像源为国内镜像源
vi /root/kube-flannel.yml
#将xxx.io 替换为quay.mirror.qiniu.com 如下图所示
3) 使用配置文件启动fannel
kubectl apply -f kube-flannel.yml
4) 稍等片刻,再次查看集群节点的状态
kubectl get nodes
如果如下图所示有NotReady 很明显有问题
5) NotReady问题解决
a 用以下语句查看原因
journalctl -f -u kubelet.service
若原因是: cni.go:237] Unable to update cni config: no networks found in /etc/cni/net.d
#创建目录给flannel做配置文件 mkdir -p /etc/cni/net.d #编写配置文件 vim /etc/cni/net.d/10-flannel.conf
输入
{ "name":"cbr0", "cniVersion":"0.3.1", "type":"flannel", "deledate":{ "hairpinMode":true, "isDefaultGateway":true } }
b 使用kubeadm reset重置集群 在master节点之外的节点进行操作!!!!!
#在master节点之外的节点进行操作 kubeadm reset systemctl stop kubelet systemctl stop docker rm -rf /var/lib/cni/ rm -rf /var/lib/kubelet/* rm -rf /etc/cni/ ifconfig cni0 down ifconfig flannel.1 down ifconfig docker0 down ip link delete cni0 ip link delete flannel.1 ##重启kubelet systemctl restart kubelet ##重启docker systemctl restart docker
c 重启kubelet和docker
# 重启kubelet
systemctl restart kubelet
# 重启docker
systemctl restart docker
使用配置文件启动fannel
kubectl apply -f kube-flannel.yml
注意以上解决方案,我没有亲测过,来源于网络。
究极解决方案还是,建议 kx上网,不用国内的镜像源,一路绿灯
kubectl apply -f kube-flannel.yml kubectl get pods -n kube-system -o wide