一、所有机器执行:
1.初始化所有机器环境 按顺序执行下列命令,(关闭防火墙、selinux、swap)
systemctl disable firewalld
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
setenforce 0
sed -i '$s/^/#/' /etc/fstab
#重启
reboot
2.所有节点添加网桥过滤和地址转发功能:
cat > /etc/sysctl.d/kubernetes.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
# 然后执行,使其生效
sysctl --system
3.所有节点安装docker-ce
3.1 查看可以使用的docker-ce版本:
yum list docker-ce --showduplicates |sort -r
3.2 安装: (我这个是Rocky Linux 8.9,选择自己合适的版本)
yum install -y docker-ce-3:19.03.13-3.el8
4.修改docker的cgroupdriver为systemd:
注意:这个必须修改
编辑 Docker 的配置文件,如果不存在就创建:
vim /etc/docker/daemon.json
在daemon.json文件中写入下面的内容
{ "registry-mirrors": ["https://oww1k5k9.mirror.aliyuncs.com"], "exec-opts": ["native.cgroupdriver=systemd"]}
使用 docker info 命令查看当前的cgroup driver
5. 所有节点的kubernetes镜像切换成国内源:
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
6. 所有节点安装指定版本 kubeadm,kubelet 和 kubectl:
yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
systemctl enable kubelet
二、在master节点执行:
1. 首先要覆盖kubeadm的镜像地址
因为这个是外网的无法访问,需要替换成国内的镜像地址,使用此命令列出集群在配置过程中需要哪些镜像:
kubeadm config images list
显示下面的内容:
I0418 18:26:04.047449 19242 version.go:255] remote version is much newer: v1.27.1; falling back to: stable-1.23
k8s.gcr.io/kube-apiserver:v1.23.17
k8s.gcr.io/kube-controller-manager:v1.23.17
k8s.gcr.io/kube-scheduler:v1.23.17
k8s.gcr.io/kube-proxy:v1.23.17
k8s.gcr.io/pause:3.6
k8s.gcr.io/etcd:3.5.1-0
k8s.gcr.io/coredns/coredns:v1.8.6
2. 更改为阿里云的镜像地址:
kubeadm config images list --image-repository
显示下面的内容:
registry.aliyuncs.com/google_containers
I0418 18:28:18.740057 20021 version.go:255] remote version is much newer: v1.27.1; falling back to: stable-1.23
registry.aliyuncs.com/google_containers/kube-apiserver:v1.23.17
registry.aliyuncs.com/google_containers/kube-controller-manager:v1.23.17
registry.aliyuncs.com/google_containers/kube-scheduler:v1.23.17
registry.aliyuncs.com/google_containers/kube-proxy:v1.23.17
registry.aliyuncs.com/google_containers/pause:3.6
registry.aliyuncs.com/google_containers/etcd:3.5.1-0
registry.aliyuncs.com/google_containers/coredns:v1.8.6
3. 然后将镜像手动拉取下来
这样在初始化的时候回更快一些(还有一个办法就是直接在docker上把镜像pull下来,docker只要配置一下国内源即可快速的将镜像pull下来):
kubeadm config images pull --image-repository
显示下面的内容:
registry.aliyuncs.com/google_containers
I0418 18:28:31.795554 20088 version.go:255] remote version is much newer: v1.27.1; falling back to: stable-1.23
[config/images] Pulled registry.aliyuncs.com/google_containers/kube-apiserver:v1.23.17
[config/images] Pulled registry.aliyuncs.com/google_containers/kube-controller-manager:v1.23.17
[config/images] Pulled registry.aliyuncs.com/google_containers/kube-scheduler:v1.23.17
[config/images] Pulled registry.aliyuncs.com/google_containers/kube-proxy:v1.23.17
[config/images] Pulled registry.aliyuncs.com/google_containers/pause:3.6
[config/images] Pulled registry.aliyuncs.com/google_containers/etcd:3.5.1-0
[config/images] Pulled registry.aliyuncs.com/google_containers/coredns:v1.8.6
4. 初始化kubernetes
执行下面的 kube init命令
kubeadm init \
--apiserver-advertise-address=192.168.174.150 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=all
等待一会,会出现 kubeadm join <IP地址> --token ********* 这样的内容
注意! 保存下来这段 kubeadm join 命令 ,这段命令用于将node子节点加入master节点
此时子节点还不能直接加入,需要做完下面的配置:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
vim /root/.bash_profile
# 超级用户变量
export KUBECONFIG=/etc/kubernetes/admin.conf
# 设置别名
alias k=kubectl
# 设置kubectl命令补齐功能
source <(kubectl completion bash)
source /root/.bash_profile
下载 kube-flannel.yml 文件:
yum install -y wget
wget https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
这是网络配置文件,如果在kebeadm init时你做了修改,需要更改kube-flannel.yml文件中的对应内容
创建资源:
kubectl apply -f kube-flannel.yml
等待一会,执行
kubectl get pod --all-namespaces
如下图这样,所有pod都是Running时才可继续
如果
kube-flannel
起不来,那么就用kubectl describe pod <这里填起不来pod对应的NAME> -n kube-flannel
命令查看pod
起不来的原因,然后去搜百度获取解决方案):
执行 kubectl get node 查看节点状态:
查看master节点是 Ready 状态
此时master节点基本配置完成,可以让node节点加入了!
三、node节点加入
在所有node节点执行上面执行 kubeadm init 后产生的 kubeadm join 命令
此时再执行 kubectl get node , 就会发现多出来几个node节点,一般来说,稍等片刻就会从NotReady变为Ready
大功告成!