centos7搭建kubernetes
一、准备工作
1. 招兵买马
1.1 选择一个云平台,租服务器。我选择的是阿里云,3台 1核1G ESC,租了一个月,配置如下。

1.2 创建安全组,不然你得这3台机器可能无法通信

1.3 简单的系统配置
三台机器,分别叫k8s001, k8s002, k8s003。

1.4 分组设置

1.5 交钱

2. 统计服务器信息
登录阿里云控制台,查看实例信息,记录一下IP地址,稍后会通过SSH远程登录。

3. 使用SSH登录到这三台服务器上
我用的是mac,命令行是iterm2,所以直接开3个窗口,方便后序操作。

4. 测试一下,这三台服务器是否互通, 并对做一些修改
很简单,先登录一台,分别ping另外两台服务器的IP。
OK,到此为止,异常顺利。
By the way,这钱不白花,比公司的服务器强多了。
4.1 分别修改hostname
master主机
[root@localhost ~]# hostnamectl set-hostname k8s-master
node1主机
[root@localhost ~]# hostnamectl set-hostname k8s-node-1
node2主机
[root@localhost ~]# hostnamectl set-hostname k8s-node-2
4.2 关闭系统防火墙及设置selinux状态
分别执行
systemctl stop firewalld && systemctl disable firewalld && setenforce
4.3 分别配置master及node主机的host文件
172.16.95.109 k8s-master
172.16.95.109 etcd
172.16.95.109 registry
172.16.95.108 k8s-node-1
172.16.108.251 k8s-node-2
注意,这里配置的私有地址。
4.4 在master、node主机上分别配置时间同步
ntpdate ntp1.aliyun.com
5. 给这三台服务器一个身份
服务器名称 | 身份 |
---|---|
k8s001 | Master |
k8s002 | Slavery1 |
k8s003 | Slavery2 |
简单解释一下,我们把这三台机器作为一个集群,在集群中,单台服务器叫做“节点(Node)”。
对于k8s(Kubernetes)而言呢,所有Node分为两类,管理者节点(Master)和奴隶节点(Slavery)。只有一个Master,其余Node为Slavery。
Master负责管理集群中的其他Node,比如上报资源,CPU、内存剩余数量等等。像不像你在公司被Master分配任务的样子?
现在很多文档中都改了,也许认为Slavery具有贬义含义,更名为Worker,这**不是一个意思么,干活就完了,怎么这么多B话。
二、配置Master
1. 安装etcd
由于k8s依赖etcd,所以需要先安装它。(三台机器都要安装)
可以先简单了解一下etcd是啥。下面给两篇博客,瞅一眼即可。
- etcd简介
-
etcd对比zookeeper
看完之后你会有基本概念,“键值存储”,“是做服务发现用的”, “共享配置信息”。
yum install -y etcd ,-y 的意思是当命令询问是权限、是否安装等信息时,一路选择yes。

2. 对etcd做基础配置
etcd默认安装路径是:/etc/etcd/etcd.conf
vim /etc/etcd/etcd.conf
我们可以使用vim命令打开这个配置文件。内容如下:

浅蓝色的配置项,是已经开放的,深蓝色的都是被注释了的,这一看也没几个配置项嘛。
配置项中各个字段的含义可参考这哥们的博客:etcd配置文件详解
对,就是这四个选项,我们需要修改一下后三个。
- ETCD_LISTEN_CLIENT_URLS:对外提供监听的地址
- ETCD_NAME:发现服务的名称,自定义的
- ETCD_ADVERTISE_CLIENT_URLS:对外公告的该节点客户端监听地址
这分别改为:
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_NAME="master"
ETCD_ADVERTISE_CLIENT_URLS="http://etcd:2379"

3. 启动etcd
systemctl start etcd
顺便说一句,systemctl是干啥的?它是Linux系统服务管理器指令,用于对服务做各种操作,比如启动、停止、重启等等。
想了解的呢,看这里:Linux命令大全-systemctl
接下来,我们要检查一下etcd的状态。
etcdctl -C http://etcd:2379 cluster-health

打印出来的信息,说是集群不健康,无所谓了,反正启动了,后面再说。
4. Docker & Docker Rigistry
安装Docker和Docker私有仓库。
yum install docker docker-distribution -y

5. 配置Docker
Docker的默认配置文件路径: /etc/sysconfig/docker
老样子,直接用vim打开,并编辑。在最后加一句,OPTIONS='--insecure-registry registry:5000'。
这样,你就可以从Docker Registry中拉取镜像了。

版本信息如下:
docker.x86_64 2:1.13.1-109.gitcccb291.el7.centos
docker-distribution.x86_64 0:2.6.2-2.git48294d9.el7
6. 启动Docker Rigistry,并设为开机自动启动
启动Docker Rigistry。
systemctl start docker docker-distribution
设为开机自动启动。
systemctl enable docker docker-distribution
7. 终于到你了,安装Kubernetes
yum install -y kubernetes

Kubernetes版本信息:
kubernetes.x86_64 0:1.5.2-0.7.git269f928.el7
Kubernetes相关依赖项版本信息:
conntrack-tools.x86_64 0:1.4.4-5.el7_7.2
kubernetes-client.x86_64 0:1.5.2-0.7.git269f928.el7
kubernetes-master.x86_64 0:1.5.2-0.7.git269f928.el7
kubernetes-node.x86_64 0:1.5.2-0.7.git269f928.el7
libnetfilter_cthelper.x86_64 0:1.0.0-10.el7_7.1
libnetfilter_cttimeout.x86_64 0:1.0.0-6.el7_7.1
libnetfilter_queue.x86_64 0:1.0.2-2.el7_2
socat.x86_64 0:1.7.3.2-2.el7
k8s Master上需要运行的组件有:kubernetes API server,kubernetes Controller Manager ,Kubernetes Scheduler
所以,你需要继续配置这三个组件。
8. 配置kubernetes API server
kubernetes API server的配置文件路径:/etc/kubernetes/apiserver

9. 配置kubernetes
kubernetes 的配置文件路径:/etc/kubernetes/config

10. 将kubernetes API server,kubernetes Controller Manager ,Kubernetes Scheduler启动,并设为开机自动启动
systemctl enable kube-apiserver kube-controller-manager kube-scheduler
systemctl enable kube-apiserver kube-controller-manager kube-scheduler
image.png
三、配置Slavery
需要对Slavery1和Slavery2做同样的配置。
1. 安装并配置Docker
在Slavery节点上,只需要安装Docker就行,不用再安装Docker Distribution,Docker Distribution就是镜像仓库,因为你已经在Master节点安装了,我们统一去Master节点上的镜像仓库拉取或者上传镜像就行了。
yum install -y docker
配置文件里同样加一句,OPTIONS='--insecure-registry registry:5000'

启动Docker,并设置开机自动启动。
systemctl start docker
systemctl enable docker
2. 安装并配置Kubernetes
yum install -y kubernetes
在node节点上需要启动kubernetes 下述组件:kubelet、kubernets-Proxy,因此需要相应修改下述配置。
修改/etc/kubernetes/config,目的是指定Master是谁。

修改/etc/kubernetes/kubelet,目的是指定接受请求的IP、hostname、API Server。

启动kubelet和kube-proxy,并配置为开启自动启动。
systemctl start kubelet kube-proxy
systemctl enable kubelet kube-proxy

3. 到Master节点上,查看Node信息
kubectl -s http://k8s-master:8080 get node

到此为止,Master与Slavery节点之间的通信完成。
四、安装覆盖网络Flannel
什么是Flannel?
看这篇:一篇文章带你了解Flannel
Master和Slavery节点都需要执行以下操作。
1. 安装Flannel
yum install -y flannel
2. 配置Flannel
Flannel配置文件默认为止:/etc/sysconfig/flanneld

3. 配置etcd中关于flannel的key
mk /atomic.io/network/config '{"Network": "10.88.0.0/16"}'
4. 重启docker和kubernetes
在master 执行
systemctl enable flanneld
systemctl start flanneld
systemctl restart docker kube-apiserver kube-controller-manager kube-scheduler
在node上执行
systemctl enable flanneld
systemctl start flanneld
systemctl restart kubelet kube-proxy
至此kubernetes已经安装成功了。
参考博客:https://www.jianshu.com/p/65ecef9016ae