环境搭建 June 14, 2020

Mac环境下开启Docker之旅

Words count 8.4k Reading time 8 mins. Read count 0

使用桌面版的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需要做一下几项工作:

  1. 添加国内镜像库
  2. 手动使用脚本拉取k8s镜像
  3. 开启k8s

2.1 添加国内镜像库

https://docker.mirrors.ustc.edu.cnhttps://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,如要一下几步:

  1. 创建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
    
  2. 创建Service Account和ClusterRoleBinding

    执行命令

    kubectl apply -f dashboard-adminuser.yaml
    
  3. 获取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

访问:https://rancher.localhost

0%