最近需要在公司内部不能访问外部网络的主机上安装k8s,内部机器是没法访问外网的,只能访问内部的镜像仓库,和yum库。 记录一下:
安装过程
实际上还是参考的这两篇文章【文章一】和 【文章二】。只不过重要的几个步骤需要特殊处理下
1,更新yum源
添加kubernetes YUM软件源,这个是内网的源。不是公网的,确保内部yum源有资源。
中途可能会遇到错误提示
这里需要手动安装一下 kubernetes-cni
yum -y install kubernetes-cni = 0.6.0
然后再执行安装命令 ,我遇到的问题是三个一起装会【遇到问题:kubelet版本一直是最新版本】,所以分开安装。
yum install -y kubelet-1.16.10-0
yum install -y kubeadm-1.16.10-0 kubectl-1.16.10-0
2,部署k8s master(10.xx.xxx.xx是你部署master节点机器的IP)
kubeadm init
\--apiserver-advertise-address=10.xx.xxx.xx
\--image-repository your-inner-registry.cn/google-containers
\--kubernetes-version v1.16.10
\--service-cidr=10.1.0.0/16
\--pod-network-cidr=10.244.0.0/16
请注意,上面我安装的版本是 1.16.10
注意这个参数:image-repository
这个参数的值your-inner-registry.cn/google-containers
,是指定一个内部的镜像仓库,这个仓库必须要包含下面几个镜像,注意版本一致性:
kube-apiserver:v1.16.10
kube-controller-manager:v1.16.10
kube-scheduler:v1.16.10
kube-proxy:v1.16.10
pause:3.1
etcd:3.3.15-0
coredns:1.6.2
这些镜像需要你从阿里云或者google的镜像仓库,拉到本地,然后推送到你自己的内部的镜像仓库【your-inner-registry.cn/google-containers】里面去。
如果
你安装低版本的kubeadm,可能不支持这个image-repository参数,这时候需要你手动将镜像pull到本地,然后重新打tag如下:
k8s.gcr.io/kube-apiserver:v1.16.10
k8s.gcr.io/kube-controller-manager:v1.16.10
k8s.gcr.io/kube-scheduler:v1.16.10
k8s.gcr.io/kube-proxy:v1.16.10
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.3.15-0
k8s.gcr.io/coredns:1.6.2
3,安装flannel网络插件。
这个也需要一个镜像,手动推送过去或者也放到内部仓库里面去。
注意各个版本之间的对应关系【看这里】
4,node节点也需要手动pull一下flannel以及pause/coredns/etcd等镜像
安装步骤就走完了
troubleshooting
1,如果node节点一直处于notReady状态 用这个命令 查看日志journalctl -f -u kubelet
2, join进集群的时候,这个错误 [ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1
解决办法:
kubeadm reset
echo 1 > /proc/sys/net/ipv4/ip_forward
3, 如果pod一直启动不起来,通过`kubectl decribe pod xxxx` 查看日志 如果报错 network: failed to set bridge addr: “cni0“ already has an IP address different
解决办法:
ifconfig cni0 down
ifconfig flannel.1 down
ifconfig docker0 down
ip link delete cni0
ip link delete flannel.1
systemctl restart docker
4, 如果安装了calico网络插件,需要删除calico
除了执行这个命令
kubectl delete -f <yaml>
还要去/etc/cni/net.d/
目录下 删掉与calico相关的所有配置文件, 然后重启机器。 不然pod起不来,会报错 network: error getting ClusterInformation: connection is unauthorized: Unauthorized . 在这里发现的解决办法:source
如果遇到需要卸载k8s重装的情况,参考这个链接: https://www.devopscat.tech/2018/10/completely-remove-kubernetes-from-machine-on-centos/
其他docker简洁命令
停止所有容器
docker stop $(docker ps -aq)
删除所有的容器
docker rm $(docker ps -aq)
删除所有的镜像
docker rmi $(docker images -q)