什么是Kubernetes?这里就不做解释了,大家可以去百度看一下,咱们这里主要来讲解怎么在我们的虚拟机里面搭建Kubernetes集群。
1. 基础安装
首先准备三台虚拟机,配置好对应的IP地址。
1.1 安装JDK
上面三个就是我配置好的虚拟机,首先我们先安装java环境
yum install -y java
使用java -version看看我们的环境是不是都安装好了。
1.2 安装Docker
接下来因为Kubernetes依赖Docker,这里我们安装Docker环境,如果我们直接使用yum源来安装的话,可能到了安装Kubernetes的时候会版本过高,所以这里我们选择18.06.3.ce-3.el7这个版本。
第一步先安装需要的工具
yum install -y yum-utils device-mapper-persistent-data lvm2
第二步设置源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
第三步查看对应的版本
yum list docker-ce.x86_64 --showduplicates | sort -r
这里能看到好多,找到我们需要的版本就好了
第四步安装Docker
yum makecache fast && yum -y install docker-ce-18.06.3.ce-3.el7
第五步设置开机启动
systemctl daemon-reload && systemctl restart docker
systemctl enable docker.service
这样我们的Docker环境就安装好了,看看我们需要的Docker版本是不是正确的。
1.3 Master 和 Node都需要的一些基础组件
直接按照步骤安装就好了
yum install vim wget ntpdate -y
因为 kubernetes 会创建防火墙规则,导致防火墙规则重复。所以这里我们要将防火墙关闭
systemctl stop firewalld & systemctl disable firewalld
我们关闭 Swap
分区。 Swap
是 Linux
的交换分区,在系统资源不足时,Swap
分区会启用。这操作会拖慢我们的应用性能。
临时关闭:swapoff -a。 永久关闭:在/etc/fstab中找到/dev/mapper/centos-swap swap ... ,把这个注释掉就好了
继续关闭 Selinux
暂时关闭:setenforce 0。 永久关闭:在/etc/sysconfig/selinux中把SELINUX设置成disabled
使用 ntpdate
来统一我们的系统时间和时区,服务器时间与阿里云服务器对齐。
# 统一时区,为上海时区
ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
bash -c "echo 'Asia/Shanghai' > /etc/timezone"
# 统一使用阿里服务器进行时间更新
ntpdate ntp1.aliyun.com
1.4 安装Kubernetes的组件
首先先将安装源更换为为国内的阿里云源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
接着直接使用 yum
命令安装 kubelet
、 kubeadm
、kubectl
即可,安装完毕后启用 kubelet
即可。
yum install -y kubelet kubeadm kubectl
# 启动kubelet
systemctl enable kubelet && systemctl start kubelet
kubelet 是 Kubernetes 中的核心组件。它会运行在集群的所有节点上,并负责创建启动服务容器 kubectl 则是Kubernetes的命令行工具。可以用来管理,删除,创建资源 kubeadm 则是用来初始化集群,子节点加入的工具。
2. Master节点的安装
首先,我们使用 hostnamectl
来修改主机名称为 master
。hostnamectl
是 Centos7
出的新命令,可以用来修改主机名称:
hostnamectl set-hostname master
使用vim /etc/hosts,把我们的地址映射到对应master名称上。
配置 Kubernetes 初始化文件:
接着我们使用 kubeadm config print init-defaults
输出一份默认初始化配置文件,使用 >
操作符即可导出为一份文件,方便我们进行修改。
kubeadm config print init-defaults > init-kubeadm.conf
vim init-kubeadm.conf
## 替换调下面的内容
# imageRepository: k8s.gcr.io 更换k8s镜像仓库
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
# localAPIEndpointc,advertiseAddress为master-ip ,port默认不修改
localAPIEndpoint:
advertiseAddress: 192.168.56.101 # 此处为master的IP
bindPort: 6443
# 配置子网络
networking:
dnsDomain: cluster.local
serviceSubnet: 10.96.0.0/12
podSubnet: 10.244.0.0/16 # 添加这个
在修改完配置文件后,我们需要使用 kubeadm
拉取我们的默认组件镜像。
kubeadm config images pull --config init-kubeadm.conf
3.初始化Kubernetes
在镜像拉取后,我们就可以使用刚才编辑好的配置文件去初始化 Kubernetes
集群了。这里直接使用 kubeadm init
命令去初始化即可。
kubeadm init --config init-kubeadm.conf
在静等运行一会后,终端会给出以下提示:
其中,红框命令为在 Master
节点需要执行的初始化命令,其作用为将默认的 Kubernetes
认证文件拷贝进 .kube
文件夹内,才能默认使用该配置文件。
蓝框为需要在 node
节点执行的命令。作用是可以快速将 Node
节点加入到 Master
集群内。
4.安装 Flannel
它的主要作用是通过创建一个虚拟网络,让不同节点下的服务有着全局唯一的IP地址,且服务之前可以互相访问和连接。
那么 Flannel
作为 Kubernetes
的一个组件,则使用 Kubernetes
部署服务的方式进行安装。首先下载配置文件:
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
我们直接拉取的时候可能会拒绝连接,所以我们需要加一些东西。
在/etc/hosts文件添加一条199.232.68.133 raw.githubusercontent.com,这样我们就可以下载了。
接着我们手动拉取下 flannel
镜像。找到编写镜像名称和版本的地方,使用 docker pull
手动拉取一下镜像:
docker pull quay.io/coreos/flannel:v0.13.0-rc2
这里需要注意,如果大家装不上就需要使用cat kube-flannel.yml |grep image|uniq 去找我们自己需要的版本.
如果还不行大家可以看看https://www.cnblogs.com/python-wen/p/11224555.html这个博客的内容,进行修改。
等待镜像拉取结束后,可以使用 kubectl apply
命令加载下服务。
kubectl apply -f kube-flannel.yml
这里可能会出现问题,需要我们把/etc/kubernetes/admin.conf添加到~/.bash_profile中
在大约稍后1分钟左右,我们可以使用 kubectl get nodes
命令查看节点的运行状态。如果 STATUS = ready
,则代表启动成功。
kubectl get nodes
5. Node节点配置
首先第一步,还是需要先设置一下 hostname
为 node1
。在 node
机器上执行:
hostnamectl set-hostname node1
接着将 master
节点的配置文件拷贝 k8s
到 node
节点。回到在 master
节点,使用 scp
命令通过 SSH
传送文件:
scp $HOME/.kube/config root@node的ip:~/
随后在 node
节点执行以下命令,归档配置文件:
mkdir -p $HOME/.kube
sudo mv $HOME/config $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
我们直接使用刚才在 master
生成的节点加入命令,在 node
机器上执行。让 Node
节点加入到 master
集群内:
kubeadm join 192.168.82.106:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:eef4d7c635ad5b1c9595f63fbd5e8b8c15e1fb12b552861c5b158a4371050e27
如果刚才的命令丢了,可以在 master
机器上使用 kubeadm token create
重新生成一条命令:
kubeadm token create --print-join-command
6. 给Node安装 Flannel
这里和 Master 安装执行方式一样,参考同上。