实验环境:
linux系统 | centos |
---|---|
docker版本 | 18.03.0 |
master | 192.168.166.156 |
– | – |
node1 | 192.168.166.160 |
node2 | 192.168.166.161 |
k8s是Google开源的容器编排工具,提供自动化部署、大规模可伸缩、应用容器化管理等功能。
k8s的搭建
修改三台主机的主机名并编写域名解析文件
#在三个节点上分别做主机名的修改
master节点:hostnamectl set-hostname master;bash
node1节点:hostnamectl set-hostname node1;bash
node2节点:hostnamectl set-hostname node2;bash
#编写域名解析文件
vim /etc/hosts
192.168.166.156 master
192.168.166.160 node1
192.168.166.161 node2
#使用scp工具将域名解析文件同步到另外两台主机
scp /etc/hosts root@node1:/etc
scp /etc/hosts root@node2:/etc
关闭防火墙和selinux
关闭我们的防火墙
#三台主机都做
systemctl stop firewalld
systemctl disable firewalld
这里我展示master节点上的
关闭selinux
##三台主机都做
#临时关闭selinux
setenforce 0
getenforce #查看selinux的状态
##要永久关闭selinux,要修改配置文件,下次重启后就自动关闭
vim /etc/selinux/conf
SELINUX=disabled
关闭系统中的swap分区
#三台主机都做
#临时关闭系统中的swap分区
swapoff -a #取消所有的swap分区的挂载
#永久关闭swap分区
vim /etc/fstab
(将其中有关swap分区挂载的信息注释掉)
修改内核参数
#三台主机都做
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
#然后使用sysctl -p 刷新到内存
在一台主机做好后同步到另外两台主机
####***这里一定要注意只有主机上有docker并且docker处于开启状态才能刷新不然会报错***
时间同步
#三台主机都做
#安装时间服务
yum install -y ntpdate
#向阿里云的时间服务器同步(也可以使用其他的时间服务器)
ntpdate ntp1.aliyun.com
保证时间的误差很小就可以了
修改daemon文件
#三台主机都做
#修改我们的/etc/docker/daemon.json文件
此文件中原本就有一个镜像加速配置,在其后面添加
vim /etc/docker/daemon.json
"exec-opts": ["native.cgroupdriver=systemd"]
添加后
systemctl daemon-reload
systemctl restart docker
编辑k8s的yum源
#三台主机都做
vim /etc/yum.repos.d/k8s.repo
[k8s]
name=k8s
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
安装k8s并设置开机自启
#三台主机都做
yum install -y kubeadm-1.16.0 kubectl-1.16.0 kubelet-1.16.0
#注意这里的k8s的版本要与docker版本相匹配,不然可能会出现警告或者报错
然后将k8s设置为开机自启(此时不能开启)
systemctl enable kubelet
#kubeadm 为初始化、管理集群的工具 kubelet 为核心 kubectl 提供操作的命令
集群的初始化
#只在master节点上做
kubeadm init --apiserver-advertise-address 192.168.16.156 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.16.0 --pod-network-cidr 10.244.0.0/16
# --apiserver-advertise-address 用于指定我们的集群中master节点所在主机的IP地址
#--image-repository 指定镜像地址为阿里云 ,k8s的创建需要使用到很多的镜像,此选项就是指定我们的镜像从哪里获取,默认使用谷歌上获取,
#--kubernetes-version 我们的k8s的版本是多少
#--pod-network-cidr pod中使用的网段是多少,因为我们默认使用的就是Flannet网络,而Flannet网络的网段就是这样(也可以使用其他的网络)
这样就代表正在初始化集群,并且在拉取镜像,拉取完成后会有7个镜像
七个镜像如下:
最后能够看到如下内容说明成功了
将框中的内容保存下来,后面要用
设置环境变量
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
网络插件的安装
#master上做
上一步初始化完成后,我们就可以查看集群的状态了,此时集群的状态为notready,是因为我们的网络插件没有安装,在k8s中我们的网络功能是使用插件完成的,k8s本身并不提供网络功能,需要自行安装
kubectl apply -f kube-flannel-v0.14.0.yml
##我这里是将网络插件文件下载到本地了
查看集群的状态
网络插件下载完成,并且下载时会自动的拉取有关插件的镜像
网络插件的镜像
集群间必须要有网络,因为要实现集群中主机的通信
其他节点的加入
#在除master以外的节点上执行
kubeadm join 192.168.166.156:6443 --token gaw8hb.z2w8nuvyi7s6c1ft \
--discovery-token-ca-cert-hash sha256:62cfc23be0ba6aac877382d629e8b3ec15204736b71b68e6c0ca7df0459e9c1b
这种情况下就好了,节点状态改变随系统配置而定