三台主机:
192.168.88.142(master)
192.168.88.137(node1)
192.168.88.138(node2)
vim /etc/hosts
scp /etc/hosts root@k8snode1:/etc/
scp /etc/hosts root@k8snode2:/etc/ #把修改后的配置文件远程拷贝到其他两台主机
都修改配置文件后,相互ping一下,看是否能够ping 通
ping k8smaster
ping k8snode1
ping k8snode2
hostname k8smaster #修改主机名(192.168.88.142)
bash #使其生效
hostname k8node1 #修改主机名(192.168.88.137)
bash #使其生效
hostname k8snode2 #修改主机名(192.168.88.138)
bash #使其生效
yum install docker –y #三台主机安装docker
systemctl enable docker #三台主机开机自启
由于国内无法直接安装k8s相关组件(需要),我们使用国内阿里云镜像站下载k8s相关组件。
1.https://developer.aliyun.com/mirror/ #登录阿里云镜像站,找到k8s选项
2.添加k8s的yum源(将阿里镜像站给的参考直接拷贝到yum源中)
Vim /etc/yum.repos.d/kubernetes.repo
将配置文件远程拷贝到其他两台主机
scp /etc/yum.repos.d/kubernetes.repo root@k8snode1: /etc/yum.repos.d/
scp /etc/yum.repos.d/kubernetes.repo root@k8snode2: /etc/yum.repos.d/
3.由于最新版本的k8s国内镜像站没有相应资源,所以我们下载1.15.3版本
yum install -y kubelet-1.15.3 kubeadm-1.15.3 kubectl-1.15.3 --disableexcludes=kubernetes #三台主机都安装
下面操作要在三台主机上都操作
http://elrepo.org/tiki/tiki-index.php #访问这个网站
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org #导入key
yum install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm #安装
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available –showduplicates #查看内核版本
yum --enablerepo="elrepo-kernel" install kernel-ml –y #安装内核,安装成功后,系统默认将更新的内核放在引导文件的第一位
#修改内核引导文件
vim /boot/grub2/grub.cfg #在这个文件中我们寻找内和引导参数,发现此时最新的内核版本就在第一位
grub2-set-default 0 #执行此命令,确定一下引导内核从第零位开始
grub2-mkconfig -o /boot/grub2/grub.cfg #重新生成以下文件
reboot #重启电脑
重启电脑后查看现在的内核地址是否是最新版本
[root@k8smaster ~]# uname –r
5.7.6-1.el7.elrepo.x86_64 #升级内核成功!
注:不能用克隆主机,因为要保持三台主机的Mac地址都不同。
cat /sys/class/net/ens33/address #查看Mac地址
cat /sys/class/dmi/id/product_uuid #查看UUID(MAC地址不同,UUID也不相同)
free –m #查看swap分区,我们需要永久关闭掉swap分区
swapoff –a #关闭swap分区
cp /etc/fstab /etc/fstab_bak #备份文件
vim /etc/fstab #修改这个文件
#注释掉swap行,保存退出
vim /etc/sysctl.conf
sysctl –p #生效
#修改内核参数
Free –m #查看关闭
systemctl stop firewalld && systemctl disable firewalld #关闭防火墙
systemctl start docker #重启docker
docker info #查看相关信息
我们需要开启最下面两个参数(目前是关闭的)
cd /proc/sys/net/bridge/ #进到这个目录下
[root@k8snode1 bridge]# cat bridge-nf-call-iptables
vim /etc/sysctl.conf #仍然是修改这个文件
sysctl –p #生效
scp /etc/sysctl.conf root@k8snode1:/etc/
scp /etc/sysctl.conf root@k8snode2:/etc/
systemctl restart docker
docker info #重启docker发现上面两个参数没有了(OK!)
systemctl enable docker
vim /etc/selinux/config #关闭是SELINUX
setenforce 0
systemctl enable kubelet.service
systemctl start kubelet.service #三台主机都执行
kubeadm config images pull #k8s在启动过程中需要有大量的组件,这样拉去的时候是直接连接的谷歌服务器,会超时。
kubeadm version #看一下版本,去选择此版本组建的版本号
kubeadm config images list --kubernetes-version=v1.15.3
我们在国内无法连接到谷歌服务器,但是可以从国内镜像中拉取这些k8s组件
docker pull bingju328/kube-apiserverv1.15.3
docker pull mirrorgooglecontainers/kube-controller-manager:v1.15.3
docker pull mirrorgooglecontainers/kube-scheduler:v1.15.3
docker pull mirrorgooglecontainers/kube-proxy:v1.15.3
docker pull mirrorgooglecontainers/pause:3.1
docker pull mirrorgooglecontainers/etcd:3.3.10
docker pull coredns/coredns:1.3.1
#三台主机全部拉取以上镜像
注:在拉去之前,会有速度慢的问题,可以实现配置一下docker加速器(此处省略)
docker images #查看一下拉去下来的镜像
拉取玩镜像后我们需要把镜像的名字改成k8s识别的名字,即上图的名字
一共拉取了七个组件,其中有五个是名字带有mirrorgooglecontainers,先替换这五个。
通过一个脚本,批量替换
docker images|grep mirrorgooglecontainers | awk '{print "docker tag ",$1":"$2,$1":"$2}' |sed -e 's#docker.io/mirrorgooglecontainers#k8s.gcr.io#2' |sh –x #三台主机都执行
docker tag docker.io/coredns/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1
docker tag docker.io/bingju328/kube-apiserverv1.15.3 k8s.gcr.io/kube-apiserver:v1.15.3 #剩下两个替换,三台主机都执行
docker images |grep k8s.gcr.io #过滤查看一下
docker images |grep mirrorgooglecontainers |awk '{print "docker rmi ",$1":"$2}' |sh -x
docker images |grep docker.io |awk '{print "docker rmi ",$1":"$2}' |sh –x #删除剩下的不需要的镜像
docker pull quay.io/coreos/flannel:v0.11.0-arm64 #拉取flannel网络,三台主机
docker images #查看仓库是否拉去下来
mkdir -p /etc/cni/net.d #创建目录给flannel做配置文件
vim /etc/cni/net.d/10-flannel.conf
scp /etc/cni/net.d/10-flannel.conf root@k8snode1:/etc/cni/net.d/10-flannel.conf
scp /etc/cni/net.d/10-flannel.conf root@k8snode2:/etc/cni/net.d/10-flannel.conf #远程拷贝
mkdir /usr/share/oci-umount/oci-umount.d/ -p #三台主机
mkdir /run/flannel #三台主机
写flannel网段配置文件
scp /run/flannel/subnet.env root@k8snode1:/run/flannel/subnet.env
scp /run/flannel/subnet.env root@k8snode2:/run/flannel/subnet.env
systemctl daemon-reload
systemctl restart kubelet.service
systemctl restart docker #三台
poweroff #关机,照快照
Kubeadm init –apiserver-advertise-address 192.168.88.142 –pod-network-cidr=10.244.0.0/16 #初始化进程,此操作只在master上操作
提示如果作为管理者,需要运行上述命令,在master运行上述命令。
访问上图给出的地址,找到flannel网络点击
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/k8s-manifests/kube-flannel-legacy.yml
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/k8s-manifests/kube-flannel-rbac.yml #master执行这两个命令
其他两台主机要加入k8s集群,运行上图他给出的命令,即可加入集群
计入集群后提示到master上运行kubectl get nodes命令。
在master上运行kubectl get nodes
创建docker目录
Mkdir –p /etc/docker
上述图片是初始化k8s集群时给的网站。
vim /etc/docker/daemon.json
#之前添加了镜像加速器
Scp /etc/docker/daemon.json root@k8snode1: /etc/docker/daemon.json
Scp /etc/docker/daemon.json root@k8snode2: /etc/docker/daemon.json
K8s本身无法tab
Locate bash_completion
Yum install bash-completion –y #需要装这个软件,否则无法使用tab,三台主机都安装
复制下来这个文件名,重新读取一下这个文件
Source /usr/share/bash-completion/bash_completion #重新读取一下这个文件
Source <(kubectl completion bash) #以上操作在三台主机上都执行
现在就可以使用tab了!
显示所有节点健康,K8S安装完毕!