部署 Kubernetes 容器集群管理系统
一、 Kubernetes 和相关组件介绍
1.Kubernetes 概述
Kubernetes 是 Google 开源的容器集群管理系统,基于 Docker 构建一个容器的调度服务,提供资源调度、均衡容灾、服务注册、动态扩缩容等功能套件。基于容器的云平台。官网:https://kubernetes.io/
2.Kubernetes 架构设计图
Kubernetes 是由一个 Master 和多个 Node 组成,Master 通过 API 提供服务,并接收 Kubectl 发送过来的请求来调度管理整个集群。
3.Kubernetes 常见组件介绍
- APIServer:所有服务的统一访问入口。
- Controller Manager(控制器):主要就是用来维持 Pod 的一个副本数。
- Scheduler(调度器):主要就是用来分配任务到合适的节点。
- ETCD:键值对数据库,存放了 K8s 集群中所有重要信息(持久化)
- Kubelet:直接和容器引擎交互,用来维护容器的一个声明周期。
- Kube-Proxy:用于将规则写入
iptables
或IPVS
来实现服务的映射访问。 - Kubectl:是 K8s 平台的管理命令。
二、 部署 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 源
把 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)配置 Flannel 服务
[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)配置 Flannel 服务
[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)配置 Flannel 服务
[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)查看 Kube-Proxy 端口号
[root@node1 ~]# netstat -antp | grep proxy
6.在 master 上查看整个集群的运行状态
[root@master ~]# kubectl get nodes