一、准备环境(三台虚拟机都执行)
1、准备三台虚拟机
master 10.7.0.111
node1 10.7.0.112
node1 10.7.0.113
2、三台虚拟机分别修改hostname
hostnamectl set-hostname master
hostnamectl set-hostname node1
hostnamectl set-hostname node2
3、修改三台虚拟机的hosts,在文件末尾追加三行
vi /etc/hosts
10.7.0.111 master
10.7.0.112 node1
10.7.0.113 node2
4、禁用SELinux
1)、临时关闭(不用重启机器)
setenforce 0
#setenforce 0 设置SELinux 成为permissive模式,setenforce 1 设置SELinux 成为enforcing模式
2)、永久关闭(需要重启机器)
vi /etc/selinux/config
设置为:SELINUX=disabled
3)、查看SELinux状态
getenforce
5、防火墙
systemctl stop firewalld && systemctl disable firewalld
查看防火墙状态
systemctl status firewalld
6、交换分区
1)、临时关闭swap分区
swapoff -a
#swapon -a与swapoff -a分别用于swap分区的临时启动与关闭,重启失效.
free -m
查看swap分区的使用情况
2)、永久关闭swap分区
sed -ri 's/.*swap.*/#&/' /etc/fstab
上面命令即:修改 vi /etc/fstab 文件,注释掉 包含swap的行,
3)、创建vi /etc/sysctl.d/kubernetes.conf文件(安装k8s需要用到),添加下面内容:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness=0
#生效文件
modprobe br_netfilter sysctl -p /etc/sysctl.d/kubernetes.conf
7、iptables
iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat && iptables -P FORWARD ACCEPT
确认一下iptables filter表中FOWARD链的默认策略(pllicy)为ACCEPT。Docker从1.13版本开始调整了默认的防火墙规则,禁用了iptables filter表中FOWARD链,这样会引起Kubernetes集群中跨Node的Pod无法通信。但这里通过安装docker ,发现默认策略又改回了ACCEPT,这个不知道是从哪个版本改回的
iptables -nvL
二、安装docker(三台虚拟机都执行)
1、卸载旧版本
yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine
删除存储目录
rm -rf /etc/docker
rm -rf /run/docker
rm -rf /var/lib/dockershim
rm -rf /var/lib/docker
rm -rf /usr/libexec/docker
2、安装一些必要的系统工具
yum install -y yum-utils device-mapper-persistent-data lvm2
3、添加软件源信息
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新 yum 缓存:
yum makecache fast
4、安装 Docker-ce:
yum -y install docker-ce
启动 Docker 后台服务
systemctl start docker systemctl enable docker
查看版本
docker version
三、安装kubelet kubeadm kubectl(三台虚拟机都执行)
1、配置源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF
更新 yum 缓存:
yum makecache fast
2、安装 yum install -y kubelet kubeadm kubectl
启动kubelet服务
systemctl enable kubelet && systemctl start kubelet
四、初始化集群
1、初始化Master(master执行)
1)、初次初始化
在master上执行下面的命令:注意修改kubernetes-version 和 apiserver-advertise-address
kubeadm init \ --kubernetes-version=v1.18.0 \ --pod-network-cidr=10.244.0.0/16 \ --apiserver-advertise-address=10.7.0.111
报错如下,是因为 导入docker k8s 镜像 这些镜像默认在google是无法访问到的,可以直接指定镜像源
2)、清理失败环境
#集群初始化如果遇到问题,可以使用下面的命令进行清理,清理后根据提示删除相关文件,必须多删除一个没有提示的文件夹rm -rf $HOME/.kube
kubeadm reset
3)、指定镜像源重新初始化
kubeadm init --apiserver-advertise-address=10.7.0.111 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.0 --service-cidr=10.96.0.0/16 --pod-network-cidr=10.244.0.0/16
初始化成功
根据提示执行以下命令,初始化完成,
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
4)、查看节点状态(NotReady,是因为网络未初始化)
kubectl get node / kubectl get nodes
5)、查看pod状态(dns网络未初始化)
kubectl get pods -n kube-system -o wide
kubectl get pod --all-namespaces -o wide
6)、查看node日志(提示网络未准备好)
journalctl -f -u kubelet
7)、安装Pod Network(flannel)
7.1)、下载flannel配置文件
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
7.2)、部署flannel
kubectl create -f kube-flannel.yml
错误:
7.3)、查看 pod详细信息,发现镜像拉取失败
kubectl describe pod kube-flannel-ds-amd64-lkqt6 -n kube-system
修改 kube-flannel.yml 将 quay.io 改为 quay-mirror.qiniu.com后执行以下命令
7.4)、重新部署网络
kubectl apply -f kube-flannel.yml
初始化Master成功
2、向Kubernetes集群中添加Node节点(node执行)
kubeadm join 10.7.0.111:6443 --token tvnmar.h54kaqeqddtkyuxq --discovery-token-ca-cert-hash sha256:514b631269638051efe9381c7ee711c92508e97a158c3de51f13fdd870b5cf88
下一篇将更新k8s使用篇