Centos7 搭建 kubernetes集群

简介: 本文介绍了如何搭建一个三节点的Kubernetes集群,包括一个主节点和两个工作节点。各节点运行CentOS 7系统,最低配置为2核CPU、2GB内存和15GB硬盘。详细步骤包括环境配置、安装Docker、关闭防火墙和SELinux、禁用交换分区、安装kubeadm、kubelet、kubectl,以及初始化Kubernetes集群和安装网络插件Calico或Flannel。

环境配置

本次搭建的集群共三个节点,包含一个主节点,两个工作子节点:

节点

角色

IP

hostname

Node1

Master

192.168.0.25

master-1

Node2

Woker

192.168.0.30

node1

Node3

Woker

192.168.0.31

node2

根据官方推荐,节点可以是Ubuntu或CentOS操作系统,本次选择使用CentOS 7。节点最低配置如下:

硬件

配置

内存

>=2G

CPU

>=2核

磁盘

>=15G

检查 centos / hostname

# 在 master 节点和 worker 节点都要执行 
cat /etc/redhat-release 
# 此处 hostname 的输出将会是该机器在 Kubernetes 集群中的节点名字  
# 不能使用 localhost 作为节点的名字 
hostname 
# 请使用 lscpu 命令,核对 CPU 信息  
# Architecture: x86_64    本安装文档不支持 arm 架构  
# CPU(s):       2         CPU 内核数量不能低于 2 
lscpu

修改 hosts:

cat <<EOF >>/etc/hosts
192.168.0.25 master-1
192.168.0.30 node1
192.168.0.31 node2
EOF

有时如果时间时区不对等也需要同步下时钟信息

yum -y install ntpdate
ntpdate ntp1.aliyun.com
systemctl start ntpdate
sustemctl enable ntpdate
systemctl status ntpdate

安装docker-ce(所有机器)

# 设置yum源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
# 安装docker所需的工具
yum install -y yum-utils device-mapper-persistent-data lvm2
# 配置阿里云的docker源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 将服务器上的软件包信息 先在本地缓存,以提高搜索\安装软件的速
yum makecache
# 指定安装这个版本的docker-ce
yum install -y docker-ce-18.09.7 docker-ce-cli-18.09.7 containerd.io
# 更新 cgroupdriver 为systemd,这个加速器地址目前能用失效了请更换成自己的
cat <<EOF >  /etc/docker/daemon.json
{
  "registry-mirrors": ["https://uy35zvn6.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
# 启动docker
systemctl enable docker && systemctl start docker
# 验证docker 是否安装成功
docker version
# 检查 docker info|grep "Cgroup Driver" 是否输出 Cgroup Driver: systemd
[root@master-1 ~]# docker info|grep "Cgroup Driver"
 Cgroup Driver: systemd

设置k8s环境准备条件(所有机器)

# 关闭防火墙
systemctl disable firewalld
systemctl stop firewalld
# 关闭selinux
# 临时禁用selinux
setenforce 0
# 永久关闭 修改/etc/sysconfig/selinux文件设置
sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
# 禁用交换分区
swapoff -a
# 永久禁用,打开/etc/fstab注释掉swap那一行。
sed -i 's/.*swap.*/#&/' /etc/fstab
# 验证swap是否关闭
# free -h
# 若swap那一行输出为0,则说明已经关闭。
# 有时候也需要同时调整k8s的swappiness参数
# vi /etc/sysctl.d/k8s.conf
# 添加一行
vm.swappiness=0
# 执行下面的命令使得修改生效
# sysctl -p /etc/sysctl.d/k8s.conf
# 修改内核参数
cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
# 手动加载所有的配置文件 
sysctl --system
# 单独指定配置文件加载,执行:
# sysctl -p XXX.conf

安装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
# 安装kubeadm、kubectl、kubelet 1.16.0
yum install -y kubectl-1.16.0-0 kubeadm-1.16.0-0 kubelet-1.16.0-0
# 安装kubeadm、kubectl、kubelet 1.22.2
# yum install -y kubectl-1.22.2 kubeadm-1.22.2 kubelet-1.22.2
# 查看是否安装成功
kubelet --version
kubectl version
kubeadm version
 
# 重启 docker,并启动 kubelet
systemctl daemon-reload
systemctl restart docker
systemctl enable kubelet && systemctl start kubelet

初始化k8s(master机器)

下载管理节点中用到的6个docker镜像,你可以使用docker images查看到

这里需要大概两分钟等待,会卡在[preflight] You can also perform this action in beforehand using ''kubeadm config images pull

#这里的--apiserver-advertise-address使用的是master和node间能互相ping通的ip,我这里是masterip
kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.16.0 --apiserver-advertise-address 192.168.0.25 --pod-network-cidr=10.244.0.0/16 --token-ttl 0

# 上面安装完成后,k8s会提示你输入如下命令,执行

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

初始化后会输出加入节点命令,记住node加入集群的命令---- 上面kubeadm init执行成功后会返回给你node节点加入集群的命令,等会要在node节点上执行,需要保存下来

kubeadm join 192.168.0.25:6443 --token xl1lf1.qx7ftk8lt3w45n0r \
>     --discovery-token-ca-cert-hash sha256:fbc2c4d47a2d34c593eb0c387518d3a627fb4c79e4518fd5d227bddef7419308

如果忘记了,可以使用如下命令获取。

kubeadm token create --print-join-command

安装calico (master机器)

yum install wget
wget https://kuboard.cn/install-script/calico/calico-3.9.2.yaml
export POD_SUBNET=10.244.0.0/16
sed -i "s#192\.168\.0\.0/16#${POD_SUBNET}#" calico-3.9.2.yaml
kubectl apply -f calico-3.9.2.yaml

安装flannel(master机器)

mkdir -p ~/k8s/
cd ~/k8s
curl -O https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 在我写这篇文章时该镜像的公网地址如下,如果你在使用时无法通过该公网地址拉取镜像,请去阿里云获取最新镜像地址
docker pull registry.cn-hangzhou.aliyuncs.com/k8sos/flannel:v0.13.1-rc2
修改 kube-flannel.yml 将其中的 “image: quay.io/coreos/flannel:v0.13.1-rc2” 修改为 “image: registry.cn-hangzhou.aliyuncs.com/k8sos/flannel:v0.13.1-rc2”
kubectl apply -f kube-flannel.yml

配置完flannel STATUS状态从NotReady变成 Ready即代表成功集群

[root@master k8s]# kubectl get nodes
NAME       STATUS   ROLES    AGE   VERSION
master-1   Ready    master   79m   v1.16.0
node1      Ready    <none>   78m   v1.16.0
node2      Ready    <none>   78m   v1.16.0
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
1月前
|
缓存 容灾 网络协议
ACK One多集群网关:实现高效容灾方案
ACK One多集群网关可以帮助您快速构建同城跨AZ多活容灾系统、混合云同城跨AZ多活容灾系统,以及异地容灾系统。
|
2月前
|
Kubernetes Ubuntu 网络安全
ubuntu使用kubeadm搭建k8s集群
通过以上步骤,您可以在 Ubuntu 系统上使用 kubeadm 成功搭建一个 Kubernetes 集群。本文详细介绍了从环境准备、安装 Kubernetes 组件、初始化集群到管理和使用集群的完整过程,希望对您有所帮助。在实际应用中,您可以根据具体需求调整配置,进一步优化集群性能和安全性。
148 12
|
2月前
|
Prometheus Kubernetes 监控
OpenAI故障复盘 - 阿里云容器服务与可观测产品如何保障大规模K8s集群稳定性
聚焦近日OpenAI的大规模K8s集群故障,介绍阿里云容器服务与可观测团队在大规模K8s场景下我们的建设与沉淀。以及分享对类似故障问题的应对方案:包括在K8s和Prometheus的高可用架构设计方面、事前事后的稳定性保障体系方面。
|
2月前
|
Kubernetes 网络协议 应用服务中间件
Kubernetes Ingress:灵活的集群外部网络访问的利器
《Kubernetes Ingress:集群外部访问的利器-打造灵活的集群网络》介绍了如何通过Ingress实现Kubernetes集群的外部访问。前提条件是已拥有Kubernetes集群并安装了kubectl工具。文章详细讲解了Ingress的基本组成(Ingress Controller和资源对象),选择合适的版本,以及具体的安装步骤,如下载配置文件、部署Nginx Ingress Controller等。此外,还提供了常见问题的解决方案,例如镜像下载失败的应对措施。最后,通过部署示例应用展示了Ingress的实际使用方法。
87 2
|
2月前
|
存储 Kubernetes 关系型数据库
阿里云ACK备份中心,K8s集群业务应用数据的一站式灾备方案
本文源自2024云栖大会苏雅诗的演讲,探讨了K8s集群业务为何需要灾备及其重要性。文中强调了集群与业务高可用配置对稳定性的重要性,并指出人为误操作等风险,建议实施周期性和特定情况下的灾备措施。针对容器化业务,提出了灾备的新特性与需求,包括工作负载为核心、云资源信息的备份,以及有状态应用的数据保护。介绍了ACK推出的备份中心解决方案,支持命名空间、标签、资源类型等维度的备份,并具备存储卷数据保护功能,能够满足GitOps流程企业的特定需求。此外,还详细描述了备份中心的使用流程、控制台展示、灾备难点及解决方案等内容,展示了备份中心如何有效应对K8s集群资源和存储卷数据的灾备挑战。
|
3月前
|
Kubernetes 监控 Cloud Native
Kubernetes集群的高可用性与伸缩性实践
Kubernetes集群的高可用性与伸缩性实践
99 1
|
4月前
|
JSON Kubernetes 容灾
ACK One应用分发上线:高效管理多集群应用
ACK One应用分发上线,主要介绍了新能力的使用场景
|
4月前
|
Kubernetes 持续交付 开发工具
ACK One GitOps:ApplicationSet UI简化多集群GitOps应用管理
ACK One GitOps新发布了多集群应用控制台,支持管理Argo CD ApplicationSet,提升大规模应用和集群的多集群GitOps应用分发管理体验。
|
6天前
|
监控 Linux PHP
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
54 20

热门文章

最新文章