本文共 2810 字,大约阅读时间需要 9 分钟。
Kubernetes是谷歌开源的容器集群管理系统,它提供一个统一的工作流程管理运行在集群中的容器Kubernetes引入容器仓的概念,通过容器仓我们可以把一组容器作为一个逻辑上独立的服务部署。容器仓的工作原理与当前的一个非常流行的部署模式相匹配,那就是一个容器只运行一个服务。使用Kubernetes很容易做到在一个物理机或集群中运行多个容器仓,从而提高资源的利用率与系统的高可用性。Kubernetes同时提供容器仓的运行状况监控功能,用于保证容器仓在集群中正常运行。 Kubernetes提供的优秀集群协调服务主要依靠分布式键值存储系统etcd。etcd项目使用CoreOS发起并维护的。etcd用于在整个集群中保存和备份Kubernetes的系统数据,依靠Raft一致性算法,etcd可以做到计算机硬件与网络引起的故障恢复。将Kubernetes与etcd同时部署在CoreOS中能够提供更强大的功能,因为CoreOS就是为前文所说的高并发、高可用而构建的操作系统。 现在我们开始使用Kubernetes 保持一个轻松的心情跟随着下文的指导完成Kubernetes的安装配置,并启动一个容器仓运行Redis数据库服务。首先我们需要保证CoreOS正常运行,单节点的CoreOS即可保证下文所描述的操作正常执行。参考CoreOS的官方文档,选择合适的平台安装CoreOS。其次需要下载Kubernetes的一些组件到CoreOS实例中。 为了简单起见,我们下载Kubernetes的所有组件,这些组件包括: - apiserver
- controller-manager
- kubecfg
- kubelet
- proxy
登陆CoreOS并执行如下命令: sudo mkdir -p /opt/kubernetes/bin sudo chown -R core: /opt/kubernetes cd /opt/kubernetes wget https://github.com/kelseyhightower/kubernetes-coreos/releases/download/v0.0.1/kubernetes-coreos.tar.gz tar -C bin/ -xvf kubernetes-coreos.tar.gz 以上命令执行完以后,Kubernetes的所有组件都下载到了/opt/kubernetes/bin目录下。Kubernetes运行时依赖docker和etcd,然而这两个组件是CoreOS默认支持的,因此就不需要另外安装了。虽然CoreOS推荐将第三方应用程序在docker容器中运行,但是CoreOS确实支持Kubernetes直接在操作系统上运行。启动Kubernetes各组件的最佳方式是创建systemd unit文件并使用systemctl命令。我们通过git下载相关文件: git clone https://github.com/kelseyhightower/kubernetes-coreos.git sudo cp kubernetes-coreos/units/* /etc/systemd/system/ 启动Kubernetes前需保证etcd已经启动: sudo systemctl start etcd 使用systemd units文件我们依次执行如下命令: sudo systemctl start kubernetes-apiserver sudo systemctl start kubernetes-controller-manager sudo systemctl start kubernetes-kubelet sudo systemctl start kubernetes-proxy 恭喜你!你已经成功将Kubernetes在CoreOS上运行。 创建Kubernetes容器仓 容器仓是Kubernetes分组容器与定义逻辑部署单元的基本方式。下面是Redis数据库容器仓的配置文件: { "id": "redis", "desiredState": { "manifest": { "version": "v1beta1", "id": "redis", "containers": [{ "name": "redis", "image": "dockerfile/redis", "ports": [{ "containerPort": 6379, "hostPort": 6379 }] }] } }, "labels": { "name": "redis" } } 我们发现容器仓的配置描述了Docker容器和端口映射,容器仓配置文件同样定义了用于服务发现的标签。我们将在下一节详细讨论服务发现,但是现在你只需要知道这个标签用于其他工具发现我们使用Kubernetes提交的容器仓。我们使用kubecfg 命令行工具与Redis容器仓配置文件创建Redis数据库容器仓。 /opt/kubernetes/bin/kubecfg -h http://127.0.0.1:8080 -c kubernetes-coreos/pods/redis.json create /pods (这条命令的执行速度取决于下载docker下镜像的速度) 如果一切顺利Redis数据库容器仓已经成功运行了,我们可以通过Redis客服端使用docker0网络接口连接我们的容器仓验证: docker run -t -i dockerfile/redis /usr/local/bin/redis-cli -h 172.17.42.1 (其中IP地址172.17.42.1可能因不同的运行环境而不同,使用docker inspect 命令查看容器IP地址) 使用kubecfg命令显示运行中的容器仓: /opt/kubernetes/bin/kubecfg -h http://127.0.0.1:8080 list /pods 删除不在使用的容器仓: /opt/kubernetes/bin/kubecfg -h http://127.0.0.1:8080 delete /pods/redis 总结 希望这篇博客能够证明Kubernetes可以运行在除GCE以外的其他Linux平台中。CoreOS集成Kubernetes特别简单,因为CoreOS对某些Kubernetes依赖的重要服务提供默认支持,比如docker、etcd、systemd。你需要做的仅仅是安装Kubernetes二进制包与systemd units。下一篇博客我们开始讨论Kubernetes的强大能力,包括集群容器管理,服务发现已经Linux容器全生命周期管理。 转载地址:http://anmmb.baihongyu.com/