部署 Kubernetes 容器集群管理系统
一、 Kubernetes 和相关组件介绍
1.Kubernetes 概述
2.Kubernetes 架构设计图
3.Kubernetes 常见组件介绍
二、 部署 Kubernetes 容器集群管理系统
1.配置 Kubernetes 的 yum 源
2.配置 Hosts 文件
3.在各个节点上面安装 K8s 组件
4.部署 ETCD 服务器
1)配置 ETCD 主配置文件
2)配置 ETCD 网络
3)Flannel 启动过程解析
4)配置 Flannel 服务
5)查看子网信息
5.部署 master 服务器
1)配置 Kubernetes 主配置文件
2)配置 APIServer 配置文件
3)配置 Kube-Scheduler 配置文件
5)配置 Flannel 服务
6)启用 master 上 4 个服务
6.部署 node1,node2 节点服务器
1)配置 Flannel 服务
2)配置 master 地址
3)配置 Kubelet
4)启用服务
5)查看 Kube-Proxy 端口号
7.在 master 上查看整个集群的运行状态
一、 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 容器集群管理系统
准备工作:
- 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"
4)配置 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"
5)启用 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
6.部署 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
7.在 master 上查看整个集群的运行状态
[root@master ~]# kubectl get nodes