您的当前位置:首页正文

kubernetes研究

来源:帮我找美食网


Kubernetes研究

文件状态: 【√】 草稿 【 】 正式发布 【】 正在修改中 类 别 云计算 项目名称 Kubernetes研究 版 本 日期 1.0 审 核 2016/03/28 作者 程成 备注说明 初稿 密 级 秘密 应用范围 陕西省信息化工程研究院软件研发部 版权所有 陕西省信息化工程研究院 陕西省信息化工程研究院软件研发部 第 1 页 / 共 19 页

目录

KUBERNETES研究 .............................................................................................................................. 1

1. 1.1. 1.2. 2. 2.1. 2.2. 2.3. 3. 3.1. 3.2. 3.3. 4. 4.1. 4.2. 4.3. 5. 5.1. 5.2. 6. 6.1. 6.2.

KUBERNETES架构 ................................................................................................................ 4 操作对象 .......................................................................................................................... 4 功能组件 .......................................................................................................................... 5 KUBERNETES部署 ................................................................................................................ 6 源码安装 .......................................................................................................................... 6 编译好的安装包 .............................................................................................................. 7 获取pause镜像 .............................................................................................................. 8

KUBERNESTER-UI

部署 ........................................................................................................ 8

获取UI镜像 .................................................................................................................... 8 部署kubernester-UI ....................................................................................................... 9 FAQ ................................................................................................................................ 10

KUBE-DASHBOARD部署 ..................................................................................................... 11

获取UI镜像 .................................................................................................................. 11 部署kube-dashboard ................................................................................................... 11 FAQ ................................................................................................................................ 12

DOCKER REGISTRY私有仓库 ............................................................................................ 13

搭建私有仓库 ................................................................................................................ 13 使用私有仓库 ................................................................................................................ 13

KUBENETES中常见问题 ..................................................................................................... 15

kubernetes常用命令 ................................................................................................. 15 kubernetes resfulAPI .............................................................................................. 16

陕西省信息化工程研究院软件研发部 第 2 页 / 共 19 页

7.

参考文献 ............................................................................................................................. 17

陕西省信息化工程研究院软件研发部 第 3 页 / 共 19 页

1. Kubernetes架构

Kubernetes是Google开源的容器集群管理系统。它构建于docker技术之上,为容器化的应用提供资源调度、部署运行、服务发现、扩容缩容等整一套功能,本质上可看作是基于容器技术的mini-PaaS平台。本文旨在梳理Kubernetes的架构、概念及基本工作流,并且通过运行一个简单的示例应用来介绍如何使用Kubernetes。

1.1. 操作对象

Kubernetes以RESTFul形式开放接口,用户可操作的REST对象有三个: pod:是Kubernetes最基本的部署调度单元,可以包含container,逻辑上表示某种应用的一个实例。比如一个web站点应用由前端、后端及数据库构建而成,这三个组件将运行在各自的容器中,那么我们可以创建包含三个container的pod。

service:是pod的路由代理抽象,用于解决pod之间的服务发现问题。因为pod的运行状态可动态变化(比如切换机器了、缩容过程中被终止了等),所以访陕西省信息化工程研究院软件研发部 第 4 页 / 共 19 页

问端不能以写死IP的方式去访问该pod提供的服务。service的引入旨在保证pod的动态变化对访问端透明,访问端只需要知道service的地址,由service来提供代理。

replicationController:是pod的复制抽象,用于解决pod的扩容缩容问题。通常,分布式应用为了性能或高可用性的考虑,需要复制多份资源,并且根据负载情况动态伸缩。通过replicationController,可以指定一个应用需要几份复制,Kubernetes将为每份复制创建一个pod,并且保证实际运行pod数量总是与该复制数量相等(例如,当前某个pod宕机时,自动创建新的pod来替换)。

1.2. 功能组件

master运行三个组件:

 apiserver:作为kubernetes系统的入口,封装了核心对象的增删改查操作,

以RESTFul接口方式提供给外部客户和内部组件调用。它维护的REST对象将持久化到etcd(一个分布式强一致性的key/value存储)。

 scheduler:负责集群的资源调度,为新建的pod分配机器。这部分工作分

出来变成一个组件,意味着可以很方便地替换成其他的调度器。  controller-manager:负责执行各种控制器,目前有两类:

endpoint-controller:定期关联service和pod(关联信息由endpoint对象维陕西省信息化工程研究院软件研发部 第 5 页 / 共 19 页

护),保证service到pod的映射总是最新的。

replication-controller:定期关联replicationController和pod,保证replicationController定义的复制数量与实际运行pod的数量总是一致的。 slave(称作minion)运行两个组件:

 kubelet:负责管控docker容器,如启动/停止、监控运行状态等。它会定

期从etcd获取分配到本机的pod,并根据pod信息启动或停止相应的容器。同时,它也会接收apiserver的HTTP请求,汇报pod的运行状态。  proxy:负责为pod提供代理。它会定期从etcd获取所有的service,并根

据service信息创建代理。当某个客户pod要访问其他pod时,访问请求会经过本机proxy做转

2. Kubernetes部署

2.1. 源码安装

 安装docker:

add-apt-repository ppa:docker-maint/testing

apt-get update

wget https://get.docker.com/ sh index.html  安装golang:

add-apt-repository ppa:gophers/go apt-get update apt-get isntall golang

通过dpkg -L golang查看其安装位置

陕西省信息化工程研究院软件研发部 第 6 页 / 共 19 页

 kubernetes源码安装

cd kubernetes hack/local-up-cluster.sh

./cluster/kubectl.sh get services

2.2. 编译好的安装包

手动执行以下命令: ./etcd

./kube-apiserver

--etcd-servers=http://127.0.0.1:4001

--insecure-bind-

address=0.0.0.0 --service-cluster-ip-range=10.10.10.0/24 --insecure-port=8080

./kube-scheduler --master=127.0.0.1:8080

./kube-controller-manager --master=127.0.0.1:8080 --address=0.0.0.0 ./kube-proxy --master=127.0.0.1:8080

./kubelet --logtostderr=true --api_servers=http://127.0.0.1:8080 陕西省信息化工程研究院软件研发部 第 7 页 / 共 19 页

2.3. 获取pause镜像

Kubnetes在创造pod或replicationController时,需要基于pause镜像的底层容器,默认会到谷歌的kubernetes的官方仓库下载,往往出现超时错误,因此需要用下面的方法获取pause镜像

方法一:

docker pull docker.io/kubernetes/pause

docker tag docker.io/kubernetes/pause gcr.io/google_containers/pause:2.0 方法二:

kubelet的启动参数里面指定:

--pod-infra-container-image=\"gcr.io/google_containers/pause:2.0\" 方法三:

可在配置文件中将仓库改为私有仓库,在kubelet配置文件中指定。 KUBELET_OPTS=\"--address=0.0.0.0 --port=10250 --pod-infra-container-image=docker3:5000/pause:latest hostname_override=docker3 --api_servers=http://docker3:8080

--logtostderr=true --cluster_dns=192.168.3.10 --cluster_domain=cluster.local\"

--

3. kubernester-UI部署

3.1. 获取UI镜像

由于谷歌的官方仓库gcr.io/google_containers/无法访问,本文将获取国内提供的kubernetes-UI镜像index.alauda.cn/googlecontainer/kube-ui:v5。 陕西省信息化工程研究院软件研发部 第 8 页 / 共 19 页

docker pull index.alauda.cn/googlecontainer/kube-ui:v5

3.2. 部署kubernester-UI

(1) 创建Namespace:kube-system

执行命令:kubectl create -f namespace.yaml

apiVersion: v1 kind: Namespace metadata: name: kube-system (2) 创建rc:kube-ui-v5,(注意image键值改为本地的的kube-ui镜像)

执行命令:kubectl create -f kube-ui-rc.yaml

查看创建完成的pod(因设定了空间,查询时也要加上namespace,否则无法显示):

kubectl get pod --namespace=kube-system

(3) 创建service:kube-ui

执行命令:kubectl create -f kube-ui-svc.yaml

(4) 部署完成后,可在minion节点中通过docker ps查看到运行的kube-ui

和pause容器。

(5) 通过kubectl cluster-info查看kube-ui的运行地址

(6) 界面显示

http://10.10.10.159:8080/api/v1/proxy/namespaces/kube-system/services/kube-ui/

陕西省信息化工程研究院软件研发部 第 9 页 / 共 19 页

3.3. FAQ

本文在创建过程中采用单节点架构,其中容器都正常运行,但在浏览器上UI不能正常访问。通过netstate –nltp查看apiserver的8080端口没有开放。

原因在于在启动kube-apiserve时指定--insecure-bind-address=0.0.0.0 重新启动kube-apiserve后端口8080被释放。

陕西省信息化工程研究院软件研发部 第 10 页 / 共 19 页

4. kube-dashboard部署

4.1. 获取UI镜像

同样谷歌的官方仓库gcr.io/google_containers/无法访问。本文将获取国内提供的kubernetes-dashboard镜像brainqi/kubernetes-dashboard-amd64:v1.0.0。

docker pull brainqi/kubernetes-dashboard-amd64:v1.0.0 docker tag brainqi/kubernetes-dashboard-amd64:v1.0.0 gcr.io/google_containers/kubernetes-dashboard-amd64:v1.0.0

4.2. 部署kube-dashboard

(1) 在kube的addons文件夹中包含创建kube-dashboard的service和

ReplicationController文件。

cd /root/kubernetes/cluster/addons/dashboard

kubectl create -f namespace.yaml (在创建kube-ui时执行过,不用执行)

cat namespace.yaml apiVersion: v1 kind: Namespace metadata: name: kube-system kubectl create -f dashboard-controller.yaml --namespace=kube-system kubectl create -f dashboard-service.yaml --namespace=kube-system kubectl proxy --port=9090 --address=0.0.0.0 &

(2) 查看创建好的services和ReplicationController。

kubectl get services --namespace=kube-system

kubectl get ReplicationController --namespace=kube-system

陕西省信息化工程研究院软件研发部 第 11 页 / 共 19 页

kubectl describe service kubernetes-dashboard --namespace=kube-system

kubectl describe ReplicationController kube-ui-v5-1 --namespace=kube-system

查看kube-dashboard可访问地址:kubectl cluster-info

(3) 界面显示

4.3. FAQ

同样在部署过程中遇到kube-dashboard无法访问的问题,出现500错误。

陕西省信息化工程研究院软件研发部 第 12 页 / 共 19 页

其原因在于创建kube-dashboard ReplicationController(rc)没有指定api-server地址。添加args,值为--apiserver-host=http://10.10.10.159:8080。重新创建rc和svc后,成功访问。

5. docker Registry私有仓库

5.1. 搭建私有仓库

Docker将私有仓库的运行封装为registry容器,本文在10.10.10.142上运行docker registry。

sudo docker pull registry:2.2 #获取镜像 docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:2.2 #生成registry容器 验证是否成功:

http://10.10.10.142:5000/v2 http://10.10.10.142:5000/v2/_catalog

5.2. 使用私有仓库

成功搭建好私有仓库后,本节镜像私有仓库中镜像的上传和下载。本文将在10.10.10.159节点上将ubuntu镜像上传道私有仓库10.10.10.142中,之后在10.10.10.160节点从私有仓库中获取ubuntu镜像。

(1)(10.10.10.159上操作)首先用docker tag将10.10.10.159节点上的镜像陕西省信息化工程研究院软件研发部 第 13 页 / 共 19 页

Ubuntu打上标签,注意要注明版本号。

docker tag ubuntu:14.04 10.10.10.142:5000/ ubuntu:14.04

(2)将ubuntu:14.04镜像上传到10.10.10.142节点上。

docker push 10.10.10.142:5000/ubuntu:14.04

上传完成后可在10.10.10.142的/opt/data/registry/images目录下查看

(3)在10.10.10.160上获取ubuntu:14.04镜像

docker pull 10.10.10.142:5000/ubuntu:14.04

5.3. 容器生成镜像

Docker提供将运行的容器提交生成新镜像的方法,即docker commit <容器id> debian02 #把这个容器提交生成新的debian02镜像(该镜像是原始镜像与容器的整合)

将镜像直接保存为tar格式便于转存的启动节点中。

docker save debian02 >/root/debian02.tar #debian02镜像打包

陕西省信息化工程研究院软件研发部 第 14 页 / 共 19 页

在另外的机器上导入镜像

docker load < debian02.tar #导入镜像

6. kubenetes中常见问题

6.1. kubernetes常用命令

kubectl get minions kubectl get pods kubectl get services -o json kubectl get replicationControllers kubectl describe pods apache kubectl proxy --port=9090 --address=0.0.0.0 & 查看minion主机 查看pods清单 查看service清单 查看replicationControllers清单 描述pods信息 后台释放9090端口 kubectl cluster-info kubectl get namespace kubectl delete pod redis-master for i in `kubectl get pod|tail -n +2|awk '{print #删除所有pods $1}'`; do kubectl delete pod $i; done 描述pods信息:

kubectl describe pods apache-test-3253166744-em9rz

陕西省信息化工程研究院软件研发部 第 15 页 / 共 19 页

6.2. kubernetes resfulAPI

Kubernetes提供的RESTful API(推荐,及时性更高)。官方API http://kubernetes.io/docs/api-reference/v1/operations/。可通过火狐浏览器restclien工具验证:

#查看kubernetes版本

curl -s -L http://192.168.1.200:8080/api/v1beta1/version | python -mjson.tool #查看pods清单 curl -s -L http://192.168.1.200:8080/api/v1beta1/pods | python -mjson.tool 陕西省信息化工程研究院软件研发部 第 16 页 / 共 19 页

#查看replicationControllers清单 curl -s -L http://192.168.1.200:8080/api/v1beta1/replicationControllers | python -mjson.tool #查查看minion主机 # curl -s -L http://192.168.1.200:8080/api/v1beta1/minions | python -m json.tool #查看service清单 # curl -s -L http://192.168.1.200:8080/api/v1beta1/services | python -m json.tool

7. 参考文献

(1)

Ustack贡献的方案:

https://www.ustack.com/blog/kubernetes1/?belong=news

(2)

梁工使用方案

https://segmentfault.com/a/1190000002620961 http://lizhenliang.blog.51cto.com/7876557/1736572

(3)

Kubernetes应用部署模型解析(部署篇) http://www.csdn.net/article/2015-06-12/2824937

(4)

官网:

http://kubernetes.io/docs/getting-started-guides/locally/

(5)

API

http://kubernetes.io/docs/api-reference/v1/operations/

(6)

Kubernetes dashboard官网

https://github.com/kubernetes/dashboard http://kubernetes.io/docs/user-guide/ui/

(7)

下载

https://github.com/kubernetes/kubernetes/releases/

(8)

kubernetes初探

http://blog.csdn.net/xiangpingli/article/details/48338029 http://kubernetes.io/docs/api-reference/v1/operations/

陕西省信息化工程研究院软件研发部 第 17 页 / 共 19 页

(9)

ubuntu安装单机版kubernetes

http://blog.csdn.net/zhang__jiayu/article/details/42745507#reply

(10)

kubernetes集群中部署kube-ui

http://blog.csdn.net/zczzsq/article/details/50787810

http://dockone.io/article/623?utm_source=tuicool&utm_medium=referral

(11)

docker详细的基础用法

http://www.open-open.com/lib/view/open1410568733492.html http://www.linuxidc.com/Linux/2015-09/123112.htm

(12)

管理工具 shipyard 的详细使用指南 http://www.bkjia.com/yjs/1012101.html

https://segmentfault.com/a/1190000002464365#articleHeader0

(13)

docker Registry私有仓库

http://www.cnblogs.com/lienhua34/p/4922130.html http://blog.csdn.net/wangtaoking1/article/details/44180901 http://linux.cn/article-5379-1.html

(14)

(15)

guestbook官方

https://github.com/kubernetes/kubernetes/tree/master/examples/guestbook Kubernetes管理Docker集群之部署篇

http://lizhenliang.blog.51cto.com/7876557/1736572

基于OVS的Kubernetes多节点环境搭建

http://bingotree.cn/?p=828&utm_source=tuicool&utm_medium=referral 时速云基于Kubernetes打造容器云平台的实践

http://www.infoq.com/cn/presentations/practice-of-container-cloud-platform kubernetes集群部署

http://blog.csdn.net/qingchi0/article/details/42538549 Kubernetes入门(三) - 网络

http://www.open-open.com/lib/view/open1437616369584.html#articleHeader0 基于Kubernetes构建Docker集群管理详解(刘天斯)

陕西省信息化工程研究院软件研发部 第 18 页 / 共 19 页

http://www.csdn.net/article/2014-12-24/2823292-Docker-Kubernetes kubernetes(k8s)搭建实践

http://my.oschina.net/dxqr/blog/607854

使用FIT2CLOUD在青云QingCloud快速部署和管理Kubernetes集群 http://www.aixchina.net/home/space.php?uid=420105&do=blog&id=158725

陕西省信息化工程研究院软件研发部 第 19 页 / 共 19 页

因篇幅问题不能全部显示,请点此查看更多更全内容

Top