使用桌面版的docker已经有一段时间了,主要是在平时的开发中用以搭建各种开发环境。总的来说,在mac上使用桌面版的docker比较容易上手,桌面版也提供k8s的功能,但是开启时总是不能成功,而且在此基础上使用Rancher管理k8s也遇到了各种问题,这里就记录一下这一路上遇到的各种坑。
1 Docker Desktop for Mac
使用桌面版的Docker很简单,官网也提供Mac/Window的版本下载,这里为了后面使用k8s集群,下载的是edge版本的docker。
下载页面:https://docs.docker.com/docker-for-mac/edge-release-notes/
下载完成后,我们就可以直接安装即可。
输入自己的Docker账户和密码
命令行查看我们的docker版本
docker version
小试牛刀,使用docker快速启动一个redis容器。
docker run -itd -p 6379:6379 --name redis hub.c.163.com/public/redis:2.8.4
查看容器
docker ps
2 安装Kubernetes集群
如下图所示,桌面版的docker提供开启k8s的选项,但是如果我么直接勾选的话,由于qiang的原因,会一直处于starting的状态。
所以要想开启k8s需要做一下几项工作:
- 添加国内镜像库
- 手动使用脚本拉取k8s镜像
- 开启k8s
2.1 添加国内镜像库
将https://docker.mirrors.ustc.edu.cn,https://registry.docker-cn.com添加到镜像库列表,可在 Docker -> Preferences… -> Advanced -> Registry Mirror添加。
添加完成后,点击Apply&Restart按钮。
2.2 手动使用脚本拉取k8s镜像
先从github上download脚本
git clone https://github.com/maguowei/k8s-docker-desktop-for-mac.git
然后进行k8s-docker-desktop-for-mac目录,执行load_images.sh 脚本
./load_images.sh
2.3 开启k8s
2.3.1 开启
镜像完成之后,我们就可以开启k8s了。
k8s显示running状态,说明集群已经启动成功了。
2.3.2 查看状态
查看集群状态:kubectl cluster-info
查看节点:kubectl get nodes
2.3.3 开启dashboard
官网:https://github.com/kubernetes/dashboard
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
要从本地工作站访问仪表板,您必须为Kubernetes群集创建安全通道。运行以下命令:
kubectl proxy
访问:
http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
如上图所示,需要验证,这里我们可以创建一个简单的用户,参考https://github.com/kubernetes/dashboard/wiki/Creating-sample-user,如要一下几步:
创建dashboard-adminuser.yaml文件
文件内容:
apiVersion: v1 kind: ServiceAccount metadata: name: admin-user namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: admin-user roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: admin-user namespace: kube-system
创建Service Account和ClusterRoleBinding
执行命令
kubectl apply -f dashboard-adminuser.yaml
获取Token
执行命令获取Token
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
我们可以得到如下输出:
只需要将token内容粘贴到web端即可。
2.3.4 Helm
Helm 是一个命令行下的客户端工具。主要用于 Kubernetes 应用程序 Chart 的创建、打包、发布以及创建和管理本地和远程的 Chart 仓库。Tiller 是 Helm 的服务端,部署在 Kubernetes 集群中。Tiller 用于接收 Helm 的请求,并根据 Chart 生成 Kubernetes 的部署文件( Helm 称为 Release ),然后提交给 Kubernetes 创建应用。Tiller 还提供了 Release 的升级、删除、回滚等一系列功能。
在mac上安装helm比较简单,使用brew就可以直接安装。如果mac上没有安装brew,可以跳转到https://www.jianshu.com/p/08a9d9479c2a
brew install helm
初始化本地 CLI 并 将 Tiller 安装到 Kubernetes cluster
helm init
原先的stable仓库
helm repo remove stable
添加新的仓库地址
helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
更新仓库
helm repo update
3 使用Rancher管理k8s集群
接下来进行高能操作,使用Rancher来管理k8s集群。参考https://rancher.com/blog/2018/2018-05-18-how-to-run-rancher-2-0-on-your-desktop/
在安装Rancher之前,一定要执行第2节里的Helm的操作。更换stable为国内源。
3.1 添加 Ingress Controller
Ingress Controller用于提供从外部世界到在Kubernetes中运行的服务的L7(主机名或路径库)http路由。
我们将用于helm
安装Kubernetes稳定社区nginx-ingress
chart
。这将在我们的本地群集上创建Ingress Controller。
helm install stable/nginx-ingress --name ingress-nginx --namespace ingress-nginx --wait
3.2 安装 Cert-Manager
Kubernetes 的Cert-Manger项目将管理本地Rancher安装的SSL证书。
因为cert-manager会拉取国外的镜像,可能会报错,这里我写了个脚本,可以先拉取国内源,然后替换,所以先从我的git上拉取脚本。
git clone https://github.com/shirukai/docker-desktop-for-mac.git
然后切换到rancher目录
cd docker-desktop-for-mac/rancher
执行load_images.sh脚本
./load_images.sh
然后安装Cert-Manager
helm install stable/cert-manager --name cert-manager --namespace kube-system --wait
3.3 安装 Rancher
接下来就开始安装Rancher了,首先添加Rancher的chart仓库
helm repo add rancher-latest https://releases.rancher.com/server-charts/latest
安装rancher
helm install rancher-latest/rancher --name rancher --namespace cattle-system --set hostname=rancher.localhost --wait