设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

Kubernetes初探:原理及实践应用

2014-11-5 11:50| 发布者: joejoe0332| 查看: 3178| 评论: 0|原作者: 张俊|来自: CSDN

摘要: Kubernetes是Google开源的容器集群管理系统。它构建Ddocker技术之上,为容器化的应用提供资源调度、部署运行、服务发现、扩容缩容等整一套功能,本质上可看作是基于容器技术的mini-PaaS平台。本文旨在梳理Kubernetes ...


工作流

  上文已经提到了Kubernetes中最基本的三个操作对象:pod, replicationController及service。 下面分别从它们的对象创建出发,通过时序图来描述Kubernetes各个组件之间的交互及其工作流。

alt


使用示例

  最后,让我们进入实战模式,这里跑一个最简单的单机示例(所有组件运行在一台机器上),旨在打通基本流程。


搭建环境

第一步,我们需要Kuberntes各组件的二进制可执行文件。有以下两种方式获取: 

  • 下载源代码自己编译:
git clone https://github.com/GoogleCloudPlatform/kubernetes.git  
cd kubernetes/build  
./release.sh  
  • 直接下载人家已经编译打包好的tar文件:
wget https://storage.googleapis.com/kubernetes/binaries.tar.gz

自己编译源码需要先安装好golang,编译完之后在kubernetes/_output/release-tars文件夹下可以得到打包文件。直接下载的方式不需要安装其他软件,但可能得不到最新的版本。

第二步,我们还需要etcd的二进制可执行文件,通过如下方式获取:

wget https://github.com/coreos/etcd/releases/download/v0.4.6/etcd-v0.4.6-linux-amd64.tar.gz 
tar xvf etcd-v0.4.6-linux-amd64.tar.gz  

第三步,就可以启动各个组件了:

etcd

cd etcd-v0.4.6-linux-amd64  
./etcd  

apiserver

./apiserver \  
-address=127.0.0.1 \  
-port=8080 \  
-portal_net="172.0.0.0/16" \  
-etcd_servers=http://127.0.0.1:4001 \  
-machines=127.0.0.1 \  
-v=3 \  
-logtostderr=false \  
-log_dir=./log  

scheduler

./scheduler -master 127.0.0.1:8080 \  
-v=3 \  
-logtostderr=false \  
-log_dir=./log  

controller-manager

./controller-manager -master 127.0.0.1:8080 \  
-v=3 \  
-logtostderr=false \  
-log_dir=./log  

kubelet

./kubelet \  
-address=127.0.0.1 \  
-port=10250 \  
-hostname_override=127.0.0.1 \  
-etcd_servers=http://127.0.0.1:4001 \  
-v=3 \  
-logtostderr=false \  
-log_dir=./log  

创建pod

搭好了运行环境后,就可以提交pod了。首先编写pod描述文件,保存为redis.json:

{  
  "id": "redis",  
  "desiredState": {  
    "manifest": {  
      "version": "v1beta1",  
      "id": "redis",  
      "containers": [{  
        "name": "redis",  
        "image": "dockerfile/redis",  
        "imagePullPolicy": "PullIfNotPresent",  
        "ports": [{  
          "containerPort": 6379,  
          "hostPort": 6379  
        }]  
      }]  
    }  
  },  
  "labels": {  
    "name": "redis"  
  }  
}  

然后,通过命令行工具kubecfg提交:

./kubecfg -c redis.json create /pods

提交完后,通过kubecfg查看pod状态:

# ./kubecfg list /pods  
ID                  Image(s)            Host                Labels              Status  
----------          ----------          ----------          ----------          ----------  
redis               dockerfile/redis    127.0.0.1/          name=redis          Running    

Status是Running表示pod已经在容器里运行起来了,可以用"docker ps"命令来查看容器信息:

# docker ps  
CONTAINER ID        IMAGE                     COMMAND                CREATED             STATUS              PORTS                    NAMES  
ae83d1e4b1ec        dockerfile/redis:latest   "redis-server /etc/r   19 seconds ago      Up 19 seconds                                k8s_redis.caa18858_redis.default.etcd_1414684622_1b43fe35  

创建replicationController

{  
    "id": "redisController",  
    "apiVersion": "v1beta1",  
    "kind": "ReplicationController",  
    "desiredState": {  
      "replicas": 1,  
      "replicaSelector": {"name": "redis"},  
      "podTemplate": {  
        "desiredState": {  
           "manifest": {  
             "version": "v1beta1",  
             "id": "redisController",  
             "containers": [{  
               "name": "redis",  
               "image": "dockerfile/redis",  
               "imagePullPolicy": "PullIfNotPresent",  
               "ports": [{  
                   "containerPort": 6379,  
                   "hostPort": 6379  
               }]  
             }]  
           }  
         },  
         "labels": {"name": "redis"}  
        }},  
    "labels": {"name": "redis"}  
  }  

然后,通过命令行工具kubecfg提交:

./kubecfg -c redisController.json create /replicationControllers 

提交完后,通过kubecfg查看replicationController状态:

# ./kubecfg list /replicationControllers  
ID                  Image(s)            Selector            Replicas  
----------          ----------          ----------          ----------  
redisController     dockerfile/redis    name=redis          1  

同时,1个pod也将被自动创建出来,即使我们故意删除该pod,replicationController也将保证创建1个新pod。 

原文链接: Kubernetes初探


酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部