最初是想用虚拟机做大数据开发的,还特地搞了包括完整CDH5的iso镜像,希望能在单机上启动完整的CDH集群。
镜像虽然做了出来,但发现使用上太繁琐了,而且主机的资源使用效率不高,16G内存的主机,启动一组hdfs+hbase+kylin集群,什么都不干就要爆内存了。
资源不够用是硬伤,于是换到docker,用windows版docker desktop做开发也有一段时间了,一直都是用docker-compose管理容器实例的。但从业界风向看,kubernetes已经是一骑绝尘,一统天下的趋势很难扭转了。
虽然从实际使用经验看,docker-compose在单节点编排开发环境是足够用了,但为了追一下业界潮流,也为了将来能彻底转向公有云上的云开发,还是花时间学一下如何用kubernetes管理容器的好。
docker desktop有多个版本,但能搭配kubernetes的暂时只有EDGE channel的尝鲜版本,里面的kubernetes版本也是固定的一个。
能下载windows版 的docker desktop页面地址还藏得比较深,页面链接在此 https://hub.docker.com/editions/community/docker-ce-desktop-windows
上面的下载链接有好几个,只有EDGE channel下面的才是能用kubernetes的,stable也就是稳定版本的,虽然可以打开kubernetes选项,但会一直转圈圈启动不起来。
exe下载链接在此 https://download.docker.com/win/edge/Docker%20Desktop%20Installer.exe
笔者用的windows 10,启用了hyper-v,安装过程没什么可说的。
如果是windows 7/Vista,或者windows 10家庭版,安装过程里要选择搭配VirtualBox。
kubernetes启动需要很多系统镜像,其中相当一部分会因为网络原因下载失败。
经过实验,可以参考这个文章里的做法 用阿里某团队提供的工具脚本
在有windows版git的前提下,开一个管理员权限的power shell窗口,执行下面的代码
git clone https://github.com/AliyunContainerService/k8s-for-docker-desktop
cd k8s-for-docker-desktop
Set-ExecutionPolicy RemoteSigned
./load_images.ps1
Set-ExecutionPolicy Restricted
需要下载工具脚本到本地并执行。但windows 10默认策略限制了这类下载回来的脚本执行,所以需要管理员权限修改一下执行策略,执行完了再改回来
安装后默认docker desktop是使用docker-engine和docker-compose的,需要手工选中一下Enable Kubernetes
拿centos mini镜像实验一下,如果本地还没有,需要拉一下,这里有个细节,如果镜像后缀是latest, kubernetes的默认设置是会重新拉取这种latest后缀镜像的最新版本。
这里用centos 7实验一下
docker pull centos:7
写一个hello world的pod配置文件,顺便吐槽一句,文档上这一点kubernetes比docker差多了,pod配置文件的写法比docker繁琐,配置项七零八落到处都是要查的。
kubenetes有yml(yaml)和json两种格式,层次结构都是一样的,只是写法略有不同。
用bash的echo命令输出hello world,因为这只是实验,执行一次就够了,所以配置里加了一个不需要重启的配置(restartPolicy: Never), 否则kubernetes默认是会在检测到pod的进程退出后自动重启的。
先看yml的,因为缩进是yml文件的严格要求,一定要用专门的文本编辑器写,对齐缩进,不能用tab,避免写的过程里笔误。
apiVersion: v1
kind: Pod
metadata:
name: codebox
spec:
restartPolicy: Never
containers:
- name: codebox
image: centos:7
command: ["/bin/bash","-c","echo hello world"]
这个文件对应的json格式为
{
"apiVersion": "v1",
"kind": "Pod",
"metadata": {
"name": "codebox"
},
"spec": {
"restartPolicy": "Never",
"containers": [
{
"command": [
"/bin/bash",
"-c",
"echo hello world"
],
"image": "centos:7",
"name": "codebox"
}
]
}
}
按自己偏好选择一个格式,保存为centos.yml或者centos.json。
以yml为例,启动这个pod并查看结果的命令行为下面的写法
PS >kubectl.exe create -f centos.yml
pod/codebox created
PS >kubectl.exe logs codebox
hello world
下一篇在centos的mini镜像基础上加sshd