Mac之搭建本地k8s开发环境
Mac搭建本地k8s环境目前网上有N多的博客文章,无非就是minikube、docker-desktop、kubeadm去部署,对于我个人需求,由于后期需要对原生的 scheduler 进行自定义的扩展开发,我需要能够有机会改动静态POD的manifests文件进行改动与配置。
前期通过 minikube 及 docker-desktop 进行过本地k8s集群的部署,但是发现此种沙盒环境无法对静态POD进行配置改动,只能围着k8s做周边的应用测试,没法满足我的需求,最后决定通过kubeadm进行k8s本地环境部署。
所以最终选择: Virtualbox + Centos7 镜像进行单节点k8s部署【此环境只做组件部署及逻辑验证】
VirutalBox安装及Centos 虚拟机安装
具体的介绍就不多介绍了,我选用的为 6.1.4 没有选用最新的版本,主要是担心出了问题可能没有最新及时的资料可以参考。
如何创建虚机就不多介绍了,但是以下注意点需要注意:
- 虚机CPU至少分配2核
- 虚机网络连接选择为bridge,之前选择的Nat模式无法获取本地ip,虽然能通外网。 此现象比较诡异
Kubeadm 安装及K8s集群初始化
由于此次的工作只是作为本地开发测试环境,不作为生产环境的部署方案,所以在这里我只是通过yum 安装,不过对于无网的生产环境部署,实际上也可以通过制作本地yum源来部署,这里就不做扩展讨论了。
更新yum
yum upgrade -y
关闭防火墙
1 | systemctl stop firewalld |
更改Selinux配置
1 | setenforce 0 //临时改动 |
关闭 swap
1 | swapoff -a |
网桥参数配置
1 | cat <<EOF > /etc/sysctl.d/k8s.conf |
安装 socat
1 | yum install socat -y |
安装 docker 并启动 docker daemon 服务
1 | yum install -y yum-utils device-mapper-persistent-data lvm2 |
配置 kubernetes 的国内yum源
这里配置的是阿里 yum 源
1 | vcat <<EOF > /etc/yum.repos.d/kubernetes.repo |
安装 kubelet、kubectl、kubeadm
由于后续工作是对k8s版本有指定要求的,所以在部署的时候我需要安装指定的k8s 版本组件,可以通过如下命令进行yum list 查看可安装版本
yum list kubelet kubeadm kubectl –showduplicates|sort -r
安装组件指定版本
1 | yum install -y kubelet-1.19.8-0 kubeadm-1.19.8-0 kubectl-1.19.8-0 |
这个时候我们查看 kubelet 的服务没有正常启动,这个是正常的,因为它会关联 kubeadm.conf 这个配置文件,此时我们还没有用kubeadm进行集群的初始化。所以这个反应是正常的。
通过kubeadm初始化k8s集群
1 | kubeadm init --kubernetes-version=1.19.8 --image-repository=registry.aliyuncs.com/google_containers --pod-network-cidr=192.168.0.0/16 |
根据OutPut生成对应的配置文件
1 | mkdir -p $HOME/.kube |
安装网络插件
由于到了这边我们没有安装网络插件,此时集群的节点状态是NotReady,为了方便后续的维护,我是将 calico.yaml 下载下来放到指定目录方便后续维护的。
1 | curl -sSLO https://ms-source.oss-cn-shanghai.aliyuncs.com/calico/yaml/calico-v3.17.0.yaml |
部署Calico组件
kubectl create -f calico-v3.17.0.yaml
此步骤结束之后算是k8s集群部署工作算是完成了,但是由于我这边只是一个master节点,kubeadm默认是做了 Taint的污点策略,此时的节点是不可调度的,通过产看pod状态,会出现如下现象:
具体原因可以通过如下操作进行查明:
解决使用的命令如下:kubectl taint nodes --all node-role.kubernetes.io/master-
此时再继续查看pod的状态,可以发现是正常的了。
Tips
- 将在期望状态的虚机导一份镜像出来,方便后续使用
- virtualbox 中的虚机个人喜欢无界面启动,此操作可以通过 控制台或者命令行形式进行操作。