当前位置: 首页 > news >正文

1.《DevOps》系列K8S部署CICD流水线之部署K8S集群~version1.28.2

架构

服务器IP服务名称硬件配置
192.168.1.100k8s-master8核、16G、120G
192.168.1.101k8s-node18核、16G、120G
192.168.1.102k8s-node28核、16G、120G
192.168.1.103nfs2核、4G、500G

操作系统:Rocky9.3

后续通过K8S部署GitLab、Harbor、Jenkins

一、环境准备

关闭firewalld、selinux、swap

(三台K8S集群服务器同时操作)

#关闭防火墙开机自启

systemctl disable firewalld

 

#关闭防火墙服务

systemctl stop firewalld

 

#临时SELINUX

setenforce 0

 

#修改SELINUX配置文件,以免下次重启系统开启SELINUX

sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

 

#临时关闭内存交换

swapoff -a

 

#修改fstab配置文件,以免下次重启系统开启swap

sed -i '/\sswap\s/s/^/#/' /etc/fstab

设置主机名称

(三台K8S集群服务器同时操作)

修改主机名称
hostnamectl set-hostname 主机名称

 
写入hosts配置
cat >> /etc/hosts <<EOF
192.168.1.100 k8s-master
192.168.1.101 k8s-node1
192.168.1.102 k8s-node2
EOF

将桥接的ipv4流量传递到iptables链

(三台K8S集群服务器同时操作)

#生成bridge相关内核参数

modprobe br_netfilter

  

#写入k8s.conf 配置

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
 

#生效

sysctl --system

 

#打开端口转发

echo "net.ipv4.ip_forward = 1"  >> /etc/sysctl.conf

 

#刷新

sysctl -p

同步时间

(三台K8S集群服务器同时操作)

yum install -y chrony

systemctl start chronyd

systemctl enable chronyd

timedatectl set-timezone Asia/Shanghai

二、部署containerd

K8S的1.24版本后续移除了dockershim,k8s绕过docker,直接调用containerd,所以本次部署不用docker,选择部署containerd

(三台K8S集群服务器同时操作)

#先安装yum-utils工具
yum install -y yum-utils  

 

#配置Docker官方的yum仓库,如果做过,可以跳过
yum-config-manager \
    --add-repo \
  https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

 

#安装containerd
yum install containerd.io -y

 

#启动服务
systemctl enable containerd
systemctl start containerd
  
生成默认配置
containerd  config default > /etc/containerd/config.toml 

 

修改配置
sed -i 's@sandbox_image = "registry.k8s.io/pause:3.8"@sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.8"@' /etc/containerd/config.toml

 

#改为阿里云镜像地址

sed -i 's@SystemdCgroup = false@SystemdCgroup = true@' /etc/containerd/config.toml

  

#重启containerd服务

systemctl restart containerd

三、配置kubernetes仓库

(三台K8S集群服务器同时操作)

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
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

(三台K8S集群服务器同时操作)

#查看所有版本
yum  --showduplicates list kubeadm

 

#安装1.28.2版本
yum install -y kubelet-1.28.2 kubeadm-1.28.2 kubectl-1.28.2

 

#启动kubelet服务
systemctl start kubelet.service
systemctl enable kubelet.service

五、设置crictl连接 containerd

(三台K8S集群服务器同时操作)

crictl config --set runtime-endpoint=unix:///run/containerd/containerd.sock

六、集群初始化

#Master执行初始化

一定要在master机子上操作以下命令!!!

一定要在master机子上操作以下命令!!!

一定要在master机子上操作以下命令!!!

 

kubeadm init --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --apiserver-advertise-address=192.168.1.100 --kubernetes-version=v1.28.2  --service-cidr=10.15.0.0/16  --pod-network-cidr=10.18.0.0/16

提示:输入命令后初始化比较久,该过程会下载相关东西,保证网络通畅

 

然后初始化完成后,你会看到token,跟下面类似的,先复制保存

 kubeadm join 192.168.1.100:6443 --token 2a6go4.u2fxys0a208s8brv \
        --discovery-token-ca-cert-hash sha256:4f5c4fef972b51fa34735675ee87fa52c5c1855f03e60f33009e8919e5e9ef40

 

#配置权限(不然无法使用kubectl命令操作K8S集群)
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

 

#node节点加入master

在两台node节点服务器上输入刚刚master初始化后得到的token

kubeadm join 192.168.1.100:6443 --token 2a6go4.u2fxys0a208s8brv \
        --discovery-token-ca-cert-hash sha256:4f5c4fef972b51fa34735675ee87fa52c5c1855f03e60f33009e8919e5e9ef40

 

然后在master上等待一会再执行查询命令,观察节点是否加入
kubectl get node 
kubectl get pod --all-namespaces

 

成功后会出现node信息
[root@k8s-master ~]# kubectl get node
NAME         STATUS       ROLES             AGE      VERSION
k8s-master  NotReady    control-plane   2d18h     v1.28.2
k8s-node1   NotReady    <none>            2d18h     v1.28.2
k8s-node2   NotReady   <none>             2d18h     v1.28.2

七、配置代理镜像

因为默认的dockerhub地址被屏蔽导致镜像无法拉取,则需要在/etc/containerd/config.toml文件下进行配置代理镜像解决网络问题,如果能科学上网则不用配置代理镜像

#修改配置文件

vim /etc/containerd/config.toml
找到下面这一行mirrors
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
后插入下面这两行
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint=["docker.1panel.live"]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry.k8s.io"]
endpoint=["docker.1panel.live"]
 

保存后需要重启containerd

systemctl restart ontainerd

注意:docker.1panel.live代理地址不知道什么时候会出现无法使用,如果配置后还是无法下载镜像,自行去网上寻找新的镜像或者科学上网

 

也可以在别的拉取镜像的机器打包成镜像tar压缩包,分别在node上通过以下命令进行上传镜像

ctr -n k8s.io  image import 镜像压缩包名称 镜像名称:v版本号

八、安装calico网络

master节点上操作

curl https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml -O

  

下载完后还需要修改⾥⾯定义 Pod ⽹络(CALICO_IPV4POOL_CIDR),与前⾯ kubeadm init 的 --podnetwork-cidr 指定的⼀样

  
vim calico.yaml
# - name: CALICO_IPV4POOL_CIDR
# value: "192.168.0.0/16"
# 修改为:
- name: CALICO_IPV4POOL_CIDR
  value: "10.18.0.0/16"

 

部署
kubectl apply -f calico.yaml

 

查看
kubectl get pod -A

 

如果calico相关的pod都进入Running状态,则查看node信息

kubectl get pod

 

[root@k8s-master ~]# kubectl get node
NAME         STATUS   ROLES           AGE     VERSION
k8s-master   Ready    control-plane   2d18h   v1.28.2
k8s-node1    Ready    <none>          2d18h   v1.28.2
k8s-node2    Ready    <none>          2d18h   v1.28.2

则calico安装成功

此时K8S集群部署成功!!!

 

 

 

 

 

 

 

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Qt_事件的介绍
  • C语言中的typedef简介
  • 达梦-华为鲲鹏ARM架构下性能测试最佳实践
  • 【字符串】介绍
  • 『功能项目』事件中心处理怪物死亡【55】
  • MyBatis 源码解析:Mapper 文件加载与解析
  • Redis学习以及SpringBoot集成使用Redis
  • 使用 Internet 共享 (ICS) 方式分配ip
  • 【JS】forEach中push为何不会陷入死循环,稀疏数组空元素为何不会被遍历
  • linux-vim的使用
  • 关于区块链的安全和隐私
  • Linux 开发工具(vim、gcc/g++、make/Makefile)+【小程序:进度条】-- 详解
  • java核心基础
  • Java流程控制语句——条件控制语句详解(附有流程图)#Java条件控制语句有哪些?#if-else、switch
  • 第十四届蓝桥杯嵌入式国赛
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • 30天自制操作系统-2
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • CODING 缺陷管理功能正式开始公测
  • echarts花样作死的坑
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • Java 内存分配及垃圾回收机制初探
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • java多线程
  • react-native 安卓真机环境搭建
  • Service Worker
  • SpriteKit 技巧之添加背景图片
  • Vue 重置组件到初始状态
  • 分享一份非常强势的Android面试题
  • 回顾 Swift 多平台移植进度 #2
  • 三分钟教你同步 Visual Studio Code 设置
  • 手写双向链表LinkedList的几个常用功能
  • 算法-插入排序
  • 一、python与pycharm的安装
  • 翻译 | The Principles of OOD 面向对象设计原则
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • ​​​【收录 Hello 算法】9.4 小结
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​如何防止网络攻击?
  • #Spring-boot高级
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • (+4)2.2UML建模图
  • (pytorch进阶之路)扩散概率模型
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • ***通过什么方式***网吧
  • .net core 外观者设计模式 实现,多种支付选择
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .NET 解决重复提交问题
  • .net 生成二级域名
  • .net 无限分类