创建k8s集群(仅限于理论,无实践)
k8s可以在多种平台运行,笔记本电脑,到云服务商的虚拟机,再到机架上的裸机服务器.要创建一个k8s集群,可以根据多种不同的场景做不尽相同的选择,可能是运行一条命令,也可以是配置自己的定制集群.这里我们将引导你根据自己的需要选择合适的解决平台.
选择正确的解决方案
如果你只想单纯的试一试k8s,我们推荐基于Docker的本地方案.
基于Docker的本地方案是众多能够完成快速搭建的本地鸡群方案的一种,但是局限于单台机器.
当你准备好扩展到多台机器和更高的可用性时,托管解决方案是最容易搭建和维护的.
全套云端方案只需要少数几个命令就可以在更多的云服务提供商那里搭建K8s.
定制方案需要花费更多的精力,但是覆盖了从零开始搭建k8s集群的通用建议到分布的细节指引.
本地服务器方案
本地服务器方案在一台物理机上创建一个或者多个k8s节点的单击集群.创建过程是全自动的,且不需要任何云服务的账户.但是这种单机集群的规模和可用性都受限于单台机器.
本地服务器方案有:
1.本地Docker
2.Vagrant(任何支持Vagrant的平台,Linux,MacOS,Windows)
3.无虚拟机本地集群.
托管方案
以下方案让你可以通过几个命令就在很多IaaS云服务中创建K8s集群,并且有活跃的社区支持.
1.GCE(google的东西)
2.AWS(亚马逊的东西)
3.Azure(微软的东西)
定制方案
k8s可以在云服务提供商和裸机环境运行,并支持很多的操作系统.
楼主google的半天发现没有一个案例,网上没找到关于在一台机器上创建一个k8s集群的内容.楼主以前没接触过在单台机器上搭建集群的内容,所以只能给大家说点楼主网上发现的理论.等楼主以后接触过了再来把过程记录下来.
楼主几天看到一张好图:
这张图就包括了全部的关于k8s的重点内容.
详细解释一下这张图.
Cluster:k8s维护一个集群,Docker的containerers都运行其上.并且这个集群可以运维在任何云以及物理机上.
Master:Master节点包含apiserver,controller-manager,sheduler等核心组件(常常也将etcd部署在其中).
Node:k8s采用Master-Slaves方式部署,单独一台Slace机器成为一个Node(以前叫Minion).
Pods:k8s最小管理单位,用于控制创建,重启,伸缩一组功能相近,共享磁盘的Docker容器.虽然Pod可以单独创建使用,但是推荐通过Replication Controller管理.
Replication controllers(RC):管理其下控制的Pods的生命周期,保证指定数量(replicas)的pods正常运行.
Service:可用作服务发现,类似于Loadbalacer,通过Selectors为一组Pods提供对外的接口.
Labels:K/V键值对,用来标记K8s组件的类别关系(例如标记一个Pods是frontServices,另一组是backServices).Labels对于k8s的伸缩调度非常重要.
搭建单机的demo环境(for ubuntu)
接下来说如何在一台ubuntu系统的虚拟机上运行k8s服务,master节点和minion节点都运行在同一台机器上.
安装分为以下三个步骤:
安装docker
以为楼主前面说过关于docker的安装,安装docker环境是运行k8s的基础,因为k8s本身就是基于docker的一套系统.
获取k8s各组件和etcd的二进制可执行文件
两种途径可以获取k8s各组件的二进制可执行文件:下载已经编译好的二进制可执行文件包和下载源码并从源码编译.前面的好处是可以任意挑选官方的release版本,同时省去了编译的时间;后者是具有对k8s进行二次开发的好处.
下载已经编译好的二进制可执行文件包
从GitHub上的k8s仓库的release页面可以看到所有可用的二进制文件压缩包.
例如,我们需要的版本是v0.7.2:
wget https://github.com/GoogleCloudPlatform/kubernetes/releases/download/v0.7.2/kubernetes.tar.gz
这里楼主插一句,楼主在这里尝试了多次,都没成功,可能是因为墙的原因,楼主一直显示
Unable to establish SSL connection.
所以接下来的内容纯属楼主武断式的意淫.
解压并进入生成的kubernetes/目录:
tar -xzvf kubernetes.tar.gz
cd kubernetes/
我们关心的server端二进制可执行文件压缩包在server/bin/目录下:
root@ubuntu:~/kubernetes_binary/kubernetes# ls server
kubernetes-salt.tar.gz kubernetes-server-linux-amd64.tar.gz
root@ubuntu:~/kubernetes_binary/kubernetes/server# tar -tzvf kubernetes-server-linux-amd64.tar.gz
drwxr-xr-x root/wheel 0 2014-12-30 03:11 kubernetes/
drwxr-xr-x root/wheel 0 2014-12-30 03:11 kubernetes/server/
drwxr-xr-x root/wheel 0 2014-12-30 03:11 kubernetes/server/bin/
-rwxr-xr-x root/wheel 16141712 2014-12-30 03:11 kubernetes/server/bin/kube-apiserver
-rwxr-xr-x root/wheel 12965312 2014-12-30 03:11 kubernetes/server/bin/kube-controller-manager
-rwxr-xr-x root/wheel 9769408 2014-12-30 03:11 kubernetes/server/bin/kube-proxy
-rwxr-xr-x root/wheel 9386640 2014-12-30 03:11 kubernetes/server/bin/kube-scheduler
-rwxr-xr-x root/wheel 11086824 2014-12-30 03:11 kubernetes/server/bin/kubecfg
-rwxr-xr-x root/wheel 11451632 2014-12-30 03:11 kubernetes/server/bin/kubectl
-rwxr-xr-x root/wheel 14973728 2014-12-30 03:11 kubernetes/server/bin/kubelet
-rwxr-xr-x root/wheel 16888056 2014-12-30 03:11 kubernetes/server/bin/kubernetes
而client端命令行工具的二进制可执行文件根据不同的操作系统归类被放在platforms/目录下:
root@ubuntu:~/kubernetes_binary/kubernetes# ls platforms/
darwin linux windows
以linux为例,又根据不同的硬件架构分类:
root@ubuntu:~/kubernetes_binary/kubernetes/platforms# ls linux/
386 amd64 arm
k8s client端二进制可执行文件一共三个:kubecfg,kubectl和kuberbetes,其中kubecfg是老版本命令行工具,用于使用k8s提供的API,现在已经被kubectl代替,而kubernetes则用于访问kubelet的API.
楼主只能理解到这里了,剩下的内容楼主有点不理解,所以就不说了