搭建Kubernetes集群:一键部署利器 kubeadm

引言

这是从容器化技术一直到k8s专栏的第二篇。今天我们要了解kubeadm 的工作原理、使用方法以及其在 Kubernetes 部署中的优势和局限性,并详细介绍了如何从零开始搭建一个完整的 Kubernetes 集群

Kubernetes一键部署利器:kubeadm

Kubernetes 的部署一直是初学者面临的挑战,但随着 kubeadm 的推出,部署变得更加简单。通过 kubeadm,用户只需执行两条指令即可完成一个 Kubernetes 集群的部署,大大降低了部署的复杂性。本文将详细介绍 kubeadm 的工作原理、使用方法以及其在 Kubernetes 部署中的优势和局限性,为读者提供全面的了解和使用指南。

kubeadm 的工作原理

kubeadm 是一个用于快速部署 Kubernetes 集群的工具,它通过一系列步骤来完成集群的初始化和配置:

  1. Preflight Checks:在集群初始化之前,kubeadm 会进行一系列预检查,确保系统环境符合 Kubernetes 的要求。
  2. 证书生成:kubeadm 会生成所需的 TLS 证书,确保集群组件之间的安全通信。
  3. 配置文件生成:kubeadm 会生成集群的配置文件,包括 kube-apiserver、kube-controller-manager 和 kube-scheduler 等组件的配置。
  4. Pod 配置文件生成:kubeadm 会生成核心组件的 Pod 配置文件,并将其应用到集群中。
  5. 生成 bootstrap token:用于节点加入集群时的身份验证。

kubeadm 初始化流程

通过 kubeadm 初始化一个 Kubernetes 集群非常简单,只需两条指令:

kubeadm init

这条指令会完成上述所有步骤,成功后会提供一条命令,用于将工作节点加入集群。

kubeadm join <master-ip>:<master-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>

配置 kubeadm 的部署参数

kubeadm 允许用户通过 YAML 文件来自定义部署参数。以下是一个简单的 kubeadm 配置文件示例:

apiVersion: kubeadm.k8s.io/v1beta2
kind: InitConfiguration
bootstrapTokens:
- token: "abcdef.0123456789abcdef"
  ttl: "24h"
---
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
kubernetesVersion: "1.21.0"
controlPlaneEndpoint: "k8s-master:6443"
networking:
  podSubnet: "192.168.0.0/16"

通过这个配置文件,用户可以定制 kube-apiserver 的启动参数以及其他组件的配置,大大提高了部署的灵活性。

kubeadm 的优势和局限性

优势

  1. 简洁易用:kubeadm 的设计简洁,用户只需几条命令即可完成集群的初始化和节点加入。
  2. 高效的社区支持:kubeadm 由 Kubernetes 官方维护,社区支持强大,用户可以快速获得帮助和解决方案。
  3. 一致性:使用 kubeadm 部署的 Kubernetes 集群与使用二进制文件搭建的集群几乎没有任何区别。

局限性

目前 kubeadm 还不能用于生产环境,因为它最欠缺的是一键部署一个高可用的 Kubernetes 集群。高可用性的实现需要手动配置多主节点和负载均衡器,这是 kubeadm 接下来发展的主要方向。

从零开始搭建一个完整的 Kubernetes 集群

本文详细介绍了如何从零开始搭建一个完整的 Kubernetes 集群,包括以下步骤:

准备工作

在开始部署之前,需要确保所有节点满足以下要求:

  • 安装并配置 Linux 操作系统(推荐使用 Ubuntu 或 CentOS)
  • 禁用交换分区
  • 同步系统时间
  • 设置主机名并更新 /etc/hosts 文件

安装 kubeadm 和 Docker

在所有节点上安装 Docker 和 kubeadm:

sudo apt-get update && sudo apt-get install -y docker.io
sudo systemctl enable docker && sudo systemctl start docker

sudo apt-get update && sudo apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo systemctl enable kubelet && sudo systemctl start kubelet

部署 Master 节点

使用以下命令初始化 Master 节点:

sudo kubeadm init --pod-network-cidr=192.168.0.0/16

完成后,按照提示配置 kubectl:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

部署 Worker 节点

在每个 Worker 节点上执行 kubeadm join 命令,将节点加入集群:

sudo kubeadm join <master-ip>:<master-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>

部署网络插件

以 Weave 为例,使用 kubectl apply 指令部署网络插件:

kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

网络插件的部署方式和 CNI 接口的配置是 Kubernetes 网络架构的关键部分,Weave 作为一种常见的选择,提供了简单而强大的网络解决方案。

调整 Master 执行 Pod 的策略

通过 Taint/Toleration 机制调整 Master 节点上 Pod 的调度策略。移除 Master 上的污点,使其可以运行普通的 Pod:

kubectl taint nodes --all node-role.kubernetes.io/master-

部署 Dashboard 可视化插件

部署 Kubernetes Dashboard,提供一个可视化的 Web 界面来查看当前集群的各种信息:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.2.0/aio/deploy/recommended.yaml

创建管理员用户并获取访问令牌:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard

获取访问令牌:

kubectl -n kubernetes-dashboard create token admin-user

通过浏览器访问 Dashboard 并使用令牌登录。

容器持久化存储

容器持久化存储是 Kubernetes 集群中的重要组成部分。本文选择了 Rook 项目作为 Kubernetes 存储插件,Rook 是一个开源的云原生存储编排器,提供了对 Ceph、EdgeFS、NFS 等存储系统的支持。

kubectl apply -f https://raw.githubusercontent.com/rook/rook/v1.7.10/cluster/examples/kubernetes/ceph/common.yaml
kubectl apply -f https://raw.githubusercontent.com/rook/rook/v1.7.10/cluster/examples/kubernetes/ceph/operator.yaml

配置和部署 Ceph 集群:

kubectl apply -f https://raw.githubusercontent.com/rook/rook/v1.7.10/cluster/examples/kubernetes/ceph/cluster.yaml
kubectl apply -f https://raw.githubusercontent.com/rook/rook/v1.7.10/cluster/examples/kubernetes/ceph/csi/rbd/storageclass.yaml

结论

总的来说,本文介绍了 kubeadm 的工作原理、使用方法以及其在 Kubernetes 部署中的优势和局限性,并详细介绍了如何从零开始搭建一个完整的 Kubernetes 集群。通过实际操作,读者可以快速了解 Kubernetes 集群的搭建流程和相关技术特点,涵盖了网络插件、持久化存储以及可视化界面的部署,为读者提供了丰富的实践经验和技术指导。这篇文章适合技术人员深入了解 Kubernetes 集群搭建的全过程,为日后的生产环境部署打下坚实的基础。

最后

大家还想要什么内容,可以在文章或者公众号内给我留言

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐