1、设置主机名
vim /etc/hosts
172.20.10.4 master
172.20.10.5 slaveA
172.20.10.6 slaveB
本次安装过程中忘了修改主节点hostname,默认hostname是:localhost.localdomain,但只要保证集群中所有节点的hostname唯一即可!
修改hostname命令如下:
hostnamectl set-hostname master
2、关闭swap
k8s若内存使用不足会采用硬盘代替,硬盘的效率绝对没有内存效率高,为了不影响k8s效率需要关闭swap
swapoff -a
# 替换,即在前面添加注释符号:#
sed -i '/swap / s/^\(.*\)$/#\1/g' /etc/fstab
sed命令执行前:
sed命令执行后:
3、关闭SELinux
setenforce 0
# 将字符enforcing替换为permissive
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
4、安装iptables
docker升级等涉及网络转发依赖iptables
yum install -y iptables-services
systemctl start iptables
systemctl enable iptables
# 清空iptables规则
iptables -F
5、开启Netfilter
docker及内核转发等网络转发需要Netfilter
modprobe br_netfilter
设置ipvs支持
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf-conntrack_ipv4
也许会遇到问题:modprobe: FATAL: Module nf-conntrack_ipv4 not found
解决:https://blog.csdn.net/AP1005834/article/details/54907700
6、K8S配置文件
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
# 开启网桥模式
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system
7、安装容器运行时
为了在Pods中运行容器,Kubernetes使用容器运行时(Container Runtime)。默认情况下,Kubernetes使用容器运行时接口(CRI)与你选择的容器运行时进行对接。
如果未指定容器运行时,kubeadm会通过扫描已知的Unix域套接字自动尝试检测已安装的容器运行时。
容器运行时包括:
- Docker
-
containerd
-
CRI-O
如果同时检测到Docker和containerd,则Docker优先。如果检测到其他两个或更多运行时,则kubeadm退出并显示错误。
# 添加阿里云yum源
$ yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装docker
$ yum install -y docker-ce
# 如果是升级docker
$ yum update -y docker-ce
# 启动docker服务并允许开启自启
$ systemctl start docker && systemctl enable docker
8、安装配置K8S
导入阿里云yum源
cat <<EOF | sudo tee /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
安装Kubernetes
# 安装
yum install -y kubeadm kubectl kubelet
# 启动服务
systemctl enable kubelet && systemctl start kubelet
9、生成配置文件
# 生成配置文件到指定的目录
kubeadm config print init-defaults > init-config.yaml
# 列出kubernetes需要pull的镜像
kubeadm config images list --config init-config.yaml
# 可以根据配置文件统一拉取镜像:前提是能科学上网,否则还是手动下载镜像
kubeadm config images pull --config init-config.yaml
罗列出需要手动下载的镜像
[root@localhost ~]# cd k8s
[root@localhost k8s]# ls
[root@localhost k8s]# kubeadm config print init-defaults > init-config.yaml
[root@localhost k8s]# ls
init-config.yaml
[root@localhost k8s]# kubeadm config images list --config init-config.yaml
k8s.gcr.io/kube-apiserver:v1.20.0
k8s.gcr.io/kube-controller-manager:v1.20.0
k8s.gcr.io/kube-scheduler:v1.20.0
k8s.gcr.io/kube-proxy:v1.20.0
k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.13-0
k8s.gcr.io/coredns:1.7.0
[root@localhost k8s]#
罗列出需要手动下载的镜像
无法访问k8s.gcr.io,改用手动下载,如下:
# 因无法科学上网,需要手动从https://hub.docker.com/下载所需镜像后修改tag并删除原始镜像
docker pull kubeimage/kube-apiserver-amd64:v1.20.0
docker tag kubeimage/kube-apiserver-amd64:v1.20.0 k8s.gcr.io/kube-apiserver:v1.20.0
docker image rm kubeimage/kube-apiserver-amd64:v1.20.0
docker pull kubeimage/kube-controller-manager-amd64:v1.20.0
docker tag kubeimage/kube-controller-manager-amd64:v1.20.0 k8s.gcr.io/kube-controller-manager:v1.20.0
docker image rm kubeimage/kube-controller-manager-amd64:v1.20.0
docker pull kubeimage/kube-scheduler-amd64:v1.20.0
docker tag kubeimage/kube-scheduler-amd64:v1.20.0 k8s.gcr.io/kube-scheduler:v1.20.0
docker image rm kubeimage/kube-scheduler-amd64:v1.20.0
docker pull kubeimage/kube-proxy-amd64:v1.20.0
docker tag kubeimage/kube-proxy-amd64:v1.20.0 k8s.gcr.io/kube-proxy:v1.20.0
docker image rm kubeimage/kube-proxy-amd64:v1.20.0
docker pull kubesphere/pause:3.2
docker tag kubesphere/pause:3.2 k8s.gcr.io/pause:3.2
docker image rm kubesphere/pause:3.2
docker pull bantianyinshi/etcd:3.4.13-0
docker tag bantianyinshi/etcd:3.4.13-0 k8s.gcr.io/etcd:3.4.13-0
docker image rm bantianyinshi/etcd:3.4.13-0
docker pull bantianyinshi/coredns:1.7.0
docker tag bantianyinshi/coredns:1.7.0 k8s.gcr.io/coredns:1.7.0
docker image rm bantianyinshi/coredns:1.7.0
10、调整配置
vim init-config.yaml
11、执行安装K8s命令:即初始化主节点
kubeadm init --config=init-config.yaml | tee kubeadm-init.log
看到上述信息说明K8s之master主机安装成功!记录下token备用,后续集群配置使用
kubeadm join 172.20.10.4:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:d909d66a077b19f686975da2691a7a82713ec975c09b6c6e740280a6125ca5b7
参考:kubeadm init初始化k8s集群时报错,[kubelet-check] Initial timeout of 40s passed.
12、master主机安装成功,根据其最后显示内容执行如下命令:
# 创建kube工作目录。保存交互缓存和配置信息
mkdir -p $HOME/.kube
# 拷贝admin配置文件到工作目录
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# 对目录进行所属变更
sudo chown $(id -u):$(id -g) $HOME/.kube/config
13、验证
可以看到节点状态是:NotReady,需要安装flannel网络组件处理
14、安装flannel网络组件
# 获取kube-flannel yml配置脚本
wget https://github.com/coreos/flannel/raw/master/Documentation/kube-flannel.yml
vim kube-flannel.yml
如上图,因无法科学上网,无法正常pull镜像,改用手动下载(https://github.com/coreos/flannel/releases)再load到本地docker仓库里中,如下截图:
https://github.com/coreos/flannel/releases/tag/v0.13.1-rc2
上图主要命令如下:
# 载入docker本地仓库
docker load < flanneld-v0.13.1-rc2-amd64.docker
# 更改tag,与文件kube-flannel.yml保持一致
docker tag quay.io/coreos/flannel:v0.13.1-rc2-amd64 quay.io/coreos/flannel:v0.13.1-rc2
# 删除原始镜像
docker image rm quay.io/coreos/flannel:v0.13.1-rc2-amd64
准备工作完成,现正式安装flannel组件命令
kubectl create -f kube-flannel.yml
至此,Kubernetes集群之主节点安装完美落幕!