ARM架构下的centos7安装k8s

   平常工作中接触较多的是X86架构,这次偶尔接触了下ARM架构,在ARM架构下的CentOS7系统上安装k8s,拉取docker镜像时,遇到了坑,在此记录下。

 首先说下什么是cpu架构?

 不同的CPU设计实现,就称为“CPU 架构”(CPU architecture)。不同的CPU架构有不同的指令集,彼此不通用,这导致运行在上面的软件也不兼容,必须重新编译。如果没有做适配,一个架构下的软件就无法移植到另一个架构。从CPU发明到现在,有非常多种架构,从我们熟悉的X86、ARM,到不太熟悉的MIPS、IA64,它们之间的差距都非常大。但是如果从最基本的逻辑角度来分类的话,它们可以被分为两大类,即所谓的“复杂指令集”与“精简指令集”系统,也就是经常看到的“CISC”与“RISC”。ARM架构的CPU使用的是RISC(精简指令集),而X86架构使用的是CISC。简单来说,ARM架构的CPU功耗低,更节能;X86架构的CPU性能强,易扩展。

 接下来就是安装K8S了。

 首先在各个节点上安装docker服务,执行如下命令。

yum install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce-18.09.0 docker-ce-cli-18.09.0 containerd.io
systemctl start docker&& systemctl enable docker

由于k8s和docker默认使用的Cgroup驱动程序不一样,这会导致k8s在资源紧张的情况下运行不稳定,所以统一改为systemd来驱动。docker默认使用的国外镜像源,导致我们拉取镜像时很慢,建议修改为国内的镜像源。

echo -e '{\n"registry-mirrors": ["https://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn"],\n"exec-opts": [ "native.cgroupdriver=systemd" ]\n}' >/etc/docker/daemon.json
systemctl daemon-reload
systemctl restart docker
docker info|grep Cgroup

若显示Cgroup Driver: systemd,则更改成功。

k8s中,为了确保 iptables 能够监控容器的网络通信,需要修改一些内核参数。

echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
echo 1 > /proc/sys/net/bridge/bridge-nf-call-ip6tables
echo 1 > /proc/sys/net/ipv4/ip_forward
lsmod | grep br_netfilter

kube-proxy使用ipvs来实现负载均衡,所以需要安装ipvs环境。

modprobe ip_vs
modprobe ip_vs_rr
modprobe ip_vs_wrr
modprobe ip_vs_sh
modprobe nf_conntrack_ipv4

通过lsmod | grep -e ip_vs -e nf_conntrack_ipv4命令查看系统是否成功加载响应模块。

另外需要安装ipvsadm用于管理ipvs配置。

如果以上条件无法满足,及时kube-proxy开启了ipvs,也会回退到iptables。

接下来就是遇到坑的地方了,因为ARM架构,所以需要将repo源替换为ARM的。 

vim /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-aarch64
enabled=1
gpgcheck=0
yum clean all
yum makecache fast
yum install -y kubelet-1.15.0 kubeadm-1.15.0 kubectl-1.15.0 --disableexcludes=kubernetes
systemctl enable kubelet

此时不要启动kubelet,否则可能报错“failed to load Kubelet config file /var/lib/kubelet/config.yaml, error failed to read kubelet config file "/var/lib/kubelet/config.yaml",”。

为了更快地安装k8s,此处我们先提前拉取需要的镜像,这儿也是个坑。由于我这里是ARM架构的平台,所以需要拉取arm64的镜像,要明确指明是arm64的镜像。此前若装了X86的镜像,需要删除。

docker rm $(docker ps -aq)
docker rmi $(docker images -aq)
docker pull mirrorgooglecontainers/kube-apiserver-arm64:v1.15.0
docker tag docker.io/mirrorgooglecontainers/kube-apiserver-arm64:v1.15.0 k8s.gcr.io/kube-apiserver:v1.15.0
docker rmi mirrorgooglecontainers/kube-apiserver-arm64:v1.15.0

初始化集群:

sudo kubeadm init --apiserver-advertise-address 192.168.0.71  --kubernetes-version=v1.15.0  --pod-network-cidr=10.244.0.0/16


安装pod网络:

kubectl apply -f kube-flannel.yml

接下来工作节点加入集群:

kubeadm join x.x.x.x:x


猜你喜欢

转载自blog.51cto.com/jack88/2536745