基于Docker for macOS的Kubernetes本地环境搭建与应用部署

最近的工作跟微服务有关,偶然在网上发现一个用k8s写微服务的小例子,觉得这样写微服务真的好简单,都不用在程序框架层面实现服务注册与服务发现了,这个后面可以好好研究一下。在使用这种方式写微服务前,需要在个人开发机上搭建k8s集群。我的开发机是macOS系统,今天研究了一下,找到一种极为简易的方法,终于不用为搭一个开发用的k8s集群而专门启动虚拟机了,这里记录一下。

安装Docker for macOS

安装

下载最新的Docker for Mac Edge 版本,跟普通mac软件一样安装,然后运行它,会在右上角菜单栏看到多了一个鲸鱼图标,这个图标表明了 Docker 的运行状态。

image-20180506034957469

配置镜像加速地址

鉴于国内网络问题,国内从 Docker Hub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。Docker 官方和国内很多云服务商都提供了国内加速器服务。

点击设置菜单

image-20180506035102081

设置镜像加速地址

image-20180506035306657

检查docker环境

可执行以下命令检查docker环境

$ docker --version
Docker version 18.05.0-ce-rc1, build 33f00ce
$ docker-compose --version
docker-compose version 1.21.0, build 5920eb0
$ docker-machine --version
docker-machine version 0.14.0, build 89b8332
# 如果 docker version、docker info 都正常的话,可以尝试运行一个 Nginx 服务器:
$ docker run -d -p 80:80 --name webserver nginx
# 访问一下Nginx服务器
$ curl http://localhost
# 停止 Nginx 服务器并删除
$ docker stop webserver
$ docker rm webserver

搭建k8s本地开发环境

启用k8s

点击设置菜单

image-20180506035102081

点击启动k8s的checkbox,这里会拉取比较多的镜像,可能要等好一会儿。

image-20180506035603276

检查k8s环境

可执行以下命令检查k8s环境

$ kubectl get nodes
NAME                 STATUS    ROLES     AGE       VERSION
docker-for-desktop   Ready     master    3h        v1.9.6
$ kubectl cluster-info
Kubernetes master is running at https://localhost:6443
KubeDNS is running at https://localhost:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

部署kubernetes-dashboard服务

按以下步骤部署k8s-dashboard服务

$ kubectl create -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml

# 开发环境推荐用NodePort的方式访问dashboard,因此编辑一下该部署

$ kubectl -n kube-system edit service kubernetes-dashboard

# 这里将type: ClusterIP修改为type: NodePort

# 获取dashboard服务暴露的访问端口

$ kubectl -n kube-system get service kubernetes-dashboard

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE

kubernetes-dashboard NodePort 10.98.82.248 <none> 443:31241/TCP 2h

按上述输出,dashboard服务暴露的访问端口是31241,因此可以用浏览器访问https://localhost:31241/,我们可以看到登录界面

image-20180506041543930

此时可暂时直接跳过,进入到控制面板中

image-20180506041643252

使用k8s本地开发环境

这里尝试用Skaffold往本地开发环境部署微服务应用。

安装Skaffold

1

curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/latest/skaffold-darwin-amd64 && chmod +x skaffold && sudo mv skaffold /usr/local/bin

获取微服务示例代码

git clone https://github.com/GoogleContainerTools/skaffold
cd skaffold/examples/microservices

部署到本地k8s环境

skaffold run
# 获取leeroy-web服务暴露的访问端口
$ kubectl get service leeroy-web
NAME         TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
leeroy-web   NodePort   10.98.162.88   <none>        8080:30789/TCP   56m

按上述输出,dashboard服务暴露的访问端口是30789,因此可以用浏览器访问http://localhost:30789/

k8s的dashboard中检查部署

image-20180506042800026

删除无用的docker实例及镜像

用skaffold反复进行部署时会产生一些无用的docker实例及镜像,这里用一个脚本将它们删除

# 删除停止或一直处于已创建状态的实例

docker ps --filter "status=exited"|sed -n -e '2,$p'|awk '{print $1}'|xargs docker rm

docker ps --filter "status=created"|sed -n -e '2,$p'|awk '{print $1}'|xargs docker rm

# 删除虚悬镜像

docker image prune --force

# 删除REPOSITORY是长长uuid的镜像

docker images | sed -n -e '2,$p'|awk '{if($1 ~ /[0-9a-f]{32}/) print $1":"$2}'|xargs docker rmi

# 删除TAG是长长uuid的镜像

docker images | sed -n -e '2,$p'|awk '{if($2 ~ /[0-9a-f]{64}/) print $1":"$2}'|xargs docker rmi

OVER

参考

  1. https://juejin.im/post/5a5cbad5518825734216e14f
  2. https://yeasy.gitbooks.io/docker_practice/content/install/mac.html
  3. https://github.com/kubernetes/dashboard/wiki/Accessing-Dashboard—1.7.X-and-above
  4. https://yeasy.gitbooks.io/docker_practice/content/image/list.html
  5. https://github.com/GoogleContainerTools/skaffold

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

内网漫游:通过RDP劫持向远程系统执行任意代码

远程桌面协议(RDP)被广泛应用于管理员的内部网络。该协议允许系统所有者以及管理员远程管理其Windows环境。然而,RDP在为我们带来方便的同时,也为虎视眈眈...

1832
来自专栏友弟技术工作室

macOS 安装 Docker

前几天,docker入门是在aws的ubuntu机器上演示的,下面介绍如何在macOS安装Docker。 ? 系统要求 Docker for Mac 要求系统最...

81311
来自专栏容器云生态

overlayfs存储驱动的使用以及技术探究

overlayfs存储驱动的使用以及技术探究 1.overlayfs 基本概念 一种联合文件系统,设计简单,速度更快。overlayfs在linux主机上只有两...

37810
来自专栏写代码的海盗

Docker学习总结之Run命令介绍 Operator exclusive options

Docker学习总结之Run命令介绍 本文由Vikings(http://www.cnblogs.com/vikings-blog/) 原创,转载请标明.谢谢!...

3285
来自专栏云计算教程系列

如何在Ubuntu 16.04上安装Ghost CMS

Ghost 1.0.0是Ghost内容管理系统(CMS)的第一个主要稳定版本。Ghost 1.0.0有一个全新的Markdown编辑器,刷新的用户界面,新的默认...

1986
来自专栏禅林阆苑

csxiaoyao.com整站第二次迁移记录

csxiaoyao的主页( csxiaoyao.com / csxiaoyao.cn / victorsun.cn / sunshinestudio.cn )从...

62931
来自专栏哎_小羊

初试 minikube 本地部署运行 kubernetes 实例

目录 kubernetes 介绍 环境、软件准备 kubectl 安装 minikube 安装 部署运行实例 1、kubernetes 介绍 Kuberne...

8805
来自专栏云计算

Kubernetes服务网格(第8部分):Linkerd作为入口控制器

Linkerd旨在使应用程序内部服务间的通信安全,快速和可靠。但是,这些目标同样适用于网络的接入层(应用程序对外的服务)。在这篇文章中,我们将展示Linkerd...

5298
来自专栏Linux 杂货铺

使用Kubernetes管理Docker集群

Kubernetes是一个来管理容器化应用程序的开源平台。如果您使用Docker将应用部署到多个服务器节点上,Kubernetes集群就可以管理您的服务器和应用...

2.6K9
来自专栏小狼的世界

CoreDNS介绍

开始之前先吐槽一下busybox中的nslookup命令。这个命令应该是实现的不是很完全,导致我在测试DNS的成功,得到了错误的信息。先来看一下

1.5K1

扫码关注云+社区

领取腾讯云代金券