概述
基于Docker单机、单节点的Kubernetes集群
- 架构图
- 开始构建
- 第一步:运行Etcd
- 第二步:启动master
- 第三步:运行service proxy
- 测试
- 运行一个应用
- 暴露为service
- 关于关闭集群的说明
- 参考
通过Docker创建一个单机、单节点的Kubernetes集群。
架构图
开始构建
- 拥有一台安装有Docker的机器。
- 你的内核必须支持 memory and swap accounting 。确认你的linux内核开启了如下配置:
CONFIG_RESOURCE_COUNTERS=y
CONFIG_MEMCG=y 总开关
CONFIG_MEMCG_SWAP=y 扩展功能
CONFIG_MEMCG_SWAP_ENABLED=y 涉及到内存压力的计算
CONFIG_MEMCG_KMEM=y 限制cgroup中所有进程所能使用的内核内存总量及其它一些内核资源
- 以命令行参数方式,在内核启动时开启 memory and swap accounting 选项:
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
$vim /etc/default/grub
# 修改 GRUB_CMDLINE_LINUX="" ==> GRUB_CMDLINE_LINUX="cgroup_enable=memory"
# 保存后, 更新grub.cfg
update-grub
reboot
注意:以上只适用于GRUB2。通过查看cat /proc/cmdline可以确认命令行参数是否已经成功
传给内核:
$cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-3.18.4-aufs root=/dev/sda5 ro cgroup_enable=memory
swapaccount=1
第一步:运行Etcd
docker run --net=host -d gcr.io/google_containers/etcd:2.0.12 /usr/local/bin/etcd --addr=127.0.0.1:4001 --bind-addr=0.0.0.0:4001 --data-dir=/var/etcd/data
第二步:启动master
docker run
--volume=/:/rootfs:ro
--volume=/sys:/sys:ro
--volume=/dev:/dev
--volume=/var/lib/docker/:/var/lib/docker:ro
--volume=/var/lib/kubelet/:/var/lib/kubelet:rw
--volume=/var/run:/var/run:rw
--net=host
--pid=host
--privileged=true
-d
gcr.io/google_containers/hyperkube:v1.0.1
/hyperkube kubelet --containerized --hostname-override="127.0.0.1" --address="0.0.0.0" --api-servers=http://localhost:8080 --config=/etc/kubernetes/manifests
这一步实际上运行的是 kubelet ,并启动了一个包含其他master组件的[pod](…/userguide/pods.md)。
第三步:运行service proxy
docker run -d --net=host --privileged gcr.io/google_containers/hyperkube:v1.0.1 /hyperkube proxy --master=http://127.0.0.1:8080 --v=2
测试
此时你应该已经运行起了一个Kubernetes集群。你可以下载kubectl二进制程序进行测试:
(OS X) (linux)
注意: 再OS/X上你需要通过ssh设置端口转发:
boot2docker ssh -L8080:localhost:8080
列出集群中的节点:
kubectl get nodes
应该输出以下内容:
NAME LABELS STATUS
127.0.0.1 Ready
如果你运行了不同的Kubernetes集群,你可能需要指定 -s http://localhost:8080 选项来访问本地集群。
运行一个应用
kubectl -s http://localhost:8080 run nginx --image=nginx --port=80
运行 docker ps 你应该就能看到nginx在运行。下载镜像可能需要等待几分钟。
暴露为service
kubectl expose rc nginx --port=80
运行以下命令来获取刚才创建的service的IP地址。有两个IP,第一个是内部的
(CLUSTER_IP),第二个是外部的负载均衡IP。
kubectl get svc nginx
同样你也可以通过运行以下命令只获取第一个IP(CLUSTER_IP):
kubectl get svc nginx --template={{.spec.clusterIP}}
通过第一个IP(CLUSTER_IP)访问服务:
curl <insert-cluster-ip-here>
注意如果再OSX上需要再boot2docker虚拟机上运行curl。
关于关闭集群的说明
上面的各种容器都是运行在 kubelet 程序的管理下,它会保证容器一直运行,甚至容器意外退出时也不例外。所以,如果想关闭集群,你需要首先关闭 kubelet 容器,再关闭其他。
可以使用 docker kill $(docker ps -aq) 。注意这样会关闭Docker下运行的所有容器,请谨慎使用。
参考
https://www.kubernetes.org.cn/doc-5
最后
以上就是丰富发带为你收集整理的基于Docker单机、单节点的Kubernetes集群架构图开始构建测试运行一个应用暴露为service关于关闭集群的说明参考的全部内容,希望文章能够帮你解决基于Docker单机、单节点的Kubernetes集群架构图开始构建测试运行一个应用暴露为service关于关闭集群的说明参考所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复