一、 kubernetes和相关组件介绍

1、 kubernetes概述
Kubernetes是google开源的容器集群管理系统,基于docker构建一个容器的调度服务,提供资源调度、均衡容灾、服务注册、动态扩展等功能套件。基于容器的云平台
Kubernetes基于docker容器的云平台,简称k8s
openstack基于kvm的容器云平台

2、 kubernetes架构设计图

3、 kubernetees常见组件介绍
 master:kubernetes管理节点
 apiserver:提供接口服务,用户通过apiserver来管理整个容器集群平台。apiserver负责和etcd交互(其他组件不会直接操作etcd,只有apiserver这么做)。整个kubernetes集群的所有交互都是以apiserver为核心。如:1、所有对集群进行的查询和管理都要通过api来进行。2、所有模块之间并不会互相调用,而是通过和apiserver交互来完成自己的工作,apiserver提供的验证和授权保证了整个集群的安全。
 schedule:kubernetes的调度服务
 replication controllers:复制,保证pod的高可用
replication controller是kubernetes系统中最有用的功能(实现多个pod副本),往往一个应用需要多个pod来支撑,并且可以保证其复制的副本数,即使副本所调度的宿主机异常,通过replication controller可以保证在其它宿主机启动同等数量的pod,replication controller可以通过repcon模板来创建多个pod副本,同样也可以直接复制已存在pod,需要通过label selector来关联。
 minion:真正运行容器container的物理机,kubernetes中需要很多minion机器,来提供运算。
 container:容器,可以运行服务和程序
 pod:在kubernetes系统中,调度的最小颗粒不是单纯的容器,而是抽象一个个的pod。pod是一个可以被创建、销毁、调度、管理的最小部署单元。pod中可包括一个或一组容器。
 kube-proxy:代理。做端口转发,相当于LVS-NAT模式中的负载调度器。proxy解决了统一宿主机,相同服务端口冲突的问题,还提供了对外服务的能力,proxy后端使用了随机、轮询负载均衡算法。
 etcd:etcd存储kubernetes的配置信息。可以理解为k8s数据库,存储着k8s容器云平台中所有节点、pods、网络等信息
 services:services是kubernetes最外围的单元,通过虚拟一个访问IP及服务端口,可以访问我们定义好的pod资源,目前的版本是通过IPtables的nat来转发实现的。转发的目标端口为kube_proxy生成的随机端口
 label:标签。用来区分pod、service、replication controller的key/value键值对,仅使用在pod、service、replication controller之间的关系识别,但对这些单元本身进行操作时得使用name标签。
 deployment:用于更新pod和replica set。可以再deployment对象中只描述你所期望的理想状态,deployment控制器会将现在的实际状态转成期望状态。
例如:将所有的webapp:v1.0.9升级成webAPP:v1.1.0,只需要创建一个deployment,kubernetes会按照deployment自动进行升级。通过deployment可以用来创建新的资源。如pod,替换已经存在的资源等。
deployment集成了上线部署、滚动升级、创建副本、暂停上线任务、恢复上线任务、回滚到以前某个版本的deployment功能。在某种程度上deployment可以帮助我们实现无人值守的上线。
 kubelet:kubelet和kube-proxy都运行在node节点
kubelet组件管理pod和pod中容器及容器的镜像和卷信息
kube-proxy实现kubernetes网络相关内容

总结:各个组件之间的关系
 Kubernetes的架构由一个master和多个minion(node)组成,master通过api提供服务,接受kubectl的请求来调度和管理整个集群。
 replication controller定义了多个pod或者容器需要运行。如果当前集群中运行的pod或容器达不到配置数量,replication controller会调度容器在多个minion上运行,保证集群中的pod数量。
 service则定义真实对外提供服务,一个service会对应后端运行的多个container
 Kubernetes是个管理平台,minion上的proxy拥有提供真实服务公网IP。客户端访问kubernetes中提供的服务,直接访问到kube-proxy上。
 Kubernetes中pod是一个基本单元,一个pod可以提供相同功能的多个container,这些容器都会被部署在同一个minion上。minion是运行kubelet中容器的物理机。minion接受master的指令创建pod或者容器。

二、 搭建kubernetes容器集群管理系统

1、 环境说明

注:node3属于扩容节点,初期只有node1和node2两个minion

2、 配置yum源
搭建kubernetes,需要很多依赖包和插件,这里有两种方式安装:通过网络源yum安装和通过本地源yum安装

方法一:本地源yum安装
上传提前下载好的k8s相关依赖包和插件,上传到服务器,并解压缩
把k8s-package.tar.gz上传到xuegod120 系统中::
[root@xuegod120 ~]# tar zxvf k8s-package.tar.gz

创建k8s-yum源文件
[root@xuegod120 ~]# vim /etc/yum.repos.d/k8s-package.repo
[k8s-package]
name=k8s-package
baseurl=file:///root/k8s-package
enabled=1
gpgcheck=0

配置centos-yum源文件
[root@xuegod120 ~]# mount /dev/cdrom /mnt/
[root@xuegod120 ~]# vim /etc/yum.repos.d/centos7.repo
[centos7]
name=CentOS7
baseurl=file:///mnt
enable=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm
gpg/RPM GPG KEY CentOS 7
[root@xuegod120 yum.repos.d]# mv /etc/yum.repos.d/CentOS Base.repo /opt/ 删除外
网源

方法二:网络yum源安装
推荐使用阿里云的网络源,不要用官方源。直接安装kubernetes即可
[root@master-120 ~]# ll /etc/yum.repos.d/
总用量 8
-rw-r–r--. 1 root root 2523 6月 16 2018 CentOS-Base.repo
-rw-r–r--. 1 root root 664 6月 14 23:47 epel-aliyun.repo

3、 修改master和node节点主机名和hosts文件
[root@docker-120 ~]# hostnamectl set-hostname master
[root@docker-130 ~]# hostnamectl set-hostname node1
[root@docker-140 ~]# hostnamectl set-hostname node2
[root@docker-150 ~]# hostnamectl set-hostname node3
[root@docker-120 ~]# vim /etc/hosts #所有节点都需要修改
192.168.1.120 master
192.168.1.130 node1
192.168.1.140 node2
192.168.1.150 node3

4、 在master和node节点安装k8s组件
master节点安装:
[root@master ~]# yum -y install kubernetes etcd flannel ntp
注:Flannel类似于交换机硬件中的VXLAN功能,为Docker提供一种可配置的虚拟网络
 Flannel在每一台主机上运行一个 agent。
 flanneld,负责在提前配置好的地址空间中分配子网租约。Flannel使用etcd来存储网络配置。
 ntp 主要用于同步容器云平台中所有结点的时间。 云平台中结点的时间需要保持一致。
 kubernetes 中包括了服务端和客户端相关的软件包

node节点安装:
[root@node1 ~]# yum -y install kubernetes docker flannel ntp
[root@node2 ~]# yum -y install kubernetes docker flannel ntp

5、 配置etcd配置文件(master节点)
修改etcd配置文件
[root@master ~]# vim /etc/etcd/etcd.conf
[root@master ~]# grep -v ‘^#’ /etc/etcd/etcd.conf
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS=“http://localhost:2379,http://192.168.1.120:2379”
ETCD_NAME=“default”
ETCD_ADVERTISE_CLIENT_URLS=http://192.168.1.120:2379
注:
ETCD_NAME=“etcd”
etcd节点名称,如果etcd集群只有一个node,这一项可以注释不用配置,默认名称为default,这个名字后面会用到。
ETCD_DATA_DIR="-data-dir /home/data/etcd"
etcd存储数据的目录
ETCD_LISTEN_CLIENT_URLS=“http://localhost:2379,http://192.168.1.120:2379”
etcd对外服务监听地址,一般指定2379端口,如果为0.0.0.0将会监听所有接口
ETCD_ARGS=""
需要额外添加的参数,可以自己添加,etcd的所有参数可以通过etcd -h查看。
etcd通讯使用2379端口

启动etcd服务,并设置开机启动
[root@master kubernetes]# systemctl start etcd
[root@master kubernetes]# systemctl enable etcd

查看etcd是否启动
[root@master kubernetes]# netstat -antup | grep 2379
tcp 0 0 127.0.0.1:2379 0.0.0.0:* LISTEN 12557/etcd
tcp 0 0 192.168.1.120:2379 0.0.0.0:* LISTEN 12557/etcd

查看etcd fluster状态
[root@master ~]# etcdctl cluster-health
member 8e9e05c52164694d is healthy: got healthy result from http://192.168.1.120:2379
cluster is healthy

查看成员集群列表
[root@master ~]# etcdctl member list
8e9e05c52164694d: name=default peerURLs=http://localhost:2380 clientURLs=http://192.168.1.120:2379 isLeader=true

6、 配置master相关配置文件(master节点)
[root@master ~]# cd /etc/kubernetes/
[root@master kubernetes]# ll
总用量 24
-rw-r–r-- 1 root root 767 7月 3 2017 apiserver
-rw-r–r-- 1 root root 655 7月 3 2017 config
-rw-r–r-- 1 root root 189 7月 3 2017 controller-manager
-rw-r–r-- 1 root root 615 7月 3 2017 kubelet
-rw-r–r-- 1 root root 103 7月 3 2017 proxy
-rw-r–r-- 1 root root 111 7月 3 2017 scheduler
注:master节点上运行的组件有:etcd服务(已配置)、apiserver、flannel、schedule、kubelet、config、controller-manager。

先配置config
[root@master kubernetes]# vim config
[root@master kubernetes]# grep -v ‘^#’ config
KUBE_LOGTOSTDERR="–logtostderr=true"
KUBE_LOG_LEVEL="–v=0"
KUBE_ALLOW_PRIV="–allow-privileged=false"
KUBE_MASTER="–master=http://192.168.1.120:8080"
注:
KUBE_LOGTOSTDERR="–logtostderr=true" #表示错误日志记录到文件还是输出到stderr。
KUBE_LOG_LEVEL="–v=0" ##日志等级。
KUBE_ALLOW_PRIV="–allow_privileged=false" #允许运行特权容器。false表示不允许特权容器

配置apiserver
[root@master kubernetes]# vim apiserver
[root@master kubernetes]# grep -v ‘^#’ apiserver
KUBE_API_ADDRESS="–insecure-bind-address=0.0.0.0"
KUBE_ETCD_SERVERS="–etcd-servers=http://192.168.1.120:2379"
KUBE_SERVICE_ADDRESSES="–service-cluster-ip-range=10.254.0.0/16"
KUBE_ADMISSION_CONTROL="–admission-control=AlwaysAdmit"
KUBE_API_ARGS=""
注:
KUBE_API_ADDRESS="–insecure-bind-address=0.0.0.0"
监听的接口,如果配置为127.0.0.1则只监听localhost,配置为0.0.0.0会监听所有接口,这里配置为0.0.0.0。
KUBE_ETCD_SERVERS="–etcd-servers=http://192.168.1.63:2379"
etcd服务地址,前面已经启动了etcd服务
KUBE_SERVICE_ADDRESSES="–service-cluster-ip-range=10.254.0.0/16"
kubernetes可以分配的ip的范围,kubernetes启动的每一个pod以及serveice都会分配一个ip地址,将从这个范围分配。
admission-control(准入控制) 概述:admission controller本质上一段代码,在对kubernetes api的请求过程中,顺序为先经过认证&授权,执行准入操作,在对目标对象迚行操作。
常见apiserver参数:
–admission-control 准入控制 AlwaysAdmit #不做限制,允许所有结点访问apiserver ,对所有请求开绿灯。

配置kube-controller-manager
[root@master kubernetes]# vim controller-manager
[root@master kubernetes]# grep -v ‘^#’ controller-manager
KUBE_CONTROLLER_MANAGER_ARGS=""
主:默认不需要修改即可

配置schedule
[root@master kubernetes]# grep -v ‘^#’ scheduler
KUBE_SCHEDULER_ARGS=""
主:默认不需要修改即可

配置flannel,指定容器云中docker容器的IP网段
[root@master kubernetes]# vim /etc/sysconfig/flanneld
[root@master kubernetes]# grep -v ‘^#’ /etc/sysconfig/flanneld
FLANNEL_ETCD_ENDPOINTS=“http://192.168.1.120:2379”
FLANNEL_ETCD_PREFIX="/k8s/network"
FLANNEL_OPTIONS="–iface=ens33"
注:这里修改flannel配置文件后,如果重启服务会卡在重启界面,没有影响。执行如下命令即可启动服务。
[root@master kubernetes]# etcdctl set /k8s/network/config ‘{“Network”:“10.255.0.0/16”}’ [root@master kubernetes]# etcdctl get /k8s/network/config ‘{“Network”:“10.255.0.0/16”}’
{“Network”:“10.255.0.0./16”}

6、启动master上的服务,设置开机启动
[root@master kubernetes]# systemctl start kube-apiserver.service kube-scheduler.service kube-controller-manager.service flanneld
[root@master kubernetes]# systemctl enable kube-apiserver.service kube-scheduler.service kube-controller-manager.service flanneld
[root@master kubernetes]# systemctl status kube-apiserver.service kube-scheduler.service kube-controller-manager.service flannel

7、 配置node1节点服务
注:minion上需要配置:kube-proxy、flannel、kubelet、config
配置flannel
[root@node1 ~]# egrep -v “#|$” /etc/sysconfig/flanneld
FLANNEL_ETCD_ENDPOINTS=“http://192.168.1.120:2379”
FLANNEL_ETCD_PREFIX="/k8s/network"
FLANNEL_OPTIONS="–iface=ens33"

配置kube-proxy
[root@node1 kubernetes]# vim proxy
注:默认不需要修改配置,主要是负责service的实现。实现内部从pod到servie

配置config
[root@node1 kubernetes]# vim config
[root@node1 kubernetes]# egrep -v ‘#|$’ config
KUBE_LOGTOSTDERR="–logtostderr=true"
KUBE_LOG_LEVEL="–v=0"
KUBE_ALLOW_PRIV="–allow-privileged=false"
KUBE_MASTER="–master=http://192.168.1.120:8080"

配置kubelet
[root@node1 kubernetes]# egrep -v ‘#|$’ kubelet
KUBELET_ADDRESS="–address=0.0.0.0"
KUBELET_HOSTNAME="–hostname-override=node1"
KUBELET_API_SERVER="–api-servers=http://192.168.1.120:8080"
KUBELET_POD_INFRA_CONTAINER="–pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
KUBELET_ARGS=""
注:KUBELET_POD_INFRA_CONTAINER 指定pod基础容器镜像地址。这个是一个基础容器,每一个Pod启动的时候都会启动一个这样的容器。如果你的本地没有这个镜像,kubelet会连接外网把这个镜像下载下来。最开始的时候是在Google的registry上,因此国内因为GFW都下载不了导致Pod运行不起来。现在每个版本的Kubernetes都把这个镜像打包,你可以提前传到自己的registry上,然后再用这个参数指定。

启动node1服务
[root@node1 kubernetes]# systemctl start flanneld.service kube-proxy.service kubelet.service docker
[root@node1 kubernetes]# systemctl enable flanneld.service kube-proxy.service kubelet.service docker

排错1:
如果启动flannel失败,查看log日志,提示如下:
failed to retrieve network config: client: etcd cluster is unavailable or misconfigured; error #0: dial tcp 192.168.1.120:2379: i/o timeout
原因:node1节点到etcd集群通过192.168.1.120:2379不通
解决方法:查看master节点的iptables防火墙是否没有关闭或有策略限制
[root@master ~]# iptables -F
[root@master ~]# iptables -L -n
再次启动flannel即可

查看node1的网络信息

这里的地址就是通过master的如下文件进行分配和管控的

8、 配置node2
配置内容和node1相同,也可以直接通过scp命令将相关配置文件拷贝到node2上,重启服务即可
[root@node1 ~]# scp /etc/sysconfig/flanneld root@node2:/etc/sysconfig/
[root@node1 ~]# scp /etc/kubernetes/proxy root@node2:/etc/kubernetes/
[root@node1 ~]# scp /etc/kubernetes/config root@node2:/etc/kubernetes/
[root@node1 ~]# scp /etc/kubernetes/kubelet root@node2:/etc/kubernetes/
注:拷贝的kubelet文件,需要修改hostname为node2,。

启动服务,设置开机启动
[root@node2 ~]# systemctl start flanneld.service kubelet kube-proxy.service docker
[root@node2 ~]# systemctl enable flanneld.service kubelet kube-proxy.service docker

查看IP地址

9、 在master上查看node的信息

三、 将node3节点扩容到kubernetes集群管理平台中

1、 基础环境搭建
修改主机名、修改hosts文件、使用yum安装kubernetes组件

2、 配置kubernetes相关配合文件
这里可不用配置,和node2节点一样,直接scp拷贝即可,需要修改kubelet文件的hostname
[root@node1 ~]# scp /etc/sysconfig/flanneld root@node3:/etc/sysconfig/
[root@node1 ~]# scp /etc/kubernetes/proxy root@node3:/etc/kubernetes/
[root@node1 ~]# scp /etc/kubernetes/config root@node3:/etc/kubernetes/
[root@node1 ~]# scp /etc/kubernetes/kubelet root@node3:/etc/kubernetes/

3、 启动服务,设置开机启动
[root@node3 ~]# systemctl start flanneld.service kubelet.service kube-proxy.service docker
[root@node3 ~]# systemctl enable flanneld.service kubelet.service kube-proxy.service docker
或者使用for循环来启动和设置开机启动
for SERVICES in flanneld kube-proxy kubelet docker ; do
systemctl restart $SERVICES
systemctl enable $SERVICES
systemctl status $SERVICES
done

四、 总结

1、 本实验中kubernetes集群4个节点,一个master+3个node。一共需要启动17个服务,6个端口号。
2、 master启动服务和端口
因为master和etcd是放在一起,所以master总共启动服务是5个,分别如下:
etcd、flanneld、kube-apiser、kube-schedule、kube-controller
master节点启动端口如下:
etcd服务使用的2379端口
master服务使用的8080端口

3、 node启动服务和端口
启动服务如下:
flanneld、kubelet、kube-proxy、docker

启动端口如下:
kubelet监听端口:10248/10250/10255
kubeproxy监听端口:10249

三台node所以总计12个服务

搭建kubernetes集群管理平台相关推荐

  1. Kubernetes 学习总结(19)—— Kubernetes 集群管理平台如何选择?Rancher vs KubeSphere

    前言 Kubernetes(K8s)集群管理平台都是基于 Kubernetes 提供功能,可以说他们是在 K8s 的基础上封装了一层更为友好的操作方式.他们都是为了降低 k8s 集群运维复杂度,降低运 ...

  2. 基于Python+Django的Kubernetes集群管理平台

    时至今日,接触kubernetes也有一段时间了,而我们的大部分业务也已经稳定地运行在不同规模的kubernetes集群上,不得不说,无论是从应用部署.迭代,还是从资源调度管理等方面都有其难以言喻的优 ...

  3. Kubernetes入门--搭建Kubernetes集群,并启动容器服务

    英文原作者:Ben Cane  翻译作者:Miazzy 翻译&转载:https://blog.codeship.com/getting-started-with-kubernetes/ Kub ...

  4. 360开源k8s集群管理平台:wayne的使用与介绍

    公司私有化部署的调研继续进行,之前已经完成了一个服务的k8s部署(一个Python服务Dokcer化并k8s布署实例)和搭建了自己的私有仓库(harbor搭建与使用).这篇文章来介绍一个 k8s 集群 ...

  5. 容器集群管理平台的比较

    2019独角兽企业重金招聘Python工程师标准>>> 容器化和微服务是当前最热话题,不久之前,笔者(据说因为现在都不用笔了,"笔者"的称谓已经不合适了,因为输入 ...

  6. Centos7搭建Kubernetes集群

    @Author:By Runsen Kubernetes Kubernetes 及其整个生态系统(工具.模块.插件等)均使用 Go 语言编写,从而构成一套面向 API.可高速运行的程序集合,这些程序文 ...

  7. 美团点评Kubernetes集群管理实践

    背景 作为国内领先的生活服务平台,美团点评很多业务都具有非常显著.规律的"高峰"和"低谷"特征.尤其遇到节假日或促销活动,流量还会在短时间内出现爆发式的增长.这 ...

  8. k8s学习(2)- 虚拟机搭建搭建Kubernetes集群(1.24.2)

    虚拟机搭建搭建Kubernetes集群 环境 规划 虚拟机搭建 配置网络 解决和主机复制粘贴的问题 使用MobaXterm连接虚拟机 安装vmware tools(建议使用MobaXterm) 配置y ...

  9. 中国移动一级业务支撑系统多Kubernetes集群PaaS平台实践经验分享

    背景 中国移动一级业务支撑系统是整个中国移动的集中管理和一点对外的门户,包括网状网.BBOSS.一级营销.内容计费.一级客服.VGOP.电渠等多个业务支撑系统,各系统呈烟囱化建设.在小型机时代由于主机 ...

最新文章

  1. 开源项目OpenGene发起人:用“互联网+基因技术”改变肿瘤的诊断与治疗
  2. (转)网站推广优化教程100条(SEO,网站关键字优化,怎么优化网站,如何优化网站关键字)...
  3. 电脑显卡接口类型:VGA、HDMI、DP
  4. javaScript调用函数失败
  5. Apache 的 httpd.conf 详解(很实用)
  6. Sql Update Alter Rename
  7. linux c 开发
  8. python基于神经机器翻译技术的翻译网站实现
  9. python分布式 集群_python分布式框架rq的使用
  10. android os x86下载,Android-x86 Lineage OS 14.1-r3下载(2019/10/23官方更新版)
  11. Mutli-SG游戏 ——学习笔记
  12. MySQL的学习笔记(超详细超完整)
  13. 以前端角度出发做好SEO需要考虑什么?
  14. 高中信息技术python及答案_高中信息技术《Python语言》模块试卷 -
  15. 【最详细的Hexo教程,没有之一】03 - Github + Coding 部署Hexo站点
  16. Windows 事件日志分析管理
  17. Codeforces847K Travel Cards
  18. echarts横向滚动_ECharts滑动条型数据区域缩放组件(dataZoomSlider)
  19. A链接点击下载不跳转页面
  20. 问题 E: 极地探险家1982

热门文章

  1. python运行时关闭硬件信息-Python实现的读取电脑硬件信息功能示例
  2. 新款 MacBook Pro 评测:更好的性能、免费的刘海和更好的显示器
  3. 拒绝凌乱桌面 Type-C接口显示器的魅力,乐得瑞LDR6282 USB-C桌面显示器方案帮你实现
  4. webpack css中字体文件路径问题
  5. Centos7.6下构建虚拟主机实验(基于域名、端口及IP地址)
  6. layui中如何让多个控件在一行显示
  7. 3D建模中的BIP骨骼镜像对称画是什么东西?
  8. TEACH_NLP——开篇
  9. 面向对象编程思想 以及类与对象
  10. 【人脸识别】基于PCA和SVM的人脸识别关键技术研究与实现附matlab代码