设为首页 收藏本站
查看: 1240|回复: 0

[经验分享] Kubernetes印象(by quqi99)

[复制链接]

尚未签到

发表于 2018-1-4 17:23:42 | 显示全部楼层 |阅读模式
作者:张华  发表于:2014-12-21  版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明

( http://blog.csdn.net/quqi99 )
  Kubernetes是Google开源的Docker容器集群管理系统,为容器化的应用提供资源调度、部署运行、服务发现、扩容缩容等整一套功能,本质上可看作是基于容器技术的PaaS平台。
  Kubernetes的核心数据模型

  • 1, pod, 逻辑上表示某种应用的一个实例,应用运行在容器中
  • 2, service, 是pod的路由代理抽象,因为pod的运行状态是可动态变化的(比如切换机器了),所以用service来解偶保证IP不被写死
  • 3, replicationController, 是pod的复制抽象,用于保证pod数量总是与配置的复制数量相等
  • 4, label, 用一组key/val让pod与service和replicationController关联, Label Selector为多个pod提供LB, service与pod的关联关系由endpoint定义
  Kubernetes一个典型的master/slave集群架构图
DSC0000.jpg

  master组件

  •     apiserver:以RESTFul接口向外提供对核心数据模型的增删改查操作。它维护的REST对象将持久化到etcd(一个分布式强一致性的key/value存储)
  •     scheduler:负责集群的资源调度,为新建的pod分配机器, 可以很方便地替换成其他的调度器。
  •     controller-manager:负责执行各种控制器,目前有两类: endpoint-controller:定期更新service和pod(关联信息由endpoint对象维护)映射; replication-controller:定期更新replicationController和pod映射,保证复制数量与运行pod的数量总是一致的
  slave(称作minion)组件

  •     kubelet:负责管控docker容器,如启动/停止、监控运行状态等。它会定期从etcd获取分配到本机的pod,并根据pod信息启动或停止相应的容器。同时,它也会接收apiserver的HTTP请求,汇报pod的运行状态。
  •     proxy:负责为pod提供代理。它会定期从etcd获取所有的service,并根据service信息创建代理。当某个客户pod要访问其他pod时,访问请求会经过本机proxy做转发。
  Kubernetes之Hello World
  1, 安装
  git clone https://github.com/GoogleCloudPlatform/kubernetes.git
  cd kubernetes/build && ./release.sh
  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
  2, 运行组件
  ./etcd-v0.4.6-linux-amd64/etcd
  ./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 -master 127.0.0.1:8080 -v=3 -logtostderr=false -log_dir=./log
  ./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
  3, 创建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"
  }
  }
  4, 创建replicationControoler
  {
  "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"}
  }
  5, 相关命令行
  a, 创建pod, ./kubecfg -c redis.json create /pods
  b, 查看pod, ./kubecfg list /pods
  c, 查看容器,docker ps
  d, 提交replicationController, ./kubecfg -c redisController.json create /replicationControllers
  e, 查看replicationController状态, ./kubecfg list /replicationControllers
  Kubernetes网络
  对Kubernetes有了一个大概的印象后,到了该深入了解Kubernetes网络原理的时候了。Kubernetes和Rudder都可以为每台物理机分配一个单独的子网(Rudder从etcd注册的子网中随机选择一个未使用的子网),这样不会出现多个物理机使用相同子网的情况,从而简化了问题避免了出现像Neutron中的DVR特性的情况。剩下的SNAT部分与neutron相似,略。另外,Kubernetes目前还没有如DNAT, LB, IPv6等特性[1]。 所以,目前neutron能完全提供对容器的支持。另外,我认为OpenStack想要做到相同的物理机使用单独的子网也很容易,添加一个nova-scheduler尽量将同一子网的容器分配到同一台host即可, 当然它目前有DVR特性没那个必要了。
  参考
[1] https://github.com/GoogleCloudPlatform/kubernetes/blob/master/docs/design/networking.md#challenges-and-future-work

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-431593-1-1.html 上篇帖子: Kubernetes Ingress实战 下篇帖子: Kubernetes连接外部数据源
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表