一、环境介绍
- 硬件设备
2021款 macbook pro M1Pro 芯片
- 软件
- 1、PD17
- 请自行安装此软件(收费软件,有试用期方式使用,如何处理请自己脑补)
- 2、linux 操作系统
- 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
- 3、使网络配置生效
netplan apply
- 4、关闭交换空间 删除 /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 <<EOF | sudo tee /etc/modules-load.d/k8s.conf br_netfilter EOF $ cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF $ sudo sysctl --system
- 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
$ 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
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 状态及启动成功