K8S二进制环境搭建苹果电脑(M1芯片)


一、环境介绍

  • 硬件设备

    2021款 macbook pro M1Pro 芯片

  • 软件

    • 1、PD17

      • 请自行安装此软件(收费软件,有试用期方式使用,如何处理请自己脑补)
    • 2、linux 操作系统

      • ubuntu-20.04.3-live-server-arm64.iso
    • 3、git

    • 4、make

    • 5、docker
      注意 3-5 软件是在虚拟机里面安装的

问题直达

  • calico-apiserver pullErr 直接看第六步骤[calico-apiserver 拉取镜像失败]

二、操作系统安装

  • 安装PD17
  • Ubuntu系统安装
    • 1、选择其它安装镜像安装

    • 2、添加再一个网卡

      • 第一个网卡使用网络共享模式(其实就是NAT方式),此网卡主要用来虚拟机与外部网络进行通讯使用
        设置网络转发 源端口[6022] 目标端口[22] (之后你切换了工作环境或者网络,都不会影响你ssh登录)
      • 第二个网卡使用host-only,此网卡是给K8S使用,打开高级设置,取消自动动态分配,
        将网路起始IP设置为192.168.34.1,终止IP为192.168.34.254
    • 3、设置硬件资源

      • 内存 12G
      • CPU 4核
      • 磁盘 30G以上
    • 4、启动虚拟机进行系统安装

      • 除了ssh服务之外,其它软件都不需要安装
      • 全部使用默认配置
      • 用户名建议使用[cadmin]密码相同

三、设置系统网路

  • 1、查看本机ip

    • 通过ip a命令查询当前网卡名称及IP地址,一般有一个NAT地址为10.开头的,另一个为host-only的网卡
  • 2、修改网络配置文件

    • 使用sudo su 输入密码切换至root用户
    • vi /etc/netplan/00-installer-config.yaml 打开网络配置文件
      network:
        ethernets:
              enp0s3:
                dhcp4: true
              enp0s8:
                dhcp4: no
              addresses:
                - 192.168.34.2/24
        version: 2
      
      注意
      • enp0s3 为NAT网卡名称
      • enp0s8 为host-only 网卡名称
  • 3、使网络配置生效

    • netplan apply
  • 4、关闭交换空间

    swapoff -a
    vi /etc/fstab
    

    删除 /etc/fstab 文件中包含 swap的行(一般是最后一行)

四、安装 docker

  • 1、命令安装
    • install docker.io
  • 2、更改服务启动项
    • 原因:docker 默认的服务启动项是cgroupdriver 和k8s的启动项会产生冲突

    • 注意: daemon.json 这个文件并不存在,需要自己创建并写一下内容

    vi /etc/docker/daemon.json
    {
      "exec-opts": ["native.cgroupdriver=systemd"]
    }
    systemctl daemon-reload
    systemctl restart docker
    

五、安装K8S

  • 1、让iptable监控你的K8S流量

    $ cat <
  • 2、更新apt 包的索引,并安装k8s依赖的包

    $ sudo apt-get update
    $ sudo apt-get install -y apt-transport-https ca-certificates curl
    
  • 3、安装kubeadm

    $ sudo curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
    $ sudo tee /etc/apt/sources.list.d/kubernetes.list <<-'EOF'
    deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main
    EOF
    $ sudo apt-get update
    $ sudo apt-get install -y kubelet kubeadm kubectl
    $ sudo apt-mark hold kubelet kubeadm kubectl
    
  • 4、kubeadm初始化

    $ echo "192.168.34.2 cncamp.com" >> /etc/hosts
    

    注意:

    • k8s初始化,是要去docker hub 拉取镜像的,所以在初始化之前,应该先设置dockerhub的代理,设置代理会修改[/etc/docker/daemon.json]文件。
      这个文件在修改docker服务启动项时创建过,切记不要将原有配置覆盖,应该在"{}"中以","分割添加新的配置
    • 初始化操作会进行镜像拉取时间比较久,只需等待即可。
    $ kubeadm init \
    --image-repository registry.aliyuncs.com/google_containers \
    --kubernetes-version v1.22.2 \
    --pod-network-cidr=192.168.0.0/16 \
    --apiserver-advertise-address=192.168.34.2
    
    • 5、拷贝k8s配置
    $ mkdir -p $HOME/.kube
    $ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    $ sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
    • 6、给master打污点
    $ kubectl taint nodes --all node-role.kubernetes.io/master-
    
    • 7、Install calico cni plugin (安装calico CNI 插件)

      https://docs.projectcalico.org/getting-started/kubernetes/quickstart

    $ kubectl create -f https://docs.projectcalico.org/manifests/tigera-operator.yaml
    $ kubectl create -f https://docs.projectcalico.org/manifests/custom-resources.yaml
    

    注意

    • 可以通过一下命令查看 calico 安装情况,这个安装也比较慢,请耐性等待
      kubectl get pod -n calico-system
      

六、calico-apiserver 拉取镜像失败

这个是M1失败的核心问题,其实查询官方,你会发现calico已经支持了M1(Arm64)架构了,但是docker仓库内部并没有对应的镜像。
所以我们需要自己下载源码进行编译和打包,下面我们来描述怎么自己打包镜像

  • 1、安装必要软件

      apt-get install golang-go
      apt-get install make
    
  • 2、来取calico的源码

    • git clone https://github.com/projectcalico/calico
  • 3、切换目录并执行编译

    • cd calico/apiserver && make build
  • 4、查询生成的镜像并改标签

    • docker images
    • docker tag calico/apiserver calico/apiserver:verison
    • docker tag apiserver apiserver:verison
    • 注意 verison是calico的版本号,其它镜像是多少你就设置多少
  • 5、查看k8s是否启动成功

    • kubectl get pods -A
    • 全部为 runing 状态及启动成功