如何在联网环境下,快速搭建一套 Kubernetes 集群

我正在参加「金石计划」

写在前面

最近云原生部署,比较火热,很多企业也在搞云原生k8s部署这套东西。

k8s可以与持续集成和持续部署工具集成,实现自动化部署、测试、发布等操作,可以大大提高开发和发布效率。

讲到k8s云原生部署,就不得不提一下CI/CD 这个名词了,这个我们就经常听到了,那我们应该怎么理解这个单词呢?

来自redhat官网的解析是这样的:

CI/CD是持续集成和持续交付/部署的缩写,旨在简化并加快软件开发生命周期。

持续集成 (CI)是指自且频繁地将代码更改集成到共享源代码存储库中的做法。

持续交付 ("什么是持续交付?")和/或持续部署(CD)是一个由两部分组成的过程,涉及代码更改的集成、测试和交付。持续交付不会自动部署到生产环境,持续部署则会自动将更新发布到生产环境。

k8s目前最新版本都更新到1.29了(目前时间2024-04-09),那我们不得学习一下?

好了,事不宜迟,学习k8s的第一步,那我们得先跑起来,不然都白说。

那今天我们来快速的搭建一套k8s集群!!!开干

一、准备环境

服务器规划:

角色 IP 地址
k8s-master 192.168.1.1
k8s-node1 192.168.1.2
k8s-node2 192.168.1.3

服务器要求:

  • 建议最小硬件配置:2核CPU、2G内存、20G硬盘。

  • 服务器可以访问互联网,会联网下载镜像。

软件环境:

软件 版本
操作系统 CentOS7.9_x64
Docker 24.0.0(CE)
Kubernetes 1.29

二、初始化配置

sh 复制代码
# 关闭Selinux  
sed -i 's/enforcing/disabled/' /etc/selinux/config  # 永久  
setenforce 0  # 临时  
  
# 关闭Swap  
swapoff -a  # 临时  
ed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久  
  
# 根据规划设置主机名(对应主机修改:k8s-master、k8s-node1、k8s-node2)  
hostnamectl set-hostname <hostname>  
  
# 确保网络桥接的数据包经过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  

注:3台机器都要执行上面命令

三、安装Docker

安装Docker:

sh 复制代码
#设置镜像的仓库
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

#安装docker
yum -y install docker-ce

#设置开机启动和启动docker
systemctl enable docker && systemctl start docker

配置镜像下载加速器和设置Cgroup驱动:

sh 复制代码
cat > /etc/docker/daemon.json << EOF
  {
    "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"],
    "exec-opts": ["native.cgroupdriver=systemd"]
  }
EOF

#重启docker
systemctl restart docker
docker info

这里我配置使用了中科大镜像加速器,但是你也可以配置阿里云的镜像加速器

安装cri-dockerd(Docker与Kubernetes通信的中间程序):

sh 复制代码
#下载
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.2/cri-dockerd-0.3.2-3.el7.x86_64.rpm

#安装
rpm -ivh cri-dockerd-0.3.2-3.el7.x86_64.rpm

指定依赖镜像地址为国内镜像地址:

sh 复制代码
#编辑文件
vi /usr/lib/systemd/system/cri-docker.service

ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9


#重启服务
systemctl daemon-reload
systemctl enable cri-docker && systemctl start cri-docker

注:3台机器都要安装docker

四、部署Kubernetes集群

4.1 添加阿里云YUM软件源

sh 复制代码
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

注:3台机器都要执行上面命令

4.2 安装kubeadm,kubelet和kubectl

sh 复制代码
yum install -y kubelet-1.29.0 kubeadm-1.29.0 kubectl-1.29.0
systemctl enable kubelet

注:3台机器都要执行上面命令

4.3 初始化Master节点

sh 复制代码
kubeadm init \
  --apiserver-advertise-address=192.168.1.1 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.29.0 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.11.0.0/16 \
  --cri-socket=unix:///var/run/cri-dockerd.sock

注:在k8s-master(192.168.1.1)节点执行上面命令

初始化完成后,根据提示信息,拷贝kubectl工具认证文件到默认路径:

sh 复制代码
mkdir -p $HOME/.kube  
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config\
sudo chown $(id -u):$(id -g) \$HOME/.kube/config

使用kubectl工具查看节点状态:

arduino 复制代码
kubectl get nodes  
NAME               STATUS     ROLES            AGE   VERSION  
k8s-master     NotReady   control-plane        20s   v1.29.0

注:由于网络插件还没有部署,节点会处于"NotReady"状态。

4.4 将Node节点加入集群

执行上述输出的"kubeadm join"命令,将本节点加入到Kubernetes集群中:

sh 复制代码
kubeadm join 192.168.1.1:6443 --token 7gqt13.kncw9hg5085iwclx \  
--discovery-token-ca-cert-hash sha256:66fbfcf18649a5841474c2dc4b9ff90c02fc05de0798ed690e1754437be35a01 --cri-socket=unix:///var/run/cri-dockerd.sock

在 k8s-node1(192.168.1.2) 和 k8s-node2(192.168.1.3) 机器执行

4.5 安装网络组件

这里使用Calico作为Kubernetes的网络插件,负责集群中网络通信。

创建Calico网络组件的资源:

sh 复制代码
kubectl create -f tigera-operator.yaml
kubectl create -f custom-resources.yaml

注:在k8s-master(192.168.1.1)节点执行上面命令

应用完成后,等待5分钟后,查看Pod运行状态:

注:如果Pod处于"ContainerCreating"状态说明在下载镜像中,需耐心等待~

4.6 安装Dashboard

Dashboard是官方提供的一个UI,可用于基本管理K8s资源。

sh 复制代码
kubectl apply -f kubernetes-dashboard.yaml

kubectl get pods -n kubernetes-dashboard

注:在k8s-master(192.168.1.1)节点执行上面命令

浏览器访问"https:// <节点IP地址> :30001",将看到Dashboard登录界面。

创建服务账号并授权管理员权限:

sh 复制代码
# 创建用户  
kubectl create serviceaccount dashboard-admin -n kubernetes-dashboard  

# 用户授权  
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:dashboard-admin  

#获取用户Token
kubectl create token dashboard-admin -n kubernetes-dashboard

注:在k8s-master(192.168.1.1)节点执行上面命令

使用输出的Token登录Dashboard,将进入到首页,如图所示:

至此,Kubernetes集群部署完成。

部署过程所涉及到的yaml文件,可以在这里下载:

链接:pan.baidu.com/s/1e3_nzIUN... 提取码:ug6s


最后,这里推荐一个免费好用得在线k8s集群环境:

在线k8s集群,使用github账号登录即可使用。

目前也是最新的1.29版本!

有兴趣的小伙伴可以进去看看,可以在线创建deployment,足以满足我们的日常学习。


好了,以上就是我个人的实操了。可能有些不对,大家伙,轻点喷!!!

个人理解,可能也不够全面,班门弄斧了。

好了,今天就先到这里了!!!^_^

如果觉得有收获的,帮忙点赞、评论、收藏一下,再走呗!!!

相关推荐
慧一居士8 分钟前
Kubernetes 中kind类型和各类型详细配置完整示例介绍
云原生·kubernetes·yaml配置
薯条不要番茄酱1 小时前
【SpringBoot】从零开始全面解析SpringMVC (二)
java·spring boot·后端
小林学习编程1 小时前
Springboot考研信息平台
spring boot·后端·考研
孤的心了不冷2 小时前
【Docker】CentOS 8.2 安装Docker教程
linux·运维·docker·容器·eureka·centos
长勺2 小时前
Spring Security vs Shiro vs Sa-Token
java·后端·spring
yezipi耶不耶2 小时前
Rust入门之高级Trait
开发语言·后端·rust
qq_12498707532 小时前
原生小程序+springboot+vue+协同过滤算法的音乐推荐系统(源码+论文+讲解+安装+部署+调试)
java·spring boot·后端·小程序·毕业设计·课程设计·协同过滤
头疼的程序员3 小时前
docker学习与使用(概念、镜像、容器、数据卷、dockerfile等)
学习·docker·容器
IT小郭.3 小时前
使用 Docker Desktop 安装 Neo4j 知识图谱
windows·python·sql·docker·知识图谱·database·neo4j
淡水猫.3 小时前
hbit资产收集工具Docker(笔记版)
运维·docker·容器