kubernetes研究.docx

上传人:b****8 文档编号:30664077 上传时间:2023-08-19 格式:DOCX 页数:18 大小:963.47KB
下载 相关 举报
kubernetes研究.docx_第1页
第1页 / 共18页
kubernetes研究.docx_第2页
第2页 / 共18页
kubernetes研究.docx_第3页
第3页 / 共18页
kubernetes研究.docx_第4页
第4页 / 共18页
kubernetes研究.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

kubernetes研究.docx

《kubernetes研究.docx》由会员分享,可在线阅读,更多相关《kubernetes研究.docx(18页珍藏版)》请在冰豆网上搜索。

kubernetes研究.docx

kubernetes研究

文件状态:

【√】草稿

【】正式发布

【】正在修改中

类别

云计算

项目名称

Kubernetes研究

版本

日期

作者

备注说明

1.0

2016/03/28

程成

初稿

审核

密级

秘密

应用范围

陕西省信息化工程研究院软件研发部

版权所有

陕西省信息化工程研究院

Kubernetes研究

1.Kubernetes架构

Kubernetes是Google开源的容器集群管理系统。

它构建于docker技术之上,为容器化的应用提供资源调度、部署运行、服务发现、扩容缩容等整一套功能,本质上可看作是基于容器技术的mini-PaaS平台。

本文旨在梳理Kubernetes的架构、概念及基本工作流,并且通过运行一个简单的示例应用来介绍如何使用Kubernetes。

1.1.操作对象

Kubernetes以RESTFul形式开放接口,用户可操作的REST对象有三个:

pod:

是Kubernetes最基本的部署调度单元,可以包含container,逻辑上表示某种应用的一个实例。

比如一个web站点应用由前端、后端及数据库构建而成,这三个组件将运行在各自的容器中,那么我们可以创建包含三个container的pod。

service:

是pod的路由代理抽象,用于解决pod之间的服务发现问题。

因为pod的运行状态可动态变化(比如切换机器了、缩容过程中被终止了等),所以访问端不能以写死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对象维护),保证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-repositoryppa:

docker-maint/testing

apt-getupdate

wget

shindex.html

●安装golang:

add-apt-repositoryppa:

gophers/go

apt-getupdate

apt-getisntallgolang

通过dpkg-Lgolang查看其安装位置

●kubernetes源码安装

cdkubernetes

hack/local-up-cluster.sh

./cluster/kubectl.shgetservices

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

2.3.获取pause镜像

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

方法一:

dockerpulldocker.io/kubernetes/pause

dockertagdocker.io/kubernetes/pausegcr.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镜像

dockerpull

3.2.部署kubernester-UI

(1)创建Namespace:

kube-system

执行命令:

kubectlcreate-fnamespace.yaml

apiVersion:

v1

kind:

Namespace

metadata:

name:

kube-system

(2)创建rc:

kube-ui-v5,(注意image键值改为本地的的kube-ui镜像)

执行命令:

kubectlcreate-fkube-ui-rc.yaml

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

kubectlgetpod--namespace=kube-system

(3)创建service:

kube-ui

执行命令:

kubectlcreate-fkube-ui-svc.yaml

(4)部署完成后,可在minion节点中通过dockerps查看到运行的kube-ui和pause容器。

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

(6)界面显示

http:

//10.10.10.159:

8080/api/v1/proxy/namespaces/kube-system/services/kube-ui/

3.3.FAQ

本文在创建过程中采用单节点架构,其中容器都正常运行,但在浏览器上UI不能正常访问。

通过netstate–nltp查看apiserver的8080端口没有开放。

原因在于在启动kube-apiserve时指定--insecure-bind-address=0.0.0.0

重新启动kube-apiserve后端口8080被释放。

4.kube-dashboard部署

4.1.获取UI镜像

同样谷歌的官方仓库gcr.io/google_containers/无法访问。

本文将获取国内提供的kubernetes-dashboard镜像brainqi/kubernetes-dashboard-amd64:

v1.0.0。

dockerpullbrainqi/kubernetes-dashboard-amd64:

v1.0.0

dockertagbrainqi/kubernetes-dashboard-amd64:

v1.0.0gcr.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

kubectlcreate-fnamespace.yaml(在创建kube-ui时执行过,不用执行)

catnamespace.yaml

apiVersion:

v1

kind:

Namespace

metadata:

name:

kube-system

kubectlcreate-fdashboard-controller.yaml--namespace=kube-system

kubectlcreate-fdashboard-service.yaml--namespace=kube-system

kubectlproxy--port=9090--address=0.0.0.0&

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

kubectlgetservices--namespace=kube-system

kubectlgetReplicationController--namespace=kube-system

kubectldescribeservicekubernetes-dashboard--namespace=kube-system

kubectldescribeReplicationControllerkube-ui-v5-1--namespace=kube-system

查看kube-dashboard可访问地址:

kubectlcluster-info

(3)界面显示

4.3.FAQ

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

其原因在于创建kube-dashboardReplicationController(rc)没有指定api-server地址。

添加args,值为--apiserver-host=http:

//10.10.10.159:

8080。

重新创建rc和svc后,成功访问。

5.dockerRegistry私有仓库

5.1.搭建私有仓库

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

sudodockerpullregistry:

2.2#获取镜像

dockerrun-d-v/opt/registry:

/var/lib/registry-p5000:

5000--restart=always--nameregistryregistry:

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上操作)首先用dockertag将10.10.10.159节点上的镜像Ubuntu打上标签,注意要注明版本号。

dockertagubuntu:

14.0410.10.10.142:

5000/ubuntu:

14.04

(2)将ubuntu:

14.04镜像上传到10.10.10.142节点上。

dockerpush10.10.10.142:

5000/ubuntu:

14.04

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

(3)在10.10.10.160上获取ubuntu:

14.04镜像

dockerpull10.10.10.142:

5000/ubuntu:

14.04

5.3.容器生成镜像

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

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

dockersavedebian02>/root/debian02.tar#debian02镜像打包

在另外的机器上导入镜像

dockerload

6.kubenetes中常见问题

6.1.kubernetes常用命令

kubectlgetminions

查看minion主机

kubectlgetpods

查看pods清单

kubectlgetservices-ojson

查看service清单

kubectlgetreplicationControllers

查看replicationControllers清单

kubectldescribepodsapache

描述pods信息

kubectlproxy--port=9090--address=0.0.0.0&

后台释放9090端口

kubectlcluster-info

kubectlgetnamespace

kubectldeletepodredis-master

foriin`kubectlgetpod|tail-n+2|awk'{print$1}'`;

dokubectldeletepod$i;

done

#删除所有pods

描述pods信息:

kubectldescribepodsapache-test-3253166744-em9rz

6.2.kubernetesresfulAPI

Kubernetes提供的RESTfulAPI(推荐,及时性更高)。

官方APIhttp:

//kubernetes.io/docs/api-reference/v1/operations/。

可通过火狐浏览器restclien工具验证:

#查看kubernetes版本

curl-s-Lhttp:

//192.168.1.200:

8080/api/v1beta1/version|python-mjson.tool

#查看pods清单

curl-s-Lhttp:

//192.168.1.200:

8080/api/v1beta1/pods|python-mjson.tool

#查看replicationControllers清单

curl-s-Lhttp:

//192.168.1.200:

8080/api/v1beta1/replicationControllers|python-mjson.tool

#查查看minion主机

#curl-s-Lhttp:

//192.168.1.200:

8080/api/v1beta1/minions|python-mjson.tool

#查看service清单

#curl-s-Lhttp:

//192.168.1.200:

8080/api/v1beta1/services|python-mjson.tool

7.参考文献

(1)Ustack贡献的方案:

(2)梁工使用方案

(3)Kubernetes应用部署模型解析(部署篇)

(4)官网:

http:

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

(5)API

http:

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

(6)Kubernetesdashboard官网

http:

//kubernetes.io/docs/user-guide/ui/

(7)下载

(8)kubernetes初探

http:

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

(9)ubuntu安装单机版kubernetes

(10)kubernetes集群中部署kube-ui

http:

//dockone.io/article/623?

utm_source=tuicool&utm_medium=referral

(11)docker详细的基础用法

http:

//www.open-

(12)管理工具shipyard的详细使用指南

(13)dockerRegistry私有仓库

(14)guestbook官方

(15)Kubernetes管理Docker集群之部署篇

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

时速云基于Kubernetes打造容器云平台的实践

kubernetes集群部署

Kubernetes入门(三)-网络

http:

//www.open-

基于Kubernetes构建Docker集群管理详解(刘天斯)

kubernetes(k8s)搭建实践

使用FIT2CLOUD在青云QingCloud快速部署和管理Kubernetes集群

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 冶金矿山地质

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1