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
5systemctl 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 | yum install ntp |
时间同步的地址可以选择其他地址,本次使用阿里云的时间服务器地址,更多配置请参考:搭建内网NTP时间服务器。
master节点安装
安装flannel
1 | #安装 |
安装etcd
1 | #安装 |
其中网络号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 | # cat /etc/kubernetes/apiserver |grep -Ev '^#|^$' |
配置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 | # grep -Ev '^#|^$' /etc/kubernetes/controller-manager |
配置kube-scheduler配置文件
1 | # grep -Ev '^#|^$' /etc/kubernetes/scheduler |
启动服务
1 | #让配置生效 |
测试master
1 | # curl 127.0.0.1:8080 |
node节点安装
以下安装操作node01和node02一样,涉及ip地址的请根据实际修改,以node01为例。
docker安装
1 | yum install docker |
安装Flannel
安装配置
1 | #安装 |
验证网络
验证是需要在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 | # cat /etc/kubernetes/config |grep -Ev '^#|^$' |
配置kubelet组件
1 | vim /etc/kubernetes/kubelet |
其中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 | # cat /etc/kubernetes/proxy |grep -Ev '^$|^#' |
启动服务
1 | #启动服务 |
测试集群
在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
如上信息表示节点正常。