multipass + k8s for mac pro m1芯片快速搭建学习环境

背景:

 使用mac m1芯片笔记本,为了快速搭建k8s学习环境,整理完善了一键安装形成脚本。

提前准备:

ubuntu@master01:/k8s$ ls  soft/v1.23.14/
#docker安装包提前下载好,节约安装下载时间
docker-buildx-plugin_0.10.2-1~ubuntu.22.04~jammy_arm64.deb                      
docker-ce-cli_5%3a23.0.1-1~ubuntu.22.04~jammy_arm64.deb              
docker-ce-rootless-extras_5%3a23.0.1-1~ubuntu.22.04~jammy_arm64.deb                        
docker-ce_5%3a23.0.1-1~ubuntu.22.04~jammy_arm64.deb                                    
docker-compose-plugin_2.16.0-1~ubuntu.22.04~jammy_arm64.deb          

#kubernetes离线镜像,节省下载时间
#slave离线镜像
k8s-slave.v3.21.6.tar   
#master离线镜像
k8s-images.v1.23.14.tar 

#kubernetes安装文件
cri-tools_1.26.0-00_arm64.deb    
kubectl_1.23.14-00_arm64.deb  
kubeadm_1.23.14-00_arm64.deb                    
kubelet_1.23.14-00_arm64.deb   
kubernetes-cni_1.2.0-00_arm64.deb

#calico.yaml文件下载
calico.yaml 

一 安装主脚本

一键安装,直接执行:main_install.sh

#!/bin/bash

#机器要开启ip转发,multipass里面ubuntu才能上网
sudo sysctl -w net.inet.ip.forwarding=1

#启动master 节点,根据初始化参数,初始化机器
multipass launch -n master01 -c4 -m 4G -d 40G --cloud-init cloud-init_sshd_runcmd.txt 

#启动slave节点
multipass launch -n slave01 -c4 -m4G -d 40G --cloud-init cloud-init_sshd_runcmd.txt
multipass launch -n slave02  -c4 -m4G -d 40G --cloud-init cloud-init_sshd_runcmd.txt

#挂载目录,用于离线文件安装,这里会重试2次
if [ $(multipass list | grep master01 | grep Running |wc -l) -eq 1 ];then
multipass mount  /Users/vbear/myapp/multipass/k8s  master01:/k8s
else
 echo "master01 服务器没有启动正常,等5秒后,继续启动挂载"
sleep 15
multipass mount  /Users/vbear/myapp/multipass/k8s  master01:/k8s
sleep 2
fi
if [ $(multipass list | grep master01 | grep Running |wc -l) -ne 1 ];then
    echo "master01  服务器没有挂载成功,退出"
    exit 10
fi

if [ $(multipass list | grep -E 'slave01|slave02' | grep Running |wc -l) -eq 2 ];then
 echo "开始挂在slave目录"
#挂在子节点目录
multipass mount  /Users/vbear/myapp/multipass/k8s  slave01:/k8s
multipass mount  /Users/vbear/myapp/multipass/k8s  slave02:/k8s
else
sleep 15
echo "slave01/slave02 服务器没有启动正常,等5秒后,继续启动挂载"
multipass mount  /Users/vbear/myapp/multipass/k8s  slave01:/k8s
multipass mount  /Users/vbear/myapp/multipass/k8s  slave02:/k8s

if [ $(multipass list | grep -E 'slave01|slave02' | grep Running |wc -l) -ne 2 ];then
    echo "slave01|slave02  服务器没有挂载成功,退出"
    exit 20
fi
fi

#执行安装docker和导入脚本
multipass exec master01 sudo sh /k8s/install_docker.sh
multipass exec slave01 sudo sh /k8s/install_docker.sh
multipass exec slave02 sudo sh /k8s/install_docker.sh

sleep 2
#获取master01主机IP
master_ip=`multipass list | grep master01 |awk '{print $3}'`
sleep 2
#安装master和子节点
multipass exec master01 sudo sh /k8s/install_k8s_master.sh
multipass exec slave01 sudo sh /k8s/install_k8s_slave.sh "$master_ip"
multipass exec slave02 sudo sh /k8s/install_k8s_slave.sh "$master_ip"

#查看安装状态
multipass exec master01 kubectl get nodes

二 docker安装脚本

cat install_docker.sh
#!/bin/bash
#查询版本
#sudo apt-cache madison docker-ce | awk '{ print $3 }'
#

#curl -fsSL https://get.docker.com -o docker.sh
#export VERSION=5:19.03.15~3-0~ubuntu-jammy
#sudo sh docker.sh
sudo apt-get install 
#避免交互式安装
sudo  DEBIAN_FRONTEND=noninteractive apt-get install /k8s/soft/v1.23.14/containerd.io_1.6.18-1_arm64.deb -y
sudo  DEBIAN_FRONTEND=noninteractive apt-get install /k8s/soft/v1.23.14/docker-*.deb -y


sudo sh -eux <<EOF
# Install newuidmap & newgidmap binaries
apt-get install -y uidmap
EOF

dockerd-rootless-setuptool.sh install

sudo systemctl start docker && sudo systemctl enable docker

sudo docker version

三 k8s 主脚本

#!/bin/bash
#安装离线k8s安装包,非交互式安装

sudo  DEBIAN_FRONTEND=noninteractive apt-get install /k8s/soft/v1.23.14/cri-tools_1.26.0-00_arm64.deb -y
sudo  DEBIAN_FRONTEND=noninteractive apt-get install /k8s/soft/v1.23.14/kubernetes-cni_1.2.0-00_arm64.deb -y
sudo  DEBIAN_FRONTEND=noninteractive apt-get install /k8s/soft/v1.23.14/kube*.deb -y

#master01导入k8s离线镜像,节省时间
sudo docker load -i /k8s/soft/v1.23.14/k8s-images.v1.23.14.tar

#初始化系统需要的参数
sudo sysctl -w net.ipv4.conf.all.rp_filter=1
sudo DEBIAN_FRONTEND=noninteractive  apt install net-tools -y


#master01,初始化k8s操作系统参数
sudo kubeadm init  --pod-network-cidr=10.10.0.0/16 --image-repository registry.aliyuncs.com/google_containers>/k8s/install.log

#设置k8s环境变量
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config


#设置网络模式为calico
kubectl apply -f /k8s/calico.yaml


sleep 2
#查看节点
kubectl get node

#获取kube需要的token,方便slave加入群集
k8s_token=`kubeadm token list |grep -v TOKEN |awk '{print $1}'`
k8s_ssl=`openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'`

echo "$k8s_token" > /k8s/k8s_token.conf
echo "$k8s_ssl" > /k8s/k8s_ssl.conf

kubectl get node

四 k8s slave脚本

#!/bin/bash

#安装kube安装包
sudo   DEBIAN_FRONTEND=noninteractive apt-get install /k8s/soft/v1.23.14/cri-tools_1.26.0-00_arm64.deb -y
sudo  DEBIAN_FRONTEND=noninteractive apt-get install /k8s/soft/v1.23.14/kubernetes-cni_1.2.0-00_arm64.deb -y
sudo  DEBIAN_FRONTEND=noninteractive apt-get install /k8s/soft/v1.23.14/kube*.deb -y

#slave01/02导入离线镜像
sudo docker load -i /k8s/soft/v1.23.14/k8s-slave.v3.21.6.tar


#修改操作系统参数
sudo sysctl -w net.ipv4.conf.all.rp_filter=1
sudo DEBIAN_FRONTEND=noninteractive  apt install net-tools -y

#得到k8s token,然后加入群集
k8s_token=`cat /k8s/k8s_token.conf`
k8s_ssl=`cat /k8s/k8s_ssl.conf`
master_ip=$1
sudo kubeadm join ${master_ip}:6443 --token ${k8s_token}       --discovery-token-ca-cert-hash sha256:${k8s_ssl}
echo "sudo kubeadm join ${master_ip}:6443 --token ${k8s_token}       --discovery-token-ca-cert-hash sha256:${k8s_ssl}"

五 验证

5.1 查看状态

 multipass exec master01 sudo kubectl get nodes
NAME       STATUS   ROLES                  AGE   VERSION
master01   Ready    control-plane,master   50m   v1.23.14
slave01    Ready    <none>                 48m   v1.23.14
slave02    Ready    <none>                 48m   v1.23.14

5.2 查看网络状态

#建立3个busybox测试镜像
sudo kubectl run access --rm -ti --image busybox /bin/sh
sudo kubectl run access1 --rm -ti --image busybox /bin/sh
sudo kubectl run access2 --rm -ti --image busybox /bin/sh

#查看到了IP
ubuntu@master01:~$ sudo kubectl get pods -owide
NAME      READY   STATUS    RESTARTS   AGE    IP              NODE      NOMINATED NODE   READINESS GATES
access    1/1     Running   0          102s   172.18.57.194   slave02   <none>           <none>
access1   1/1     Running   0          48m    172.18.34.65    slave01   <none>           <none>
access2   1/1     Running   0          48m    172.18.34.66    slave01   <none>           <none>

#查看是否能夸主机ping,发现是可以正常
/ # ifconfig  eth0
eth0      Link encap:Ethernet  HWaddr 3E:D9:08:1B:28:21  
          inet addr:172.18.57.194  Bcast:0.0.0.0  Mask:255.255.255.255
          UP BROADCAST RUNNING MULTICAST  MTU:1480  Metric:1
          RX packets:5 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:446 (446.0 B)  TX bytes:0 (0.0 B)

/ # ping 172.18.34.66
PING 172.18.34.66 (172.18.34.66): 56 data bytes
64 bytes from 172.18.34.66: seq=0 ttl=62 time=1.483 ms
64 bytes from 172.18.34.66: seq=1 ttl=62 time=6.542 ms
64 bytes from 172.18.34.66: seq=2 ttl=62 time=0.589 ms



posted @ 2023-02-20 22:17  菜熊熊  阅读(541)  评论(0)    收藏  举报