说明
用了三个linux节点来学习安装。每台机子配置:centos8+2g内存+2核处理器;
节点信息:192.168.177.132(主节点) 192.168.177.133(工作节点) 192.168.177.134(工作节点)
参考:文章1 官网
部署方式选择
如果是单机学习的可以用minekube、kind来安装;用kubeadm安装是比较通用的,既可以用于学习,也可用于部署生产。本文用的是是kubeadm
环境配置(三个节点都要配置)
- 关闭防火墙
systemctl stop firewalld systemctl disable firewalld - 禁用分区(为了保证 kubelet 正常工作)
swapoff -a #当前生效
sed -i ‘s/^.swap.$/#&/’ /etc/fstab #永久生效 - 允许 iptables 检查桥接流量
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOFcat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system - 配置k8s yum源(能科学上网的可以忽略)
cat < /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 - 容器运行时
因为接触比较多的是docker,所以用了docker,Docker version 20.10.9
安装教程:docker-centos安装 - 配置 cgroup 驱动程序
修改docker启动引擎,和kubelet保持一致,官方推荐systemd
修改或者新建文件:/etc/docker/daemon.json
{
“exec-opts”: [“native.cgroupdriver=systemd”]
}
systemctl daemon-reload
systemctl restart docker - 将 SELinux 设置为 permissive 模式(相当于将其禁用)
sudo setenforce 0
sudo sed -i ‘s/^SELINUX=enforcing$/SELINUX=permissive/’ /etc/selinux/config
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
sudo systemctl enable --now kubelet - 必须部署一个基于 Pod 网络插件的 容器网络接口 (CNI),以便 Pod 可以相互通信,这里选用的是flannel。在下文"初始化控制平面节点"会设置初始化参数。
下载kubelet kubeadm kubectl(三个节点都执行)
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
sudo systemctl enable --now kubelet
ps:默认下载最新版本,这里下载的版本 v1.22.2
初始化控制平面节点(主节点执行)
kubeadm init
–apiserver-advertise-address=192.168.177.132
–image-repository registry.aliyuncs.com/google_containers
–kubernetes-version v1.22.2
–service-cidr=10.1.0.0/16
–pod-network-cidr=10.244.0.0/16
参数介绍:
apiserver-advertise-address:API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认网络接口。
image-repository: 选择用于拉取控制平面镜像的容器仓库,默认值:“k8s.gcr.io”,能科学上网忽略这个配置。
service-cidr pod-network-cidr :flannel要求固定参数。
初始化成功信息:
按照初始化成功信息操作:如果主节点是root用户执行:export KUBECONFIG=/etc/kubernetes/admin.conf,否则执行kubeadm会有报错信息。普通用户执行:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown
(
i
d
−
u
)
:
(id -u):
(id−u):(id -g) $HOME/.kube/config
工作节点加入集群(工作节点执行)
kubeadm init成功后得到的kubeadm join一串信息,在工作节点输入即可:
kubeadm join 192.168.177.132:6443 --token hb6u7f.85060i5lpgtclhc0
–discovery-token-ca-cert-hash sha256:d43c7fade70c7dec60dcbbd0b8f214b3483730ad0a60933611597bcc9256fd55
成功信息:
清理初始化(三个节点执行)
如果初始化失败或者重启服务器需要清理初始化信息。
kubeadm reset
rm -rf $HOME/.kube
安装pod网络通信插件(主节点执行)
- kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml (能科学上网执行)
- 可以先把flannel下载到本地再执行,这里提供一个适用于1.22.2版本的yml
链接:https://pan.baidu.com/s/1gHcUTFfQqkv0Rs36qjrQiA
提取码:splc
然后执行:kubectl apply -f flannel.yml
成功信息:
查看节点信息(主节点运行)
所有节点状态都是ready,说明k8s集群已经初步搭建成功了!!!