Kubernetes学习-集群搭建篇(一) 搭建Master结点

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: Kubernetes学习-集群搭建篇(一) 搭建Master结点

image.png

1. 前言

我们在前面的几篇文章中讲解了Kubernetes的相关概念,接下来我们进入实战,从零搭建Kubernetes集群

2. 集群搭建方式

Kubernetes集群的搭建方式主要有以下几种:

1.kubeadm

优点

  • 易于使用:kubeadm提供了简单的命令行工具来初始化和管理Kubernetes集群。
  • 社区支持:由于是官方提供的工具,因此有广泛的社区支持和文档。
  • 版本控制:可以轻松升级和降级Kubernetes版本。
  • 自定义:支持自定义配置,可以根据需求调整集群设置。
  • 缺点
  • 生产就绪:默认配置可能不适合生产环境,需要额外的配置和调优。
  • 学习曲线:对于新手来说,可能需要一定时间来理解和学习kubeadm的工作原理。

2.Minikube

  • 优点
  • 易于启动:适合快速启动一个本地的Kubernetes环境进行开发和测试。
  • 无需外部依赖:可以在个人电脑上运行,不需要额外的物理或虚拟机。
  • 缺点
  • 单节点:仅适用于单节点集群,不适合生产环境。
  • 功能有限:某些Kubernetes功能可能无法在Minikube中完全支持。

3.Kind (Kubernetes in Docker)

  • 优点
  • 快速部署:可以在Docker容器中运行Kubernetes集群,非常适合本地开发和测试。
  • 无需虚拟机:与Minikube类似,Kind也不需要额外的虚拟机。
  • 缺点
  • Docker依赖:依赖于Docker环境,不支持其他容器运行时。
  • 同样适用于单节点环境,不适合生产部署。

4.手动搭建

  • 优点
  • 完全控制:可以完全自定义集群的每个组件和配置。
  • 理解深入:通过手动搭建,可以更深入地理解Kubernetes的内部结构和组件交互。
  • 缺点
  • 复杂性:手动搭建过程复杂,容易出错。
  • 维护困难:升级和故障排查需要更多的手工操作。

5.自动化工具(如Ansible, Terraform)

  • 优点
  • 自动化:可以自动化集群的部署和配置过程,减少人为错误。
  • 可重复:脚本可以重复使用,便于管理多个集群。
  • 缺点
  • 学习成本:需要学习额外的工具和脚本语言。
  • 维护脚本:随着集群的变化,脚本可能需要更新和维护。

6.托管服务(如GKE, EKS, AKS)

  • 优点
  • 管理简单:云提供商管理Kubernetes的控制平面,用户只需管理工作节点。
  • 高可用:通常提供高可用性和自动扩展功能。
  • 与云服务集成:与云提供商的其他服务(如存储、网络)集成良好。
  • 缺点
  • 成本:可能需要支付额外的费用。
  • 云提供商依赖:锁定到特定的云提供商。

每种搭建方式都有其适用场景和优缺点。选择哪种方式取决于你的需求、资源、技能和预算。对于学习和测试环境,我们采用kubeadm来搭建集群

3. 环境说明

  • 操作系统:CentOs7.6
  • Docker:20+
  • k8s:1.23.6
  • 主节点云服务器:4H8G
  • 从节点云服务器:4H4G


云服务器最低配置推荐:2核,2G内存,20G硬盘,学习的话购买2H2G的就够用啦

4. 利用kubeadm初始化Master结点

4.1. 初始操作

关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

关闭 selinux

sed -i 's/enforcing/disabled/' /etc/selinux/config  # 永久
setenforce 0  # 临时

关闭swap,关闭完swap后要重启一遍机器!

swapoff -a  # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久

根据规划设置主机名

hostnamectl set-hostname 这里填你的主机名(随便起,比如k8s-master)

在master添加hosts配置

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

4.2 安装基础软件(全部结点都要安装)

安装docker(使用官方的自动脚本)

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

启动docker

sudo systemctl start docker

添加阿里云镜像源

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

安装kubeadm、kubelet、kubectl

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

4.3. 部署Kubernetes Master结点

初始化master结点,其中apiserver-advertise-address改为自己的公网地址即可

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

初始化成功会提示control-plane has initialized successfully!

如果遇到如下报错,提示端口被占用


可输入kubeadm reset指令清除上次初始化生成的配置,再次调用init初始化即可

安装成功后,复制如下配置并执行

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来测试结点是否配置启动成功,如果显示下述信息,那么代表你master已经启动好啦~

5. 总结

本次我们先简单的搭建了Master结点,下一次我们将继续部署从节点,并部署CNI网络插件,实现不同结点间的相互通信。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
1月前
|
存储 Kubernetes 持续交付
k8s学习
【10月更文挑战第1天】
82 4
|
22天前
|
JSON Kubernetes 容灾
ACK One应用分发上线:高效管理多集群应用
ACK One应用分发上线,主要介绍了新能力的使用场景
|
1月前
|
Kubernetes 应用服务中间件 nginx
k8s学习--YAML资源清单文件托管服务nginx
k8s学习--YAML资源清单文件托管服务nginx
k8s学习--YAML资源清单文件托管服务nginx
|
23天前
|
Kubernetes 持续交付 开发工具
ACK One GitOps:ApplicationSet UI简化多集群GitOps应用管理
ACK One GitOps新发布了多集群应用控制台,支持管理Argo CD ApplicationSet,提升大规模应用和集群的多集群GitOps应用分发管理体验。
|
1月前
|
存储 Kubernetes 调度
|
1月前
|
Kubernetes 应用服务中间件 nginx
搭建Kubernetes v1.31.1服务器集群,采用Calico网络技术
在阿里云服务器上部署k8s集群,一、3台k8s服务器,1个Master节点,2个工作节点,采用Calico网络技术。二、部署nginx服务到k8s集群,并验证nginx服务运行状态。
456 1
|
1月前
|
Kubernetes Cloud Native 微服务
微服务实践之使用 kube-vip 搭建高可用 Kubernetes 集群
微服务实践之使用 kube-vip 搭建高可用 Kubernetes 集群
105 1
|
1月前
|
负载均衡 应用服务中间件 nginx
基于Ubuntu-22.04安装K8s-v1.28.2实验(二)使用kube-vip实现集群VIP访问
基于Ubuntu-22.04安装K8s-v1.28.2实验(二)使用kube-vip实现集群VIP访问
50 1
|
1月前
|
Kubernetes API 调度
k8s学习--pod的所有状态详解(图例展示)
k8s学习--pod的所有状态详解(图例展示)
136 1
|
1月前
|
Kubernetes Ubuntu Linux
Centos7 搭建 kubernetes集群
本文介绍了如何搭建一个三节点的Kubernetes集群,包括一个主节点和两个工作节点。各节点运行CentOS 7系统,最低配置为2核CPU、2GB内存和15GB硬盘。详细步骤包括环境配置、安装Docker、关闭防火墙和SELinux、禁用交换分区、安装kubeadm、kubelet、kubectl,以及初始化Kubernetes集群和安装网络插件Calico或Flannel。
140 0