Kubernetes为Google开源的容器管理框架,提供了Docker容器的夸主机、集群管理、容器部署、高可用、弹性伸缩等一系列功能;Kubernetes的设计目标包括使容器集群任意时刻都处于用户期望的状态,因而建立了一整套集群管理机制:容器自动重启、自动备份、容器自动伸缩等;Kubernetes设计了pod、replication controller、service用于管理容器的了组件,并提供了RESTful格式接口用于操作他们;由于本篇文章主要是Kubernetes所以就不对理论相关进行过多介绍了;

  本篇文章把Kubernetes部署到Docker中,使用三个节点192.168.2.143同时为Master和minion节点,另外还有192.168.2.144、192.168.2.145两个minion节点;

1、master节点启动etcd容器

启动etcd容器

 --绑定4001端口
docker run -d --net=host --restart=always --name=etcd -v /var/etcd/data:/var/etcd/data kubernetes/etcd:2.0.5 /usr/local/bin/etcd --addr=192.168.2.143:4001 --bind-addr=0.0.0.0:4001 --data-dir=/var/etcd/data

  在etcd里插入flannel配置信息,指定flannel使用10.0.0.0/8区间

 docker exec -it etcd etcdctl set /solinx.co/network/config '{"Network":"10.0.0.0/8"}'

2、在master、minion1、minion2节点配置flanneld

 启动flanneld, wget -c https://github.com/coreos/flannel/releases/download/v0.5.5/flannel-0.5.5-linux-amd64.tar.gz

 ./flanneld --etcd-endpoints=http://192.168.2.143:4001 --etcd-prefix=/solinx.co/network --iface=ens33 > flannel.log  2>&1 &

  flannel启动后获得可用于分配的IP集合,存放于/run/flannel/subnet.env中,需要配置docker可用与分配的IP

  Ubuntu下修改Docker配置文件

  在/etc/systemd/system/docker.service  增加EnvironmentFile=-/etc/default/docker
修改ExecStart=/usr/bin/docker -d -H fd:// ,改成: ExecStart=/usr/bin/docker -d -H fd:// $DOCKER_OPTS source /run/flannel/subnet.env
sh -c "echo DOCKER_OPTS=\\\"--bip=$FLANNEL_SUBNET --mtu=$FLANNEL_MTU\\\" >> /etc/default/docker" service docker restart

3、Kubernetes部署

下载kubernetes.tar.gz到master、minion节点中

 wget -c https://github.com/kubernetes/kubernetes/releases/download/v1.2.5/kubernetes.tar.gz

  tar -zxvf 解压kubernetes.tar.gz文件后在kubernetes/server目录中找到kubernetes-server-linux-amd64.tar.gz将其解压,然后在kubernetes/server/bin目录下找到:kube-apiserver.tar、kube-controller-manager.tar、kube-scheduler.tar;

  在master节点中导入kubernetes Docker镜像文件

 docker load -i kube-apiserver.tar
docker load -i kube-controller-manager.tar
docker load -i kube-scheduler.tar

这里flannel与kubernetes使用同一个etcd

master节点启动apiServer

 docker run -d --name=apiserver --net=host gcr.io/google_containers/kube-apiserver:7bf05b2d35172296e4fbd2604362456f kube-apiserver --insecure-bind-address=192.168.2.143 --service-cluster-ip-range=10.0.0.0/16 --etcd-servers=http://192.168.2.143:4001

master节点启动ControllerManager

 docker run -d --name=ControllerM gcr.io/google_containers/kube-controller-manager:6c95ef0b57ac9deda34ae1a4a40baa0a kube-controller-manager --master=192.168.2.143:8080

master节点启动Scheduler

 docker run -d --name=scheduler gcr.io/google_containers/kube-scheduler:e5342c3d8ced06850af97347daf6ae4b kube-scheduler --master=192.168.2.143:8080

服务端启动完成

 ./kubectl -s 192.168.2.143:8080 version 查看kubernetes版本信息

 Client Version: version.Info{Major:"1", Minor:"2", GitVersion:"v1.2.5", GitCommit:"25eb53b54e08877d3789455964b3e97bdd3f3bce", GitTreeState:"clean"}
Server Version: version.Info{Major:"1", Minor:"2", GitVersion:"v1.2.5", GitCommit:"25eb53b54e08877d3789455964b3e97bdd3f3bce", GitTreeState:"clean"}

在Master节点查看服务Container启动情况:

 docker ps

在143、144、145 minion节点启动kubelet

取得minion节点IP

 NODE_IP=`ifconfig ens33 | grep 'inet addr:' | cut -d: -f2 | cut -d' ' -f1`

 ./kubelet --api-servers=192.168.2.143:8080 --node-ip=$NODE_IP --hostname_override=192.168.2.144 > kubelet.log 2>&1 &

注意如果当前两个几点的主机名相同则一定要使用hostname_override参数,否则需要把主机名改为不同的;

在master上查看节点信息

 ./kubectl -s 192.168.2.143:8080 get no

在143、144、145节点启动kube-proxy

 ./kube-proxy --master=192.168.2.143:8080 > proxy.log 2>&1 &

下面的命令来查看pod、replication controller、service和endpoint:

 ./kubectl -s 192.168.1.143:8080 get po
./kubectl -s 192.168.1.143:8080 get rc
./kubectl -s 192.168.1.143:8080 get svc
./kubectl -s 192.168.1.143:8080 get ep

参考资料:

http://kubernetes.io/docs/user-guide/

文章首发地址:Solinx

http://www.solinx.co/archives/620

最新文章

  1. xcode添加快捷代码块
  2. 64位 SQL Server2008链接访问Oracle 过程汇总解决方法记录
  3. 见证历史 -- 2013 NBA 热火夺冠之路有感
  4. 使用Spring Sleuth和Zipkin跟踪微服务
  5. [Codeforces] Round #320 (Div.2)
  6. 2016CCPC东北地区大学生程序设计竞赛1008/HDU 5929 模拟
  7. matlab:对一个向量进行排序,返回每一个数据的rank 序号 。。。
  8. MVC中前台所得
  9. Best Premium Private Proxy Service | Lime Proxies
  10. Phonegap 安卓的自动升级与更新。当版本为4.0的时候
  11. Css透明度
  12. UVa1399.Ancient Cipher
  13. 《windows程序设计》学习_4:文本输出,加滚动条
  14. InnoDB的表类型,逻辑存储结构,物理存储结构
  15. list和map集合
  16. grub 学习之路
  17. nginx(三)反向代理和负载均衡
  18. 固定div的位置——不随窗口大小改变为改变位置
  19. Go 新起点
  20. BGP-6,解决IBGP的水平分割

热门文章

  1. 网站就必须用响应式布局吗?MVC视图展现模式之移动布局
  2. 广州的小伙伴福利-由微软组织的在广州SQL Server线下活动
  3. 判断CPU是大端还是小端模式
  4. Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之ORACLE集群概念和原理(二)
  5. JS去重及字符串奇数位小写转大写
  6. 注意 AppResLib.dll.*.mui 的生成操作应该为 Content
  7. Node学习笔记(一):stream流操作
  8. Basic Tutorials of Redis(4) -Set
  9. Markdown通用的常用语法说明
  10. 支持多返回值存储过程的SqlHelper