如何在联网环境下,快速搭建一套 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,足以满足我们的日常学习。


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

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

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

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

相关推荐
dessler5 分钟前
Docker-如何启动docker
运维·docker·云原生·容器·eureka
zhy295636 分钟前
【DOCKER】基于DOCKER的服务之DUFS
运维·docker·容器·dufs
小蜗牛慢慢爬行17 分钟前
有关异步场景的 10 大 Spring Boot 面试问题
java·开发语言·网络·spring boot·后端·spring·面试
A小白590840 分钟前
Docker部署实践:构建可扩展的AI图像/视频分析平台 (脱敏版)
后端
goTsHgo1 小时前
在 Spring Boot 的 MVC 框架中 路径匹配的实现 详解
spring boot·后端·mvc
waicsdn_haha1 小时前
Java/JDK下载、安装及环境配置超详细教程【Windows10、macOS和Linux图文详解】
java·运维·服务器·开发语言·windows·后端·jdk
Q_19284999061 小时前
基于Spring Boot的摄影器材租赁回收系统
java·spring boot·后端
良许Linux1 小时前
0.96寸OLED显示屏详解
linux·服务器·后端·互联网
蜜獾云1 小时前
docker 安装雷池WAF防火墙 守护Web服务器
linux·运维·服务器·网络·网络安全·docker·容器
求知若饥1 小时前
NestJS 项目实战-权限管理系统开发(六)
后端·node.js·nestjs