目录
一.三种集群
minikube
- Minikube是一个工具,可以在本地快速运行一个单点的kubernets,尝试Kubernetes或日常开发的用户使用。不能用于环境。
- 官网地址:Minikube下载地址
kubeadm
- kubeadm是一个命令行工具,可以在物理机,云服务器或者虚拟机上轻松部署安全可靠的Kuernetes集群
- kubeadm提供kubeadm init和kubeadm join,用于快速部署kubernetes集群。kubeadm init启动一个kubernetes的主节点,kubeadm join启动一个Kubernetes工作节点并且将其加入集群
- 官网地址:kubeadm工具下载地址
二进制包
- 从官方下载发版本的二进制包,手动部署每个组件,组成kubernetes集群。
- 二进制包下载地址:Releases · kubernetes/kubernetes · GitHub
总结:生成环境中部署Kubernets集群,只有Kueadm和二进制包可选,Kubeadm降低部署门槛,但是屏蔽了很多细节,遇到问题很难排查。学习过程中,建议使用二进制包部署Kuernetes集群,便于学习工作原理和后期维护。
二.部署minikube集群
实验环境
角色 | IP地址 | 系统 | 软件包 |
master | 192.168.43.101/24 | centos7 | etcd kubernetes flannel |
node1 | 192.168.43.102/24 | centos7 | etcd kubernetes flannel |
node2 | 192.168.43.103/34 | centos7 | etcd kubernetes flannel |
master的部署
- 设置基本环境
[root@localhost ~]# hostnamectl set-hostname master
[root@localhost ~]# su
[root@master ~]# systemctl stop firewalld
[root@master ~]# setenforce 0
- 安装相关软件包
[root@master ~]# yum install -y etcd kubernetes flannel
#etcd作为分布式存储软件
#flannel作为网络
#kubernetes作为docker管理集群
#docker会作为依赖包被下载
- 配置etcd分布式键值存储系统
[root@master ~]# cd /etc/etcd/
[root@master etcd]# ls
etcd.conf
[root@master etcd]# vi etcd.conf
##在文件末尾追加如下内容:
ETCD_DATA_DIR="/var/lib/etcd/default.etcd" ##数据目录
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:4001" ##客户端访问监听地址
ETCD_NAME="default" ##节点名称
ETCD_ADVERTISE_CLIENT_URLS="http://localhost:4001" ##客户端通告地址
//以下为文件扩展解析,不需要加入
ETCD_LISTEN_PEER_URLS: 集群通信监听地址
ETCD_INITIAL_ADVERTISE_PEER_URLS: 集群通告地址
ETCD_INITIAL_CLUSTER: 集群节点地址
ETCD_INITIAL_CLUSTER_TOKEN: 集群Token(令牌)
ETCD_INITIAL_CLUSTER_STATE: 加入集群当前状态,new是新集群,existing表示加入已有集群
- 配置apiserver
//apiserver为集群的统一入口,各个组件的协调者,以RESTful API提供接口服务,所有对象资源的增删改查和监听操作都交给apiserver处理后再提交给etcd存储
[root@master kubernetes]# ls
apiserver config controller-manager kubelet proxy scheduler
[root@master kubernetes]# vi apiserver
##做如下修改
# The address on the local server to listen to.
KUBE_API_ADDRESS="--address=0.0.0.0" ##表示master的监听地址
# The port on the local server to listen on.
KUBE_API_PORT="--port=8080" ##表示master监听的端口
# Port minions listen on
KUBELET_PORT="--kubelet-port=10250" ##指定node的代理端口
# Comma separated list of nodes in the etcd cluster
KUBE_ETCD_SERVERS="--etcd-servers=http://127.0.0.1:4001" #指定etcd集群的地址与端口
- 配置flannel网络
[root@master ~]# cd /etc/sysconfig
[root@master sysconfig]# vi flanneld
# Flanneld configuration options
# etcd url location. Point this to the server where etcd runs
//指定etcd存储的网络信息,保证成功连接etcd
FLANNEL_ETCD_ENDPOINTS="http://192.168.43.101:4001"
# etcd config key. This is the configuration key that flannel queries
# For address range assignment
FLANNEL_ETCD_PREFIX="/atomic.io/network"
# Any additional options that you want to pass
#FLANNEL_OPTIONS=""
注:
Overlay network:覆盖网络,在现有的网络环境中在叠加一层虚拟网络技术模式,将网络中的主机通过虚拟链路连接起来。
Vxlan:将原数据包封装到UDP中,并且使用基础网络的IP/MAC作为外层报文头进行封装,然后在以太网上传,到达目的地之后又隧道端点解封并将数据发送目标地址
Flannel:是Overlay网络的一种,也是将源数据包封装在另一层网络包里进行路由转发和通信,目前已经支持,UDP、VXLAN、HOSTGW、AWS、VPC和GCE路由等数据转发方式
- 设置etcd网络
[root@master ~]# etcdctl -C //192.168.43.101:4001 set /atomic.io/network/config '{"Network":"10.1.1.0/16"}'
{"Network":"10.1.1.0/16"}
- 启动所有组件服务
systemctl start etcd
systemctl start kube-apiserver
systemctl start kube-controller-manager
systemctl start kube-scheduler
node1与node2的部署(以下配置以node2为例)
- 环境设置
hostnamectl set-hostname node1/node2
su
systemctl stop firewalld
setenforce 0
- 安装必要软件包
yum install -y etcd kubernetes flannel
- 编辑主配置文件
grep -v "^#" /etc/kubernetes/config
KUBE_LOGTOSTDERR="--logtostderr=true" //启用日志
KUBE_LOG_LEVEL="--v=0" //设置日志等级
KUBE_ALLOW_PRIV="--allow-privileged=false" //是否启用授权
KUBE_MASTER="--master=http://192.168.43.101:8080" //指定master的地址与端口
KUBE_ETCD_SERVERS="--etcd_servers=http://192.168.43.101:4001" //指定etcd的地址与端口
- 编辑代理配置文件
grep -v "^#" /etc/kubernetes/kubelet
KUBELET_ADDRESS="--address=0.0.0.0" //指定代理的地址
KUBELET_PORT="--port=10250" //指定代理的端口
KUBELET_HOSTNAME="--hostname-override=192.168.43.103" //设置在集群中显示的主机名
KUBELET_API_SERVER="--api-servers=http://192.168.43.101:8080" //指定apiserver的地址与端口
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest" //管理pod网络的中的镜像
KUBELET_ARGS=""
[root@node2 ~]#
- 编辑网络配置
[root@node2 ~]# cat /etc/sysconfig/flanneld
# Flanneld configuration options
# etcd url location. Point this to the server where etcd runs
FLANNEL_ETCD_ENDPOINTS="http://192.168.43.101:4001" //指定etcd的地址与端口
# etcd config key. This is the configuration key that flannel queries
# For address range assignment
FLANNEL_ETCD_PREFIX="/atomic.io/network"
# Any additional options that you want to pass
#FLANNEL_OPTIONS=""
[root@node2 ~]#
- 启动服务
[root@node2 ~]# systemctl start flanneld.service
[root@node2 ~]# systemctl start kube-proxy.service
[root@node2 ~]# systemctl start kubelet.service
[root@node2 ~]# systemctl start docker
在master中,测试minikube集群
- 查看所有节点
[root@master ~]# kubectl get nodes
NAME STATUS AGE
192.168.43.102 Ready 5h
192.168.43.103 Ready 55m
[root@master ~]#
- 查看所有节点服务是否健康
[root@master ~]# kubectl get cs
NAME STATUS MESSAGE ERROR
etcd-0 Healthy {"health":"true"}
controller-manager Healthy ok
scheduler Healthy ok
[root@master ~]#
总结:minikube集群仅用于测试