Docker Kubernetes1.5.2集群环境搭建(CentOS)

部署环境

由于是测试搭建kubernetes集群环境,所以我只用了两台机器进行,一台用作Master节点,一台用作Node节点。不过原理上是一样的,即使加机器,搭建步骤也是一样的。

Kubernetes Master节点:10.0.11.150

Kubernetes Node节点:10.0.11.152

部署软件

docker:1.12.6

kubernetes:1.5.2

CentOS:7.3

关闭防火墙

在每台机器上执行下面的命令,关闭防火墙并启用ntp

// 关闭防火墙
systemctl stop firewalld
// 禁用防火墙
systemctl disable firewalld

//安装ntp
yum -y install ntp
//启用ntp
systemctl start ntpd
//加入开机启动
systemctl enable ntpd

Kubernetes Master节点的安装与配置

Kubernetes Master指的是集群控制节点,每个Kubernetes集群里需要有一个Master节点来负责整个集群的管理和控制,基本上Kubernetes的所有控制命令都发给他,他来负责具体的执行过程,我们后面执行的所有命令基本上都是在Master节点上运行的。Master节点通常会占据一个独立的服务器(高可用部署建议用3台服务器),其主要原因是他太重要了,是整个集群的首脑,如果宕机或者不可用,那么对集群内容器应用的管理都将失效。

Master节点上运行以下一组关键进程:
1. Kubernetes API Serverkube-apiserver):提供了HTTP Rest接口的关键服务进程,是Kubernetes里所有资源的增删改查等操作的唯一入口,也是集群控制的入口进程。
2. Kubernetes Controller Managerkube-controller-manager):Kubernetes里所有资源对象的自动化控制中心,可以理解为资源对象的大总管。
3. Kubernetes Schedulerkube-scheduler):负责资源调度(Pod调度)的进程,相当于公交公司的调度室。

另外,在Master节点上需要启动一个etcd服务,因为Kubernetes里的所有资源对象的数据全部是保存在etcd中的。

安装etcd、docker、kubernetes

yum -y install etcd docker kubernetes

etcd配置

配置文件位置:/etc/etcd/etcd.conf

etcd配置主要是ETCD_LISTEN_CLIENT_URLSETCD_ADVERTISE_CLIENT_URLS这两项。

// 节点名称
ETCD_NAME=default

// 数据存放位置
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"

// 监听客户端地址,这里要注意,设置成0.0.0.0,并且Master节点、Node节点端口要一致
// 这样Master才能和Node节点互通,否则Node节点的flanneld无法正常启动
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"

// 通知客户端地址,本地地址
ETCD_ADVERTISE_CLIENT_URLS="http://127.0.0.1:2379"

其中ETCD_LISTEN_CLIENT_URLS=”http://0.0.0.0:2379”表示etcd在2379端口上监听所有网络接口。

Kubernetes配置

config配置文件位置:/etc/kubernetes/config

kubernetes配置主要配置KUBE_MASTER,其他项使用默认即可。

KUBE_LOGTOSTDERR="--logtostderr=true"

KUBE_LOG_LEVEL="--v=0"

KUBE_ALLOW_PRIV="--allow-privileged=false"

// 本机IP:PORT
KUBE_MASTER="--master=http://10.0.11.150:8080"

KUBE_MASTER="--master=http://10.0.11.150:8080"是将Kubernetesapiserver进程的服务地址告诉Kubernetescontroller-manager, schedulerproxy进程。

apiserver配置文件位置:/etc/kubernetes/apiserver
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"

KUBE_API_PORT="--port=8080"

KUBELET_PORT="--kubelet-port=10250"

// 本机IP:PORT
KUBE_ETCD_SERVERS="--etcd-servers=http://127.0.0.1:2379"

KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota"

KUBE_API_ARGS=""

这些配置让apiserver进程在8080端口上监听所有网络接口,并告诉apiserver进程etcd服务的地址。

flannel网络配置

配置etcd中关于flannelkey(这个只在安装了etcd的机器上操作,这里只在Master节点安装etcd)

flannel使用etcd进行配置,来保证多个flannel实例之间的配置一致性,所以需要在etcd上进行如下配置:

// 直接在linux命令行执行下面这条命令,前提是安装etcd
etcdctl mk /atomic.io/network/config '{"Network":"10.1.0.0/16"}'

'/atomic.io/network'这个key要与后面配置的Master节点和Node节点中/etc/sysconfig/flannel中的配置项FLANNEL_ETCD_PREFIX相对应,错误的话启动就好报错。

注:上面flannel设置的ip网段可以任意设定,随便设定一个网段都可以。容器的ip就是根据这个网段进行自动分配的,ip分配后,容器一般是可以对外联网的(网桥模式,只要宿主机能上网就可以

flannel配置

问题及安装原因

首次安装我并没有在master节点安装flannel,导致再安装了kubernetes-dashboard之后,无法通过http:masterIP:8080/ui访问dashboard后台(页面显示错误在下方)。经过折磨人的检查过程,排除了配置的问题之后,发现是由于集群内部网络不通导致的。。再然后通过试验发现master节点安装配置好flannel之后就没问题了。。所以还是在master节点安装flannel吧。。

// kubernetes-dashboard 打开后台报错
kubernetes Error: 'dial tcp 10.1.93.3:9090: getsockopt: no route to host'

安装flannel

yum -y install flannel

配置文件

打开flannel配置文件:/etc/sysconfig/flanneld

# etcd集群master地址,即上面配置的etcd地址,若etcd和flannel安装在同一台集群,则使用127.0.0.1也行
FLANNEL_ETCD_ENDPOINTS="http://127.0.0.1:2379"

# flannel网络配置的key,上面设置的flannel网络配置中的key前缀
FLANNEL_ETCD_PREFIX="/atomic.io/network"

启动flannel

# 启动flannel
systemctl start flanneld

# 重启flannel
systemctl restart flanneld

# 查看flannel状态
systemctl status flanneld

启动Master服务

启动Kubernetes Master节点上的etcd, docker, kube-apiserver, kube-controller-managerkube-scheduler进程并查看其状态

// 一个小shell脚本,循环启动这些服务,要按照这里的顺序启动服务
for SERVICES  in etcd docker kube-apiserver kube-controller-manager kube-scheduler;  do
    systemctl restart $SERVICES
    systemctl enable $SERVICES
    systemctl status $SERVICES
done

现在我们可以使用kubectl get nodes命令来查看,当然,目前还没有Node节点加入到该Kubernetes集群,所以命令的执行结果是空的:
这里写图片描述

Kubernetes Node节点的安装与配置

除了MasterKubernetes集群中的其他集群被称为Node节点,在较早版本中也被称为Minion。与Master一样,Node节点可以使一台物理机,也可以是一台虚拟机。Node节点才是Kubernetes集群中的工作负载节点,每个Node都会被Master分配一些工作负载(Docker容器),当某个Node宕机时,其上的工作负载会被Master自动转移到其他节点上去。

每个Node节点都运行着以下一组关键进程:
1. kubelet:负责Pod对应的容器的创建、启停等任务,同时与Master节点密切协作,实现集群管理的基本功能。
2. kube-proxy:实现Kubernetes Service的通信与负载均衡机制的重要组件。
3. Docker Engine(docker):Docker引擎,负责本机的容器创建和管理工作。

Node节点可以在运行期间动态增加到Kubernetes集群中,前提是这个节点上已经正确安装、配置和启动了上述关键进程,在默认情况下kubelet会向Master注册自己,这也是Kubernetes推荐的Node管理方式。一旦Node被纳入集群管理范围,kubelet进程就好定时向Master节点汇报自身的情报,例如操作系统、Docker版本、机器的CPU和内存情况,以及当前有哪些Pod在运行等,这样Master可以获知每个Node的资源使用情况。并实现高效均衡的资源调度策略。而某个Node超过指定时间不上报信息时,会被Master判定为‘失联’,Node的状态被标记为不可用(Not Ready)。随后Master会触发‘工作负载大转移’的自动流程。

安装 flannel, docker和Kubernetes

yum -y install flannel docker kubernetes

flannel 配置

配置文件位置:/etc/sysconfig/flanneld

// Master节点etcd配置IP:PORT
FLANNEL_ETCD_ENDPOINTS="http://10.0.11.150:2379"

// Master节点配置的flannel中的key
FLANNEL_ETCD_PREFIX="/atomic.io/network"

#FLANNEL_OPTIONS=""

配置信息告诉flannel进程etcd服务的位置以及在etcd上网络配置信息的节点位置

Kubernetes配置

配置文件位置:/etc/kubernetes/config

KUBE_LOGTOSTDERR="--logtostderr=true"

KUBE_LOG_LEVEL="--v=0"

KUBE_ALLOW_PRIV="--allow-privileged=false"

//Master节点的kube url
KUBE_MASTER="--master=http://10.0.11.150:8080"

KUBE_MASTER=”–master=http://10.0.11.150:8080“是将Kubernetes的apiserver进程的服务地址告诉Kubernetes的controller-manager, scheduler和proxy进程。

kubelet配置

配置文件位置:/etc/kubernetes/kubelet

KUBELET_ADDRESS="--address=0.0.0.0"

KUBELET_PORT="--port=10250"

// 本机IP,每个节点都不一样
KUBELET_HOSTNAME="--hostname-override=10.0.11.152"

// Master节点配置的server
KUBELET_API_SERVER="--api-servers=http://10.0.11.150:8080"

KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"

KUBELET_ARGS=""

注意:KUBELET_POD_INFRA_CONTAINER : kubelet配置文件中的KUBELET_POD_INFRA_CONTAINER该配置项指的是在Pod创建启动时,会从该地址下载pod-infrastructure镜像并随pod启动,但是默认的镜像下载地址国内会出现下载失败情况,导致pod启动失败,因此建议将该pod下载下来,并保存到本地的Docker私有库中。然后修改该配置项的值。我这里将该配置项修改为:

KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=10.0.11.150:5000/rhel7/pod-infrastructure:v1.0.0"

启动Node服务

启动kube-proxy kubelet flannelddocker进程并查看其状态

// 注意启动顺序,flanneld需要在docker前启动
for SERVICES in kube-proxy kubelet flanneld docker; do
    systemctl restart $SERVICES
    systemctl enable $SERVICES
    systemctl status $SERVICES 
done

将每个服务启动并设置成开启启动,然后查看服务状态

最后,在Master节点使用kubectl get nodes命令来查看,可以看到节点信息:
这里写图片描述

发布了112 篇原创文章 · 获赞 94 · 访问量 51万+

猜你喜欢

转载自blog.csdn.net/A632189007/article/details/78713359