部署 Kubernetes 容器集群管理系统
日期: 2020-12-12 分类: 跨站数据测试 441次阅读
部署 Kubernetes 容器集群管理系统
一、 Kubernetes 和相关组件介绍
1.Kubernetes 概述
Kubernetes 是 Google 开源的容器集群管理系统,基于 Docker 构建一个容器的调度服务,提供资源调度、均衡容灾、服务注册、动态扩缩容等功能套件。基于容器的云平台。官网:https://kubernetes.io/
2.Kubernetes 架构设计图
3.Kubernetes 常见组件介绍
- master:Kubernetes 管理节点。
- apiserver:提供接口服务,用户通过 apiserver 来管理整个容器集群平台。API Server 负责和 etcd 交互(其他组件不会直接操作 etcd,只有 API Server 这么做),整个 Kubernetes 集群的所有交互都是以 API Server 为核心的。如:
- 所有对集群进行的查询和管理都要通过 API 来进行。
- 所有模块之间并不会互相调用,而是通过和 API Server 打交道来完成自己那部分的工作 、API Server 提供的验证和授权保证了整个集群的安全。
- scheduler:Kubernetes 调度服务。
- Replication Controllers:复制,保证 pod 的高可用。
- 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 生成的随机端口。
- Labels :标签。Labels 是用于区分 Pod、Service、Replication Controller 的 key/value 键值对,仅使用在 Pod、Service、 Replication Controller 之间的关系识别,但对这些单元本身迚行操作时得使用 name 标签。
- Deployment:Kubernetes Deployment 用于更新 Pod 和 Replica Set(下一代的 Replication Controller)的方法,你可以在 Deployment 对象中只描述你所期望的理想状态(预期的运行状态),Deployment 控制器会将现在的实际状态转换成期望的状态。Deployment 可以帮我们实现无人值守的上线,大大降低我们的上线过程的复杂沟通、操作风险。
4.各组件之间的关系
- Kubernetes 的架构由一个 master 和多个 minion 组成,master 通过 api 提供服务,接受 kubectl 的请求来调度管理整个集群。 kubectl: 是 k8s 平台的一个管理命令。
- Replication controller 定义了多个 pod 戒者容器需要运行,如果当前集群中运行的 pod 或容器达不到配置的数量,Replication controller 会调度容器在多个 minion 上运行,保证集群中的 pod 数量。
- service 则定义真实对外提供的服务,一个 service 会对应后端运行的多个 container。
- Kubernetes 是个管理平台,minion 上的 kube-proxy 拥有提供真实服务公网 IP。客户端访问 kubernetes 中提供的服务,是直接访问到 kube-proxy 上的。
- 在 Kubernetes 中 pod 是一个基本单元,一个 pod 可以是提供相同功能的多个 container,这些容器会被部署在同一个 minion 上。minion 是运行 Kubelet 中容器的物理机。minion 接受 master 的指令创建 pod 或者容器。
二、 部署 Kubernetes 容器集群管理系统
准备工作:
主机名 | 操作系统 | IP地址 | CPU | 内存 |
master | CentOS7 | 192.168.1.1 | 4核 | 2G |
etcd | 192.168.1.2 | |||
node1 | 192.168.1.3 | |||
node2 | 192.168.1.4 |
K8s软件包从这个链接下载:https://pan.baidu.com/s/13gfOXbtpwYovcEikrSzYQg
提取码:pi5n
1.配置 Kubernetes 的 yum 源
挂光盘,并配置本地yum源
把 k8s-package.tar.gz 上传到 master 机器中:
[root@master ~]# ls
anaconda-ks.cfg k8s-package.tar.gz
[root@master ~]# tar zxf k8s-package.tar.gz
[root@master ~]# ls
anaconda-ks.cfg k8s-package k8s-package.tar.gz
[root@master ~]# cat <<END > /etc/yum.repos.d/k8s.repo
[k8s]
name=k8s
baseurl=file:///root/k8s-package
enabled=1
gpgcheck=0
END
复制 k8s yum 源相关文件到其他三台机器上:
你们按下面依次远程复制即可,只有地址是不一样的
[root@master ~]# scp -r /root/k8s-package 192.168.1.2:/root/
[root@master ~]# scp /etc/yum.repos.d/k8s.repo 192.168.1.2:/etc/yum.repos.d/
2.配置 hosts 文件
[root@master ~]# cat <<END >> /etc/hosts
192.168.1.1 master
192.168.1.2 etcd
192.168.1.3 node1
192.168.1.4 node2
END
将hosts文件远程复制到其他三台机器中:
[root@master ~]# scp /etc/hosts 192.168.1.2:/etc/
3.在各个节点上面安装 k8s 组件
master:
[root@master ~]# yum -y install kubernetes flannel ntp
etcd:
[root@etcd ~]# yum -y install etcd flannel ntp
node1,node2:
[root@node1 ~]# yum -y install kubernetes flannel ntp
4.部署 etcd 服务器
1)配置 etcd 主配置文件
[root@etcd ~]# vim /etc/etcd/etcd.conf
9 ETCD_LISTEN_CLIENT_URLS="http://localhost:2379,http://192.168.1.2:2379"
20 ETCD_ADVERTISE_CLIENT_URLS="http://192.168.1.2:2379"
[root@etcd ~]# systemctl start etcd #启动etcd服务
[root@etcd ~]# systemctl enable etcd #设置etcd开启自启
[root@etcd ~]# netstat -anpt | grep 2379 #查看etcd端口号
[root@etcd ~]# etcdctl member list #检查etcd集群成员列表,这里只有一台
2)设置 etcd 网络
[root@etcd ~]# etcdctl mkdir /k8s/network #创建一个目录 /k8s/network 用于存储 flannel 网络信息
[root@etcd ~]# etcdctl set /k8s/network/config '{"Network":"10.255.0.0/16"}' #给 /k8s/network/config 赋一个字符串的值
[root@etcd ~]# etcdctl get /k8s/network/config #查看
3)flannel 启动过程解析
- 从 etcd 中获取出 /k8s/network/config 的值
- 划分 subnet 子网,并在 etcd 中进行注册
- 将子网信息记录到 /run/flannel/subnet.env 中
4)配置 flanneld 服务
[root@etcd ~]# vim /etc/sysconfig/flanneld
4 FLANNEL_ETCD_ENDPOINTS="http://192.168.1.2:2379"
8 FLANNEL_ETCD_PREFIX="/k8s/network"
11 FLANNEL_OPTIONS="--iface=ens33"
[root@etcd ~]# systemctl start flanneld
[root@etcd ~]# ifconfig
5)查看子网信息
[root@etcd ~]# cat /run/flannel/subnet.env
- 之后将会有一个脚本将 subnet.dev 转写成一个 docker 的环境变量文件 /run/flannel/docker。
- docker0 的地址是由 /run/flannel/subnet.env 的 FLANNEL_SUBNET 参数决定的。
[root@etcd ~]# cat /run/flannel/docker
5.部署 master 服务器
1)配置 kubernetes 主配置文件
[root@master ~]# vim /etc/kubernetes/config
22 KUBE_MASTER="--master=http://192.168.1.1:8080"
2)配置 apiserver 配置文件
[root@master ~]# vim /etc/kubernetes/apiserver
8 KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
17 KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.1.2:2379"
23 KUBE_ADMISSION_CONTROL="--admission-control=AlwaysAdmit"
3)配置 kube-scheduler 配置文件
[root@master ~]# vim /etc/kubernetes/scheduler
7 KUBE_SCHEDULER_ARGS="0.0.0.0"
5)配置 flanneld 服务
[root@master ~]# vim /etc/sysconfig/flanneld
4 FLANNEL_ETCD_ENDPOINTS="http://192.168.1.2:2379"
8 FLANNEL_ETCD_PREFIX="/k8s/network"
11 FLANNEL_OPTIONS="--iface=ens33"
6)启用 master 上 4 个服务
[root@master ~]# systemctl start kube-apiserver kube-controller-manager kube-scheduler flanneld
[root@master ~]# systemctl enable kube-apiserver kube-controller-manager kube-scheduler flanneld
[root@master ~]# ifconfig
5.部署 node1,node2 节点服务器
node1,node2操作步骤一致:
1)配置 flanneld 服务
[root@node1 ~]# vim /etc/sysconfig/flanneld
4 FLANNEL_ETCD_ENDPOINTS="http://192.168.1.2:2379"
8 FLANNEL_ETCD_PREFIX="/k8s/network"
11 FLANNEL_OPTIONS="--iface=ens33"
2)配置 master 地址
[root@node1 ~]# vim /etc/kubernetes/config
22 KUBE_MASTER="--master=http://192.168.1.1:8080"
3)配置 kubelet
[root@node1 ~]# vim /etc/kubernetes/kubelet
5 KUBELET_ADDRESS="--address=0.0.0.0"
11 KUBELET_HOSTNAME="--hostname-override=node1" #node2主机改为node2
14 KUBELET_API_SERVER="--api-servers=http://192.168.1.1:8080"
4)启用服务
[root@node1 ~]# systemctl start flanneld kube-proxy kubelet docker
[root@node1 ~]# systemctl enable flanneld kube-proxy kubelet docker
[root@node1 ~]# ifconfig
5)查看 proxy 端口号
[root@node1 ~]# netstat -antp | grep proxy
6.在 master 上查看整个集群的运行状态
[root@master ~]# kubectl get nodes
除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog
上一篇: IPFS适合加入吗?Filecoin未来趋势如何?
下一篇: 2020-12-08
精华推荐