查看原文
其他

Kubernetes(K8S)集群自动化部署脚本示例

李逸皓 运维book思议 2024-04-22

先放个链接,万一有人关注呢

优质文章推荐

↓ ↓ ↓ ↓ ↓

Kubernetes(K8S)部署集群全流程详解:基于Kubeadm

CentOS再见!拥抱Rocky or Alma

Linux系统修改静态IP地址自动化脚本

Linux系统服务巡检脚本

KubeGems:Kubernetes(K8S)集群可视化界面部署



随着云计算技术的快速发展,Kubernetes(k8s)作为一种先进的容器编排系统,已经在全球范围内得到了广泛关注和应用。本文将详细介绍Kubernetes的概念、优势、核心组件与内部架构以及工作原理,帮助读者更好地了解和掌握这一重要技术。
一、Kubernetes概述
Kubernetes起源于Google公司内部的容器管理工具——Borg,于2014年对外公布。它的目标是提供一种可扩展的、可移植的、开源的容器编排系统,使得开发者可以更容易地部署和管理应用程序。Kubernetes的核心思想是“一切都是资源”,它通过将所有资源(如容器、存储、网络等)都抽象为对象进行管理,提高了系统的可维护性和可扩展性。
二、Kubernetes的优势
优化云计算资源:Kubernetes采用容器技术,可以充分利用云计算资源,提高资源利用率,降低成本。
管理复杂度:Kubernetes提供了一种简化的管理接口,使得管理员可以更容易地管理和维护大规模的容器集群。
弹性伸缩:Kubernetes支持自动弹性伸缩,可以根据应用的需求自动增减容器数量,以应对流量高峰和低谷。
持续交付:Kubernetes提供了持续集成和持续交付的工具链,可以加速软件的发布和迭代速度。
三、Kubernetes核心组件
控制平面(Control Plane):控制平面是Kubernetes的核心组件之一,负责整个集群的状态管理和调度。它由以下几个组件组成:
API服务器(API Server):提供RESTful API接口,用于处理来自客户端的请求。
控制器管理器(Controller Manager):负责管理集群的状态,确保资源对象的一致性。
调度器(Scheduler):负责调度容器的运行,根据可用的资源和约束条件来决定容器的放置。
调度器(Scheduler):调度器是Kubernetes的重要组件之一,它负责在集群中调度容器的运行。调度器根据可用的资源和约束条件来选择最佳的节点来运行容器,以确保集群的整体性能和资源利用率。
存储管理器(Storage Manager):存储管理器负责集群的存储管理,它与各个节点通信,监控存储设备的状态和容量,并为容器提供可用的存储资源。
网络管理器(Network Manager):网络管理器负责集群的网络管理,包括网络的配置、维护和监控。它为容器提供网络连接功能,并确保网络的安全性和可靠性。
四、Kubernetes内部架构
整体架构:Kubernetes的整体架构分为控制平面和数据平面。控制平面负责集群的管理和调度,而数据平面则负责容器的运行和数据处理。
模块架构:Kubernetes的各个组件采用模块化的设计思想,每个组件都有其特定的功能和职责,并通过定义明确的接口与其他组件进行交互。
通信机制:Kubernetes通过基于HTTP和TCP的通信协议实现各个组件之间的通信。API服务器作为通信中心,处理来自客户端的请求,并将指令发送到其他组件。
五、Kubernetes工作原理
资源管理:Kubernetes通过资源抽象和容器化技术对云计算资源进行管理。它将每个资源(如CPU、内存、存储等)都抽象为对象,并允许用户通过定义资源上限和约束来控制容器的运行。
任务调度:Kubernetes使用调度器来实现任务调度。当一个任务(容器)启动时,调度器会根据集群当前的状态和资源利用情况为其选择一个合适的节点来运行。
数据管理:Kubernetes提供了一套完整的数据管理解决方案,包括数据存储、备份与恢复、迁移等功能。它支持多种数据存储选项,如本地存储、网络存储等,并允许用户根据需求选择适合的数据存储方案。
六、示例脚本
#!/bin/bash
# 定义要部署的CentOS 8主机列表 hosts=("host1" "host2" "host3") new_node="host4" # 在master主机上获取token和hash值的函数 get_token_and_hash() { token=$(ssh master "sudo kubeadm token create --print-join-command" | awk '{print $5}') hash=$(ssh master "openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'") echo "Token: $token" echo "Hash: $hash" } # 在所有主机上执行命令的函数 execute_command_on_hosts() { command=$1 for host in "${hosts[@]}"; do ssh $host "$command" done } # 更新主机的包管理器 execute_command_on_hosts "sudo yum update -y" # 配置阿里源 execute_command_on_hosts "sudo yum install -y wget" execute_command_on_hosts "wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo" # 安装Kubernetes组件 execute_command_on_hosts "sudo yum install -y kubelet kubeadm kubectl" # 启动并启用Kubernetes服务 execute_command_on_hosts "sudo systemctl start kubelet" execute_command_on_hosts "sudo systemctl enable kubelet" # 在master主机上初始化Kubernetes集群 ssh master "sudo kubeadm init --pod-network-cidr=10.244.0.0/16" # 部署CNI网络插件 ssh master "kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml" # 获取token和hash值 get_token_and_hash token=$(get_token_and_hash | awk '/Token:/{print $2}') hash=$(get_token_and_hash | awk '/Hash:/{print $2}') # 添加新节点到Kubernetes集群 ssh master "sudo kubeadm join <master节点的IP地址和端口> --token $token --discovery-token-ca-cert-hash $hash" # 刷新节点状态 ssh master "kubectl get nodes"
请注意,此脚本假定已经设置了SSH密钥认证,以便能够在主机之间进行无密码SSH连接。还需要根据实际环境和需求进行适当的配置和调整。在执行脚本之前,请确保已经备份了重要的系统和配置文件,以防出现意外情况。
Kubernetes作为一款优秀的容器编排系统,已经在云计算领域得到了广泛应用。通过了解Kubernetes的原理和特点,我们可以更好地应对云计算环境中的各种挑战,提高资源的利用率和管理效率,从而实现业务的快速迭代和持续发展。
来不及解释了,快上车!(进群看公告,已加群的小伙伴无需重复添加)

欢迎新的小伙伴加入!在这里,我们鼓励大家积极参与群内讨论和交流,分享自己的见解和经验,一起学习和成长。同时,也欢迎大家提出问题和建议,让我们不断改进和完善这个平台。

              ↓↓↓ 点个在看,无需赞赏!

继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存