kubernetes在CentOS上的All In One部署

Tags: kubernetes 

目录

环境

操作系统: CentOS Linux release 7.3.1611 (Core) 

安装

安装epel源:

yum install -y epel-release    //epel源中收录了etcd和kubernetes的安装包

安装etcd:

yum install -y etcd            //kubernetes依赖的组件,会有专门文章介绍etcd

$rpm -qa|grep etcd
etcd-3.0.15-1.el7.x86_64

安装docker:

yum install -y docker           //kuberntes依赖的组件,有专门的文章讲解docker

$rpm -qa|grep docker
docker-common-1.10.3-59.el7.centos.x86_64
docker-1.10.3-59.el7.centos.x86_64

安装kubernetes:

yum install -y kubernetes      //kubernetes all-in-one套件

$rpm -qa|grep kuber
kubernetes-client-1.4.0-0.1.git87d9d8d.el7.x86_64   //命令行工具
kubernetes-1.4.0-0.1.git87d9d8d.el7.x86_64
kubernetes-master-1.4.0-0.1.git87d9d8d.el7.x86_64   //master节点服务
kubernetes-node-1.4.0-0.1.git87d9d8d.el7.x86_64     //node节点服务,

在启动之前,我们先看一下kubernetes系统都包含了哪些文件。

kuberntes-master

$rpm -ql kubernetes-master
/etc/kubernetes                        // /etc目录下安放了配置文件
/etc/kubernetes/apiserver
/etc/kubernetes/config
/etc/kubernetes/controller-manager
/etc/kubernetes/scheduler
/run/kubernetes
/usr/bin/hyperkube                     // /usr/bin目录下二进制程序
/usr/bin/kube-apiserver
/usr/bin/kube-controller-manager
/usr/bin/kube-scheduler
/usr/lib/systemd/system/kube-apiserver.service       // 安装了三个systemd服务
/usr/lib/systemd/system/kube-controller-manager.service
/usr/lib/systemd/system/kube-scheduler.service
/usr/lib/tmpfiles.d/kubernetes.conf
/usr/share/doc/kubernetes-master-1.4.0
/usr/share/doc/kubernetes-master-1.4.0/CHANGELOG.md
/usr/share/doc/kubernetes-master-1.4.0/CONTRIB.md
/usr/share/doc/kubernetes-master-1.4.0/CONTRIBUTING.md
/usr/share/doc/kubernetes-master-1.4.0/DESIGN.md
/usr/share/doc/kubernetes-master-1.4.0/README.md
/usr/share/doc/kubernetes-master-1.4.0/code-of-conduct.md
/usr/share/licenses/kubernetes-master-1.4.0
/usr/share/licenses/kubernetes-master-1.4.0/LICENSE
/usr/share/man/man1/kube-apiserver.1.gz
/usr/share/man/man1/kube-controller-manager.1.gz
/usr/share/man/man1/kube-scheduler.1.gz

从上面可以看出,kubernetes-master包含三个服务:

kube-apiserver.service               // apiserver
kube-controller-manager.service      // 控制器
kube-scheduler.service               // 调度器

kubernetes-node

$rpm -ql kubernetes-node
/etc/kubernetes
/etc/kubernetes/config
/etc/kubernetes/kubelet
/etc/kubernetes/proxy
/etc/systemd/system.conf.d/kubernetes-accounting.conf
/run/kubernetes
/usr/bin/hyperkube
/usr/bin/kube-proxy
/usr/bin/kubelet
/usr/lib/systemd/system/kube-proxy.service
/usr/lib/systemd/system/kubelet.service
/usr/lib/tmpfiles.d/kubernetes.conf
/usr/share/doc/kubernetes-node-1.4.0
/usr/share/doc/kubernetes-node-1.4.0/CHANGELOG.md
/usr/share/doc/kubernetes-node-1.4.0/CONTRIB.md
/usr/share/doc/kubernetes-node-1.4.0/CONTRIBUTING.md
/usr/share/doc/kubernetes-node-1.4.0/DESIGN.md
/usr/share/doc/kubernetes-node-1.4.0/README.md
/usr/share/doc/kubernetes-node-1.4.0/code-of-conduct.md
/usr/share/licenses/kubernetes-node-1.4.0
/usr/share/licenses/kubernetes-node-1.4.0/LICENSE
/usr/share/man/man1/kube-proxy.1.gz
/usr/share/man/man1/kubelet.1.gz
/var/lib/kubelet

从上面可以看出,kubernetes-node包含两个服务:

kube-proxy.service       // 控制进出报文流向
kubelet.service          // 管理本机上容器

kubernetes-client

$rpm -ql kubernetes-client
/usr/bin/hyperkube
/usr/bin/kubectl
/usr/share/bash-completion/completions/kubectl
/usr/share/doc/kubernetes-client-1.4.0
/usr/share/doc/kubernetes-client-1.4.0/CHANGELOG.md
/usr/share/doc/kubernetes-client-1.4.0/CONTRIB.md
/usr/share/doc/kubernetes-client-1.4.0/CONTRIBUTING.md
/usr/share/doc/kubernetes-client-1.4.0/DESIGN.md
/usr/share/doc/kubernetes-client-1.4.0/README.md
/usr/share/doc/kubernetes-client-1.4.0/code-of-conduct.md
/usr/share/licenses/kubernetes-client-1.4.0
/usr/share/licenses/kubernetes-client-1.4.0/LICENSE
/usr/share/man/man1/kubectl-annotate.1.gz
...(略去了更多的手册页)...

从上面可以看出,kubernetes-client就是提供了一个kubectl命令。

需要留心kubernetes.rpm

上面我们查看了kubernetes-master、kubernetes-node、kubernetes-client的文件内容,为何没有提及kubernetes-1.4.0-0.1.git87d9d8d.el7.x86_64这个rpm?

用rpm命去列出kubernetes包含的文件时候,会发现是空的:

$rpm -ql kubernetes 
(contains no files)

这是因为kuberntes这个rpm的目前存在的意义只是为了提供一个简化的安装方式,它只包含一个依赖关系,而没有任何的内容。使用yum deplist查看一下依赖关系,就清楚了:

yum deplist kubernetes
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * c7-media: 
 * centosplus: mirrors.btte.net
 * epel: mirrors.neusoft.edu.cn
 * extras: mirrors.cn99.com
 * updates: mirrors.btte.net
package: kubernetes.x86_64 1.4.0-0.1.git87d9d8d.el7
  dependency: kubernetes-master = 1.4.0-0.1.git87d9d8d.el7
   provider: kubernetes-master.x86_64 1.4.0-0.1.git87d9d8d.el7
  dependency: kubernetes-node = 1.4.0-0.1.git87d9d8d.el7
   provider: kubernetes-node.x86_64 1.4.0-0.1.git87d9d8d.el7

可以看到,kubernetes这个rpm的目的只是为了引发对kubernets-master和kubernetes-node的安装,而后者又会引发对kubernetes-client的安装。

这样意味上,如果不是使用all-in-one的部署方式,完全可以在master节点上只安装kubernetes-master,node也同样如此。

需要留心hyperkube

细心的朋友或许已经发现,前面一直有一个叫做“hyperkube”的二进制文件出现,这个文件是做什么的,为什么哪里都有它?

hyperkube是一个将kubernetes的所有的二进制文件集成到一起后的一个二进制文件,所有kubernetes的命令都是它的子命令。

hyperkube诞生的是为了简化kubernetes组件在宿主机上的分发过程。

启动

systemctl start etcd            //localhost:2379
systemctl start kube-apiserver  //localhost:8080
systemctl start kube-controller-manager
systemctl start kube-scheduler
systemctl start kube-proxy
systemctl start kubelet

查看组件状态:

$ kubectl  get  cs   //cs是componentstatuses命令的简写
NAME                 STATUS    MESSAGE              ERROR
scheduler            Healthy   ok
controller-manager   Healthy   ok
etcd-0               Healthy   {"health": "true"}

查看节点状态:

$ kubectl  get  nodes
NAME        STATUS    AGE
127.0.0.1   Ready     33s

到此为止了吗?

NO!这才是刚刚开始,能够部署与能够掌控完全不是一回事情。并且,在上面的部署过程中,使用的都是默认配置,没有改动过一个配置文件。

但kubernetes系统本身虽然并不复杂,想要三言两语就说清楚,很难。下面尝试做一个比较粗介绍,详细说明请跟踪本站的相关文章。

先说配置文件

除了了解清楚kuberenetes的系统组成,最重要的就是学会配置、懂得配置项的含义。回想一下,在工作学习当中,是否是大把的时间都用在了看手册、学配置上面?:-)

CentOS中提供的kubernetes安装包,将配置文件统一放置在/etc/kubernetes目录中:

$ls /etc/kubernetes
apiserver  config  controller-manager  kubelet  proxy  scheduler

在all-in-one部署后,一共有6个配置文件。

config:              日志级别、特权模式、master地址等最基本的配置
                     kubernetes的每个常驻服务都会使用这个配置文件
apiserver:           apiserver自己的配置文件
controller-manager:  controller-manager自己的配置文件 
scheduler:           scheduler自己的配置文件
kubelet:             kubelet自己的配置文件
proxy:               kube-proxy自己的配置文件

服务启动的时候是如何解读这些配置文件,又将其传递给了哪个进程,这就是另一个关于systemd的话题。这里不做展开,可以参考本站文章《CentOS中使用Docker》中对CentOS上docker服务启动过程的介绍。

再说功能

了解都有哪些配置项,每一个配置项的含义是什么的过程,其实就是探索每一个服务、每一个组件的功能的过程。知晓了功能,自然明白了系统的结构。

kuberntes系统中的服务组件的配置项相当的多!可以通过每一个二进制程序的命令行提示得知,例如:

$kube-apiserver -h

是的!配置文件中的所有参数最终都是通过命令行参数传递给进程的,所以在“-h”中看到命令行参数,就是配置文件中可配置项。

kube-apiserver.service

用户与kuberntes交互的入口,kubernetes组件间交互的入口

用户或者内部组件在与master通信的时候,使用的master地址,就是apiserver的对外服务地址。

需要与etcd进行通讯,对外提供服务

kube-controller-manager.service

控制器,控制器的功能很多,进行配额管理等等

需要与apiserver通信,不对外提供服务

kube-scheduler.service // 调度器

实现调度功能

需要与apiserver通信,不对外提供服务

kube-proxy.service

设置出入宿主机的报文流向

需要与apiserver通信,不对外提供服务

kubelet.service

管理本机上的容器(注意是容器,容器不等于docker)

需要与apiserver通信,对外服务,接收外部状态查询、监控查询、attach容器等指令。

所以,最终的情形就是,apiserver以外所有的组件都在与apiserver进行通信,而apiserver直接与etcd进行通信。

特别提示:

1. kubernetes系统中是没有数据库的,apiserver自身也不保存数据,元数据等信息都存放在etcd中;

2. kube-proxy是一个比较有意思的存在,它的作用是负责地址转换,系统内容器之间通信,容器访问Service的时候,都需要它来做地址的转换。

3. kuberntes系统外部,譬如说你的自己的PC想去访问托管在kubernetes系统中服务的时候,其中一种方式是在你自己的PC上安装kube-proxy,并将其接入apiserver。

最后

上面只进行了一个all-on-one的部署,当搞清楚了配置项的含义以后,从all-in-one到跨多台服务器就是一个很简单的过程。

kubernetes的使用、自动化部署以及组件的详细解析等内容,将独立成篇。


kubernetes

  1. kubernetes 使用:多可用区、Pod 部署拓扑与 Topology Aware Routing
  2. kubernetes 扩展:Cloud Controller Manager
  3. kubernetes 准入:操作合法性检查(Admission Control)
  4. kubernetes 鉴权:用户操作权限鉴定(Authorization)
  5. kubernetes 认证:用户管理与身份认证(Authenticating)
  6. kubernetes 开发:代码生成工具
  7. kubernetes 扩展:operator 开发
  8. kubernetes 扩展:CRD 的使用方法
  9. kubernetes configmap 热加载,inotifywatch 监测文件触发热更新
  10. kubernetes 扩展:扩展点和方法(api/cr/plugin...)
  11. kubernetes 调度组件 kube-scheduler 1.16.3 源代码阅读指引
  12. kubernetes 代码中的 k8s.io 是怎么回事?
  13. 阅读笔记《不一样的 双11 技术,阿里巴巴经济体云原生实践》
  14. kubernetes ingress-nginx 启用 upstream 长连接,需要注意,否则容易 502
  15. ingress-nginx 的限速功能在 nginx.conf 中的对应配置
  16. kubernetes 中的容器设置透明代理,自动在 HTTP 请求头中注入 Pod 信息
  17. kubernetes ingress-nginx 的测试代码(单元测试+e2e测试)
  18. kubernetes ingress-nginx http 请求复制功能与 nginx mirror 的行为差异
  19. kubernetes 基于 openresty 的 ingress-nginx 的状态和配置查询
  20. kubernetes ingress-nginx 0.25 源代码走读笔记
  21. kubernetes ingress-nginx 的金丝雀(canary)/灰度发布功能的使用方法
  22. kubernetes 操作命令 kubectl 在 shell 中的自动补全配置
  23. kubernetes 组件 kube-proxy 的 IPVS 功能的使用
  24. kubernetes initializer 功能的使用方法: 在 Pod 等 Resource 落地前进行修改
  25. kubernetes 版本特性: 新特性支持版本和组件兼容版本
  26. kubernetes API 与 Operator: 不为人知的开发者战争(完整篇)
  27. kubernetes 1.12 从零开始(七): kubernetes开发资源
  28. kubernetes 1.12 从零开始(六): 从代码编译到自动部署
  29. kubernetes 网络方案 Flannel 的学习笔记
  30. kubernetes 1.12 从零开始(五): 自己动手部署 kubernetes
  31. kubernetes 1.12 从零开始(四): 必须先讲一下基本概念
  32. kubernetes 1.12 从零开始(三): 用 kubeadm 部署多节点集群
  33. kubernetes 1.12 从零开始(二): 用 minikube 部署开发测试环境
  34. kubernetes 1.12 从零开始(一): 部署环境准备
  35. kubernetes 1.12 从零开始(零): 遇到的问题与解决方法
  36. kubernetes 1.12 从零开始(初): 课程介绍与官方文档汇总
  37. kubernetes 集群状态监控:通过 grafana 和 prometheus
  38. 一些比较有意思的Kubernetes周边产品
  39. Borg论文阅读笔记
  40. kubelet下载pod镜像时,docker口令文件的查找顺序
  41. kubernetes 的 Client Libraries 的使用
  42. kubernetes的网络隔离networkpolicy
  43. kube-router的源码走读
  44. kubernetes 跨网段通信: 通过 calico 的 ipip 模式
  45. kubernetes的调试方法
  46. kubernetes 与 calico 的衔接过程
  47. 怎样理解 kubernetes 以及微服务?
  48. kubernetes中部署有状态的复杂分布式系统
  49. kubernetes的apiserver的启动过程
  50. kubernetes的api定义与装载
  51. kubernetes的federation部署,跨区Service
  52. kubernetes的编译、打包、发布
  53. kubernetes的第三方包的使用
  54. kubernetes的Storage的实现
  55. kubernetes 的 Apiserver 的 storage 使用
  56. kubernetes的Controller-manager的工作过程
  57. kubernetes的Client端Cache
  58. kubernetes 的 Apiserver 的工作过程
  59. kubernetes的CNI插件初始化与Pod网络设置
  60. kubernetes的Pod变更过程
  61. kubernetes的kubelet的工作过程
  62. kuberntes 的 Cmdline 实现
  63. kubernetes的Pod内挂载的Service Account的使用方法
  64. kubernetes的社区资源与项目参与方式
  65. kubernetes的Kube-proxy的转发规则分析
  66. kubernetes的基本操作
  67. kubernetes在CentOS上的集群部署
  68. kubernetes在CentOS上的All In One部署
  69. 怎样选择集群管理系统?

推荐阅读

Copyright @2011-2019 All rights reserved. 转载请添加原文连接,合作请加微信lijiaocn或者发送邮件: [email protected],备注网站合作

友情链接:  系统软件  程序语言  运营经验  水库文集  网络课程  微信网文  发现知识星球