搭建Kubernetes集群:一键部署利器 kubeadm
这是从容器化技术一直到k8s专栏的第二篇。今天我们要了解kubeadm 的工作原理、使用方法以及其在 Kubernetes 部署中的优势和局限性,并详细介绍了如何从零开始搭建一个完整的 Kubernetes 集群大家还想要什么内容,可以在文章或者公众号内给我留言。
搭建Kubernetes集群:一键部署利器 kubeadm
引言
这是从容器化技术一直到k8s专栏的第二篇。今天我们要了解kubeadm 的工作原理、使用方法以及其在 Kubernetes 部署中的优势和局限性,并详细介绍了如何从零开始搭建一个完整的 Kubernetes 集群
Kubernetes一键部署利器:kubeadm
Kubernetes 的部署一直是初学者面临的挑战,但随着 kubeadm 的推出,部署变得更加简单。通过 kubeadm,用户只需执行两条指令即可完成一个 Kubernetes 集群的部署,大大降低了部署的复杂性。本文将详细介绍 kubeadm 的工作原理、使用方法以及其在 Kubernetes 部署中的优势和局限性,为读者提供全面的了解和使用指南。
kubeadm 的工作原理
kubeadm 是一个用于快速部署 Kubernetes 集群的工具,它通过一系列步骤来完成集群的初始化和配置:
- Preflight Checks:在集群初始化之前,kubeadm 会进行一系列预检查,确保系统环境符合 Kubernetes 的要求。
- 证书生成:kubeadm 会生成所需的 TLS 证书,确保集群组件之间的安全通信。
- 配置文件生成:kubeadm 会生成集群的配置文件,包括 kube-apiserver、kube-controller-manager 和 kube-scheduler 等组件的配置。
- Pod 配置文件生成:kubeadm 会生成核心组件的 Pod 配置文件,并将其应用到集群中。
- 生成 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 的优势和局限性
优势
- 简洁易用:kubeadm 的设计简洁,用户只需几条命令即可完成集群的初始化和节点加入。
- 高效的社区支持:kubeadm 由 Kubernetes 官方维护,社区支持强大,用户可以快速获得帮助和解决方案。
- 一致性:使用 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 集群搭建的全过程,为日后的生产环境部署打下坚实的基础。
最后
大家还想要什么内容,可以在文章或者公众号内给我留言
更多推荐
所有评论(0)