K8S集群搭建——基于CentOS 7系统
环境准备
集群数量此次使用3台CentOS 7系列机器,分别为7.3,7.4,7.5
节点名称 节点IP
master 192.168.0.100
node1 192.168.0.101
node2 192.168.0.102
主要事项
1、master节点安装配置etcd服务,作为k8s集群主数据库,保存所有资源的信息
2、所有节点安装配置k8s服务,针对master和node分别配置各项服务
3、所有节点安装配置flannel服务,用于跨主机容器间通信
前提
关闭防火墙,否则节点间无法通信,使用以下命令关闭防火墙和禁止开机启动。
systemctl stop firewalld.service
systemctl disable firewalld.service
master节点安装配置etcd
安装采用yum方式,并且只是安装单机的etcd服务,如果考虑高可用需要部署etcd集群。
yum install -y etcd
安装完成后,/etc/etcd/etcd.conf配置文件作如下配置,
ETCD_NAME="master"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.0.100:2379"
其中,
ETCD_NAME:节点名称
ETCD_DATA_DIR:数据存储目录
ETCD_LISTEN_CLIENT_URLS:与客户端(etcdctl、curl)通信时的监听地址列表
ETCD_ADVERTISE_CLIENT_URLS:对外公告的该节点客户端监听地址
配置完启动etcd服务,并配置开机启动,
systemctl start etcd
systemctl enable etcd
查看etcd健康状态,确定etcd服务状态正常,
[root@master~]# etcdctl cluster-health
member 8e9e05c52164694d is healthy: got healthy result from http://192.168.0.100:2379
cluster is healthy
所有节点安装配置K8S
1、master节点
在master节点机器上安装k8s,同样使用yum方式,
yum install -y kubernetes
在k8s master节点上需要运行以下组件:
Kubernetes API Server:提供http restful接口服务,也是集群控制入口
Kubernetes Controller Manager:资源对象控制中心
Kubernetes Scheduler:负责pod的调度
配置kube-apiserver服务,修改/etc/kubernetes/apiserver文件如下:
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
KUBE_API_PORT="--port=8080"
KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.0.100:2379"
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"
KUBE_API_ARGS=""
其中,
KUBE_API_ADDRESS:配置apiserver服务绑定的不安全ip
KUBE_API_PORT:配置apiserver服务端口,默认情况下,8080用于接收http请求,6443用于接收https请求
KUBE_ETCD_SERVERS:配置etcd服务ip
KUBE_SERVICE_ADDRESSES:配置集群使用的虚拟IP池
KUBE_ADMISSION_CONTROL:配置RESTFUL API 准入选项
修改/etc/kubernetes/config文件如下:
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=false"
KUBE_MASTER="--master=http://192.168.0.100:8080"
其中,
KUBE_LOGTOSTDERR:设置日志输出
KUBE_LOG_LEVEL:设置日志级别
KUBE_ALLOW_PRIV:设置是否允许特权
KUBE_MASTER:设置master节点apiserver地址
除了KUBE_MASTER需要配置,其余均保持默认设置即可。
对于kube-controller-manager和kube-scheduler两个服务,无需其他配置,按照系统默认参数即可。
设置kube-apiserver、kube-controller-manager和kube-scheduler服务开启启动,并启动服务,
systemctl enable kube-apiserver kube-controller-manager kube-scheduler
systemctl start kube-apiserver kube-controller-manager kube-scheduler
2、node节点
在node节点机器上安装k8s,仍然使用yum方式,
yum install -y kubernetes
对于node节点,需要运行以下组件
kubelet:负责pod上容器的创建、启停,并与master节点共同实现集群管理
kube-proxy:实现服务的通信和负载均衡
上面我们提到,node也需要安装kubernetes,因此我们直接开始配置。
配置kubelet,修改/etc/kubernetes/kubelet文件如下:
KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_HOSTNAME="--hostname-override=192.168.52.145"
KUBELET_API_SERVER="--api-servers=http://192.168.52.136:8080"
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
KUBELET_ARGS=""
其中,
KUBELET_ADDRESS:设置kubelet绑定ip
KUBELET_HOSTNAME:设置当前节点的hostname,记得不要重复了
KUBELET_API_SERVER:设置master上apiserver的ip地址
KUBELET_POD_INFRA_CONTAINER:设置基础镜像拉取地址,如果访问不了换个国内的地址
修改/etc/kubernetes/config文件如下:
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=false"
KUBE_MASTER="--master=http://192.168.0.100:8080"
该配置和master节点上相同。
kube-proxy服务无需其他配置。
启动kubelet、kube-proxy服务,并设置为开启动,
systemctl start kubelet kube-proxy
systemctl enable kubelet kube-proxy
同样的操作在另一个节点配置。如果节多,可以考虑使用ansible批量部署。
部署完node节点,我们就能在master上查看节点信息了。
[root@master ~]# kubectl get node
NAME STATUS AGE
192.168.0.101 Ready 11s
192.168.0.102 Ready 8s
所有节点安装配置flannel
flannel的安装是为了解决跨主机容器间的通信。
1、在master和node节点上执行以下操作
安装flannel
yum install -y flannel
修改配置文件/etc/sysconfig/flanneld如下,
FLANNEL_ETCD_ENDPOINTS="http://192.168.0.100:2379"
FLANNEL_ETCD_PREFIX="/flannel/network"
其中,
FLANNEL_ETCD_ENDPOINTS:设置etcd的访问URL
FLANNEL_ETCD_PREFIX:设置etcd变量前缀
2、在master节点上添加网络
master上配置有etcd服务,因此我们使用etcdctl命令设置该集群的网络信息。
etcdctl set /flannel/network/config '{"Network":"10.8.0.0/16"}'
其中,/flannel/network/和上面的FLANNEL_ETCD_PREFIX对应。
3、重启master和node节点上各个服务
由于flannel会将docker0覆盖,因此需要重启docker服务。
对于master,
systemctl restart docker kube-apiserver kube-controller-manager kube-scheduler
对于node,
systemctl restart kube-proxy kubelet docker
4、所有节点启动flannel服务,并设置开启启动
systemctl restart flanneld
systemctl enable flanneld
启动后就能看到节点上的flannel网络,并且该网络正是我们配置的ip范围。
master节点上flannel信息,
[root@master ~]# ifconfig flannel0
flannel0: flags=<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu
inet 10.8.71.0 netmask 255.255.0.0 destination 10.8.71.0
inet6 fe80::186f::a84e:d447 prefixlen scopeid 0x20<link>
unspec --------------- txqueuelen (UNSPEC)
RX packets bytes (0.0 B)
RX errors dropped overruns frame
TX packets bytes (144.0 B)
TX errors dropped overruns carrier collisions
node1节点上flannel信息,
[root@node1 ~]# ifconfig flannel0
flannel0: flags=<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu
inet 10.8.21.0 netmask 255.255.0.0 destination 10.8.21.0
inet6 fe80:::702b:ee1a:db51 prefixlen scopeid 0x20<link>
unspec --------------- txqueuelen (UNSPEC)
RX packets bytes (0.0 B)
RX errors dropped overruns frame
TX packets bytes (144.0 B)
TX errors dropped overruns carrier collisions
总结
其实到这,k8s的集群就搭建完了,但这只是最简单的一个集群,并没有考虑集群的高可用。
因此,实际的集群还需要以下操作:
针对etcd进行集群化,保证高可用
针对master节点进行扩充,避免单点故障
————————————————
版权声明:本文为CSDN博主「Blue summer」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u010039418/article/details/90235873
K8S集群搭建——基于CentOS 7系统的更多相关文章
- K8S集群搭建
K8S集群搭建 摘要 是借鉴网上的几篇文章加上自己的理解整理得到的结果,去掉了一些文章中比较冗余的组件和操作,力争做到部署简单化. K8S组件说明 Kubernetes包含两种节点角色:master节 ...
- k8s集群搭建(三)
Dashboard安装 Kubernetes Dashboard是k8s提供基于Web的监控和操作界面,可以通过UI来显示集群的所有工作负载,除了查看资源,还是创建.编辑.更新.删除资源. 根据Kub ...
- 冰河教你一次性成功安装K8S集群(基于一主两从模式)
写在前面 研究K8S有一段时间了,最开始学习K8S时,根据网上的教程安装K8S环境总是报错.所以,我就改变了学习策略,先不搞环境搭建了.先通过官网学习了K8S的整体架构,底层原理,又硬啃了一遍K8S源 ...
- k8s集群搭建(一)
k8s简介 kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写.是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简 ...
- 高可用k8s集群搭建
虚拟机选择 Win10 Hyper-V 总体架构 三个master,三个node master的组件 etcd kube-apiserver kube-controller-manager kube- ...
- Kubernetes 系列(一):本地k8s集群搭建
我们需要做以下工作: (1)安装VMware,运行CentOs系统,一个做master,一个做node. (2)安装K8s. (3)安装docker和部分镜像会需要访问外网,所以你需要做些网络方面的准 ...
- k8s集群搭建过程详解
准备工作 安装CentOS7虚拟机 略 安装Docker 略 关闭CentOS7自带的防火墙服务 systemctl disable firewalld systemctl stop firewall ...
- k8s集群搭建 2019
参考,https://github.com/qxl1231/2019-k8s-centos 事实上k8s集群的搭建很简单,笔者在搭建的过程中遇到的主要问题是镜像无法下载的问题. 如果发现教程中提供的镜 ...
- k8s集群搭建笔记(细节有解释哦)
本文中所有带引号的命令,请手动输入引号,不知道为什么博客里输入引号,总是自动转换成了中文 基本组成 pod:k8s 最小单位,类似docker的容器(也许) 资源清单:资源.资源清单语法.pod生命周 ...
随机推荐
- 使用HttpClient访问接口(Rest接口和普通接口)
这里总结一下使用HttpClient访问外部接口的用法.后期如果发现有什么缺陷会更改.欢迎读者指出此方法的不足之处. 首先,创建一个返回实体: public class HttpResult { // ...
- Nginx深入详解之upstream分配方式
一.分配方式 Nginx的upstream支持5种分配方式,下面将会详细介绍,其中,前三种为Nginx原生支持的分配方式,后两种为第三方支持的分配方式: 1.轮询 轮询是upstream的默认分配方式 ...
- python基础--py2与py3编码
python2 与 python3的编码和解码 注意:小心,容易弄混 目录: 1.python2d 的encode & decode 2.python3的encode & decode ...
- Ansible--Ansible之Playbook
Ansible之Playbook Playbook介绍 playbook参考文档 Playbook与ad-hoc相比,是一种完全不同的运用ansible的方式,类似与saltstack的state状态 ...
- delphi安装控件
设置路径,要不就自己把文件copy到对应的文件夹里面再给你装一下装控件的 http://www.cppfans.com/vclcontrol.asp有关 VCL 控件的常见问题 (安装.卸载.升级BC ...
- 编写可维护的JavaScript-随笔(四)
避免使用全局变量 一.全局变量带来的问题 a) 命名冲突 i. 当全局变量和全局函数越来越多时,发生命名冲突的概率也随之增高 ii. 如果函数中使用了外部 ...
- CSS3 完善盒模型
CSS3 改善了传统盒模型结构,增强了盒子构成要素的功能,扩展了盒模型显示的方式. 改善结构:为盒子新增轮廓区: 增强功能:内容区增强 CSS 自动添加内容功能,增强内容移除.换行处理:允许多重定义背 ...
- 阿里云ECS使用vnc远程连接(Ubuntu + CentOS)
阿里云ECS使用vnc远程连接https://blog.csdn.net/m0_37264397/article/details/78271896 在Linux实例上自动安装并运行VNC Server ...
- prometheus学习系列十一: Prometheus和AlertManager的高可用
前面的系列中, prometheus和alertmanager都是单机部署的,会有单机宕机导致系统不可用情况发生.本文主要介绍下prometheus和alertmanager的高可用方案. 服务的高可 ...
- Java的常见术语(PO/POJO/VO/BO/DAO/DTO)
PO(persistant object) 持久对象在o/r 映射的时候出现的概念,如果没有o/r映射,就没有这个概念存在了.通常对应数据模型(数据库),本身还有部分业务逻辑的处理.可以看成是与数据库 ...