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容器

  1. --绑定4001端口
  2. 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区间

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

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

  1. 启动flanneld, wget -c https://github.com/coreos/flannel/releases/download/v0.5.5/flannel-0.5.5-linux-amd64.tar.gz
  2. ./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配置文件

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

3、Kubernetes部署

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

  1. 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镜像文件

  1. docker load -i kube-apiserver.tar
  2. docker load -i kube-controller-manager.tar
  3. docker load -i kube-scheduler.tar

这里flannel与kubernetes使用同一个etcd

master节点启动apiServer

  1. 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

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

master节点启动Scheduler

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

服务端启动完成

  1. ./kubectl -s 192.168.2.143:8080 version 查看kubernetes版本信息
  2. Client Version: version.Info{Major:"1", Minor:"2", GitVersion:"v1.2.5", GitCommit:"25eb53b54e08877d3789455964b3e97bdd3f3bce", GitTreeState:"clean"}
  3. Server Version: version.Info{Major:"1", Minor:"2", GitVersion:"v1.2.5", GitCommit:"25eb53b54e08877d3789455964b3e97bdd3f3bce", GitTreeState:"clean"}

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

  1. docker ps

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

取得minion节点IP

  1. NODE_IP=`ifconfig ens33 | grep 'inet addr:' | cut -d: -f2 | cut -d' ' -f1`
  2. ./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上查看节点信息

  1. ./kubectl -s 192.168.2.143:8080 get no

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

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

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

  1. ./kubectl -s 192.168.1.143:8080 get po
  2. ./kubectl -s 192.168.1.143:8080 get rc
  3. ./kubectl -s 192.168.1.143:8080 get svc
  4. ./kubectl -s 192.168.1.143:8080 get ep

参考资料:

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

文章首发地址:Solinx

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

Docker中部署Kubernetes的更多相关文章

  1. 在docker中部署centos7镜像

    本篇文章参考自: https://www.cnblogs.com/linjj/p/5606911.html https://blog.csdn.net/u012767761/article/detai ...

  2. docker 中部署一个springBoot项目

    docker 中部署一个springBoot项目 (1)介绍 springBoot项目 1.项目结构 2.pom.xml <?xml version="1.0" encodi ...

  3. 如果在docker中部署tomcat,并且部署java应用程序

    1.先说如何在docker中部署tomcat 第一步:root用户登录在系统根目录下创建文件夹tomcat7,命令如:mkdir tomcat7,并且切换到该目录下:cd tomcat7: 第二步:创 ...

  4. ​在Docker中部署GreatSQL并构建MGR集群

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 为了方面社区用户体验GreatSQL,我们同时还提供Docker镜像,本文详细介绍如何在Docker中部署GreatSQL ...

  5. China Azure中部署Kubernetes(K8S)集群

    目前China Azure还不支持容器服务(ACS),使用名称"az acs create --orchestrator-type Kubernetes -g zymtest -n kube ...

  6. docker中部署mongodb副本集

    1.基本信息如下 服务器地址 192.168.73.129 副本集名称 rs 容器节点及端口映射         m0 37017:27017         m1 47017:27017       ...

  7. 记一次Docker中部署Asp.Net Core 3.0的踩坑过程

    最近公司打算重构目前直销报单系统到微信小程序中,目前的系统只能在PC上面使用,这两年也搞过App端,但是由于人员流动和公司架构调整最后都不了了之,只留下一堆写了一半的接口.以前的接口依然是使用Asp. ...

  8. docker中部署django项目~~Dockfile方式和compose方式

    1.  背景:   本机win10上,后端django框架代码与前端vue框架代码联调通过. 2.  目的:   在centos7系统服务器上使用docker容器部署该项目. 3.  方案一:仅使用基 ...

  9. 在docker中部署redis主从配置

    环境说明: 阿里云服务器 Ubuntu 16.04 docker 1.拉取Redis镜像 docker pull redis 2.配置Redis启动配置文件,此处我创建一个专用目录,存放Redis相关 ...

随机推荐

  1. 遍历dynamic的方式

    一.遍历ExpandoObject /// <summary> /// 遍历ExpandoObject /// </summary> [TestMethod] public v ...

  2. linux下select/poll/epoll机制的比较

    select.poll.epoll简介 epoll跟select都能提供多路I/O复用的解决方案.在现在的Linux内核里有都能够支持,其中epoll是Linux所特有,而select则应该是POSI ...

  3. php 查询

    <h1>租房信息</h1> <?php $db = ","asdadads"); $tj = "1=1"; $tj1 = ...

  4. 【.NET深呼吸】元组数据(Tuple)

    各位观众,大家好,欢迎收看由火星电视台直播的<老周吹牛>节目,注意:本节目没有任何技术含量,如果您没有兴趣,请砸掉电视机. 今天说一下System命名空间下的一个数据类型——Tuple,翻 ...

  5. DDD实践切入点(二)

    最近发现下面关于上下文的理解有些问题,不太好改,暂时先不改了 承前:大型系统的支撑,应用系统开发思想的变迁,DDD实践切入点(一) 从大比例结构入手已经开始了系统的建设,大家都知道需求是会不断变化不断 ...

  6. DDD实践切入点(一)

    前两篇:大型系统的支撑,应用系统开发思想的变迁 之前大致说了使用DDD的前期准备,现在可以真正开始实践了,以我刚刚结束的一个简单的经典DDD方式的项目为例子,当然由于比较简单,所以很多时候会脱离它来介 ...

  7. DDD 领域驱动设计-如何完善 Domain Model(领域模型)?

    上一篇:<DDD 领域驱动设计-如何 DDD?> 开源地址:https://github.com/yuezhongxin/CNBlogs.Apply.Sample(代码已更新) 阅读目录: ...

  8. MVP社区巡讲-云端基础架构:12月5日北京站 12月12日上海站

    紧跟当今的技术发展趋势还远远不够,我们要引领变革!加入本地技术专家社区,获取真实案例.实况培训演示以及探讨新一代解决方案.在此活动中,您将: 了解如何运用开源(OSS)技术.Microsoft 技术及 ...

  9. Apworks框架实战(五):EasyMemo的领域模型设计

    在上一讲中,我们已经新建了一个聚合根对象Account,并已经可以开始设计领域模型了.在这一讲中,我们会着重介绍EasyMemo领域模型的分析和设计,并引入Visual Studio Ultimate ...

  10. AngularJS中get请求URL出现跨域问题

    今天早上帮助同学看了一个AngularJS的问题,主要是请求中出现了跨域访问,请求被阻止. 下面是她给我的代码: <html lang="en" ng-app="m ...