部署 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 为核心的。如:
  1. 所有对集群进行的查询和管理都要通过 API 来进行。
  2. 所有模块之间并不会互相调用,而是通过和 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.各组件之间的关系

  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 上的 kube-proxy 拥有提供真实服务公网 IP。客户端访问 kubernetes 中提供的服务,是直接访问到 kube-proxy 上的。
  5. 在 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 启动过程解析

  1. 从 etcd 中获取出 /k8s/network/config 的值
  2. 划分 subnet 子网,并在 etcd 中进行注册
  3. 将子网信息记录到 /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

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_46902396/article/details/110845849