centos7搭建kubernetes
一、准备工作
1. 招兵买马
1.1 选择一个云平台,租服务器。我选择的是阿里云,3台 1核1G ESC,租了一个月,配置如下。
![](https://img.haomeiwen.com/i2779961/93ef48c00b0a887a.png)
1.2 创建安全组,不然你得这3台机器可能无法通信
![](https://img.haomeiwen.com/i2779961/19e9aed2316a122f.png)
1.3 简单的系统配置
三台机器,分别叫k8s001, k8s002, k8s003。
![](https://img.haomeiwen.com/i2779961/5d026f329f9b5a04.png)
1.4 分组设置
![](https://img.haomeiwen.com/i2779961/472a296f6a2081cb.png)
1.5 交钱
![](https://img.haomeiwen.com/i2779961/a07e18f28a263568.png)
2. 统计服务器信息
登录阿里云控制台,查看实例信息,记录一下IP地址,稍后会通过SSH远程登录。
![](https://img.haomeiwen.com/i2779961/7e399b0454763be7.png)
3. 使用SSH登录到这三台服务器上
我用的是mac,命令行是iterm2,所以直接开3个窗口,方便后序操作。
![](https://img.haomeiwen.com/i2779961/f646379c836a168b.png)
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。
![](https://img.haomeiwen.com/i2779961/249976fa37604147.png)
2. 对etcd做基础配置
etcd默认安装路径是:/etc/etcd/etcd.conf
vim /etc/etcd/etcd.conf
我们可以使用vim命令打开这个配置文件。内容如下:
![](https://img.haomeiwen.com/i2779961/9821bce8d252fd54.png)
浅蓝色的配置项,是已经开放的,深蓝色的都是被注释了的,这一看也没几个配置项嘛。
配置项中各个字段的含义可参考这哥们的博客: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"
![](https://img.haomeiwen.com/i2779961/0600185aec1b5365.png)
3. 启动etcd
systemctl start etcd
顺便说一句,systemctl是干啥的?它是Linux系统服务管理器指令,用于对服务做各种操作,比如启动、停止、重启等等。
想了解的呢,看这里:Linux命令大全-systemctl
接下来,我们要检查一下etcd的状态。
etcdctl -C http://etcd:2379 cluster-health
![](https://img.haomeiwen.com/i2779961/60617570f46e473a.png)
打印出来的信息,说是集群不健康,无所谓了,反正启动了,后面再说。
4. Docker & Docker Rigistry
安装Docker和Docker私有仓库。
yum install docker docker-distribution -y
![](https://img.haomeiwen.com/i2779961/2f9dc26df3672af7.png)
5. 配置Docker
Docker的默认配置文件路径: /etc/sysconfig/docker
老样子,直接用vim打开,并编辑。在最后加一句,OPTIONS='--insecure-registry registry:5000'。
这样,你就可以从Docker Registry中拉取镜像了。
![](https://img.haomeiwen.com/i2779961/c3344b685536ac82.png)
版本信息如下:
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
![](https://img.haomeiwen.com/i2779961/54a2650fa472bf04.png)
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
![](https://img.haomeiwen.com/i2779961/9290efbac5c05828.png)
9. 配置kubernetes
kubernetes 的配置文件路径:/etc/kubernetes/config
![](https://img.haomeiwen.com/i2779961/d5d535b4e6829810.png)
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'
![](https://img.haomeiwen.com/i2779961/942b5b1c9bed7fa3.png)
启动Docker,并设置开机自动启动。
systemctl start docker
systemctl enable docker
2. 安装并配置Kubernetes
yum install -y kubernetes
在node节点上需要启动kubernetes 下述组件:kubelet、kubernets-Proxy,因此需要相应修改下述配置。
修改/etc/kubernetes/config,目的是指定Master是谁。
![](https://img.haomeiwen.com/i2779961/603e910c95132cbc.png)
修改/etc/kubernetes/kubelet,目的是指定接受请求的IP、hostname、API Server。
![](https://img.haomeiwen.com/i2779961/e5e2bcb2624c9e17.png)
启动kubelet和kube-proxy,并配置为开启自动启动。
systemctl start kubelet kube-proxy
systemctl enable kubelet kube-proxy
![](https://img.haomeiwen.com/i2779961/1df5f547024a3044.png)
3. 到Master节点上,查看Node信息
kubectl -s http://k8s-master:8080 get node
![](https://img.haomeiwen.com/i2779961/407a270726c01965.png)
到此为止,Master与Slavery节点之间的通信完成。
四、安装覆盖网络Flannel
什么是Flannel?
看这篇:一篇文章带你了解Flannel
Master和Slavery节点都需要执行以下操作。
1. 安装Flannel
yum install -y flannel
2. 配置Flannel
Flannel配置文件默认为止:/etc/sysconfig/flanneld
![](https://img.haomeiwen.com/i2779961/4bb0772aa3edc4fd.png)
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