环境信息 Mac 硬件信息,执行 system_profiler SPHardwareDataType
查看
1
2
3
4
5
$ system_profiler SPHardwareDataType
Hardware:
Hardware Overview:
Model Identifier: MacBookPro18,3
Chip: Apple M1 Pro
Mac OS 信息
执行 ssw_vers
查看
1
2
3
$ sw_vers
ProductName: macOS
ProductVersion: 13.1
VMware 版本信息
1
2
VMware Fusion
Professional Version 13.0.1 (21139760)
Centos 版本下载地址
1
CentOS-Stream-9-latest-aarch64-dvd1.iso
准备虚拟机 注意虚拟机的网络配置需要选择Autodetect
模式,以便虚拟机和物理机器共享网络
两台机器:
k8s-master 192.168.1.98 k8s-node1 192.168.1.97 设置 Mac hosts 在 Mac 执行以下命令
1
echo '192.168.1.98 k8s-master\n192.168.1.97 k8s-node1 ' | sudo tee -a /etc/hosts
设置免密登录 在 Mac 执行以下命令
1
2
ssh-copy-id -i ~/.ssh/id_rsa.pub root@k8s-master
ssh-copy-id -i ~/.ssh/id_rsa.pub root@k8s-node1
设置两台虚拟机器 hostname 在 Mac 执行以下命令
1
2
ssh 'root@k8s-master' "hostnamectl set-hostname k8s-master"
ssh 'root@k8s-node1' "hostnamectl set-hostname k8s-node1"
安装容器运行时间 后续将使用 kubeadm 工具,进行k8s的部署。主要参考文档:使用 kubeadm 引导集群
以下步骤,将在官方文档的基础上进行改进。改进目标是适配国内的网络。
如:
替换yum安装源为阿里源 替换容器镜像源为阿里镜像源 总览 主要有以下几个步骤
容器运行时安装和配置的先决条件,如禁用swap交换分区、关闭防火墙、配置网络转发等 安装容器运行时 containerd 容器运行时安装和配置的先决条件 1、禁用swap交换分区 1
2
sudo swapoff -a #临时禁用
sed -i 's/.*swap.*/#&/g' /etc/fstab #更新配置文件,永久禁用
2、转发IPv4 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
# 设置所需的 sysctl 参数,参数在重新启动后保持不变
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
# 应用 sysctl 参数而不重新启动
sudo sysctl --system
3、关闭selinux 1
2
setenforce 0
sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
4、关闭防火墙 1
2
3
systemctl disable firewalld #永久禁用防火墙
systemctl stop firewalld #关闭防火墙
firewall-cmd --state #查看状态,返回应为 not running
安装容器运行时 containerd 参考文档
1、下载后分别拷贝到两台虚拟机中 使用官方二进制的形式安装。在release 中下载containerd-1.7.1-linux-arm64.tar.gz
。
1
2
scp ~/Downloads/containerd-1.7.1-linux-arm64.tar.gz root@k8s-master:~
scp ~/Downloads/containerd-1.7.1-linux-arm64.tar.gz root@k8s-node1:~
2、解压安装containerd 1
2
ssh 'root@k8s-master' "tar Cxzvf /usr/local ~/containerd-1.7.1-linux-arm64.tar.gz"
ssh 'root@k8s-node1' "tar Cxzvf /usr/local ~/containerd-1.7.1-linux-arm64.tar.gz"
3、设置containerd开启启动 创建文件containerd.service
配置文件
1
2
cd /tmp;
wget https://ghproxy.com/https://raw.githubusercontent.com/containerd/containerd/main/containerd.service
这里使用了加速网站,有条件的同学可以直接访问。
这时containerd.service 文件会被下载到/tmp/containerd.service。
使用以下命令将此文件同步到两台虚拟机。
首先创建目录
1
2
ssh 'root@k8s-master' "mkdir -p /usr/local/lib/systemd/system/"
ssh 'root@k8s-node1' "mkdir -p /usr/local/lib/systemd/system/"
同步文件
1
2
scp /tmp/containerd.service root@k8s-master:/usr/local/lib/systemd/system/
scp /tmp/containerd.service root@k8s-node1:/usr/local/lib/systemd/system/
启动containerd服务,并设置开机自启动
1
2
ssh 'root@k8s-master' "systemctl daemon-reload && systemctl enable --now containerd"
ssh 'root@k8s-node1' "systemctl daemon-reload && systemctl enable --now containerd"
4、安装runc 在release 中下载对应二进制文件,这里下载runc.arm64
。
在 Mac 上执行以下命令,将其同步至两台虚拟机。
1
2
scp ~/Downloads/runc.arm64 root@k8s-master:~
scp ~/Downloads/runc.arm64 root@k8s-node1:~
在 Mac 上执行以下命令,安装runc
1
2
3
4
for i in master node1;
do
ssh "root@k8s- $i " "install -m 755 ~/runc.arm64 /usr/local/sbin/runc"
done
5、设置 containerd 配置文件 在 Mac 下执行,设置containerd默认配置文件
1
2
3
4
5
6
for i in master node1;
do
ssh "root@k8s- $i " \
"mkdir /etc/containerd && \
containerd config default > /etc/containerd/config.toml"
done
生成配置文件后,需要将 /etc/containerd/config.toml 文件中的 SystemdCgroup 设置为 true
或者直接在 MAC 下执行以下命令:
1
2
3
4
5
6
for i in master node1;
do
ssh "root@k8s- $i " \
"sed -ri 's/SystemdCgroup = false/SystemdCgroup = true/' \
/etc/containerd/config.toml"
done
6.沙箱镜像替换 在 Mac 下,执行以下命令:
1
2
3
4
for i in master node1;
do
ssh "root@k8s- $i " "sed -ri 's#sandbox_image = \"registry.k8s.io/pause:3.8\"#sandbox_image = \"registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.8\"#' /etc/containerd/config.toml"
done
到这里 containred 服务就配置完成了。
最后需要在重启containerd服务
执行以下命令:
1
2
3
4
5
for i in master node1;
do
ssh "root@k8s- $i " \
"systemctl restart containerd"
done
可以登录到虚拟机,使用systemctl status containerd.service
查看服务状态。
安装 kubeadm、kubelet 和 kubectl 参考文档
添加yum源 参考以上官方文档,添加相关yum源,这里需要把google的yum源替换为阿里云的。
在 Mac 执行以下命令
1
2
3
4
5
6
7
8
9
10
11
12
for i in master node1;
do
ssh "root@k8s- $i " "cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-aarch64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF"
done
yum 安装kubelet kubeadm kubectl 1
2
3
4
5
for i in master node1;
do
ssh "root@k8s- $i " \
"sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes"
done
设置 kubelet 开机自启动 1
2
3
4
5
for i in master node1;
do
ssh "root@k8s- $i " \
sudo systemctl enable --now kubelet
done
使用 kubeadm 创建集群 生成默认配置 登录k8s-master节点
执行以下命令将默认配置倒入到 admin.conf
1
kubeadm config print init-defaults > admin.conf
替换镜像地址 执行以下命令替换替换容器镜像地址
1
sed -ri 's/imageRepository: registry.k8s.io/imageRepository: registry.cn-hangzhou.aliyuncs.com\/google_containers/g' admin.conf
执行以下命令替换API Server启动ip
1
sed -ri 's/advertiseAddress: 1.2.3.4/advertiseAddress: 192.168.1.98/g' admin.conf
创建集群 1
kubeadm init --config= admin.conf
查看集群状态 执行以下命令
返回以下结果,代表成功
1
2
3
Client Version: version.Info{Major:"1", Minor:"27", GitVersion:"v1.27.2", GitCommit:"7f6f68fdabc4df88cfea2dcf9a19b2b830f1e647", GitTreeState:"clean", BuildDate:"2023-05-17T14:20:07Z", GoVersion:"go1.20.4", Compiler:"gc", Platform:"linux/arm64"}
Kustomize Version: v5.0.1
Server Version: version.Info{Major:"1", Minor:"27", GitVersion:"v1.27.0", GitCommit:"1b4df30b3cdfeaba6024e81e559a6cd09a089d65", GitTreeState:"clean", BuildDate:"2023-04-11T17:04:24Z", GoVersion:"go1.20.3", Compiler:"gc", Platform:"linux/arm64"}