CentOS7安装配置Kubernetes集群

Kubernetes集群组件:

etcd:一个高可用的K/V键值对存储和服务发现系统
flannel:实现夸主机的容器网络的通信
kube-apiserver:提供kubernetes集群的API调用
kube-controller-manager:确保集群服务
kube-scheduler:调度容器,分配到Node
kubelet:在Node节点上按照配置文件中定义的容器规格启动容器
kube-proxy:提供网络代理服务

节点信息

节点 IP 服务
master 10.186.61.103 etcd、apiserver、controller-manager、scheduler、config
node01 10.186.60.60 etcd、flannel、docker、kubelet、kube-proxy
node02 10.186.65.43 etcd、flannel、docker、kubelet、kube-proxy

准备工作

以下步骤所有节点服务器都需要执行

关闭SELINUX

关闭SELINUX,可以解决程序安装然后不执行的问题。

1
2
3
4
5
#修改配置文件
vim /etc/selinux/config

#设定不可用
SELINUX=disabled

关闭防火墙

测试安装时候可以关闭防火墙,以防止因防火墙问题出现的故障,正式环境如果启用,根据需求配置。

1
2
3
4
5
systemctl stop firewalld.service
systemctl disable firewalld.service

#查看防火墙状态
systemctl status firewalld

修改hostname

更改hostname为master、node1、node2,配置所有测试机的/etc/hosts文件

1
2
3
4
5
# cat /etc/hosts

10.186.61.103 master
10.186.60.60 node01
10.186.65.43 node02

安装epel源

1
yum -y install epel-release

软件升级

1
yum update

时间校对

1
2
3
4
yum install ntp
systemctl start ntpd;systemctl enable ntpd
ntpdate ntp1.aliyun.com
hwclock

时间同步的地址可以选择其他地址,本次使用阿里云的时间服务器地址,更多配置请参考:搭建内网NTP时间服务器

master节点安装

安装flannel

1
2
3
4
5
6
7
8
9
10
11
12
#安装
yum install -y flannel

#配置
# cat flanneld |grep -Ev '^#|^$'
FLANNEL_ETCD_ENDPOINTS="http://10.186.61.103:2379"
FLANNEL_ETCD_PREFIX="/atomic.io/network"
FLANNEL_OPTIONS="--logtostderr=false --log_dir=/var/log/k8s/flannel/ --etcd-prefix=/atomic.io/network --etcd-endpoints=http://10.186.61.103:2379 --iface=eth0"

#查看网络
ifconfig
#信息较长,此处不再展示

安装etcd

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#安装
yum install etcd

#启动服务
systemctl start etcd

#开机启动
systemctl enable etcd

#获取节点数据,看自身是否可用,然后再进行下一步,配置ETCD的操作(很重要,不进行这步,容易发生错误,不知道是那个地方的问题)
etcdctl get /

#配置etcd
vim /etc/etcd/etcd.conf

#配置文件
#[Member]
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_NAME="default"
#[Clustering]
ETCD_ADVERTISE_CLIENT_URLS="http://10.186.61.103:2379"
ETCD_INITIAL_CLUSTER="default=http://10.186.61.103:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"

#重启服务
systemctl restart etcd

#设定容器网络
etcdctl set /atomic.io/network/config '{"Network":"172.17.11.1/16"}'

其中网络号172.17.11.1/16与docker中的docker0网络一致(若不一致,可修改docker0网络或者配置上述etcd网络);atomic.io与下面的Flannel配置中的FLANNEL_ETCD_PREFIX对应。

1
2
# etcdctl get /atomic.io/network/config
{"Network":"172.17.11.1/16"}

安装kubernetes-master

1
yum install kubernetes-master

配置apiserver

配置文件/etc/kubernetes/apiserver,内容包括:绑定主机的IP地址、端口号、etcd服务地址、Service所需的Cluster IP池、一系列admission控制策略等。

-insecure-bind-address参数默认为127.0.0.1,即API-server绑定的安全IP只有127.0.0.1,相当于一个白名单,修改成-insecure-bind-address=0.0.0.0后,表示运行所有节点进行访问。
去掉SecurityContextDeny,ServiceAccount,这是权限相关的,测试时候不需要添加。
1
2
3
4
5
6
# cat /etc/kubernetes/apiserver |grep -Ev '^#|^$'
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
KUBE_ETCD_SERVERS="--etcd-servers=http://10.186.61.103:2379"
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,ResourceQuota"
KUBE_API_ARGS=""

配置Kubernate全局

配置文件/etc/kubernetes/config,文件的内容为所有服务都需要的参数。

1
2
3
4
5
# cat /etc/kubernetes/config |grep -Ev '^#|^$'
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=false"
KUBE_MASTER="--master=http://10.186.61.103:8080"

配置kube-controller-manager配置文件

1
2
# grep -Ev '^#|^$' /etc/kubernetes/controller-manager
KUBE_CONTROLLER_MANAGER_ARGS=""

配置kube-scheduler配置文件

1
2
# grep -Ev '^#|^$' /etc/kubernetes/scheduler 
KUBE_SCHEDULER_ARGS="--address=0.0.0.0"

启动服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#让配置生效
systemctl daemon-reload

#启动服务
systemctl start etcd kube-apiserver.service kube-controller-manager kube-scheduler

#重启服务
systemctl restart etcd kube-apiserver.service kube-controller-manager kube-scheduler

#设定开机启动
systemctl enable etcd kube-apiserver.service kube-controller-manager kube-scheduler

#
通过systemctl status 来验证服务启动的状态。

#日志查看
cat /var/log/messages |grep kube

测试master

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# curl 127.0.0.1:8080
{
"paths": [
"/api",
"/api/v1",
"/apis",
"/apis/apps",
"/apis/apps/v1beta1",
"/apis/authentication.k8s.io",
"/apis/authentication.k8s.io/v1beta1",
"/apis/authorization.k8s.io",
"/apis/authorization.k8s.io/v1beta1",
"/apis/autoscaling",
"/apis/autoscaling/v1",
"/apis/batch",
"/apis/batch/v1",
"/apis/batch/v2alpha1",
"/apis/certificates.k8s.io",
"/apis/certificates.k8s.io/v1alpha1",
"/apis/extensions",
"/apis/extensions/v1beta1",
"/apis/policy",
"/apis/policy/v1beta1",
"/apis/rbac.authorization.k8s.io",
"/apis/rbac.authorization.k8s.io/v1alpha1",
"/apis/storage.k8s.io",
"/apis/storage.k8s.io/v1beta1",
"/healthz",
"/healthz/ping",
"/healthz/poststarthook/bootstrap-controller",
"/healthz/poststarthook/extensions/third-party-resources",
"/healthz/poststarthook/rbac/bootstrap-roles",
"/logs",
"/metrics",
"/swaggerapi/",
"/ui/",
"/version"
]
}

node节点安装

以下安装操作node01和node02一样,涉及ip地址的请根据实际修改,以node01为例。

docker安装

1
2
3
4
5
6
7
8
9
10
yum install docker 

#查看版本好,看docker是否安装成功
docker version

#设定开机启动
systemctl enable docker

#启动docker服务
systemctl start docker

安装Flannel

安装配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#安装
yum install flannel

#具体配置
vim /etc/sysconfig/flanneld

#设定etcd的服务地址
FLANNEL_ETCD_ENDPOINTS="http://10.186.61.103:2379"

#设置etcd设定的网络信息
FLANNEL_ETCD_PREFIX="/atomic.io/network"

#这个是设定flanneld的启动参数
FLANNEL_OPTIONS="--logtostderr=false --log_dir=/var/log/k8s/flannel/ --etcd-prefix=/atomic.io/network --etcd-endpoints=http://10.186.61.103:2379 --iface=eth0"


#配置完成后需要重启flanneld
systemctl start flanneld

#设定开机启动
systemctl enable flanneld

#重启docker,这样就可以引用flanneld的网桥配置了
systemctl restart docker

#ifconfig 查看flannel0 是否出来了,配置是否正确
ifconfig

验证网络

验证是需要在master节点上执行

1
2
3
4
5
6
7
8
9
10
11
12
[root@master ~]# etcdctl get /atomic.io/network/config  
{"Network":"172.17.11.1/16"}
[root@master ~]# etcdctl ls /atomic.io/network/subnets
/atomic.io/network/subnets/172.17.102.0-24
/atomic.io/network/subnets/172.17.11.0-24
/atomic.io/network/subnets/172.17.55.0-24
[root@master ~]# etcdctl get /atomic.io/network/subnets/172.17.11.0-24
{"PublicIP":"10.186.61.103"}
[root@master ~]# etcdctl get /atomic.io/network/subnets/172.17.55.0-24
{"PublicIP":"10.186.60.60"}
[root@master ~]# etcdctl get /atomic.io/network/subnets/172.17.102.0-24
{"PublicIP":"10.186.65.43"}

10.186.60.60为node01地址,10.186.65.43为node02地址,网络验证通过。

安装kubernetes-node

安装

1
yum install kubernetes-node

配置kubernetes

1
2
3
4
5
# cat /etc/kubernetes/config |grep -Ev '^#|^$'
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=false"
KUBE_MASTER="--master=http://10.186.61.103:8080"

配置kubelet组件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
vim  /etc/kubernetes/kubelet

KUBELET_ADDRESS="--address=0.0.0.0"

# 配置本机的地址
KUBELET_HOSTNAME="--hostname-override=10.186.60.60"

# 配置apiserver api-server服务地址
KUBELET_API_SERVER="--api-servers=http://10.186.61.103:8080"

# 配置pod infrastructure container地址
#KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=10.186.61.103:5000/pod-infrastructure:latest"

# Add your own!
KUBELET_ARGS=""

其中KUBELET_POD_INFRA_CONTAINER配置由于使用原来的地址,下载速度太慢,所以配置实用集群内仓库地址,搭建集群内仓库地址请参考:为Kubernetes集群部署本地镜像仓库
此处如果使用本地仓库地址,需要加本地仓库地址加入docker配置,如下:

1
2
3
4
5
6
7
8
9
10
11
# cat /etc/docker/daemon.json 
{
"registry-mirrors": [
"https://2lqq34jg.mirror.aliyuncs.com",
"https://pee6w651.mirror.aliyuncs.com",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com"
],
"dns": ["8.8.8.8","8.8.4.4"],
"insecure-registries":["10.186.61.103:5000"]
}

配置proxy

1
2
# cat /etc/kubernetes/proxy |grep -Ev '^$|^#'
KUBE_PROXY_ARGS="--bind=address=0.0.0.0"

启动服务

1
2
3
4
5
#启动服务
systemctl start kubelet kube-proxy

#设定开机启动
systemctl enable kubelet kube-proxy

测试集群

在master节点运行

1
2
3
4
5
6
7
8
# kubectl get nodes
NAME STATUS AGE
10.186.60.60 Ready 8d
10.186.65.43 Ready 8d
# kubectl -s http://10.186.61.103:8080 get nodes
NAME STATUS AGE
10.186.60.60 Ready 8d
10.186.65.43 Ready 8d

如上信息表示节点正常。

本文标题:CentOS7安装配置Kubernetes集群

文章作者:Francis

原始链接:http://www.cnops.com/posts/aba522df.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。