参考地址:


环境: centos7
  1. [fu@centos server]$ uname -a
  2. Linux centos 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

1,关闭centos自带防火墙

systemctl stop
firewalld
systemctl disable
firewalld

2.安装etcd和kubernetes 软件(自动安装)
 
添加yum源:
  1. [root@centos fu]# cd /etc/yum.repos.d/
  2. [root@centos yum.repos.d]# ls
  3. CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo
  4. CentOS-CR.repo CentOS-fasttrack.repo CentOS-Sources.repo
  5. [root@centos yum.repos.d]# vi virt7-docker-common-release.repo
  6. [root@centos yum.repos.d]# yum install -y etcd kubernetes
virt7-docker-common-release.repo:
  1. [virt7-docker-common-release]
  2. name=virt7-docker-common-release
  3. baseurl=http://cbs.centos.org/repos/virt7-docker-common-release/x86_64/os/
  4. gpgcheck=0
安装 etcd与kubernetes:

  1. [root@centos system]# yum install -y etcd kubernetes




3.安装完成后修改配制:

3.1 修改docker配制文件
  1. [root@centos system]# vi /etc/sysconfig/docker
将:
  1. OPTIONS='--selinux-enabled --log-driver=journald'
改成:
  1. OPTIONS='--selinux-enabled=false --insecure-registry gcr.io --log-driver=journald'
3.2 修改hubernetes 配制文件
  1. [root@centos system]# vi /etc/kubernetes/apiserver
把--admission-control=后面的参数ServiceAccount 删除掉
将:
  1. KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota"
改成:
  1. KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"

4.依次启动所有的服务:

  1. [root@centos system]# systemctl start etcd
  2. [root@centos system]# systemctl start docker
  3. [root@centos system]# systemctl start kube-apiserver
  4. [root@centos system]# systemctl start kube-controller-manager
  5. [root@centos system]# systemctl start kube-scheduler
  6. [root@centos system]# systemctl start kubelet
  7. [root@centos system]# systemctl start kube-proxy
或者:
  1. systemctl start etcd docker kube-apiserver kube-controller-manager kube-scheduler kubelet kube-proxy

好啦,安装完成!

5.运行测试案例:

Guestbook部署,最好是先将镜像pull下来,当然也可以交给kubernetees完成

•redis-master: 用于前端Web应用进行“写”留言的操作,其中已经保存了一条内容为“Hello World!”的留言。
•guestbook-redis-slave: 用于前端Web应用进行“读”留言的操作,并与redis-master的数据保持同步。
•guestbook-php-frontend: PHP Web服务,在网页上展示留言内容,也提供一个文本输入框供访客添加留言。
  1. #docker pull kubeguide/redis-master
  2. #docker pull kubeguide/guestbook-redis-slave
  3. #docker pull kubeguide/guestbook-php-frontend

我们先创建pod ,然后定义与之关联的service
可以到git上下载所须的yaml文件:

然后统一运行:
cd 到存放目录
  1. kubectl create -f ./


也可以一步步来,如下:
5.1 创建master-controller:redis-master-controller.yaml
  1. apiVersion: v1
  2. kind: ReplicationController
  3. metadata:
  4. name: redis-master
  5. labels:
  6. name: redis-master
  7. spec:
  8. replicas: 2
  9. selector:
  10. name: redis-master
  11. template:
  12. metadata:
  13. labels:
  14. name: redis-master
  15. spec:
  16. containers:
  17. - name: master
  18. image: redis
  19. ports:
  20. - containerPort: 6379
运行 master-controller:
  1. kubectl create -f redis-master-controller.yaml

5.2 创建master-service文件:redis-master-service.yaml
  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: redis-master
  5. labels:
  6. name: redis-master
  7. spec:
  8. selector:
  9. name: redis-master
  10. ports:
  11. - port: 6379
  12. targetPort: 6379
运行master-service
:
  1. kubectl create -f redis-master-service.yaml

5.3 创建:redis-slave-controller.yaml
[root@centos kube-guestbook]# cp /home/fu/redis-slave-controller.yaml /root/kube-guestbook/
  1. apiVersion: v1
  2. kind: ReplicationController
  3. metadata:
  4. name: redis-slave
  5. labels:
  6. name: redis-slave
  7. spec:
  8. replicas: 2
  9. selector:
  10. name: redis-slave
  11. template:
  12. metadata:
  13. labels:
  14. name: redis-slave
  15. spec:
  16. containers:
  17. - name: slave
  18. image: kubeguide/guestbook-redis-slave
  19. ports:
  20. - containerPort: 6379
  21. env:
  22. - name: GET_HOSTS_FROM
  23. value: env
运行slave-controller
:
  1. [root@centos kube-guestbook]# kubectl create -f redis-slave-controller.yaml

5.4 创建 redis-slave-service.yaml:
[root@centos kube-guestbook]# cp /home/fu/redis-slave-service.yaml /root/kube-guestbook/
  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: redis-slave
  5. labels:
  6. name: redis-slave
  7. spec:
  8. selector:
  9. name: redis-slave
  10. ports:
  11. - port: 6379
运行:slave-service
  1. [root@centos kube-guestbook]# kubectl create -f redis-slave-service.yaml

5.5 创建 frontend-controller.yaml:
[root@centos kube-guestbook]# cp /home/fu/frontend-controller.yaml /root/kube-guestbook/
  1. apiVersion: v1
  2. kind: ReplicationController
  3. metadata:
  4. name: frontend
  5. labels:
  6. name: frontend
  7. spec:
  8. replicas: 3
  9. selector:
  10. name: frontend
  11. template:
  12. metadata:
  13. labels:
  14. name: frontend
  15. spec:
  16. containers:
  17. - name: frontend
  18. image: kubeguide/guestbook-php-frontend
  19. env:
  20. - name: GET_HOSTS_FROM
  21. value: env
  22. ports:
  23. - containerPort: 80
运行frontend-controller:
  1. [root@centos kube-guestbook]# kubectl create -f frontend-controller.yaml

如遇到下面这些错,都是因为格式问题。复制时,空格或制表符都是很严格的
  1. yaml: line 17: mapping values are not allowed in this context
  1. error validating "redis-master-controller.yaml": error validating data: [found invalid field spec for v1.ReplicationControllerSpec, found invalid field labels for v1.PodTemplateSpec]; if you choose to ignore these errors, turn validation off with --validate=false

然后查看状态:
  1. [root@centos kube-guestbook]# kubectl get pods
  2. NAME READY STATUS RESTARTS AGE
  3. redis-master-rx769 0/1 ContainerCreating 0 3m
  4. redis-master-za6q6 0/1 ContainerCreating 0 3m
  5. [root@centos kube-guestbook]# kubectl get pods
  6. NAME READY STATUS RESTARTS AGE
  7. redis-master-rx769 0/1 ContainerCreating 0 3m
  8. redis-master-za6q6 0/1 ContainerCreating 0 3m


6.停止Pod和服务

  1. kubectl stop rc redis-master
  2. kubectl stop rc redis-slave
  3. kubectl stop rc frontend
  4. kubectl delete service redis-master
  5. kubectl delete service redis-slave
  6. kubectl delete service frontend

6.1其他

  1. kubectl get node 获取节点
  2. kubectl describe node xxx 详细信息
 获取所有的pod (容器实例,docker container)
  1. [root@centos yum.repos.d]# kubectl get pods
 
获取所有的service (服务,selector 确定把哪些pod对应到本服务)
  1. [root@centos yum.repos.d]# kubectl get service
 获取所有的RC,(rc根据template生成指定的pod实例)
  1. [root@centos yum.repos.d]# kubectl get rc


最终效果:
 
 

大家有必要先理解Kubernetes几个核心概念及其承担的功能。以下为Kubernetes的架构设计图:

1. Pods
在Kubernetes系统中,调度的最小颗粒不是单纯的容器,而是抽象成一个Pod,Pod是一个被创建、销毁、调度、管理的最小的部署单元。比如一个或一组容器。
2. Replication Controllers
Replication

Controller是Kubernetes系统中最有用的功能,实现复制多个Pod副本,往往一个应用需要多个Pod来支撑,并且可以保证其复制的副本数,即使副本所调度分配的宿主机出现异常,通过Replication
Controller可以保证在其它主宿机启用同等数量的Pod。Replication
Controller可以通过repcon模板来创建多个Pod副本,同样也可以直接复制已存在Pod,需要通过Label selector来关联。
3. Services
Services是Kubernetes最外围的单元,通过虚拟一个访问IP及服务端口,可以访问我们定义好的Pod资源,目前的版本是通过iptables的nat转发来实现,转发的目标端口为Kube_proxy生成的随机端口,目前只提供GOOGLE云上的访问调度,如GCE。如果与我们自建的平台进行整合?请关注下篇《kubernetes与HECD架构的整合》文章。
4. Labels
Labels是用于区分Pod、Service、Replication Controller的key/value键值对,仅使用在Pod、Service、Replication Controller之间的关系识别,但对这些单元本身进行操作时得使用name标签。
5. Proxy
Proxy不但解决了同一主宿机相同服务端口冲突的问题,还提供了Service转发服务端口对外提供服务的能力,Proxy后端使用了随机、轮循负载均衡算法。
说说个人一点看法,目前Kubernetes

保持一周一小版本、一个月一大版本的节奏,迭代速度极快,同时也带来了不同版本操作方法的差异,另外官网文档更新速度相对滞后及欠缺,给初学者带来一定挑战。在上游接入层官方侧重点还放在GCE(Google
Compute
Engine)的对接优化,针对个人私有云还未推出一套可行的接入解决方案。在v0.5版本中才引用service代理转发的机制,且是通过iptables来实现,在高并发下性能令人担忧。但作者依然看好Kubernetes未来的发展,至少目前还未看到另外一个成体系、具备良好生态圈的平台,相信在V1.0时就会具备生产环境的服务支撑能力。

1.Kubernetes介绍

1.1 简介
Kubernetes是什么?
首先,它是一个全新的基于容器技术的分布式架构领先方案。
其次,它是一个开放的开发平台。
最后,它是一个完备的分布式系统支撑平台。
Kubernetes是Google团队发起的开源项目,它的目标是管理跨多个主机的容器,提供基本的部署,维护以及运用伸缩,主要实现语言为Go语言。
Kubernetes特点是:
•易学:轻量级,简单,容易理解
•便携:支持公有云,私有云,混合云,以及多种云平台
•可拓展:模块化,可插拔,支持钩子,可任意组合
•自修复:自动重调度,自动重启,自动复制。
Kubernets目前在https://github.com/kubernetes/kubernetes进行维护。
1.2 基本概念
•Node(节点):在Kubernetes中,节点是实际工作的点,较早版本称为Minion。节点可以是虚拟机或者物理机器,依赖于一个集群环境。每个节点都有一些必要的服务以运行Pod容器组,并且它们都可以通过主节点来管理。在Node上运行的服务进程包括docker
daemon,Kubelet和 Kube-Proxy。
•Pod(容器组):是Kubernetes的基本操作单元,把相关的一个或多个容器构成一个Pod,通常Pod里的容器运行相同的应用。Pod包含的容器运行在同一个节点上,看作一个统一管理单元,共享相同的volumes和network namespace/IP和Port空间。
•Pod的生命周期:Pod的生命周期是通过Replication Controller来管理的。在整个过程中,Pod处于4种状态之一:Pending, Running, Succeeded, Failed。
•Replication Controller(RC):用于定义Pod副本的数量。确保任何时候Kubernetes集群中有指定数量的Pod副本在运行, 如果少于指定数量的Pod副本,Replication Controller会启动新的Pod,反之会杀死多余的以保证数量不变。
•Service(服务):一个Service可以看作一组提供相同服务的Pod的对外访问接口。
•Volume(存储卷):Volume是Pod中能够被多个容器访问的共享目录。
•Label(标签):用于区分Pod、Service、Replication
Controller的key/value键值对,Pod、Service、 Replication
Controller可以有多个label,但是每个label的key只能对应一个value。Labels是Service和Replication

Controller运行的基础,为了将访问Service的请求转发给后端提供服务的多个容器,正是通过标识容器的labels来选择正确的容器。同样,Replication
Controller也使用labels来管理通过pod 模板创建的一组容器,这样Replication
Controller可以更加容易,方便地管理多个容器,无论有多少容器。
•Proxy(代理):是为了解决外部网络能够访问跨机器集群中容器提供的应用服务而设计的。Proxy提供TCP/UDP

sockets的proxy,每创建一种Service,Proxy主要从etcd获取Services和Endpoints的配置信息,或者也可以从file获取,然后根据配置信息在Minion上启动一个Proxy的进程并监听相应的服务端口,当外部请求发生时,Proxy会根据Load
Balancer将请求分发到后端正确的容器处理。
•Namespace(命名空间):通过将系统内部的对象“分配”到不同的Namespace中,形成逻辑上的不同分组,便于在共享使用整个集群的资源同时还能分别管理。
•Annotation(注解):与Label类似,但Label定义的是对象的元数据,而Annotation则是用户任意定义的“附加”信息。
1.3 组件
1.3.1 Master运行三个组件:
•apiserver:作为kubernetes系统的入口,封装了核心对象的增删改查操作,以RESTFul接口方式提供给外部客户和内部组件调用。它维护的REST对象将持久化到etcd(一个分布式强一致性的key/value存储)。
•scheduler:负责集群的资源调度,为新建的Pod分配机器。这部分工作分出来变成一个组件,意味着可以很方便地替换成其他的调度器。
•controller-manager:负责执行各种控制器,目前有两类:
(1)endpoint-controller:定期关联service和Pod(关联信息由endpoint对象维护),保证service到Pod的映射总是最新的。
(2)replication-controller:定期关联replicationController和Pod,保证replicationController定义的复制数量与实际运行Pod的数量总是一致的。
1.3.2 Worker运行两个组件:
•kubelet:负责管控docker容器,如启动/停止、监控运行状态等。它会定期从etcd获取分配到本机的Pod,并根据Pod信息启动或停止相应的容器。同时,它也会接收apiserver的HTTP请求,汇报Pod的运行状态。
•proxy:负责为Pod提供代理。它会定期从etcd获取所有的service,并根据service信息创建代理。当某个客户Pod要访问其他Pod时,访问请求会经过本机proxy做转发。

kubernetes单机板的更多相关文章

  1. kubernetes入门(10)kubernetes单机安装后 - helloworld

    前言 查看端口是否被监听了 ::netstat -tlp |grep 31002 我是用的yum install etcd kubernetes docker vim, 这样装的是1.5.2,不是最新 ...

  2. Kubernetes单机安装部署

    系统环境: Ubuntu 16.04.2 LTS 软件环境: Docker 1.12.6 Go 1.8.3 Etcd 3.1.8 Flannel 0.7.1 Kubernetes master 1.7 ...

  3. centos7 kubernetes单机安装

    单机版的kubernetes 适合初学者,对kuber有个很好的入门. 因为centos系统内置了安装源.我们可以直接安装 1.yum install -y etco kubernetes 2.whe ...

  4. 微服务 + Docker + Kubernetes 入门实践 目录

    微服务 + Docker + Kubernetes 入门实践: 微服务概念 微服务的一些基本概念 环境准备 Ubuntu & Docker 本文主要讲解在 Ubuntu 上安装和配置 Dock ...

  5. 使用minikube在本机测试kubernetes

    目录 简介 安装 Docker CE 安装 kubectl 安装 minikube 启动 minikube 启动 dashboard 启动一个服务 删除服务 参考 本文主要讲解 minikube(ku ...

  6. MicroK8s及KubeFlow安装文档

    安装简单的k8s大约有三种思路:minikube,microk8s,kubeadm.minikube 虽然是官方出品,但主要还是基于虚拟机做的设计.在 Linux 生产环境下,microk8s 可能是 ...

  7. microk8s 搭建

    一.简述 microk8s不通过虚拟机但与主机隔离方式,快速轻巧安装Kubernetes.通过在单个快照包中打包Kubernetes,Docker.io,iptables和CNI的所有上游二进制文件来 ...

  8. cenots7单机安装Kubernetes

    关于什么是Kubernetes请看另一篇内容:http://www.cnblogs.com/boshen-hzb/p/6482734.html 一.环境搭建 master安装的组件有: docker ...

  9. Minikube之Win10单机部署Kubernetes(k8s)自动化容器操作的开源平台

    Minikube之Win10单机部署 Kubernetes(k8s)是自动化容器操作的开源平台,基于这个平台,你可以进行容器部署,资源调度和集群扩容等操作.如果你曾经用过Docker部署容器,那么可以 ...

随机推荐

  1. WebComponent魔法堂:深究Custom Element 之 从过去看现在

    前言  说起Custom Element那必然会想起那个相似而又以失败告终的HTML Component.HTML Component是在IE5开始引入的新技术,用于对原生元素作功能"增强& ...

  2. C++_系列自学课程_第_12_课_结构体

    #include <iostream> #include <string> using namespace std; struct CDAccount { double bal ...

  3. PHP 适配器模式

    适配器模式(Adapter)模式:将一个类的接口,转换成客户期望的另一个类的接口.适配器让原本接口不兼容的类可以合作无间.     [适配器模式中主要角色]目标(Target)角色:定义客户端使用的与 ...

  4. GJM : Unity3D HIAR -【 快速入门 】 八、开发云识别应用

    开发云识别应用 为了解决识别图片数量限制,以及上线应用不能动态修改识别图片和 AR 内容的问题,我们在 HiAR SDK for Unity 新版本(v1.1.x 及后续版本)中集成了云识别功能.本文 ...

  5. 在Thinkphp中使用AJAX实现无刷新分页

    在Thinkphp目录的Lib\ORG\Util\目录里新建AjaxPage.class.php,写入一下内容: <?php // +------------------------------ ...

  6. 浅析天猫H5站点

    前言 我们做前端开发的时候,很有可能会做一个竞品分析,比如我就做过去哪儿.艺龙.同程等与携程的移动站点竞品分析,竞品分析的目的一般是技术对比,但是更多的是业务对比,知己知彼,百战不殆:我们同时会借鉴. ...

  7. canvas学习之API整理笔记(二)

    前面我整理过一篇文章canvas学习之API整理笔记(一),从这篇文章我们已经可以基本了解到常用绘图的API.简单的变换和动画.而本篇文章的主要内容包括高级动画.像素操作.性能优化等知识点,讲解每个知 ...

  8. MSCRM CRM 获取PickList 字段值函数解决方案

    表单中有很多picklist字段 不想写链接stringmap代码: 实体ID查询方法: SELECT ObjectTypeCode from Entity  where  name='实体名称' 调 ...

  9. java web 之客户关系管理系统

    这个周末真的是觉得自己学会了一个比较高大上的本领,为什么这么觉得呢?那是因为星期六的时候觉得自己可以看看源码能做出来,可是让我头疼的是花费了一上午的时间还是没有弄出来,还好上天给了我机会,要是没有老师 ...

  10. 【容器云】传统金融企业的 Docker 实践

    基于 Docker 的容器云-Padis 目前市面上基于容器云的产品有很多,对于平安而言,则是基于 Docker 的 Padis 平台.所谓 Padis,全称是 PingAn Distribution ...