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 页
因篇幅问题不能全部显示,请点此查看更多更全内容