在如今的技术驱动型世界中,Kubernetes(K8s)已经成为云计算和容器编排的标准工具之一。无论是初创企业还是大型组织,许多开发团队都依赖它来管理应用程序的可扩展性和高可用性。本文不仅是一份如何使用 kubeadm 快速搭建 K8s 集群的详细指南,更揭示了通过 Docker 和 Kubernetes 构建高效集群的关键步骤与最佳实践。
文章导航
为什么选择 Kubernetes?
随着云原生应用的兴起,企业的开发与运维需求不断提高,尤其是在处理大规模分布式系统时,Kubernetes 成为了解决这些问题的核心。无论是弹性伸缩、自动化管理还是跨云平台的无缝集成,K8s 都能够为开发人员和运维团队提供强大的工具链,帮助他们更快、更高效地交付应用程序。
但对许多人来说,初次部署 Kubernetes 集群可能是一个复杂的过程,小编将引导你通过使用 kubeadm,一步步搭建起你的 Kubernetes 集群。
第一步:安装 Docker —— Kubernetes 的基础
在开始之前,必须先准备好支持容器化的 Docker 环境。Docker 是一个开源的容器平台,能够帮助开发者轻松地构建、测试和部署应用程序。在服务器上安装 Docker 的步骤如下:
1、移除主机上的旧版本 Docker:
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 查看其他没有卸载的docker相关的包, 使用yum remove移除掉
yum list installed | grep docker
2、安装 Docker 所需依赖:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
yum -y install gcc
yum -y install gcc-c++
3、添加阿里云的 yum 镜像源,加快 Docker 下载速度:
# 添加yum镜像
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 添加阿里云镜像就行
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 更新yum软件包索引
yum makecache fast
4、正式安装Docker:
# 安装docker
yum -y install docker-ce docker-ce-cli containerd.io
# 启动docker
systemctl start docker
# 设置docker自启动
systemctl enable docker
通过这些步骤,你将成功在服务器上安装并启动 Docker。
第二步:服务器初始化配置
在 Kubernetes 集群的部署过程中,服务器的初始化配置是一个重要环节。以下是初始化配置的一些关键步骤:
# 关闭防火墙,确保不干扰 Kubernetes 网络通信
systemctl stop firewalld
systemctl disable firewalld
# 关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
setenforce 0 # 临时
# 关闭swap,提升系统性能并确保 Kubernetes 的顺利运行
swapoff -a # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久
# 关闭完swap后,一定要重启一下虚拟机!!!
# 根据规划设置主机名
hostnamectl set-hostname <hostname>
# 在master添加hosts,我这里是在局域网里面搭的三个节点,其他地方安装的时候需要改为对应的ip
cat >> /etc/hosts << EOF
192.168.113.120 k8s-master
192.168.113.121 k8s-node1
192.168.113.122 k8s-node2
EOF
# 将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system # 生效
# 时间同步,确保多节点集群中时间一致性
yum install ntpdate -y
ntpdate time.windows.com
第三步:配置 Kubernetes 源并安装必要组件
要想成功搭建 Kubernetes 集群,必须先安装 Kubernetes 的核心组件:kubeadm、kubelet 和 kubectl。首先,配置k8s阿里云yum源:
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
然后安装所需的 Kubernetes 组件:
yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6
systemctl enable kubelet
# 配置关闭Docker的cgroups,不然会报错,修改/etc/docker/daemon.json,加入以下内容
"exec-opts": ["native.cgroupdriver=systemd"]
# 重启 docker
systemctl daemon-reload
systemctl restart docker
第四步:部署 Kubernetes Master
在安装好组件后,使用kubeadm初始化k8s集群,注意配置pod-network-cidr的时候要和cni的网络段要对应上。
# 在 Master 节点下执行
kubeadm init \
--apiserver-advertise-address=192.168.113.120 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.6 \
--service-cidr=10.96.0.0/12 \
--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
kubectl get nodes
至此,kubernetes的master节点就搭建完成了,接下来我们创建两个k8s的node节点,并将其加入到集群中
第五步:将节点加入集群,加入 Kubernetes Node
在配置完 Master 节点后,接下来你需要将其他工作节点(Node)加入集群:
# 分别在 k8s-node1 和 k8s-node2 执行
# 下方命令可以在 k8s master 控制台初始化成功后复制 join 命令
kubeadm join 192.168.113.120:6443 --token w34ha2.66if2c8nwmeat9o7 --discovery-token-ca-cert-hash sha256:20e2227554f8883811c01edd850f0cf2f396589d32b57b9984de3353a7389477
# 如果初始化的 token 不小心清空了,可以通过如下命令获取或者重新申请
# 如果 token 已经过期,就重新申请
kubeadm token create
# token 没有过期可以通过如下命令获取
kubeadm token list
# 获取 --discovery-token-ca-cert-hash 值,得到值后需要在前面拼接上 sha256:
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \
openssl dgst -sha256 -hex | sed 's/^.* //'
第六步:部署 CNI 网络插件
如果出现因为网络问题拉取镜像失败,可以配置一下docker的代理,在Linux装个代理软件,我这里是用的小猫搭的一个代理服务,这个取自己熟悉的即可
# 在 master 节点上执行
# 下载 calico 配置文件,可能会网络超时
curl https://docs.projectcalico.org/manifests/calico.yaml -O
# 修改 calico.yaml 文件中的 CALICO_IPV4POOL_CIDR 配置,修改为与初始化的 cidr 相同
10.244.0.0/16
# 修改 IP_AUTODETECTION_METHOD 下的网卡名称
# 删除镜像 docker.io/ 前缀,避免下载过慢导致失败
sed -i 's#docker.io/##g' calico.yaml
sed -i 's#:v3.25.0##g' calico.yaml
# 应用calico配置文件
kubectl apply -f calico.yaml
如何卸载Calico
# 假设你有Calico的安装YAML文件,如calico.yaml,并且它位于当前目录下
kubectl delete -f calico.yaml
# 如果你使用的是kubectl delete的默认命令来删除所有calico相关的资源,可以执行以下命令
kubectl delete clusterrolebinding calico-kube-controllers
kubectl delete clusterrole calico-kube-controllers
kubectl delete apiservice v3.projectcalico.org
kubectl delete apiservice v1.projectcalico.org
kubectl delete apiservice v1alpha1.crd.projectcalico.org
kubectl delete serviceaccount/calico-kube-controllers -n kube-system
kubectl delete serviceaccount/calico-node -n kube-system
kubectl delete clusterrolebinding/calico -n kube-system
kubectl delete clusterrole/calico -n kube-system
kubectl delete daemonset/calico-node -n kube-system
kubectl delete deployment.apps/calico-kube-controllers -n kube-system
# 如果你还希望删除所有的Calico创建的自定义资源,可以执行以下命令
kubectl delete bgpconfiguration --all
kubectl delete felixconfiguration --all
kubectl delete ipamblock --all
kubectl delete ipamhandle --all
kubectl delete ippool --all
结语
通过本文的指南,你将能够快速搭建并配置一个高效、可靠的 Kubernetes 集群。这不仅能够帮助你提升团队的开发效率,还能确保你的应用程序在复杂的云环境中平稳运行。如果你希望在项目中更灵活地管理集群、提升工作效率,不妨尝试本文介绍的步骤。
延展阅读:
如何高效设计软件开发测试用例:解锁关键要点与实战技巧的疑问解答
MongoDB 4.0至7.0:这些主版本更新带来了哪些关键特性与性能飞跃?
电商平台客服工作台频繁卡顿怎么办?如何清理淘宝、京东、拼多多、抖音的缓存提升效率?
咨询方案 获取更多方案详情