搭建Kubernetes容器集群管理系统
1、Kubernetes 概述
Kubernetes 是 Google 开源的容器集群管理系统,基于 Docker 构建一个容器的调度服务,提供资源调度、均衡容灾、服务注册、劢态扩缩容等功能套件。 基于容器的云平台
Kubernetes 基于 docker 容器的云平台,简写成: k8s 。
openstack 基于 kvm 虚拟机云平台
官网:https://kubernetes.io/
Kubernetes 的架构设计图:
2、Kubernetes 常见组件介绍
1、master: kubernetes 管理结点
2、apiserver : 提供接口服务,用户通过 apiserver 来管理整个容器集群平台。API Server 负责和 etcd 交互(其他组件丌会直接操作 etcd,只有 API Server 这么做),整个 kubernetes 集群的所有的交互都是以 API Server 为核心的。
如:A、所有对集群迚行的查询和管理都要通过 API 来进行 2、所有模块之间并不会互相调用,而是通过和 API Server 打交道来完成自己那部分的工作 、API Server提供的验证和授权保证了整个集群的安全
3、scheduler kubernetes:调度服务
4、Replication Controllers:复制,保证 pod 的高可用。
Replication Controller 是 Kubernetes 系统中最有用的功能,实现复制多个 Pod 副本,往往一个应用需要多个 Pod 来支撑,并且可以保证其复制的副本数,即使副本所调度分配的宿主机出现异常,通过 Replication Controller 可以保证在其它宿主机吭用同等数量的 Pod。Replication Controller 可以通过 repcon 模板来创建多个 Pod 副本,同样也可以直接复制已存在 Pod,需要通过 Label selector 来
关联。
接下介绍,从下往上说,从你最熟悉的知识开始
5、minion : 真正运行容器 container 的物理机。 kubernets 中需要很多 minion 机器,来提供运算。
6、container : 容器 ,可以运行服务和程序
7、Pod :在 Kubernetes 系统中,调度的最小颗粒丌是单纯的容器,而是抽象成一个 Pod,Pod是一个可以被创建、销毁、调度、管理的最小的部署单元。pod 中可以包括一个戒一组容器。
8、Kube_proxy 代理 做端口转发,相当于 LVS-NAT 模式中的负载调度器器
Proxy 解决了同一宿主机,相同服务端口冲突的问题,还提供了对外服务的能力,Proxy 后端使用了随机、轮循负载均衡算法。
8、etcd etcd 存储 kubernetes 的配置信息,可以理解为是 k8s 的数据库,存储着 k8s 容器云平台中所有节点、pods、网络等信息。
互动: linux 系统中/etc 目录作用什么,存配置文件。 所以 etcd(daemon)是一个存储配置文件的后台服务。
接下几个名词不在图片中
9、Services : Services 是 Kubernetes 最外围的单元,通过虚拟一个访问 IP 及服务端口,可以访问我们定义好的 Pod 资源,目前的版本是通过 iptables 的 nat 转发来实现,转发的目标端口为Kube_proxy 生成的随机端口。
10、Labels 标签
Labels 是用于区分 Pod、Service、Replication Controller 的 key/value 键值对,仅使用在Pod、Service、 Replication Controller 之间的关系识别,但对这些单元本身迚行操作时得使用 name标签。
11、Deployment Deployment [dɪ ɪ'pl ɔɪmə ənt] 部署
Kubernetes Deployment 用于更新 Pod 和 Replica Set(下一代的 Replication Controller)的方法,你可以在 Deployment 对象中只描述你所期望的理想状态(预期的运行状态),Deployment 控制器会将现在的实际状态转换成期望的状态。例如,将所有的 webapp:v1.0.9 升级成 webapp:v1.1.0,只需创建一个 Deployment,Kubernetes 会按照 Deployment 自劢迚行升级。通过 Deployment 可以用来创建新的资源。如:pod,替换已经存在的资源等。
Deployment 可以帮我们实现无人值守的上线,大大降低我们的上线过程的复杂沟通、操作风险。
12、Kubelet : Kubelet 和 Kube-proxy 都运行在 minion 节点上。
Kube-proxy 实现 Kubernetes 网络相关内容。
Kubelet 组件管理 Pod、Pod 中容器及容器的镜像和卷等信息。
总结: 总结各组件之间的关系
1、Kubernetes的架构由一个master和多个minion组成,master通过api提供服务,接受kubectl的请求来调度管理整个集群。 kubectl: 是 k8s 平台的一个管理命令。
2、Replication controller 定义了多个 pod 戒者容器需要运行,如果当前集群中运行的 pod 或容器达不到配置的数量,replication controller 会调度容器在多个 minion 上运行,保证集群中的 pod 数量。
3、service 则定义真实对外提供的服务,一个 service 会对应后端运行的多个 container。
4、Kubernetes 是个管理平台,minion 上的 proxy 拥有提供真实服务公网 IP。客户端访问kubernetes 中提供的服务,是直接访问到 kube-proxy 上的。
5、在 Kubernetes 中 pod 是一个基本单元,一个 pod 可以是提供相同功能的多个 container,这些容器会被部署在同一个 minion 上。minion 是运行 Kubelet 中容器的物理机。minion 接受 master的指令创建 pod 或者容器。
3、搭建 Kubernetes 容器集群管理系统
1.平台版本说明:
节点角色 IP 地址 CPU 内存
master 192.168.10.71 4 核 1GB
node1(minion1) 192.168.10.72 4 核 1GB
node2(minion2) 192.168.10.73 4 核 1GB
etcd 192.168.10.74 4 核 1GB
注: 正常需要 4 台机器,如果你内存不够,master 和 etcd 可以运行在同一台机器上。
2.系统的配置(所有机器)
关闭selinux
# 临时关闭
$ setenforce 0
# 永久关闭
$ vim /etc/selinux/config
SELINUX=disabled
关闭且禁用防火墙
$ systemctl stop firewalld
$ systemctl disable firewalld
修改hostname
vi /ect/hostname # 四台机器分别修改为
master
node1
node2
etcd
修改hosts文件
$ vim /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.10.71 master
192.168.10.72 node1
192.168.10.73 node2
192.168.10.74 etcd
更新yum
$ yum update -y
安装相关组件
$ yum install -y etcd kubernetes ntp flannel
3.etcd服务器
# 修改配置文件
$ vim /etc/etcd/etcd.conf
ETCD_NAME=default
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS="http://localhost:2379,http://192.168.10.74:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.10.74:2379" # 启动服务
$ systemctl start etcd
$ systemctl enable etcd #检查etcd cluster状态
$ etcdctl cluster-health
member 8e9e05c52164694d is healthy: got healthy result from http://192.168.10.74:2379
cluster is healthy # 设置一个key,下面会用到
etcdctl set /k8s/network/config '{"Network": "10.255.0.0/16"}'
4.master服务器
# 配置kube-apiserver配置文件 $ vim /etc/kubernetes/config
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=false"
KUBE_MASTER="--master=http://192.168.10.71:8080" $ vim /etc/kubernetes/apiserver
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.10.74:2379"
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
KUBE_ADMISSION_CONTROL="--admission-control=AlwaysAdmit"
KUBE_API_ARGS="" #配置kube-scheduler配置文件,此处可以不需要配置
vim /etc/kubernetes/scheduler
KUBE_SCHEDULER_ARGS="--address=0.0.0.0" # 启动服务
systemctl start kube-apiserver kube-controller-manager kube-scheduler
systemctl enable kube-apiserver kube-controller-manager kube-scheduler
systemctl status kube-apiserver kube-controller-manager kube-scheduler
5.node1节点
# 配置node1网络
$ vim /etc/sysconfig/flanneld
FLANNEL_ETCD_ENDPOINTS="http://192.168.10.74:2379"
FLANNEL_ETCD_PREFIX="/k8s/network"
FLANNEL_OPTIONS="--iface=ens33" # ens是当前可用上网的网卡名称,此处是多个网卡时需要指定,不然不需要指定 # 配置node1 kube-proxy
$ vim /etc/kubernetes/config
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=false"
KUBE_MASTER="--master=http://192.168.10.71:8080" # 配置node1 kubelet
$ vim /etc/kubernetes/kubelet
KUBELET_ADDRESS="--address=127.0.0.1"
KUBELET_HOSTNAME="--hostname-override=node1"
KUBELET_API_SERVER="--api-servers=http://192.168.10.71:8080"
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
KUBELET_ARGS="" # 启动node1服务
systemctl start flanneld kube-proxy kubelet
systemctl enable flanneld kube-proxy kubelet
systemctl status flanneld kube-proxy kubelet
6.node2节点
# 配置node2网络
$ vim /etc/sysconfig/flanneld
FLANNEL_ETCD_ENDPOINTS="http://192.168.10.74:2379"
FLANNEL_ETCD_PREFIX="/k8s/network"
FLANNEL_OPTIONS="--iface=ens33" # ens是当前可用上网的网卡名称,此处是多个网卡时需要指定,不然不需要指定 # 配置node2 kube-proxy
$ vim /etc/kubernetes/config
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=false"
KUBE_MASTER="--master=http://192.168.10.71:8080" # 配置node2 kubelet
$ vim /etc/kubernetes/kubelet
KUBELET_ADDRESS="--address=127.0.0.1"
KUBELET_HOSTNAME="--hostname-override=node1"
KUBELET_API_SERVER="--api-servers=http://192.168.10.71:8080"
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
KUBELET_ARGS="" # 启动node1服务
systemctl start flanneld kube-proxy kubelet
systemctl enable flanneld kube-proxy kubelet
systemctl status flanneld kube-proxy kubelet
7.测试
[root@xuegod71 ~]# kubectl get nodes
NAME STATUS AGE
node1 Ready 19s
node2 Ready 18s
详细可以参考:https://www.cnblogs.com/byron0918/p/8728876.html
搭建Kubernetes容器集群管理系统的更多相关文章
- 10分钟搭建Kubernetes容器集群平台【转】
官方提供3种方式部署Kubernetes minikube Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernetes或日常开发的用户使用.不能用于生产环境 ...
- 10分钟搭建Kubernetes容器集群平台(kubeadm)
官方提供Kubernetes部署3种方式 minikube Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernetes或日常开发的用户使用.不能用于生产环境 ...
- (转帖)开源容器集群管理系统Kubernetes架构及组件介绍
最近在搞Docker还有她的管理工具,选型Kuberetes后,被她的术语和概念搞得晕头转向...看了一篇文章还不错,放到这里分享出来. 地址:http://www.linuxidc.com/Linu ...
- Kubernetes容器集群管理环境 - 完整部署(上篇)
Kubernetes(通常称为"K8S")是Google开源的容器集群管理系统.其设计目标是在主机集群之间提供一个能够自动化部署.可拓展.应用容器可运营的平台.Kubernetes ...
- Kubernetes——容器集群
kuberneteskubernetes(k8s)是google的容器集群管理系统,在docker的基础之上,为容器化的应用提供部署运行.资源调度.服务发现和动态伸缩等一系列完整的功能,提高了大规模容 ...
- Kubernetes容器集群管理环境 - Prometheus监控篇
一.Prometheus介绍之前已经详细介绍了Kubernetes集群部署篇,今天这里重点说下Kubernetes监控方案-Prometheus+Grafana.Prometheus(普罗米修斯)是一 ...
- Kubernetes容器集群管理环境 - 完整部署(中篇)
接着Kubernetes容器集群管理环境 - 完整部署(上篇)继续往下部署: 八.部署master节点master节点的kube-apiserver.kube-scheduler 和 kube-con ...
- Kubernetes容器集群管理环境 - 完整部署(下篇)
在前一篇文章中详细介绍了Kubernetes容器集群管理环境 - 完整部署(中篇),这里继续记录下Kubernetes集群插件等部署过程: 十一.Kubernetes集群插件 插件是Kubernete ...
- PC(win10)上搭建 kubernetes + docker 集群环境
最近kubernetes很火,加上我又在寻找适合快速搭建测试环境的方法,kubernetes的理念很适合用于测试环境的搭建. 因此在学习的过程中写下此教程(记录)以供回顾. 0x00 环境准备 0x0 ...
随机推荐
- python基础:流程控制案例:
1,简述编译型与解释型的语言,且分别列出你知道的哪些语言属于编译型,哪些属于解释型. 答:简单理解编译型语言类似谷歌翻译,整篇读入整篇翻译,代表语言有C语言,解释型语言类似同 声传译,读入一行翻译 ...
- 4'.deploy.prototxt
1: 神经网络中,我们通过最小化神经网络来训练网络,所以在训练时最后一层是损失函数层(LOSS), 在测试时我们通过准确率来评价该网络的优劣,因此最后一层是准确率层(ACCURACY). 但是当我们真 ...
- docker 查看系统进程pid
docker inspect -f '{{.State.Pid}} {{.Id}}' $(docker ps -a -q)
- spring boot2X代码混淆
为了防止代码很容易被反编译而造成泄露,所以打包时进行代码混淆 使用 proguard-maven-plugin插件 <build> <finalName>${artifactI ...
- BFS和DFS
1.图的两种遍历方式 图的遍历通常有两种方式,即深度优先搜索(Depth First Search)和广度优先搜索(Breadth First Search).前者类似于树的先序遍历,而后者类似于树的 ...
- UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd0 in position 140: invalid continuation byte
web阅片系统,遇到dicom文件在文件夹不能正常读取的问题.解决方法如下: def rep7(request): file_path = os.path.dirname(__file__) + re ...
- 牛客练习赛3 F - 监视任务——贪心&&树状数组
题目 链接 $Reki$ 在课余会接受一些民间的鹰眼类委托,即远距离的狙击监视防卫..$Reki$ 一共接收到$m$份委托,这些委托与 $n$ 个直线排布的监视点相关.第 $i$ 份委托的内容为:对于 ...
- 【细谈Java并发】谈谈LinkedBlockingQueue(转)
最近在看concurrent包的知识,看到LinkedBlockingQueue,发现一篇好文推荐给大家.原文地址:[细谈Java并发]谈谈LinkedBlockingQueue 1.简介 上篇我们介 ...
- 队列BlockingQueue的简单例子
队列,当进行多线程编程的时候,很多时候可能会用到,队列是先进先出的,我们可以将要执行的任务放置在队列内缓存起来,当线程池中线程可以使用的时候,我们就从队列中获取一个任务执行.. 当前是一个队列的简单例 ...
- vue中使用v-chart改变柱状图颜色以及X轴Y轴的文字颜色和大小以及标题
1.html部分 <ve-histogram :tooltip-visible="true" :x-axis="xAxis" :y-axis=" ...