在 mac 上搭建一个好用的 k8s 集群

平时开发都在 mac,需要一个可以随意折腾的本地的 k8s 环境,一开始用的是 minikube,但是这个东西在我的 mac 和公司的 mac 上表现不同,最后折腾了一遍还是虚拟机比较合适。

mac 上 virtualbox 已经非常好用了,而且免费,推荐使用. 装上 mac 之后,安装一个 ubuntu server 的镜像,系统配置要求最低 2GB,2CPU. 配置网卡 1 为桥接网卡为了和主机通信,网卡 2 为 网络地址转换为了和外网通信。

首先在虚拟机中安装好 docker,具体见 https://yeasy.gitbooks.io/docker_practice/install/ubuntu.html,注意安装时把 ubuntu 的源替换成国内的源 http://mirrors.aliyun.com/ubuntu。
docker 安装好之后配置成国内的 docker 源,sudo vi /etc/docker/daemon.json 输入以下内容:

1
2
3
4
5
6
{
"registry-mirrors": [
"https://dockerhub.azk8s.cn",
"https://reg-mirror.qiniu.com"
]
}

然后重启 docker:

1
2
sudo systemctl daemon-reload
sudo systemctl restart docker

切换到 root 用户,禁止系统开启 swap:

1
vi /etc/fstab

注释掉 swap,手动关闭已经开启的 swap swapoff -a,执行以下命令安装好基础组件:

1
2
3
4
5
6
7
8
9
10
apt-get update && apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet kubeadm kubectl

systemctl daemon-reload
systemctl restart kubelet

然后使用如下镜像安装 k8s:

1
kubeadm init --image-repository=gcr.azk8s.cn/google_containers

切换到普通用户,拷贝相应的证书让 k8s 可以让普通用户访问:

1
2
3
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

接着安装网络组件:

1
kubectl apply -f https://git.io/weave-kube-1.6

安装完毕之后检查集群状态:

1
kubectl get pods -n kube-system

让主节点接受 Pod 调度:

1
kubectl taint nodes --all node-role.kubernetes.io/master-

在 mac 本机下载 kubectl 并且加入 bin 目录,通过 ssh 拷贝上面搭建好的 k8s 的 .kube/config 到 mac 的同目录下,配置 kubectl 命令自动补全,使用 zsh:

1
source <(kubectl completion zsh)

在 ubuntu 配置 kubectl 命令补全:

1
2
3
apt-get install bash-completion
echo 'source /usr/share/bash-completion/bash_completion' >> ~/.bashrc
echo 'source <(kubectl completion bash)' >>~/.bashrc

设置虚拟机中的 k8s 为开机启动:

1
sudo systemctl enable kubelet

三月沙 wechat
扫描关注 wecatch 的公众号